#💻・modding-dev
1 messages · Page 202 of 1
you need or not a comma
thank you! it still seems the cards not played aren't destroyed for some reason though, maybe g.hand is wrong?
you need destroy_card for G.hand
how do i prevent erratic deck from adding 13 cards when i apply my custom suit to it? currently it only randomizes to my custom suit when it's in the pool for the deck, but then it also starts with 65 cards instead of 52
i am unfortunately not knowledgeable enough to know what that means or how to do it
that person is telling you to patch the game's code
it works now thank you 😄
yeah i got that part, not the rest
actually do erratic decks automatically add custom suits with Steamodded
if i dont remove it from the pool it adds 13 cards like the other decks then randomizes between the 5 suits
if i do remove it from the pool it doesn't add any cards but then can't randomize to my suit
I don't suppose there's a Blind function I can call to modify the cards in the played hand after they score, is there? Because I don't think see one on the wiki
so, yes and no, depends what you're asking specifically
ah so you want it to appear there but not add more cards
correct
what does your in pool code look like
currently this
the function basically checks if the new suit has been enabled for that run which happens when you use the tarot that turns cards to the new suit
but for erratic it'd be enabled by default which is pretty easy to do in that if statement
i can make erratic specifically have the new suit by adding
if G.GAME.selected_back and G.GAME.selected_back.effect.center.key == "b_erratic" then
return true
end
but then it has the problem where it adds 13 cards still
i wonder if it's practical to just remove 13 cards from the deck
is there an easy way to do that randomly enough? because it'd work
ideally i'd want it to not generate them at all but it's the same outcome either way
pseudorandom_element is your friend, you can just call that 13 times
when i did my letters deck i just
hook onto the game
now that i think about it i think extra cards are a bit more fair if you wanna add the cards to the deck
is there something built in that would let me do this or do I need to get creative again?
that's probably true from a balancing standpoint but still wanna know how to do this just for the option etc
actually, this is probably not too hard to patch
i think you'll have to make it not in pool and then randomize the deck once the deck actually are there
that's actually maybe easier
might screw with other mods though
i'll probably end up not letting it be in erratic in the first place but this is in my head now
more coding tomorrow :snooze:
development resumes tomorrow
that reminds me, someone asked the other day what i thought blue stake should be reworked to since localthunk said he was gonna rework it from -1 discard and my first thought was 'all spades debuffed' which is insanely funny
gotta make that a mod at some point
just change blue stake and up to debuff all spades
What's the best way to change a sprite's atlas at runtime, not inside one of the main centers functions? Do I just do G.P_CENTERS[key].atlas and change it there, or is there a better way to do it with SMODS tools?
i mean that's kinda the premise of Sleepy Joker & Awake Joker
spades fan 😭
sleepy joker gains mult at the end of every round, you sell it and get Awake Joker, which applies that mult
eepy joker
this, but give it a 1 in however many chance to wake up at the end of each round ala gros michel
uhhh whoops
the eeper
if you have scary face, it wakes up automatically
oh that's cute
because scary face gives it nightmares
does that mean it just gets X1 mult if you buy it with scary face
make it where smiley face prevents you from selling it
Should be debuffed with scary face, reactivated by happy face
happy dreams
if you buy it with scary face, it wakes up with whatever mult it has by then
make it where smiley face doubles the mult gain
i feel like the current implementation is fine enough, i don't want to convolute things
Nope those are mine now you're too slow
true
i like how it is now just as an easter egg though
Toad joker that just sells you thing jokers
I just saw Toad Joker and immediately thought of Super Smash Bros as a joker pack
how many people have already made joker joker where the picture on the joker is of the default joker
Joker Joker: Selling this Joker gives you Joker Joker
imagine if it gave +4 mult though 😳
lmao yeah it's just identical to joker
but you can get both w/o showman
I'm gonna go flesh this idea out.
+8 Mult O_O
and it's uncommon and more expensive for no reason
from the cryptid mod
Mario: increases every card's value by 1
this is very funny
is there even a chips version of this joker
the loner: x1 mult if played hand contains a high card (a la the tribe the order etc)
gods im so smart
GOES HAD WITH MISPRINT BTW
i think my jokers peaked when I made banana factory though
please tell me you just get banana every round
i wanna make a joker now that's just -1 chip every scoring spade
(It changes to Cavendish after Gros Michel destroys itself)
+1 chip for every scoring card too
DO YOU HATE SPADES
oh you have to buy it that's funnier
i do now i guess
i will say, the best thing you can do with Banana Factory is:
- get Gros Michel
- get Banana Factory
- destroy Gros Michel
- get Cavendish
- get Showman
- infinite Cavendish glitch
new deck idea, the only change is you don't have any face cards of spades
i see you have placeholder art do you need card art
new joke joker:
Selling this Joker loses the run. Does nothing.
i do but I've got Gappie on that already
rigged but fair
i love gappie's art
also NO JOKERS?
will there be monster of a description like this
and yes this is fully intentional and I'm not removing it
i really want to see a run where someone just generates infinite cavendish
No no no, I'm thinking of something... MUCH more complex than that.
would you rather have unlimited bacon and no Jokers, or Jokers, unlimited Jokers, but no Jokers?
infinite cavendish only to 5 though
not the "listed here"
unless they're negative
I was trying to debuff cards after the hand was scored and did a little oopsie lmao
guarenteed negative cavendish
does it work like tags where it replaces the next shop joker or does it overwrite the first shop item with gros/cav?
wording implies second
it overwrites an item, yes
it would be very big otherwise
true
how does one design tags beside "shop has thing joker" and "give booster pack for battle cards"
content joker: -3 mult for each scoring spade
prototype netherite
monies + double tag also exist
there is also this
Idea: Foresight
See the first # cards on the top of your deck. Upgrade by winning Blinds.
or just as a tarot or smth with a set #
i like the idea of consumables that are meant to be used during rounds like that specifically but they dont rlly fit tarots as is so it'd be a whole thing prob
me with battle cards:
to be clear i know literally nothing about any mods ive literally never looked at any
there's an alchemy mod (idk if that's the real name but it's what i call it) that introduces a new card type that is pretty much that
i have seen alchemy a bit, didnt know that was the concept tho
just in yt thumbnails tho
do you have to program in all 4 possibilities for two independent 1 in 2's where one of them destroys the card since you say when you destroy the card in the if statement before the return or is there a slightly easier way
?
i think that is very long so i split it up
if it does nothing half of the time then you don't need to program those possibilities
there are people who makes them even longer
I know
me
Full Metal Jacket reference, also i explained it poorly
in reality it just gives chip mult xchip xmult per scored card
upgrades every planet uses
resets at the end of ante
i moved onto something simpler
gives me an idea for a joker that resets hand levels every ante but levels up all discarded hands
or smth
that sounds shite
decrease all hand level by 1 every end of ante
then its too good i think
then you get 8 levels per ante free
yeah
discarded means you just discard high card which isn't that strong
i forgot how to read and stopped after the first two lines and it was rlly funny
fuck you! unlevels your flush
for every scoring spade, remove 1 level from played hand
what is it with you and spades
WHY DO YOU HATE SPADES SO MUCH
i wonder how ppl design utility jokers too because i feel like my mod has a lot of scoring jokers (and some money jokers) but not a lot of utility
idk but i'm committed at this point
oh speaking of balancing i need help w a card for my suits mod
If deck contains a
Spade card, sets
money, chips and
mult to 0
so new suit is only accessible via tarot card, or with a deck that adds it as a fifth suit (65 cards), and the stone retriggers all of them 2x
if deck contains a spade card, lose this run
huh
i loev placehodler
huh what
well I've got 10 custom blinds now in a semi-stable state, it seems
M
ah yes

