#💻・modding-dev
1 messages · Page 39 of 1
your statements true my fellow modder
okay
so when you redeem your voucher you want to set a global variable to be something
i remeber reading about this
then in a separate function you want to hook into set_edition
I mean
I would call it something like FOIL_VOUCHER_REDEEMED
and then just make it true when you buy the voucher
it doesn't matter what it's called really, just helps to give it a name that makes sense
There should be a cookie clicker mod
hmm
mayhaps
I'm gonna make a spreadsheet
Alternative, one could just play cookie clicker
I don’t think that’s how that works
I think they are suggesting a seperate mod
eh i tried
I am
then why add it to balatro
i think its cards
Yeah I mean having it be cookie clicker themed
oh
i could maybe add that
Like having milk and kittens and stuff
this does not look correct to me but I haven't looked at vouchers yet
yeah ditto
if you want to add ideas i could use some https://docs.google.com/spreadsheets/d/1hqeq9gArictq63JySjWV8s3Nd2T1Wl29d1IAgngN0vo/edit?gid=701226348#gid=701226348
Cards
Card type,Name (You),Name (Card),Rarity,Effect(s),Ye or Ne,Art (if Ye),Description,Cards required,Unlock conditions,Name (you),Name (feature)
Joker,AlexZGreat,Arson,Rare,Destroy Joker to the left and to the right when full house is played, gain 0.25x mult per destroyed joker,Meh
Joker,Ale...
bruh
@solid salmon okay you want something like this in your voucher definition
redeem = function(self)
shinier_foil_redeemed = true
end,
in fact, you should probably do your updating of editions in here too
ok
i copied it and added it to all ZE vouchers
it works so now to apply it to all ze vouchers
well it doesn't crash
so that's a big step
no get rid of all the set_edition crap
yes
literally just this
yes we haven't finished yet
ok
I don't know how you possibly expect it to work in this form
all you've done is create a voucher
you haven't done ANY of the implementation properly
okay
thats probably in that lua textbook
lemme check
I've DM'd you
If you want the voucher to work on jokers you have you should make it do the pairs over G.jokers too
any chance anyone knows how i can use a hook to trigger a pack checking function upon opening a pack
<3
heya, how do i add my own language in the game as a mod? i wanna rename Aces to Haileys for my Hailey Aces mod
you can either fully rewrite localization, like huy's vietnamese localization: https://discord.com/channels/1116389027176787968/1250676786040148042
or you can just edit the game's localization in memory when your mod is loaded
i cant think of an example of the 2nd option off the top of my head
oh wait
like the gay mod: https://discord.com/channels/1116389027176787968/1249736308394299452
doing it for aces will be mildly harder though, since there's probably more instances of the word Ace than just the ace cards
TRANS
Trans spectrans does it too i beleive
oh thats nice, i thought it was just a texture pack
hmmm okay
also how do i make a deck in 1.0.0?
very simple idea i had in mind: start with two uranus cards (or two pair already at level 3) and -1 discards
i think if you follow the 0.9.8 method, but use SMODS.Back instead of SMODS.Deck, it should work
i am also extremely not a smods user so i could be completely wrong
i guess the migration guide is wrong then
I'm having difficulty with making a joker that debuffs cards
This joker was working fine, but then I played Incantation and it un-debuffed the current hand and only debuffed the newly Incanted cards
The game rechecks if cards should be debuffed when consumables are used.
Here's what my code looks like so far
-- In the joker's calculate function
calculate = function(self, card, context)
if not context.blueprint then
if context.first_hand_drawn and not self.getting_sliced then
print("Starting effect")
for _, v in ipairs(G.deck.cards) do
if v:is_suit('Spades') or v:is_suit('Clubs') then
v.debuff = true
end
end
end
end
end
-- In my main function
function SMODS.current_mod.set_debuff(card, should_debuff)
for _, v in ipairs(SMODS.find_card("j_twewy_blackSky", true)) do
if card:is_suit('Spades') or card:is_suit('Clubs') then
card.debuff = true
return true
end
end
end
Theoretically that second function should be setting the debuffs properly, even if it needs to be recalculated mid-round
And I know it's reading it somehow, since it debuffed the newly created 9 of Spades
Probably the SMODS.find_card line
You don't need to loop over it.
Just check for if one exists (#SMODS.find_card("j_twewy_blackSky", true) > 0) and then check for the suit.
hm, if omit_base_debuff_check ~= nil then return end is actually a bug, it'll stop other mods from setting debuffs
also, don't return true from your set_debuff function
also, you are counting instances of j_twewy_blackSky even if they're debuffed, is that correct?
Hmm no you're right that second argument should be false
sorry, I can't tell what bug is the one that's actually causing the problem
so, you get like 3 bugs at once!
I changed it so it's an if statement instead of the for loop, and it no longer returns true, but it still un-debuffs cards whenever I sell something or use a consumable
That's an oversight on my part, we need to return from the function if a mod sets a card to be debuffed else the game will remove it.
set_debuff is really confusing tbh
It needs redone for so many reasons
i just give the playing cards an ability ex. scorched_girl_debuff and check that instead of checking for jokers
I could try doing that and seeing if that improves things
it's not great, but it is a workaround
trying to fix the per-mod set_debuff function right now
what's being changed
there's a bug if two mods both return true for omit_base_debuff_check
mm
if it's true, the function early returns so the 2nd mod won't get to do anything
another problem, the per-mod set_debuff doesn't play well with should_debuff
in fact, I believe it's completely wrong, the base game sets the final debuffed/non-debuffed state to should_debuff
the logic should be, if should_debuff is true, or the base game perishable check is true, or the mod says we should debuff, then set self.debuff = true
having a per-mod debuff function can cause issues- if Tarot DX says spades can't be debuffed, and then another mod debuffs a spade, what is Tarot DX supposed to do about it
so, there needs to be some kind of priority system in the returned values, maybe? or each debuff comes with a reason
I don't know! it's hard
that's why i had the card ability for debuffing, if the ability gets removed all other checks still run
plus the two debuffing jokers i had wouldn't play nice with it anyway
hm, so what happens with an effect like Tarot DX's Spades buff
this feels like a problem some card games have, where there's "you can't" and "you can" effects
i have not played tarot dx
oh, there's also miracle milk from Mika
undebuffs cards when you score them
I definitely think the system needs to support these
I was thinking of some kind of priority system
that's from mystjokers
oh, whoops yeah that's yours
which i haven't tested in 1.0.0 so that's that
both of these peoples names start with M
ok, what are peoples' opinions on how the per-mod set_debuff function should work?
current planned (correct) implementation is, it returns a value, and those values are ORed together for the final debuff
there were other considerations: a priority system for effects like Tarot DX's "spades can't be debuffed" effect
just pushed the correct implementation, asking for further feedback
If a mod wants something debuffed it could be added to a table used as a check (less scuffed). If it's empty, self.debuff = false. If it's not, self.debuff = true.
Effects that want to prevent debuffs can set a var (something like protection or ignore_debuff) that would ignore whatever the debuff table looks like.
I side with debuff prevention taking priority over debuffing as it would be more intuitive to players if a object that debuffed a card got ignored by another object than the other way around (debuff ignore effects would basically be lying to you if mods debuffing objects took priority).
Having the debuff/ignore debuff on a priority is also to me a bad solution because it'll be too unclear as to what this priority is in-game.
I also definitely agree with debuff prevention always taking precedence
ok thinking about return value format
the most natural would be true, false/nil, or a 3rd value like 'prevent_debuff'
it hurts me to have such a type, but it does capture things reasonably.
in other functions I have been using the first return as the main return value, and the second as a table of options
Another alternative could be a table like return {debuff = true, prevent_debuff = false}
That does have the issue that technically people can return the table with both true (but you'd just have the prevent_debuff override it as usual), but most of the time you'd just only return the relevant value like return {prevent_debuff = true}
the game's edition code used tables with a single key- but that turned out to cause problems
I'm going to say the sentinel value version is probably better
What problems did that cause, out of curiosity?
so, the edition code actually sometimes used tables with more than one key, it just checked for specific keys. that was pretty fragile. it's also hard to extend.
Is there any way to get a more verbose log output from Steamodded / Lovely?
I believe it is as verbose as it gets already
damn
'"C:\users\steamuser\AppData\Roaming\Balatro\Mo..."]'
trying to see which file this is
hm, I've never seen that happen actually. Try looking in the terminal itself
it might be easier to find/copy what you want there
i think this indicates file loaded by NFS or other functions instead of directly loaded by SMOD
It’s the same issue with the terminal
Any print of the path on the stack traceback is like this, and iirc it is a “NFS load vs. SMODS load”
I wonder what the difference is because last I looked SMODS does use NFS.
how can I make a joker upgrade the hand level two times?
I know that space jokers upgrades the hand level returning this
return {
card = self,
level_up = true,
message = localize('k_level_up_ex')
}
but it only upgrades once and ends the function
That’s because the level_up return only handles one.
I tried a different method
if context.joker_main then
level_up_hand(card, G.GAME.last_hand_played, nil, 2)
end
it works
hey i'm probably stupid but i get this error when trying to run the very newest steamodded alpha version. i just pulled the code directly from github
uh oh, I've seen this happen before... can you give me the full log output, I want to see what lovely is saying
also try lovely beta-6
though, that won't fix the issue if it's the same one I've seen before
first time using lua, any idea why this doesn't work?
--Update localization
local Replacements = {}
if Settings.Value_Name then --this is true
Replacements["Mult"] = "Bult"
Replacements["Chips"] = "Bhips"
Replacements["Money"] = "Boney"
end
function CleanLocTable(locTable)
sendDebugMessage("Hello World!")
for i, v in ipairs(locTable) do
sendDebugMessage(locTable[i]) --this doesn't run :(
for key, value in pairs(Replacements) do
locTable[i] = v:gsub("%f[{]" .. key .. "%f[^}]", value)
end
end
return locTable
end
G.localization.descriptions.Joker.j_greedy_joker["text"] = CleanLocTable(G.localization.descriptions.Joker
.j_greedy_joker["text"])
where do you call CleanLocTable
oh, if that's inside your main mod's code, you'll probably want to put it into process_loc_def or whatever it was called
process_loc_text.
I'm getting a "attempt to call a nil value" error when I try to NFS.load this file. I just modified the _generate_main_end function so I think that's the cause but I can't spot an issue.
current_mod.path already has the / at the end
so having it at the start of what you append probably gets things messed up
No the other Jokers that do it don't have an issue
For example, this works:
If that's happening you can get a better direction through printing the error.
I mean to print the err that NFS.load returns.
Something like this.
Should give a better direction for what's wrong than just knowing that the file part didn't load correctly.
No error message. It just crashes.
Remove the () part
which one
Ok I think I found the error
Now the tooltip works in other languages and I also added face-down support
I'm just starting to work with context.blueprint, so I'm not very good with it. This is the scenario that should happen:
- When Strength is used, this Joker calls rankUp(card) blueprintable
- IfJoker's rank >= 10, this Joker calls evolve() not blueprintable, else it calls AddJokerSlots() not blueprintable
I have tried this setup but now the function AddJokerSlots isn't called
calculate = function(self,card,context)
if context.using_consumeable then
-- Rank Up
if context.consumeable.ability.name == 'Strength' and card.ability.extra.Rank < 10 then
PT_rankUp(card)
if not context.blueprint and card.ability.extra.Rank >= 10 then
PT_evolve(card,'j_PT_Lavenza')
else
if not context.blueprint then
PT_Twins_AddJokerSlots(card.ability.extra.Rank)
end
end
end
end
end,
remove_from_deck = function(self, card, from_debuff)
PT_Twins_RemoveJokerSlots(card,card.ability.extra.Rank)
end,
I tried this cleaner version but still AddJokerSlots isn't called
calculate = function(self,card,context)
if context.using_consumeable then
-- Rank Up
if context.consumeable.ability.name == 'Strength' and card.ability.extra.Rank < 10 then
PT_rankUp(card)
if context.blueprint == false then
if card.ability.extra.Rank >= 10 then
PT_evolve(card,'j_PT_Lavenza')
else
PT_Twins_AddJokerSlots(card.ability.extra.Rank)
end
end
end
end
end,
here's the function AddJokerSlots for info
function PT_Twins_AddJokerSlots(rank)
local jokerSlots = G.jokers.config.card_limit
if rank == 3 then
jokerSlots = jokerSlots + 1
end
if rank == 7 then
jokerSlots = jokerSlots + 1
end
G.jokers.config.card_limit = jokerSlots
end
not surprising, you're only checking for rank >= 10 if rank < 10 is true
also context.blueprint is never explicitly false iirc
how does this context work? I'm just starting to work with it
it's nil or a number iirc
yep
so not context.blueprint?
👍
.
rankUp does rank = rank + 1
suppose you are rk9, you use charriot. You enter the using_counsumeable section, you also enter the rank < 10 section, you call rankUp which makes your rank to 10. Then you evolve but just if you are not a brainstorm
before starting to use context.blueprint this joker was working fine
then don't use context.blueprint
but I don't want blueprint to copy the AJS ability
logicwise, if you're at 9 and triggers twice, it will always trigger once because of the <10 check
remove context.blueprint
ok it works
the fact that was making me confused was that Blueprint activates before the Joker
because it's at its left
exactly how you think it would
put all the gif frames into a folder and make it work
animation is just bunches of steady pictures played in a row. .gif is basically this too
(ngl i just want to do a rick roll)
if a rickroll is making ur mod extra large dont do it
maybe just make it flip and change texture
i accidentally made the entire video into a gif
i think i should have kept the iconic part
and if you have to do it you can consider compressing it in the most lossy way possible
show the code in Vouchers.lua
heyo chat, any ideas if it is possible to debuff and un-debuff jokers independently of blind or other possible debuffs? By that I mean that I want to have an additional layer of debuffing and I need to sometimes remove it from the card, but the problem is that the card doesn't "know" if the debuff supposed to stay on it (like while in combat with Crimson Heart)
Maybe look at how Perishable does it?
yeah, but perishable never needs to remove its debuff
that was the very first thing I checked, but then it made me realize that it's not what I need
a bit more context: I want to make a joker that debuffs one near it. When crimson heart deciedes to pick the already debuffed joker, I can just drag my debuffing joker away and it will negate crimson's heart effect completely
(well I kinda made it but this issue happens)
awesome
wanted to see what happens if I have only perished perishable jokers
during crimson heart - it crashes without mods
even without steamodded

??
wanted to get an opinion on this, since i'm not sure what would make sense, i have a boss blind which has a chance to permenantly modify drawn cards. should disabling it A. prevent later drawn cards from beung modified, B. all modified cards modified from this boss blind currenlty in hand are unmodified C. all modifications from this boss blind are reveryed
Like if you sell a Luchador mid boss blind?
yeah
I'd say it depends if Puzzled is related to the boss or not
If cards can become Puzzled in a different way, 1.
But does it persist after the Boss?
yes... i capitalized PERMANANTLY
should prevent the boss from applying it to cards and remove the effect from only the ones it applied the effect to this round fight
it was the closest thing to what i wanted
i mean yeah but like theres a 55 character limit on the poll option
mhm
well based on these results im probably gonna have it not unpuzzle cards at all. since thats what is being voted
mmkay
I have a whole list of Balatro custom content I want to turn into a mod, and a decent amount of programming experience, though none in Lua. Where should I start?
if you have prior programming knowledge then lua should be intuitive(?)
extract the source code from the Balatro.exe file with winrar or 7zip
Lua is basically just python but easier, with an identical print function. It shouldnt be too bad.
And to add, say, a custom joker, what is there to do? I wanna start small. Throw it onto the joker stack list with necessary function, make art and put that in the right place, push it to github?
Any glaringly obvious step that I'm missing?
Yeah
Just look at 1.0.0 mods to know the steamodded formatting
And the calculate function can be mostly inferred from card.lua’s calculate_joker function
The easiest way would be to install lovely and Steamodded, then make an one-Joker mod by registering a Joker. Joker effects are usually mostly handled by their calculate function. The Steamodded wiki can help
is there a way I could do something like this?
...do you want to do ui bullshit?
The answer to that question is always no
Only localthunk could possibly decipher the ui system
they can decipher it?
Hello people ❤️
I can't remember the parameter for starting jokers in a deck
nothing is impossible, some things just take more dedication than others
Escape form the event horizon of a black hole
simply use the gravitational pull of a different black hole
that's not how that works
sure it does!
(i dont know how black holes work)
How would I copy just the enhancement from one card onto another card? If I do context.other_card.ability.effect, that gives me the name of the enhancement, not the key, and card:set_ability doesn't like that as an argument
get context.other_card.config.center.key instead
each enhancement has each own center key
then you can set_ability the center with that key
That works, thank you!
hey guys wanna see some nil jokers
no
im trying to get this enhancement to upgrade a hand when played, but due to the fact that the game definitely doesnt know how to do that ive had to make a ton of lovely patches, but for some reason they just arent working. anyone know why? (message is too big so ill try to send as txt)
might i be doing something wrong?
oof my destroy on discard function doesnt work either
i am begging for a calculate for enhancements
oh wait is there calculate for enhancements?
You need to use regex for multi line patterns
no.
i dont have a cat
dogs dont walk on keyboards
ok maybe theres a reason people havent been making too many enhancements
yeah because it's complicated
nah the calculate is just so painful
you could take a look at the better-calc branch and see if htat helps
how do i make a card pack
i might check that out
I'm trying to make a Blind but it's behaving strangely. First, I tried to define Blind:modify_hand, but that alters the Chips and Mult after cards have been scored. Then I tried Blind:debuff_hand, but it changed the text but not the actual score. I decided to inject directly into evaluate_play to change the score. That works, but I end up with the predicted score being updated inconsistently. Any ideas?
Probably cooler than negative
oh, I also would like to know what do the arguments for Blind functions look like because MystBlinds' seemed incorrect
just self mostly, no more blind since you can just access that as G.GAME.blind
smod currently only has preliminary support for booster API iirc
nvm
it might have been a different thing
As someone else who was interested in making a custom pack, that's something that will be finished before the full release of 1.0, correct?
there's been several implementations of booster packs without a steamodded API
the current state of 1.0 does have a booster api though as of recently
Reverie does it via lovely patch, right got it
and by that I mean it was merged like 2 days ago
Ooooh!
yea I saw the PR a while ago
Has the documentation been written for that yet, or should I just look at the PR and figure it out from there?
(Not planning on starting work on my booster pack quite yet, but if the API is there then I might work on it in the next day or two)
i looked at reverie
btw aure, did you get the edition docs?
and i just found out it has a pack that lets you choose anythingf
no 😦
meanwhile me having a fully working localization mod while wiki page hasn't even got Language API
it's outdated
oops, yeah I saw the edition docs, but wasn't able to add them right when I did and then I just forgot
i got editions
you have access to just add them though, no?
I don't think so
#⚙・modding-general message working edition Ig
didn't you have write access to the repo?
When I add only self it has one argument too little, it seems like
huh
I thought I did but now when I look I don't so I have no idea how I managed to merge into it
whatever I'll just put it in
I have no clue on how docs should be ordered when finalized tbh
@frosty dock For example, this crashes while
this doesn't
what steamodded ver?
Commit f8f3603
And from the crash message I can see the isse
the blind arg was removed after the commit you're on
bro the booster api was merged 2 days ago
but i need to know so i can make it for my mod
look at the code and figure it out
Ok, it almost works, but Blind:wiggle doesn't exist for some reason
G.GAME.blind:wiggle()?
I can't if i don't know where
-- here's an example booster pack
SMODS.Booster {
key = 'test_booster_pack_2',
weight = 100,
loc_txt = {
name = "Arst",
text = {
"This is a test Booster Pack"
},
group_name = "Test Pack",
},
create_card = function(self, card)
return create_card("Tarot", G.pack_cards, nil, nil, true, true, nil, 'buf')
end,
config = {extra = 5, choose = 5},
draw_hand = true,
sparkles = {
colours = {G.C.WHITE, lighten(G.C.GOLD, 0.2)},
lifespan = 1
}
}
If self is the Blind, self:wiggle() should work
self is the proto
wiggle is on the Blind class
which is the object that's no longer passed because you can just use G.GAME.blind instead
so G.GAME.blind:wiggle() should do
does extra mean the amount of cards inside
yes
ok
By the way, aure, what do you think of the suggestion I made in the Steamodded thread?
i like the idea, it seems quite powerful
but it would probably require rationalizing all existing calculation to do it properly
you need to update smods
shoutouts to lobcorp for not needing to update
Rationalizing?
Could you help me with a custom Blind?
The effect works but the UI updates inconsistently
moving them to the custom system so the custom stuff isn't awkwardly embedded
Sorry, I still don't get it
In my mind the idea is just a fancy list plus the injections to iterate over them
for that use modify_hand
It applies after the cards score
it doesn't?
It's the first thing I tried
then you tried it wrong
maybe it's because you had an old version?
modify_hand is used for The Flint and that clearly doesn't proc after
if each vanilla calculation context isn't separately part of your fancy list, the idea is useless for most use cases
better_calc clearly
if everything from vanilla is uniformly prio 0, I can only go all the way before or after
which is most likely not what I would want for any given effect
i.e. that's what I would not consider "done properly"
but a shit ton of contexts for them
it has playing cards too
I do think a rewrite of the evaluation stack is necessary at some point
otherwise it's going to become a large mess of injections
that's what I'm saying
if you extend each step of the calculation pipeline separately, it'll be a huge mess
so the process of a calculation step has to be normalized first
The extension follows the structure of the pipeline
It injects before and after each eval_card loop (at least the ones for Jokers) to loop over other objects
and if we rewrite the evaluation, playing cards, Enhancements, etc. would go into the pipeline as well
(ping) It works but it introduces a different bug. Now, it overwrites the current Mult
I think the way it (didn't) work before was due to me being in an old commit, but that the fact it still doesn't work is an issue with SMODS
there are 2 problems with this
Oh I got tricked by Scarlet Mist's return
yeah Scarlet Mist's has both at the same value
I only saw the middle one was mult and didn't check the other one
by the way
why thunk why
the whole game has mult on the right
hey guys theres a problem with the voucher packs
Is there a specified group_name?
for what?
To display where the “ERROR” is.
oh no it's not an error
it's more like taking the vouchers makes me pay for them
i pay for the pack
hasn't betmma implemented that already
💀
Thank you for the help, Myst!
New Blind!
The Worm
Base Chips are equal to Poker Hand's level
Although I might remake the icon
What do you think?
bit strong?
incredibly evil, great execution
in later antes that base chips is basically going to become a rounding error since like, you're not reasonably going to get hand level over 10 in a normal run
I’ve made “worse”
Thank you, though this is similar to a scrapped Blind IIRC
I mean, I played a whole run where every Boss Blind was The Worm and it was fine :P
But sure, what do you think?
The issue with that is that you KNOW the worm is coming
probably 5x poker hand level, or thereabouts
That was my thought if it was too strong
There was a reworked blind that set chips to 1
That or make it affect Mult
That’s /4 to /6 chips for large hands
Meanwhile I have a blind which sets your chips to 0 and mult to 1
I mean, I don't think it makes much of a difference
Also, min ante at least 2, I guess
it matters a whole lot
If every blind is the club, you just ignore clubs
Of course it does, you can prepare better if you know what’s to come.
i personally don't think the blind is that bad but i think this is a bad method of balance testing lol
maybe i'm just a hierophant addict
I tend to test my blinds by just playing runs until it shows up
see, this is why I don't give balance advice...
I mean, what are you ignoring here
take odd todd and hold onto it
That's normal gameplay
Planets are less important
also I beat it with Shoot the Moon and Baron
planets 😭
You have less inclination to take those
See, you changed your behavior to adapt to the worm
maybe you haven't noticed, but shoot the moon is really powerful. you don't even need the baron
but, if you get the plant...
I agree, it's just that from that observation and from mental math it doesn't seem as bad as it seems
that's like saying "from observation, the flint isn't so bad"
Additionally you know no other blind is coming
it's the uncommon case, not the common one that matters for a boss blind. it can't be too cruel
I'm not saying conditional information doesn't allow for better optimization, just that I think optimizing for The Worm is 99% "play the game normally"
nukes my level 12 straight gold stake runs for sure
I'd say it's only about 50%
you people playtest stuff?
this beat it in one hand, also the next shop has Shoot the Moon again lol
ngl i never playtested any of mystblinds
tbh I'd prefer to release the mod in a beta state to get playtesting
I mostly just test if it works and sometimes I get carried away playing Balatro
TRUE
You gotta at least play the blind once to get a feel for how damaging/non-damaging it can be
and the only blind i got complaints for so far is The Center
That's what I did
in a NORMAL run
too bad i don't playtest lol
oh, you want complaints? the food and fruit were showing up too often, though you can't really do much about that. The Bird, though, I've disabled, sorry. throwing random stickers on jokers early on is pretty devastating
thank you for throwing me complaints
I like making difficult blinds
the one with odd debuffing i've set to a1 because there are many ways to make even ranked hands imo
even is a lot more rough
for waso idk how i could rework it while still keeping a sticker gimmick
we know
do you want to be hired to come up with ideas for lobcorp blinds
it's eternal and rental that are problems early on. it should be annoying but not unmanageable, applying eternal for 5 rounds, or something
I’ll help if u need it
hey, I don't mind making difficult stuff. but I very much am of the philosophy that good balance = good fun and replayability
I am very much a stickler for balance
i'm not aiming for difficulty in mystblinds so i'll look into reworking that
balatro prioritises fun > balance in some occasions (blueprint)
yes, and that's rare... and Balatro is balanced at a "nicer" level than you really think
but yeah, when balancing jokers/blinds, i try to consider every vanilla thing and try not to powercreep anything
sorry, my tone is off. I am debating, not making aggressive statements
maaybe a little powercreep for mods is fun? but i try to avoid it anyway
blueprint is actually pretty balanced honestly. its only as good as your best joker and is rare. not to say its not the best in the game but i wouldnt call it unbalanced
canvas though
we don't talk about canvas
Cryptid isn’t meant to have balance
yeah
blueprint can act as copies of multiple jokers in some cases
but you're right, early blueprint does not solo
What is the right way of adding cards directly to the deck?
check emplace()?
that's what I did
ah, then it's hard to say without context, dm me
But I have 59/52 cards and they don't show up in the deck screen
theres a bit of setup and other function calls
This is what I did
hm, your card is already in the deck with emplace()?
check shit like Marble Joker or Certificate
have you checked out marble joker
Wait, that last one should be G.playing_cards
That's where I copied from
But I changed G.playing_cards
G.playing_cards is the table with all cards you have
G.playing_card is just a counter
iirc
still doesn't work
I don't think any effect adds to the deck directly
does Marble Joker not add to the deck????
You may wish to display the Stone card before adding it to the deck like Marble Joker
I did want to do that
just copy Marble Joker, but make sure you put all 7 stone cards into the deck at once at the end
uh, I definitely wouldn't do 13 if you're talking about balance
you will probably never recover from 13
I could also make it a Blank (Dis)enhancement, but I do like Stone cards have uses
also, the effect of the blind is permanent and possibly run-changing, maybe extremely beneficial at times. from a design perspective, this is actually great! but the blind should probably be rarer
I don't think there's a rarity control, and to be honest I'm not sure I support the idea
Deck fixing issues? Just add 13 stone cards to the deck
13 stone cards all at once
You definitely won't regret 13 stone cards
I already dislike minimum and maximum Antes, although I understand it makes sense for specific effects
the problem is that if a run-changing effect is too common, you start thinking about it all the time and things may get samey
Just add more Blinds 
well yeah. it's the same problem with mystblinds' food + fruit, they just showed up a bit too often. it's not really a balance problem but a minor design problem
pretty minor all in all
Now I'm curious what you'd think of The Root
the radical from Mathblinds? sorry?
#1170704202025152585 message ||(I'm not implementing it lol)||
seems fine in terms of balance
so, yeah, there are design sensibilities at play. but, these are mods, so I actually don't mind wacky designs, as long as it isn't too extreme
https://discord.com/channels/1116389027176787968/1170472111995879504 i forgot i made this
The Rock is over a year old huh https://discord.com/channels/1116389027176787968/1170343625226461264
the best thing about extreme mods is I just don't have to install them
ok, if I'm trying hard to debate this point, I guess there is a problem with extreme mods that don't have a balanced mode: if too much community effort is monopolized by those extreme mods, you essentially "lock out" people in the community who dislike that style of mod
(not a problem right now)
I mean, if people like making X type of mods, good for them
I don't think there's an issue in that situation
I do find it strange how everyone is having to debug their mod to work with cryptid/talisman because of the changes they make to make things extreme
it's more talisman that is the problem, and talisman is more about not having limits on score rather than directly making extreme scores. and cryptid is just really big
so it steps on other mods' toes
just have a chance roll in in_pool
it's just that those mods have code with pervasive effects
I mean, no one is forced to if they don't want
Ohh talisman discussion
You're right, no one is forced to, but there's a lot of people who just post error reports and say they need to support talisman
cryptid is the calamity mod of balatro
Dw it’s gonna get worse
And I modder can just say "no thanks"
they are not forced, but I meant something specific when I said "community support"; that term implies a shared/common pool resource (economics, anyone?), and tragedy of the commons can apply to it
participation effects, etc. lots to say
Nobody is forced to use 1.0.0 yet people do anyway
we have a good community here, and everyone is affected by and affects the community
I like when it comes to mods people always compare them to being either calamitylike or thoriumlike
Unless you're talking about Steamodded as the main API I still don't see your point
the intrusive thoughts kicked in
I mean, it's the main API which makes modding easier on both developer and user sides
there is no formal sharing of community effort, but there is a shared social structure that does affect the users
Yeah but it’s not stable as far as I know
a lot of it is stable
what ever is
man, docs. I'm busy fixing bugs; I already did my part to revise the current existing docs
either way it's not "stable" in the sense that it's still changing rapidly
1.0 has more docs than 0.9.8
I can hopefully make some progress on docs next week after I'm done with my oral exams
Aure about to rap in his oral
How do I make my card pack give all the card types?
that'll require some extra work. check out reverie, maybe
How do I make it so I can generate a specific joker? (I know how to generate a random one)
have you been using create_card() for a random joker? then, try looking at create_card() for how that works, to figure it out for yourself
if you need help message me
I’d also like to know, maybe
check out reverie
you basically will have to construct a table with all the objects yourself
I believe that's what Reverie does?
Hmmm
if you want a 2-level check: type, then object, then you can implement that yourself, again
Does anyone know how to make text move up and down like the Mr. Bones self destruct text
Second to last argument if create_card with the respective key
E:2
alr thanks
adding on to this: Cryptid has jokers that do this if you need some examples
and it overrides createcard so maybe look at that too
Thank you
thanks
How do I do that?
check out reverie's code first
Ok
anyone know how to increase the rate of negative cards specifically?
you can adjust their weight
do you just want to blanket increase them across the game?
yeah
im having way too many issues with this deck s0o imma do something else though rn
looks like there's a problem with the override of create_card
either that or the function has been called improperly
well i don't know how to do it properly
it's always this one with goku
is that supposed to be a bad thing
It is.
which one
create_card doesn’t accept multiple types, only one.
then what does accept multiple types?
how do you fix the shader profiling error when you change the name of the shader?
how do you mean?
but you have to change every name in the shader to match that
i get this when i open the edition menu after renaming my shader
i am not takind advice from you
i had the same problem too
yes goku is right
you need to change the name inside the shader too
because the game passes some information to the variable that is the same as your shader name
dude i was literally making editions and the shaders
how could i not know
anyways
this
makes me pay for the vouchers inside it
i could ask betmma
but i don't think it would work because his packs are outdated
patch card:redeem if you dont want vouchers to cost money from a pack
where do i put that
im kinda colorblind, is this purple?
yes
No it’s green 💚
are you colorblind
(no)
ok
PURPLE
ty
yw
oh no
LOL
im actually colorblind
protanopia
my main pairs of colors i struggle to distinguish are yellow and bright green, orange and dark green, blue and purple, and cyan and white
edition for cryptid
astral
it looks good
Couldn’t you just add those after applying the first shader
well that was easy
thrown it in a PR for smods for someone with write access to take a look at
how would i add a texture as an extern to a shader?
G.SHADERS[_shader or 'dissolve']:send('mouse_screen_pos', self.ARGS.prep_shader.cursor_pos) this is how you format sending stuff
I'm not sure what type you'll need to set in your shader for a texture though
How do you grab the current total chip value? I know about chip_mod for modifying the chips, but how do I access the actual current chip value?
guess astral isnt getting stars
you could draw them inside the shader
no way jose
too much math
how do i do that thing where every joker in the collection has your shader?
hook card:draw and draw your shader on everything
how do i do the drawing shader part?
For now…
@fallen tendon self.children.center:draw_shader(shader_key, nil, self.ARGS.send_to_shader)
im running into another issue
this is an ^mult edition
i have no clue how to make it actually calculate the ^mult
don't look at me I just make things look pretty
I added the size Wumbo to the booster packs
Look at the patch for XChips in Misc.toml
tried converting it to pow_mult
didnt work
can you pinpoint whats wrong about this?
Idk why it’s nil
on a scale of screwed to fine how stable is jellymod
beyond screwed
damn
I also kind of want to know, but I don't know how to get the current chip value to multiply
I looked into those, but couldn't figure out where they got the Xchip_mod reference from
because Xchip is not a vanilla operation, they had to be programmed in
yeah, chips are never multiplied in vanilla as a way to differentiate them from mult, chips are only additive
What exactly is the "overwrite" parameter for in a lovely.toml file?
yup that happens
gotta reinstall it
where
then maybe whitelist it so windows doesn't nuke it again
how?
the same spot where you installed it
It overwrites the line it’s aimed at
What happens if it's set to "at" but overwrite is set to "false"?
i got it
ah gotcha
redundant, unused, irrelevant
it does nothing
Wow that's a lot of words to describe it's usefulness 😅
the world is spinning pretty fast there
Around the world around the woooorld
Do you know what a set is?
*2
what?
i can't even use it
you need a #1# in #2# and not 1 in 3
what is blud doing
making 1 in 3 that isn't hard coded
Yeah show your code my guy
you are failing
clearly
well
probably did #1# in #3#
lol
...
you do what Mathguy told you
i have no clue what you pass in your loc_vars
#2# is 2
well thats on you what #2# is
thats cuz you can't type
your loc vars second variable should be 3
as in just 3
shots fired
ah
bruh
so you need three variables
it's better practice to make it a loc_var tho
hurray
can_use
do i put true in that?
huh
jeez
can_use = function() return true end,
how was i supposed to know that?
braincells
well now i know so thank you
np
i works perfectly
me when i get an oa6 and my chances become 2/3 to lose a hand and 4/3 to gain one
is there a way to make it unchangable
||hardcode||
is there some Debug option to debuff a joker, so I can check its abilities when debuffed?
so remove the probability part
yes
okay
yea, it's called Crimson Heart
(no)
and how do i make sure only one of it happens?
have you considered
else
just use your old wording with "otherwise".
i never used else
ok
do you want this to be affected by Oops all 6s?
no
else, not elseif pseudorandom('blue_and_red') < 2/3
ok
if pseudorandom() < 1/3 then
stuff
else
otherstuff
end
do you know lua well?
50/50
also im notice a lack of an end there
it's a yes or no
I just do ease_discard without the G.GAME stuff, @hallow forge knows better than me
no they are permantly changing the hands/discards per round
ease_discard is temporary
oh ok
if i add another end then it will become red
I didn't know that was the purpose of the card
the end is at line 45, just indent it
also, shouldn't you check if hands/discards >= 1? Otherwise Discard = -1 could happen
i think it's fine
also hand -1 is the only thing that can happen
(trust me i checked)
🆗
make sure to add a check at start of round for if you have 0 hands
because that should lose the round
i never used a check before
what
what
we're waiting
what
you said "wait"
you forgot what "check" means?
ye
to perform a test for it something is correct
god
manually going in the game to see if it works
i don't think i can help you
💀
what?
ping.
what..
myst doesn't like getting ping replied
i still remember
I didn't remember it was you because of the pic change
also why'd you change your name
joke
oh
carefully
forgive me for my sins