M
learn the alphabet with jimbo
we put runes in the game
new joker i was thinking of one that adds times mult per new suit card played but resets if you play a hand with none (i like the idea of having to play new suit cards every hand to keep up with it) but idk how to balance it well
Visual Studio, Bluetooth, C, M, HTML, Fork, F, N, ⚪ , ⚫
high key thinking of making a custom game mode where you can play using battle cards instead of regular cards and you do damage to the blinds using the cards 🤔
so just an rpg lmao
no more judgment here is mine
The IRS
Lose X0.1 Mult for every dollar you have not paid in taxes
(Currently X-962.51 Mult)
just never win
reminds me of
yea i showed this a few times you just play wordle
I think I have some neat blind ideas
wtf free deck thinning
True but you still gotta beat it
well if words are possible in balatro i'm guessing i could make rpg bosses too
thoughts on "The Yew"'s effect?
me when my blind specifically kills baron mime
flush builds would die
no its not bluetooth it doesnt have the ᚼ on the side of the ᛒ

ikr
time for more boss blind
dagaz, berkano, perthro, ehwaz, jera, algiz, ansuz, hagalaz
nails on chalkboard joker: x0 mult if any cards held in hand are spades
okay this is sick
nothing ever happens joker
def a more balatro-y way to word that but good
wip
Oh this is evil
The Elk when a Joker that guarantees probabilities walks in:
this is specifically designed to kill Lucky Card builds
"anime"
(it says joker)
I spend too much time browsing the balatro subreddit...
i thought lucky card builds were specifically designed to kill lucky card builds
no chance when glass cards walk in:
I have the counterpart
but what does it do? 👀
No thats the "Hey kids, big ben, parliament" joker
cool concept, difficult to trigger
Indeed
goes hard with showman though, I think?
Blueprint when Blue B4lls walks in
more localization-friendly version
Showman absolutely. Goes great with my Chef too (WHICH I SEEM TO HAVE FORGOTTEN TO ADD TO MY WIKI PAGE?????)
cooking literally
actually, maybe that would be a good joker: +0.5x mult each hand that doesn't win
y'all have wiki pages? (me with google sheets)
now that I'm "done" with my boss blinds I'm going to push them to main 🙃 hopefully I didn't miss any cases, but that's what playtesting is for
Byeah
There we go
I've got a README.md
i think thats probably better, so that there's no chance it might actually be helpful
I've got a T-Rex and a Go-Fish card
i'm waiting to create a Mistigris wiki page until after more Joker art is finished
That's a good idea
pushed to main 🫡
true, otherwise it'd just be placeholders
huge
gamer
My goofy ahh finisher blinds to follow
so far the boss blind ideas I feel most proud of are:
- The Journey: hand must not score less than the previous one
and - The Joy: Jokers are rearranged in the order they appear in the Collection (and cannot be moved)
diabolical, I love it
when you get a straight flush on your first hand and it doesn't solo The Journey
when you get a joker that debuffs itself after the first hand:
This is the one I'm most proud of
The Blank - Triggers a different Boss Blind effect every hand (not compatible with all) (min ante 6)
boy was it a pain to get working though
this one could be devastating
is this before or after scoring
either before scoring, or during the final scoring step
maybe the latter to differentiate itself more from The Flint
(i havent decided)
okay okay okay okay okay I have... an idea
Doing it before makes it a run-killer early game for basically any build, but doing it after makes it inconsequential late game
i wonder if i should make the enemy kings Boss Blinds or Legendary Jokers 🤔 or maybe I could make it so that you unlock the jokers after you win that specific blind
Given that I have ZERO idea how to mod, I can't make this idea, but I need input on whether this idea is good or shit.
let's hear it
All ideas are good ideas
actually this is a good idea, lemme think on it
Man I want to make a challenge and new deck to go with my Jokers and blinds
ooh i see
do you think the joker would have like a button to activate its "activated effect"
So super smash bros
Yes.
And you can only activate it after its charge condition is met
And then the lifespan tells you how long until it dies a la food jokers.
I can keep coming up with these until I run out of roster.
ooh
(I think I may have made Kirby slightly broken)
not really
chat how does this look
You can get three negative blueprints out of Kirby before he dies.
I think that's kinda broken.
hm
Again... I have no idea how to make... any of this.
tbh that’s a legendary level effect
So like... if someone wants to make this... I can keep supplying ideas for the rest of the roster... but I can't make them myself.
The point of keeping his rarity low is that he does die after using his active three times, and using the active destroys a joker - if you're not paying attention, you'll kill the joker you're copying - but I could bump it up to Epic easily.
So like... am I cooking or am I crumbling to an obsession?
Accurate to source material for sure.
it's in the game now yea
cooking
personally would move the dark pixel down out of the nose patch
but that's an opinion
I fear for the day I need to make a joker sprite that isn't essentially just a resprite of an existing one
Boss Blind
The Wiggler: Playing your most played hand doubles the score requirement (only triggers once).
Well with that tiny little bit of affirmation I will be doing nothing but adding to this list when I'm not working, sleeping, or spending time with my girlfriend...
Or developing my other obsession, making D&D 5e14 character sheets for the Brawlhalla roster...
The Wall Deluxe™️
Final Boss Blind
The Bigger Wiggler: Playing your most played hand doubles the score requirement (triggers every time).
Ok that’s pretty funny
Development on my multi-stage Finisher Blind begins tomorrow
You are not aiko smh
I'm a fraud
HOW DARE
three phase boss blind go brr
I was going to make it 4 🙃
I have not
I promise this makes sense and is thematic
It's got some good material to pull from to make a themed mod.
Might have to drum up that kind of idea.
now my entire mod has art rn
who up crafting they mines
heya, just curious
are there any known advantages or disadvantages to using the left solution vs the right solution for destroying Jokers (i.e. Gros Michel)?
i thought dissolve also has the dissolve effect
Yeah that's what I was gonna say
the way I'm (proposing to) use it here, it doesn't because I've set the time factor to 0
remove just kills it (as in the case of Gros Michel, tossing up "Extinct!" popup), whereas dissolve is intended to burn it like, say, the one joker that kills sixes and makes spectral cards
i might just stick to using remove() but i was curious about the alternate solution
So it's a matter of just removing the card or removing it with an animation
I think you can also return {remove = true} from your calculate function
that removes the card that's been played, not the Joker
me when Card no longer includes Joker because I've been thinking in mod idea terms way too hard
That's me, the ideas guy who has no skills to carry out those ideas.
Okay ive made a design doc for my fishing mod. Any thoughts?
i thought the observer looked weird so here's a fixed ver
imagine having art in your mod
Mutated and prized could be shaders, if you wanna go that far.
that was probably the idea, although im not sure how complicated shaders are. This is my first time modding.
There'll definitely be people in here willing to help you figure that out or direct you to instructions for it.
uhm
hey man so i did this and switched it from 100000 to 0 as per your second msg but now am getting reset on every hand played lol
@plush cove art be llike
177: attempt to index field "cm_card" [a nil value]
cm_card looks to be defined and given values, so i find it odd that it's not receiving a value at some point down the line. do i need to define it in config as well?
Looks like the crash is coming from your loc_vars. Do you have a fallback for that variable or is it initially defined as nil?
did some looking and realized i never actually specifically defined it. i went ahead and defined it in loc_vars and am running a test rn
That should prolly do it
would these two boss blinds (and/or similar bosses) be possible to implement without patches, or would I have to mess around with the scoring code to get these to work?
LAXGT
Is there a plugin or something I can use for VSCode to see all the global functions and what have you for smods and balatro?
if context.joker_main then
if context.other_joker.key == "runner" then
return {
Xmult = card.ability.extra.Xmult,
message = "X1.5",
colour = G.C.Red
}
end
end
end
how would this be done properly
play my seed
i realized this moments after i sent the message, lmao. It also works just to have the entire mods folder as the workspace.
any ideas?
SAO season one ref?
yes
216: attempt to field index 'cm_card' [a nil value]
i am defining cm_card on the line prior. is this not how you'd define it?
MOAT
i think it certainly is possible but it might be a little harder than what the base game offers
you set cm_card on ret and tried to access it from current_round later
ah, so the other rets contained in there are unnecessary, then?
huh?
i'm defining ret.cm_card , then redefining it with ret.current_round.cm_card.rank and ret.current_round.cm_card.suit. those two rets would be unnecessary and be the cause of the issue, correct?
What is your expected result?
why is your deck flat?
which mod is this?
how do you find your modded joker card for boosters.
are they the default set?
local new_card = SMODS.create_card{
set = 'Joker',
key = #key for joker
}
return new_card
"j_[prefix]_[jokername]"
thank you it worked 🙏
heya, I have an idea for a Joker that triggers seals when a card is played (so if you have a blue seal, you get a planet card even if you just play the card)
what'd be the best way to develop this that accounts for modded seals?
(if it's even possible)
Oh yeah I do that cuz it starts looking real weird if the deck has depth while in the sleeve
Also because otherwise the deck can escape the sleeve 😭
😭
Code wise you should check out https://github.com/larswijn/CardSleeves/wiki
Wdym by sleeve compat? Like cross-content?
sorry i meant i want a custom sleeve
Ah yeah check out the link I sent, should have most of your answers
is there a template for sleeve art
There's an empty completly green sleeve which is kinda like a template at https://github.com/larswijn/CardSleeves/blob/main/assets/1x/sleeves.png
73x95 according to their atlas
what is t in "SMODS.create_card(t) -> Card"
a table that contains info about your card
ah thx
hi alrexx
hola
i should come up with trivias
kinda want to run a language model so that the answer can be a bit dynamic
but like
AI
my god
bro yall doing some dark magic while im struggling to do the most basic shit wtf 
the answer shouldn't be exact in case you just can't spell it
you're not alone
this is basic shit wtf 😭
shut up i hate you i hate you i h
😭😭😭😭😭
/ j
how would you even hook that into the game
probably an executable that runs a model bundled with the mod
I'll have to open source that too
I mean if it’s just spelling you don’t need LLM
You could measure word distance the classical way
do it like that one nes jeopardy game that lets you write penis as the answer and detects a whole different word instead
i don't want the mod to be big
too late 
emulating love2D in love2D
how so
no like hard to win
i feel so out of place in here with my teeny tiny wittle jokers that do the most basic shit
i haven't even gotten past 8-2
Also I’m curious why you don’t do this
i don't know how
this is why i should not do comsci
Oh right Mario Bros. not Donkey Kong
It is, in your own words, “basic shit” ;P
You can for example count how many characters you need to change to get to the correct answer
is that just this https://en.m.wikipedia.org/wiki/Levenshtein_distance
In information theory, linguistics, and computer science, the Levenshtein distance is a string metric for measuring the difference between two sequences. The Levenshtein distance between two words is the minimum number of single-character edits (insertions, deletions or substitutions) required to change one word into the other. It is named after...
like pwease y me jokew not woerk wehhh
Maybe you weight swapping existing characters differently
what if the problem has multiple valid answers i don't even think about
You can also weight the distance by keyboard type
llm's are overkill for most trivia answers, unless you require big sentences containing logical reasoning in your answer, and need that to be parsed
i guess i can just ask the gibidi toilet for that
Well you accept the programmed answer
huh isnt the second parameter supposed to be the context
That’s how it works
you can just return right
i have no idea what im doin no more
omg hello myst
levenshtein is also explored really well so you don't have to come up with the implementation yourself. I'm sure there's lua libraries that do very complicated stuff for you in text parsing
like ive never used calculate effect i always used eval this but now its deprecated and there's no info on calculate effect anywhere on the wiki and im like
hi aikoyori
by the way in terms of xMult Hiker, do you think it should stack additively with Glass or Multiplicatively
so true bestie
what info
There’s SMODS.Joker and the entire Calculation wiki page
What else do you need
There’s vanilla and modded examples too
i mean the SMODS.calculate_effect() function that replaced eval_this()
i at least know the very basics
my brain is going to die a fiery death
either way shits just broken 
What Myst was suggesting
i also tried a return
for the regular lucky card functionality i do wanna use calc effect so that both effects can trigger like in base game
dont wanna overwrite that
You can make both effects work on a return
i know but there's the whole chance mechanic and i was like meh just do separate ifs
like sure i can simplify it but my brain is already dying as is
You can make both effects work on a return with separate ifs
(although you don’t need them)
i'll deal with actually making good code later rn i'm too busy trying to make code that does something useful
which i cant do it seems
I mean the code doesn’t do anything
So I suggest trying the way me and Myst suggested
yes im doing a return for the first one
local res = {card = card}
if pseudorandom() then -- first check
res.mult_mod = 20
end
if pseudorandom() then -- second check
res.dollars = 20
end
return res
return {mult_mod = check and val or nil, money = check2 and val2 or nil}
maybe
Maybe the second one needs to be inside extra
I don’t know how the messages would look passing both at once
i'll probably do this for the normal lucky card functionality
rn i'm trying to get the odds bypass working
Also judging by Myst it’s dollars not money
You can add or check to the if
it is dollars
You probably want check or though
damn uh
Well you didn’t ask a question
You also didn’t ask it to answer the question you could’ve asked

But you didn’t ask if Proxima Centauri is the nearest star
And you didn’t ask it to answer the question you didn’t ask ;P

so uhh does this look good
Maybe it’s smart enough to realize you didn’t ask a question
And thus to not answer it
235 MB
Not IMO because it changes the random seed needlessly ;P
You can set the second and third variables as multihit or followed by their checks
Not what I was talking about
i hhave no idea then
I was talking about advancing the RNG without using it
Which you can avoid like this
Oops
I meant to say put the third first, then add hascat or after the =
You also don’t need the ~= nil
okay now i gotta figure out why sometimes the cards only give money and not mult which is what i was trying to fix all along 🥲
I mean that’s normal
it should be a guaranteed hit for both in theory
guys i think it's John F Kennedy
ohn F. Kennedy
i didnt know he was the first person to be born in the US
oh right
mult not mult_mod
i think im stupid
that's not being stupid, that's because of version changes and old standards, tbh
okay now i'm getting double mult hits
things move so fast i can't even keep up no mo
i'm like an old cranky grandma with my mult_mods and eval_this()
so anyway seems like i'm not actually overriding the base game lucky card calculations
Maybe because vanilla doesn’t use calculate
those happen in get_p_dollars and get_chip_mult
so i need to silence the part that does lucky card calculations in those
now question is how
do i hook into them and copy/paste the base game code minus the lucky card segments?
and not call the original func obv
Will cry to sleep tonight
BRO 😭
i wonder what the continent is
which continent contains the river known as the father of africa? hmm i wonder
Most difficult trivia question
tell it to account for the coastline paradox, the question's too hard otherwise
okay grandma let's get you to bed
You can patch those functions and replace those parts with ``
right patches exist
this seems like a good first ever patch to make
how do lovely patches work again?
like i need a separate file with the patch right
i assume lovely has docs i can check
a .toml
yea that's it thx
my first ever patch, game runs so far, i hope i didn't break anythin 🥲
wait hold on
i need to make it so that lucky cards are specifically ignored
how do you get the chip amount after the cards have been scored?
now where do i put this
oh i need to call it lovely.toml that's why it wasn't running
oh my god it worked finally
if you don't want one giant toml file for all your patches, you can have them have individual names if you put them in a folder named ./lovely, iirc
Guys how do i better format my mod code? Atm all jokers are stored in 1 file.
that's actually not an uncommon practice
some people also prefer to have their jokers split into individual lua files (for example, me!)
how do i do it like that
you need to load the files in based on the folder. you can check how paperback does it for an example!
idek what that paperback mod is but sounds pretty interesting
think i'm starting to creep into cryptid territory with this
turns out using anhk on a joker that creates negative perishable copies of owned jokers is busted
because it's usually not meant to copy itself but if there's a separate copy of itself already then it can target that
🥲
paperback's got it implemented in a way where the joker catalog won't just be sorted by file order. Kino also keeps all it's jokers as separate files, so you could look at that, but my jokers appear in the order that the user's pc sorts files, which isn't ideal
I hate to tell you.. but i dont understand how this thing works
my jokers apear in the same order every time (they are all in one file)
Depending on what problem you run into, I can give you some pointers. I always get anxious about file loading, so I get it, hahaha
I just love that the crash report tells me exactly which joker did it, considering my code always crashes ❤️
I see this register items function, but it's inside some PB_UTIL
We're Jimbo's in a balatro game with infinite joker slots ❤️
"Guys trust me im not the one being addicted to Balatro, i'm the one keeping people addicted to Balatro" ahh statement
im 65 jokers 97 consumables 8 vouchers 6 enhancements 1 edition 8 stamps 12 aspects 5 suits and a bottle
oh and two tags
four if the two in AMM count
think i need to fix this...
also need to stop creating jokers that are both perishable AND eternal
PB_UTIL.register_items is a function the devs made themselves, which is in utilities/misc_functions.lua
ortalab has the best file loading, it doesn't use some jank helper function that throws all the objects through it
need to pump these numbers up smh
thac has the best file loading its completely stupid and makes no sense
that's good to know, i'll look at that code to steal it then
I think my file loading is based on THAC and Cryptid
im sorry vic
I’m sorry you’re sorry
how do i get the id of a specific card?
as in for example the id of a joker in G.jokers.cards
I already implemented it
nice
What is the id of a Joker?
i meant key sorry
card.config.center.key
why do i get my terms all mixed up all the time
yea thx
my dyslexic ass was calling it id
Are there any documented joker description color definitions?
Showdown blind idea:
When ante 8 is entered, it will generate 2-3 random standard blinds (excl. The Ox and such, hopefully not using opposing blinds like eye/mouth or ones that would make it absurdly hard like needle). These will all be applied simultaneously.
We all pray for your downfall 🙏
There’s a few mods doing something similar
Hm
To make it different and flavorful, I made mine force you to play the bosses in sequence
Inside the same Blind
How do i make text that makes the letters move like a sine wave?
DynaText iirc
Like Black Hole?
I think it’s E:1
Oops! The game crashed:
Syntax error: blind.lua:353: 'end' expected (to close 'for' at line 351) near 'elseif'
Additional Context:
Balatro Version: 1.0.1o-FULL
Modded Version: 1.0.0~ALPHA-1427d-STEAMODDED
LÖVE Version: 11.5.0
Lovely Version: 0.6.0
Platform: Windows
Stack Traceback
===============
(3) C function 'function: 0x2208ba20'
(4) global C function 'require'
(5) main chunk of file 'main.lua' at line 887
(6) global C function 'require'
(7) LÖVE function at file 'boot.lua:323' (best guess)
Local variables:
c = table: 0x2208f100 {identity:false, version:11.5, accelerometerjoystick:true, modules:table: 0x2208f150 (more...)}
openedconsole = boolean: false
confok = boolean: true
conferr = nil
(8) global C function 'xpcall'
(9) LÖVE function at file 'boot.lua:362' (best guess)
Local variables:
result = boolean: true
(10) global C function 'xpcall'
(11) LÖVE function at file 'boot.lua:377' (best guess)
Local variables:
func = Lua function '(LÖVE Function)' (defined at line 355 of chunk [love "boot.lua"])
inerror = boolean: true
deferErrhand = Lua function '(LÖVE Function)' (defined at line 348 of chunk [love "boot.lua"])
earlyinit = Lua function '(LÖVE Function)' (defined at line 355 of chunk [love "boot.lua"])
Why am I getting this crash error?
My best guess is this joker:
SMODS.Joker {
key = "purple_coffee",
loc_txt = {
name = "Purple Coffee",
text = {
"{C:attention}Purple Seals{} get triggered {C:attention}twice,{}",
"{C:mult,E:1}self destructs{} after #1# rounds"
}
},
config = { extra = { rounds = 3 } },
rarity = 2,
atlas = "placeholder_atlas",
pos = { x = 1, y = 0 },
loc_vars = function (self, info_quene, card)
return { vars = { card.ability.extra.rounds } }
end,
calculate = function (self, card, context)
end
}
question, is there a way i can get all stickers applied to a joker?
update lovely to 0.7.1 or you can try a version of smods that should fix that crash specifically https://github.com/larswijn/Steamodded/tree/lovely-fixes
read the error
it states that you're missing an end for a for loop
in blind.lua? no, this is a steamodded incompat with lovely 0.6.0
oh I thought its a custom lua file
it's the vanilla file that steamodded patches
anybody can help me?
for i = 1, #MEDIUM_JOKERS.ENABLED_JOKERS do
SMODS.load_file("content/jokers/"..MEDIUM_JOKERS.ENABLED_JOKERS[i]..".lua")()
end
i think am not missing anything
aren't you missing an argument??
for init,max/min value, increment do statement(s) end
yeah
oh so i have include the increment
shit it doesnt set to 1 automatically
yup
game still crashed
brother what are you guys talking about
Build5-Ver1.0
for loop doesn't need a third argument
I already told you the solution
I think smods doesn't like that kind of versioning
it worked when I developed it months ago
I think N' is right? I believe smods got a change in version numbers some time ago
Guys how do i make these popups in the joker information? I need the popup for the Purple Seal
It says ither_card is a nil and idk whjat to do
Then why is this
Almost all context during scoring contains scoring_hand, and not all of them has context.other_card.
it's a value in some contexts
Cursor
Guys, how do i make a joker that:
retriggers purple seals
self destructs in 3 rounds
ah
Okay well i have this now
it still think other_cards is a nil value
if context.other_card.seal == 'Purple' then``` for seal check.
did you read the docs i sent you
So i just return retriggers = 1
there it says what the problem is
I think i got it
Wait, sorry, I'm not completely sure about that part, because I thought only context.repetition handles retriggers.
context.repetition only triggers after a retrigger
Yeah, so maybe this is right.
So, um, not every time the context that comes into the function contains other_card.
context.before is one of them that don't.
Do you want "gain xmult if played hand contains a card with rank not higher than 6",
or "gain xmult per played card with rank not higher than 6"?
In played hand or in scored hand?
After scoring
^ Though this method only destroys scored cards that you retrurned {remove=true}.
Why is that a TIL to me goddangit
ok friend 👍
So like Glass shatter timing?
Ye
how does perkeo do the thing where it says +1 consumable slot instead of +1 Joker slot
It doesn't work. The retriggering of the purple seal does not work.
SMODS.Joker {
key = "purple_coffee",
loc_txt = {
name = "Purple Coffee",
text = {
"{C:attention}Purple Seals{} get triggered {C:attention}twice{}",
"{C:mult,E:1}self destructs{} after #1# rounds"
}
},
config = { extra = { rounds = 3 } },
rarity = 2,
atlas = "placeholder_atlas",
pos = { x = 1, y = 0 },
loc_vars = function (self, info_quene, card)
info_quene[#info_quene+1] = G.P_SEALS.Purple
return { vars = { card.ability.extra.rounds } }
end,
calculate = function (self, card, context)
if context.discard then
if context.other_card.seal == "Purple" then
return {
retriggers = 1,
message_card = card
}
end
end
if context.end_of_round and context.cardarea == G.jokers then
if card.ability.extra.rounds >= 1 then
card.ability.extra.rounds = card.ability.extra.rounds - 1
return {
message = "Downgrade!"
}
else
G.E_MANAGER:add_event(Event({
func = function ()
card:juice_up(0.8, 0.8)
card:start_dissolve({ HEX("63f06b") }, nil, 1.6)
return true
end
}))
end
end
end
}
SMODS.PokerHand {
key = 'Royal Flush',
chips = 110,
mult = 9,
l_chips = 40,
l_mult = 4,
example = {
{ 'S_A', true },
{ 'S_K', true },
{ 'S_Q', true },
{ 'S_J', true },
{ 'S_T', true },
},
loc_txt = {
['en-us'] = {
name = 'Royal Flush',
description = {
'5 cards in a row (consecutive ranks) with',
'all cards sharing the same suit',
'made of only Aces, tens, and face cards'
}
}
},
evaluate = function(parts, hand)
if next(parts._flush) and next(parts._straight) then
local _strush = SMODS.merge_lists(parts._flush, parts._straight)
local royal = true
for j = 1, #_strush do
local rank = SMODS.Ranks[_strush[j].base.value]
royal = royal and (rank.key == 'Ace' or rank.key == '10' or rank.face)
end
if royal then return {_strush} end
end
end,
}
SMODS.Atlas { key = 'vulcan', path = 'vulcan.png', px = 71, py = 95 }
SMODS.Consumable {
set = 'Planet',
key = 'vulcan',
--! `h_` prefix was removed
config = { hand_type = 'ex_royal_flush_Royal Flush' },
pos = {x = 0, y = 0 },
atlas = 'vulcan',
set_card_type_badge = function(self, card, badges)
badges[1] = create_badge(localize('k_planet_q'), get_type_colour(self or card.config, card), nil, 1.2)
end,
process_loc_text = function(self)
--use another planet's loc txt instead
local target_text = G.localization.descriptions[self.set]['c_mercury'].text
SMODS.Consumable.process_loc_text(self)
G.localization.descriptions[self.set][self.key].text = target_text
end,
generate_ui = 0,
loc_txt = {
['en-us'] = {
name = 'Vulcan'
}
}
}
Yeah I think so.
might help
copy this maybe
I took it for the Smods example mod...
Well uhh... this creates tarots but doesn't retrigger them
Like N' said, but replace self with context.other_card
did u also get assets folder from it
the error is related to ui rendering
so perhaps check the assets folder of the mods
Wait, so you wanna retrigger every effect on that card, if it has a purple seal?
check if the atlas is correct
No, but i downloaded the files in the assets, it looks the same
No i wanna retrigger the purple seal's effect when the card is discarded
the game does it once and you do it a second time, it's the same as retriggering
the timing might not be right tho, in which case you might need to patch some code
How do I reword this better?
It is.
I would change "Diamond card with the given rank" for just "[rank] of Diamonds"
Retrigger diamond cards held in hand 2 times, retrigger x additional amounts each time first hand of round contains rank of diamonds
Woah okay the tarot cards are being created endlessly
do you have smods
what's the code now
Fuck i forgot to return
This is what it currently has, and I temporarily changed it since I feel like it might be confusing.
u need steammodded for mods to load properly
idk but please post the whole crash log or at least the entire screen when asking for help
Why does he get to do it the easy way
bcuz he made 1000 if statements
thats called thunkism
in your mods folder inside lovely/log
Modern problems require modern solutions
What specifically?
? that also checks for context earlier
i would argue he did it the hard way
My even earlier idea is to give you something like a token when you fit the upgrade condition, and then upgrade when you collacted five of them.
ism
Lol
Ok now i made it work but i want the consumeable to be created after the joker has returned the message "Again!"
Honestly idk i will try to install it myself
reading through vanilla code would be a nightmare if it weren't for ctrl+f
we'll see what i could find
add a delay to the event?
I didn't install, i copied it to my mod
How much exactly
how would i destroy the leftmost card held in hand
Great! 👏 The return statement is after the event, so the delay will not matter. The joker will wait the delay and then return.
context.destroy_card checking if the card is G.hand.cards[1] maybe probably
that's not how events work i dont think
For me they do
if context.other_card.seal == "Purple" then
G.E_MANAGER:add_event(Event({
trigger = "before",
delay = 2.0,
func = function ()
local card = create_card('Tarot',G.consumeables,nil,nil,nil,nil,nil,'8ba')
card:add_to_deck()
G.consumeables:emplace(card)
return true
end
}))
return {
message_card = card,
message = "Again!"
}
end
I did and I didn't know which trigger to use
the one that doesn't say immediately
i now have two "read the fucking docs" gif, thank you
i stole it from aure
What did i do
10 years ago is crazy
Its a plugin dw
not sure what's wrong but the X0.5 Mult should be formatted the same way as X2
red bg white text
@strong jacinth wait could u send the lovely dump file for ui_defenitions
None of the 3 triggers i have used (immediate, before and after) did work
im going fucking insane
function Card.load(self, cardTable, other_card)
card_load(self, cardTable, other_card)
print(tprint(self.ability))
> if self.ability.extra.area_save then
...
bcuz my error seems to be related to loc_vars
why is this crashing
idk then
print for i,v in pairs(self.ability) perhaps
to debug
i guess check that extra isn't nil? thats weird
does it print it out tho
Guys how do I return at the same time as an event manager has done doing it's stuff?
as in add a condition where if extra is nil then it prints it out instead of crashing
the fuck
Im going insane
check area_save
it could have no values there
that's what i was thinking
im actually an idiot
oh lmao
it happens
post the whole file
yes
yes but that's not the correct file
Guys please help I need some help
u have to get one with the error
I dont think you can do that
not where its all fine
But i want it to do that...
Well explain what your goal is
https://github.com/Steamodded/smods/wiki/Guide-‐-Event-Manager Might help @lavish lake
you want a function to return a value ONLY when another event has finished executing ? For every event or a specific one ?
I am making a joker that retriggers discarded purple seal cards.
Purple seals appear to not retrigger directly so instead of retriggering, I used an event to make the same thing
wait can you post the entire calculate function
alr then launch the game and screenshot the FULL screen not js the error
calculate = function (self, card, context)
if context.discard then
if context.other_card.seal == "Purple" then
G.E_MANAGER:add_event(Event({
trigger = "immediate",
func = function ()
local card = create_card('Tarot',G.consumeables,nil,nil,nil,nil,nil,'8ba')
card:add_to_deck()
G.consumeables:emplace(card)
return true
end
}))
return {
message_card = card,
message = "Again!"
}
end
end
if context.end_of_round and context.cardarea == G.jokers then
if card.ability.extra.rounds >= 1 then
card.ability.extra.rounds = card.ability.extra.rounds - 1
return {
message = "Downgrade!"
}
else
G.E_MANAGER:add_event(Event({
func = function ()
card:juice_up(0.8, 0.8)
card:start_dissolve({ HEX("63f06b") }, nil, 1.6)
return true
end
}))
end
end
end
gonna need Thy error
You can look at how re-trigger joker works and combine with the discard jokers as well
lemme test
I guess the idea is to check for whatever context is the discard in your joker and trigger any purple seals inside since they should have been triggered already
How do you retrigger a seal effect though?
Same way a seal effect is triggered
r/technicallythetruth gold mine
the « re trigger » part doesnt matter, since you can access the discard_hand object you can do whatever you want with it at any point until the cards are actually removed
have you looked at the code i posted
what's the most effective way to load in very large tables of info into a mod? I've got a whole lot of metadata, but I'm not sure what the best way to go about it is, honestly
No, i only read from where you asked your question
this seems to work you need blocking = false
maybe changing blockeable makes it look better too
congarfieldlations
Yeah
send the lovely dump for game.lua(balatro > mods > lovely > dumps)
???
no??
modding rule 7??
oh my bad
gonna ask again
thats part of the source code
tbf its like modified a lot by smods and lovely
id think thats what im asking
alr then
im asking to DESTROY a card
dont send it
lovely crash logs are prohibited ?
its Illegal ™️
and what's the problem with my answer
i understand spa tho
thats not source code?
you're checking if something is getting destroyed i think
lovely dump logs Do have some source code
no
read the docs
only bcuz they are the files that were modified by lovely
send the gif bomb, N'.
unless the dump folder is not logs but source code
ok
in which case fair
Peeky
dump is source code after being modified by lovely
Ah, i rest my case then
Thought it was just logs
logs are the other folder but yeah
i feel like sm1 alrteady had the same issue as him before
WTF
「死ぬまでピュアピュアやってんのん?」
Listen & Download: https://karent.jp/album/3592
2024年11月27日発売
9th Album 「TRANSFORM」 特設サイト
https://nbcuni-music.com/deco27
Lyrics & Music: DECO*27
Arrangement: tepe
Bass: 堀江晶太(kemu)
Movie by OTOIRO
Director: yuka fujii
Illustrator: おむたつ
Designer: yuka fujii, lowpolydog
CG Artist: あわしま
Composite / Motion Graphics: Yuma Saito...
RABBIT HOLE
NO ITS NOT MIKU
why not
my brain is vocaloid rotted
kids these days dont even know about down the rabbit hole all they know is their deco27s and hot sunny michaels
alr heres what i can suggest
i like pinocchio p
verify files integrity(aka reinstall ur balatro), install lovely again
then launch game
then get smods
so what do i put here
and THEN put all ur other mods in
rabbit hole
Need some help:
How to check what is the last card of a winning hand in a round
How to apply a purple seal to a card
return { remove = true } also the card you need to check is context.destroy_card, not card
wouldnt that technically be the #th card of the g.playing_cards? (where # is the amount of cards in g.playing_cards)
Idk how to
Okay but this is checking for a hand, how do i check for the winning hand
how to what
that's correct if you want to destroy all cards
If I wanted two messages to activate consecutively when a joker activates, would this code be correct?
no, one message gets overwritten by the other
oh
then ig u could check if score > blind req?
One problemo
it not worko
because context.individual and context.destroy_card don't happen at the same time
Where is the current score and blind requirement stored
What is the context for when a hand has stopped scoring
replace individual for destroy_card
Nope still don't work
oh you need to replace context.other_card for context.destroy_card too
What key is used to replace the Blind Chips in Malverk, i cant seem to even find Malverks Wiki
Oh
context.after
G.GAME.Blind.chips?
i will try to find where to get the score rn
Here is the entire calc function
it still doesn't destroy the cards
it works as intended but still
ok how do i destroy a card. just destroy a card.
Destroying cards, our enemy
destroying_card
oh yeah for G.play it's destroying_card
nvm
Okay
Being on PlayStation I can’t actually play any mods
But I have an idea for one
A deck called oops all jokers
This deck replaces every normal card in your deck with a joker and removes all joker slots
Played jokers will act like stone cards with ones in hand triggering as if they were in the joker slot
That’s all
Have fun
Whats the key for the BlindChips?
@strong jacinth i forgot to tell u dont send the lovely dump file
mod rule 7, didnt even knew about it
the txt or the lua
js dont
if context.cardarea == G.play then
if context.other_card:get_id() <= 6 then
card.ability.extra.Xmult = card.ability.extra.Xmult + card.ability.extra.Xmult_gain
if context.destroying_card then
return {
remove = true
}
end
end
end
end```
Then how do i do it
Like
It wont work
While it should?
cant you dm it
u could check it urself tho
the lua file
js dont distribute it
6669 lines... When i dont know what to look for
? did you find yet
sadly no
so know, real question, how would get the rank of the destroyed card?
And then
check what could go wrong with that line
Its the create_UIBox_current_hand_row
return (G.GAME.hands[handname].visible) and
ok so
{s:0.9} for example
so handname might be nil
Ok
try renaming the poker hand to smth else...? idk
im as confused as u are


"