#⚙・modding-general
1 messages · Page 140 of 1
Did you get lovely working?
Hi all. Trying to install cryptid from a vanilla game and would love some help
There's a video for cryltid https://youtu.be/aUr0gXE77rk
Important Links:
For some reason, YouTube doesn't want me to put links in the description, so they are also available in my comment.
Lovely - https://github.com/ethangreen-dev/lovely-injector/releases/latest
Cryptid - https://github.com/MathIsFun0/Cryptid/releases/latest
just watched it. im having issues with downloading lovely with widows defender
it doesnt want to let me allow it
if i was aure i think i wouldve gone insane by now tbh
I mean to be in aure's position pretty much just makes you clinically insane
Does someone have experience modding on Mac? Is it possible to get cryptid running?
Yes
Follow the instructions on lovelys githuv repo for Mac to install it and then you can install steamodded, talisman and cryptic the same way as on windows, (but the path is diffedent)
You should be able to follow this https://github.com/Steamopollys/Steamodded/wiki/01.-Getting-started#direct-download
Hi, I'm back. I tried to tackle Aura and Wraith, but there are two problems that I noticed:
- I set
spectral_levelto 7, which should give me a guaranteed polychrome on every card with Aura. However, Aura's edition distribution hasn't changed, even though I supposedly modified thepoll_editionincommon_events.lua. - When I tried to verify the value of
spectral_level, I tried using an Ankh on a negative joker. This should have duplicated it and kept the negative, but it didn't. - Also, Judgement's floating joker disappear after exiting the game and re-entering for some reason (the invisible one is no longer present, I've fixed that)
try change the patch to before instead of at
[[patches]]
[patches.pattern]
target = "card.lua"
pattern = "card:set_edition(nil, true)"
position = "at" # before, after, or at
payload = "if spectral_level <= 3 then card:set_edition(nil, true) end"
match_indent = true
also this patch
put overwrite = true under it
This didn't work. I even tried removing this line entirely, but that also didn't work. Also, in
local card = copy_card(chosen_joker, nil, nil, nil, chosen_joker.edition and chosen_joker.edition.negative)
what does chosen_joker.edition and chosen_joker.edition.negative mean? I tried changing that to just chosen_joker.edition, but that caused it to remove all editions, not just negative.
change it to false
function copy_card(other, new_card, card_scale, playing_card, strip_edition)
chose_joker.edition and chose_joker.edition.negative basically means
itll check if the joker has an edition
if it does then it checks the second part of the and
so itll return true if its negative or false if not
so that way it only strips negative
okay it works now. Ankh problem resolved.
There is still the problem with Aura's edition distribution. I tried to change poll_edition in common_events.lua, but I didn't notice a distribution change, even at spectral_level = 7, where it supposedly should be guaranteed to be polychrome.
open up your lovely dump and see wha tthe poll edition function looks like
_mod = _mod or 1
local edition_poll = pseudorandom(pseudoseed(_key or 'edition_generic'))
if _key == 'aura' then
if edition_poll > 0.85 - (0.15*spectral_level) then
return {polychrome = true}
elseif edition_poll > 0.5 - (0.1*spectral_level) then
return {holo = true}
else
return {foil = true}
end
elseif _key == 'wheel_of_fortune' then
if edition_poll > 0.85 - (0.15*tarot_level) then
return {polychrome = true}
elseif edition_poll > 0.5 - (0.1*tarot_level) then
return {holo = true}
else
return {foil = true}
end
elseif _guaranteed then
if edition_poll > 1 - 0.003*25 and not _no_neg then
return {negative = true}
elseif edition_poll > 1 - 0.006*25 then
return {polychrome = true}
elseif edition_poll > 1 - 0.02*25 then
return {holo = true}
elseif edition_poll > 1 - 0.04*25 then
return {foil = true}
end
else
if edition_poll > 1 - 0.003*_mod and not _no_neg then
return {negative = true}
elseif edition_poll > 1 - 0.006*G.GAME.edition_rate*_mod then
return {polychrome = true}
elseif edition_poll > 1 - 0.02*G.GAME.edition_rate*_mod then
return {holo = true}
elseif edition_poll > 1 - 0.04*G.GAME.edition_rate*_mod then
return {foil = true}
end
end
return nil
end```
By the way, I don't actually know what _key or 'edition_generic' means, since _key isn't a boolean
The ands and ors are really confusing me
in lua you can use and and ors however lol
yeah its strange
but useful
and will always return the 2nd thing if its true
or always returns 2nd if its false
so you can do some neat things
in this case the pseudoseed will be _key, or if _key is nil then itll be 'edition_generic'
poll_edition is overridden by SMODS so lovely patching the function will not do anything.
Okay! I fixed it now. I did that by defining a new function poll_edition2 (independent from the existing poll_edition) in card.lua which has the modified edition rates
One problem left to go — the Judgement floating joker issue
oh are you using the joker buffer?
"buffer"? what is that?
have a look at riff raff
it calcs how many jokers to make
increases the joker buffer by that amount
creates the jokers
then resets the buffer to 0
this is what riff-raff says
local jokers_to_create = math.min(2, G.jokers.config.card_limit - (#G.jokers.cards + G.GAME.joker_buffer))
G.GAME.joker_buffer = G.GAME.joker_buffer + jokers_to_create
G.E_MANAGER:add_event(Event({
func = function()
for i = 1, jokers_to_create do
local card = create_card('Joker', G.jokers, nil, 0, nil, nil, nil, 'rif')
card:add_to_deck()
G.jokers:emplace(card)
card:start_materialize()
G.GAME.joker_buffer = 0
end
return true
end}))
card_eval_status_text(context.blueprint_card or self, 'extra', nil, nil, nil, {message = localize('k_plus_joker'), colour = G.C.BLUE})
end
yeah you can probably rip like all that code
just remove the math.min
local jokers_to_create = mG.jokers.config.card_limit - (#G.jokers.cards + G.GAME.joker_buffer))
if joker_to_create > 0 then
G.GAME.joker_buffer = G.GAME.joker_buffer + jokers_to_create
G.E_MANAGER:add_event(Event({
func = function()
for i = 1, jokers_to_create do
local card = create_card('Joker', G.jokers, nil, 0, nil, nil, nil, 'rif')
card:add_to_deck()
G.jokers:emplace(card)
card:start_materialize()
G.GAME.joker_buffer = 0
end
return true
end}))
end```
smth like that
indentation is weird sorry
Here is what my Judgement patch currently looks like
[[patches]]
[patches.pattern]
target = "card.lua"
pattern = "local card = create_card('Joker', G.jokers, self.ability.name == 'The Soul', nil, nil, nil, nil, self.ability.name == 'Judgement' and 'jud' or 'sou')"
position = "after" # before, after, or at
payload = """
if self.ability.name == 'Judgement' then
for i = 1, tarot_level, 1 do
if #G.jokers.cards < G.jokers.config.card_limit then
G.GAME.joker_buffer = G.GAME.joker_buffer or 0 + tarot_level
card = create_card('Joker', G.jokers, self.ability.name == 'The Soul', nil, nil, nil, nil, self.ability.name == 'Judgement' and 'jud' or 'sou')
"""
match_indent = true
[[patches]]
[patches.pattern]
target = "card.lua"
pattern = "if self.ability.name == 'The Soul' then check_for_unlock{type = 'spawn_legendary'} end"
position = "before" # before, after, or at
payload = """G.GAME.joker_buffer = 0
end
end
end"""
match_indent = true```
but something is causing the floating joker
[patches.pattern]
target = "card.lua"
pattern = "local card = create_card('Joker', G.jokers, self.ability.name == 'The Soul', nil, nil, nil, nil, self.ability.name == 'Judgement' and 'jud' or 'sou')"
position = "after" # before, after, or at
payload = """
if self.ability.name == 'Judgement' then
for i = 1, tarot_level, 1 do
if #G.jokers.cards < G.jokers.config.card_limit then
G.GAME.joker_buffer = G.GAME.joker_buffer or 0 + 1
card = create_card('Joker', G.jokers, nil, nil, nil, nil, nil, 'jud')
G.GAME.joker_buffer = 0
"""
match_indent = true```
try that
im not if these even causes the issue tbh but it might
am i cooking
it should be called phase :3 tho
hell yea
no because it does not say phase 3 ingame
aw
it should just so it can say phase :3 instead
oo i should make the different cards have messages when their effect goes off actually
unfortunately, that didn't solve the problem
Oh my gosh this works
[[patches]]
[patches.pattern]
target = "card.lua"
pattern = "local card = create_card('Joker', G.jokers, self.ability.name == 'The Soul', nil, nil, nil, nil, self.ability.name == 'Judgement' and 'jud' or 'sou')"
position = "at" # before, after, or at
payload = """
if self.ability.name == 'Judgement' then
for i = 1, tarot_level, 1 do
if #G.jokers.cards < G.jokers.config.card_limit then
local card = create_card('Joker', G.jokers, self.ability.name == 'The Soul', nil, nil, nil, nil, self.ability.name == 'Judgement' and 'jud' or 'sou')
"""
match_indent = true
[[patches]]
[patches.pattern]
target = "card.lua"
pattern = "if self.ability.name == 'The Soul' then check_for_unlock{type = 'spawn_legendary'} end"
position = "before" # before, after, or at
payload = """end
end
end"""
match_indent = true```
I was expecting an `attempt to index global card (a nil value)` but this actually works. The floating card has been suppressed.
(Of course, by doing this, I broken The Soul card, so I'll need another conditional for that)
I also realized, the overwrite = true isn't even necessary; I just had to change the after to at and add local before card.
Usually, this would lead to a attempt to index global card (a nil value) error, but card isn't used outside that if statement
you know if you use pos = at it doesnt overwrite i think
it does
the overwrite field never actually did anything
oh ignore me then 💀
it's just a remnant of the way it was maybe supposed to later work at one point
this shit is so cinematic
i have no clue
as you can tell
i would like to have them count as unique cards, like brainstorm card be a 10 of smth cos of the art
but i wouldnt really know how to
because atm they just act as stone cards kinda
i wouldnt want you to be able to change the rank or suit
We need archipelago randomiser support for baltro, that sounds so baller
I tried to make Ankh be able to be used even with every joker slot filled if spectral_level is at least 4 and the first joker is negative, but I'm getting attempt to index field edition (a nil value) instead
we do have it!
hmm?
it's marked as 18+ (which is really fucking stupid), so it has to be moved to ap after dark

could you send the error
also this line is confusing me a bit ((#G.jokers.cards >= G.jokers.config.card_limit) and (spectral_level <= 3)) or ((#G.jokers.cards >= G.jokers.config.card_limit) and (spectral_level >= 4) and (not G.jokers.cards[1].edition.negative))
why not just if (#G.jokers.cards <= G.jokers.card_limit and spectral_level <= 3) or spectral_level > 3 then
Here is where this line is used:
if self.ability.name == 'Ankh' then
if ((#G.jokers.cards >= G.jokers.config.card_limit) and (spectral_level <= 3)) or ((#G.jokers.cards >= G.jokers.config.card_limit) and (spectral_level >= 4) and (not G.jokers.cards[1].edition.negative)) then
alert_no_space(self, G.jokers)
return true
end
end
end```
i see yeah its not like the other can use consumable function
my bad
why not just if (#G.jokers.cards >= G.jokers.card_limit and spectral_level <= 3)
wait why does it return true
am i stupid or smthj
Even if spectral_level is 4 or greater, if the joker slots are full, Ankh should only be usable on a negative joker, not any joker
I tried to check the edition of the first joker, but apparently the edition in G.jokers.cards[1].edition.negative here isn't defined
right i see what the in game function does now
seems like a confusing way to lay it out
(not G.jokers.cards[1].edition.type == 'negative' might work
actually
do
not (G.jokers.cards[1].edition and G.jokers.cards[1].edition.negative)
this works
👍
I'll work on Ouija and Sigil next
good luck
im trying to figure out how i should balance this joker
it sounds pretty balance already tbh
might need to be made a bit better i reckon
maybe uncommon?
if you compare it to smth like bloodstone
ofc bloodstone isnt guaranteed
but its uncommon
doesnt lose any money
true true
and easier to play 5 hearts than 5 tens
i was looking at Baron but then i forgot Baron is held in hand not played
also baron can be retriggered my mime
10s have no vanilla way to be retriggered apart from red seals
i think
well ig paradoielia and sock and buskin
but that doesnt really count
i dont think im one to talk about balancing jokers tbf tho
ah the phases make sense now
so do you keep replenishing the hands in game too, or is that just for testing?
makes it seem like a proper boss fight
yes
good
uncommon BEAM (spoiler for like, slightly suggestive art?)
that art is incredible
tyty :)
I tried to make level 2+ sigil change the suit of all cards in hand to the selected card:
[patches.pattern]
target = "card.lua"
pattern = "and #G.hand.cards > 1 then"
position = "after" # before, after, or at
payload = """if (self.ability.name == 'Sigil' and spectral_level >= 2 and (G.hand and (#G.hand.highlighted >= 2))) then
return false
elseif (self.ability.name == 'Ouija' and spectral_level >= 3 and (G.hand and (#G.hand.highlighted >= 2))) then
return false
elseif (self.ability.name == 'Immolate' and spectral_level >= 2 and (G.hand and (#G.hand.highlighted == 0))) then
return false
end
"""
[[patches]]
[patches.pattern]
target = "card.lua"
pattern = "local suit_prefix = _suit..'_'"
position = "after" # before, after, or at
payload = """if spectral_level >= 2 and (G.hand and #G.hand.highlighted == 1 and G.hand.highlighted[1]) then
local suit_prefix = G.hand.highlighted[1].suit..'_'
end"""
match_indent = true```
But I got this error:
`(SMODS _ "core/game_object.lua"):1780: assertion failed!`
@lean dune
where can i look for joker templates
example mod in steamodded has a few
um
thanks
np
it's a normal game
oh because its not suit
about normal people
as a normal person myself im surprised i dont know more about it
i think the format you need it is D_A where first letter is suit and second letter is rank
so try .suit[1] maybe?
actually idk if you can index strings in lua like that
[patches.pattern]
target = "card.lua"
pattern = "local suit_prefix = _suit..'_'"
position = "after" # before, after, or at
payload = """if spectral_level >= 2 and (G.hand and #G.hand.highlighted == 1 and G.hand.highlighted[1]) then
local suit_prefix = string.sub(G.hand.highlighted[1].suit, 1, 1):upper() ..'_'
end"""
match_indent = true```
try that maybe?
oh actually
you might need to do .hand.highlighted[1].base.suit
also, I just realized that the local is for that if only, so I probably need to remove the local
try this
and then
if that doesnt work
[patches.pattern]
target = "card.lua"
pattern = "local suit_prefix = _suit..'_'"
position = "after" # before, after, or at
payload = """if spectral_level >= 2 and (G.hand and #G.hand.highlighted == 1 and G.hand.highlighted[1]) then
local suit_prefix = string.sub(G.hand.highlighted[1].base.suit, 1, 1):upper() ..'_'
end"""
match_indent = true```
doesn't sound like you're normal then
try that
wow
when you say its a game do you mean like a standalone game or are you the sole creator of its entirety?
and if that does work then
[[patches]]
[patches.pattern]
target = "card.lua"
pattern = "local suit_prefix = _suit..'_'"
position = "after" # before, after, or at
payload = """if spectral_level >= 2 and (G.hand and #G.hand.highlighted == 1 and G.hand.highlighted[1]) then
local suit_prefix = G.hand.highlighted[1].base.suit..'_'
end"""
match_indent = true```
try that
no way this is literally on my wishlist 💀
i swear im stupid
its like how i didnt connect that flash card the joker is based on flash cards for revising
no need for me to buy it tho if i can play it in balatro
probably somebody did this already, if not wow (WIP)
now to think some important jester place or something
am i slow?
the mod is now cancelled, go buy the game
give jihoon your money
lmao
ill have to look into it a bit more first
my money is not up rn
I tried this and it still didn't work. In the console, it said:
WARN :: Util :: Tried to call SMODS.change_base with invalid arguments: suit="table: 0x18906b80", rank="nil"
i think im out of suggestions then sorry
doesnt help that i dont actually know what assertion failed means either
(personally, don't buy lobcorp if you're not interested in psychological torture, go watch a story summary and buy library of ruina instead)
no way they got jokers from balatro
However, what I find weird is that this error is happening even when I don't select a card to begin with, even though there is an if statement that means that this suit_prefix = string.sub(G.hand.highlighted[1].base.suit, 1, 1):upper() ..'_' should only occur if I select a card
try throw a print in the patch and see if it is getting that far
ive kinda forgotten what games i like tbh, balatro has been the only game ive been playing basically since it came out
i think ive spent more time on balatro than outside this year
mood
I think I know what's happening. The first patch is returning false, and if that false is being asserted, it would cause an assertion failed error.
But that doesn't seem right either
can i get some mod reccomendations
idek know what asserting is tbh
Though I do know the problem is probably in the first patch and not the second, since even when no cards are selected, it still caused an error
https://discord.com/channels/1116389027176787968/1271664767345623173 apparently this mod is gonna be absolutely incredible
its not released yet
but the guy making it is hot and sexy
and hes gonna release it real soon i hear
this is my mods folder so ive actually got no clue
lob corp seems really cool
cryptid is a classic
Here are my files
alr cause rn i fuck around with cryptid but i want somthing new
so is the pack 70 mods or do i choose one
i think you can download them all at once
alr
i think theres settings for it too
okay cool
i saw someone say smth about a fine tuned option
which i assume is the mod pack creator putting together not all 70 mods, but some of them that fit well and work together
so it might have some degree of customisation
okay ill have a look
and if you play w a bunch and find some you like ofc you can always just download them seperately
sorry i didnt mean to keep rambling lol
nw
s
lemme have a look
It turns out, the assertion failed is happening even when both of the patches related to Sigil are removed, which is very strange
oh
nah its fine
eeehh...
all i know for sure is that its gotta be .base.suit
if you look at the is suit function in card.lua
self.base.suit
turning balatro into monopoly :0
(SMODS _ "core/game_object.lua"):1780: assertion failed!
Here is what line 1780 in SMODS (SMODS _ "core/game_object.lua") looks like:
use = function(self, card, area, copier)
local used_tarot = copier or card
juice_flip(used_tarot)
local _suit = pseudorandom_element(SMODS.Suits, pseudoseed('sigil'))
for i = 1, #G.hand.cards do
G.E_MANAGER:add_event(Event({
func = function()
local _card = G.hand.cards[i]
assert(SMODS.change_base(_card, _suit)) -- this is line 1780
return true
end
}))
end
for i = 1, #G.hand.cards do
local percent = 0.85 + (i - 0.999) / (#G.hand.cards - 0.998) * 0.3
G.E_MANAGER:add_event(Event({
trigger = 'after',
delay = 0.15,
func = function()
G.hand.cards[i]:flip(); play_sound('tarot2', percent, 0.6); G.hand.cards[i]:juice_up(0.3, 0.3); return true
end
}))
end
delay(0.5)
end,
})```
The other error `WARN :: Util :: Tried to call SMODS.change_base with invalid arguments: suit="table: 0x18906b80", rank="nil"` suggests that I tried to turn the suit into a table.
its because its not geting a rank id assume
local rank_suffix = card.base.id < 10 and tostring(card.base.id) or
card.base.id == 10 and 'T' or card.base.id == 11 and 'J' or
card.base.id == 12 and 'Q' or card.base.id == 13 and 'K' or
card.base.id == 14 and 'A'
card:set_base(G.P_CARDS[suit_prefix..rank_suffix])``` make sure this bits still in your code
I think it's a SMODS bug
I tried turning off all of my mods and doing Sigil, and it still went assertion failed
Ouija works fine, just not Sigil
with this mod pack why is the mod manager an .exe
compiled python
i havent actually used it myself so im not sure sorry
me neither
alr allg
death
in Bunco this would just be a spectrum house, so nothing too weird
persuing those cards have the same "rank"
a spectrum regardless
they have no suit actually
oh I see
maybe
still... colorblind should still trigger, if they act like playing cards at all
right?
if I understand it at all
lol
idk i stupid
okay, I updated my steamodded, and this bug is patched now. But there's still a problem — even after selecting a card, Sigil is still not changing the cards to the suit of the selected card, and is still picking a random one.
[patches.pattern]
target = "card.lua"
pattern = "local _suit = pseudorandom_element({'S','H','D','C'}, pseudoseed('sigil'))"
position = "after" # before, after, or at
payload = """if spectral_level >= 2 and (G.hand and G.hand.highlighted[1]) then
_suit = string.sub(G.hand.highlighted[1].base.suit, 1, 1)
end"""
match_indent = true```
(I'm sleepy dw, just being silly)
uh colourblind on playing cards will trigger even if theres no suit yeah
although it should also be on that sinful joker so im not sure why my code broke :(
I don't think I actually remember what colorblind jokers do
oh yeah I remember now
been thinking of mixing boardgames into balatro. i have no idea how.
skip everyone (uno)
sell this joker = +1 ante, reroll boss blind
tower (jenga)
+(chips/mult), +1 odds (+1 to 1 in x chance on itself) at the end of the blind, 1 in 10* chance to destroy itself
10 (sorry!)
x1 mult, gain x1.1 for every scoring hand that has at least a 10 and an ace
[in sorry, a 10 card lets you move 10 spaces forward or 1 space backwards, if someone has a better idea, please go ahead]
so yeah that's... not good
so much going on in chat im overstimmed
get it to print _suit rq
the uno one is cool idea
no its not 💀
but it is good on other jokers
so risk reward or something probably
on another note which art do you prefer
this one^^
or
this one ^^
so yeah I got confused for a second and thought that 'colorblind' would mean suit based jokers would trigger on any suit, kinda like an inverse wild card. I remember now what it actually does, though that would be a cool edition
that would be cool but only work on a small amount of jokers tho
well... not in the modded scene
tons of suit jokers out there with things like flounder's mod
and just the ortalab ones
again i dont play with many mods myself so i didnt even consider that
not to mention all the other ones mods add that have need a specific suit or suits to trigger
very fair
slowly whittling down the to do list for a ceres release
nothing comes out
besides, even after replacing the pseudorandom line with the selected suit line, it still gives pseudorandom, despite that line not even existing anymore
Is it possible that SMODS overwrites that again?
maybe
i havent really messed around w stuff like this so im def not the best person to ask
thoughts?
Looks like a potential stack overflow
Okay, I found some more info. My "Level 2 Sigil" is basically the same as the Sigil DX from the DX consumables mod
(This isn't really much of a problem, since for most consumables, there will be one level that matches stats with a DX card from the DX consumables mod)
surprisingly it can only retrigger oncee
tested it with 5 oops and it retriggered once, and when it did it gave the x chips again
not sure why or how but it works really nicely
steal all that code then lol
i mean
borrow?
The problem is that the way they did it is the same as the way I did it
(with one exception, made for Bunco compatibility)
I tried this (in upgrademod.lua), which fixes the problem, but now only Sigil works, and no other consumables work at all.
if youre hooking to a function dont put it inside another function
i think
also what version of steamodded are you using?
most recent one
yeah
also, what do you mean? I tried to replace only the Sigil and Ouija part, not the whole thing
I also didn't want to append this function to it, since then it would trigger the vanilla Sigil/Ouija first
local card_use_consumeable_ref = Card.use_consumeable
function Card.use_consumeable(self, area, copier)
local used_tarot = copier or self
if self.ability.name == 'Sigil' or self.ability.name == 'Ouija' then
G.E_MANAGER:add_event(Event({trigger = 'after', delay = 0.4, func = function()
play_sound('tarot1')
used_tarot:juice_up(0.3, 0.5)
return true end }))
for i=1, #G.hand.cards do
local percent = 1.15 - (i-0.999)/(#G.hand.cards-0.998)*0.3
G.E_MANAGER:add_event(Event({trigger = 'after',delay = 0.15,func = function() G.hand.cards[i]:flip();play_sound('card1', percent);G.hand.cards[i]:juice_up(0.3, 0.3);return true end }))
end
delay(0.2)
if self.ability.name == 'Sigil' and spectral_level >= 2 then
local _suit = string.sub(G.hand.highlighted[1].base.suit, 1, 1)
for i=1, #G.hand.cards do
G.E_MANAGER:add_event(Event({func = function()
local card = G.hand.cards[i]
local suit_prefix = _suit..'_'
local rank_suffix = card.base.id < 10 and tostring(card.base.id) or
card.base.id == 10 and 'T' or card.base.id == 11 and 'J' or
card.base.id == 12 and 'Q' or card.base.id == 13 and 'K' or
card.base.id == 14 and 'A'
card:set_base(G.P_CARDS[suit_prefix..rank_suffix])
return true end }))
end
end
if self.ability.name == 'Ouija' and spectral_level >= 3 then
local _rank = string.sub(G.hand.highlighted[1].base.rank, 1, 1)
for i=1, #G.hand.cards do
G.E_MANAGER:add_event(Event({func = function()
local card = G.hand.cards[i]
local suit_prefix = string.sub(card.base.suit, 1, 1)..'_'
local rank_suffix =_rank
card:set_base(G.P_CARDS[suit_prefix..rank_suffix])
return true end }))
end
end
for i=1, #G.hand.cards do
local percent = 0.85 + (i-0.999)/(#G.hand.cards-0.998)*0.3
G.E_MANAGER:add_event(Event({trigger = 'after',delay = 0.15,func = function() G.hand.cards[i]:flip();play_sound('tarot2', percent, 0.6);G.hand.cards[i]:juice_up(0.3, 0.3);return true end }))
end
delay(0.5)
end
else
card_use_consumable_ref(self, area, copier)
end
end```
just do that
do you know how hooking works?
Not really
basically
you have the ref
you redefine the function
so whenever the function gets called
it calls your new one
so you can put code in it
and the you call the ref
so its like
you basically can put in your own code that gets run before the original function does
in this case you have your ref
whenever use consumable is called
it calls your new function
if its sigil or ouija itll run your code
but if its not
then it runs the original function
youd forgotten to call the ref function
so what was happening was
whenever use consumable was called
it was running your code
which works for sigil and ouija
but it didnt call the original function if it wasnt sigil or ouija
hence why all other consumables broke
ill draw a diagram
because i like those
So it calls the NEW function, and if it's not in NEW, it then calls OLD, right?
kinda
usually what you do is this
ill find an example rq
local r_click_ref = Controller.queue_R_cursor_press
function Controller:queue_R_cursor_press(x, y)
if self.hovering.target.ability and self.hovering.target.ability.set == 'Joker' then
self.hovering.target:counter_lock()
end
r_click_ref(self, x, y)
end```
like this for example
whenever you right click
it calls my new function here
which does lua if self.hovering.target.ability and self.hovering.target.ability.set == 'Joker' then self.hovering.target:counter_lock() end
this
and then it calls the original anyway lua r_click_ref(self, x, y)
so whenever you press right click
it does whatever it normally does
but my little bit of code gets run before
in your case
what you can do
is if check if its sigil or ouija then do your own code
and if its not then do the old function
so in this case yueah
this is what your code does
or it does now
else
card_use_consumable_ref(self, area, copier)
end```
with this bit
without that what it was doing was
without calling the ref function
it does this
so all other consumables broke
i feel like i got a bit sidetracked there
have you tried this?
another example of actual code
I tried this, but it's giving this error: [SMODS upgrademod "upgrademod.lua"]:384: 'end' expected (to close 'function' at line 341) near 'else'
local calculate_joker_ref = Card.calculate_joker
function Card:calculate_joker(context)
self:should_init()
local ref_return = calculate_joker_ref(self, context)
self:calculate_counters(context)
return ref_return
end```
youll have to repaste it
i missed an end by accident
but edited the message to add
it
sorry about that
basically any time calculate joker is called, it also does smth else
it calculates counters
so hooking is good for getting code to run whenever a specific game function is called
at least as far as i understand
Also, I just realized it's base.id, not base.rank
ah yeah youll wanna change that too
s_mult*
my code for that edition is already messy enough
ikr
:(
what did i do
wait thats not actually bad for me
the way i do it is change the return
so it returns mult
which i have a swap for
wait i got it
betmma abilities bug that hasn't been fixed
not that i know of sorry
alr allg
This almost works. The only problem is that Sigil and Ouija no longer checks whether exactly one card is selected, and attempting use either when no cards are selected crashes the game.
yeah youll need to add the base game stuff back in
1 sec
youll need this
if self.ability.name == 'Sigil' then
local _suit = pseudorandom_element({'S','H','D','C'}, pseudoseed('sigil'))```
this bit
just check the level
oh wait
actually youll have to amend the can_use function
In the new one, my if statements are
if self.ability.name == 'Sigil' and spectral_level >= 2 then
if self.ability.name == 'Ouija' and spectral_level >= 3 then
which means if spectral_level isn't high enough, this shouldn't trigger.
what did i do this time
I already did that in lovely.toml
[patches.pattern]
target = "card.lua"
pattern = "and #G.hand.cards > 1 then"
position = "after" # before, after, or at
payload = """if (self.ability.name == 'Sigil' and spectral_level >= 2 and (G.hand and (not #G.hand.highlighted == 1))) then
return false
elseif (self.ability.name == 'Ouija' and spectral_level >= 3 and (G.hand and (not #G.hand.highlighted == 1))) then
return false
elseif (self.ability.name == 'Immolate' and spectral_level >= 2 and (G.hand and (#G.hand.highlighted == 0))) then
return false
end
"""
match_indent = true```
and Immolate works, just not Sigil or Ouija
so when you click on the sigil or ouija card
does it let you press use even with no cards selected?
you might have to rename one of the mod folders
yes, and that causes a crash
send a ss of your mod folder if you could please
well then your patch doesnt work
otherwise it wouldnt let you press the use button in the first place
but for some reason, Immolate works properly (it doesn't let me use unless I select a card(
try removing all the -main from the folder names
have to just installed trance?
it could def be that if so
all of them worked fine then i added these ones
Trance
alr
1 sec
alr
try putting some prints before the return false's
just to see if its smth to do w the if statement
it doesnt look incorrect but im not sure what else it would be
theres something wrong with this mod
i remember using it forever ago and i could never get it to work
hm idk
i thought that mightve been me tho
its only a visual thing i think, so you might just wanna remove it
alr i will
I've fixed the problem by replacing not #G.hand.highlighted == 1 with #G.hand.highlighted == 0 or #G.hand.highlighted >= 2
Both the higher-level Sigil and Ouija are working now
But level 1 Sigil and Ouija seems to be broken
They aren't changing the ranks or suits at all, they just flip all the cards and flip them back without modifying anything
did you add this to your hooked function?
This shouldn't even matter, since the if statement checks if spectral_level is high enough anyway:
if (self.ability.name == 'Sigil' and spectral_level >= 2) or (self.ability.name == 'Ouija' and spectral_level >= 3) then
But now I'm getting attempt to call global 'card_use_consumeable_ref' (a nil value)
1 min
oh its because its spelt wrong
well its spelt right
but the game spells it wrong
put an e in the bottom one
help all i did was play a card
if youre using talisman it might be smth to do w the big num thing it uses
im not
nws 👍
i got 4 pages of mods
thats a lot wtf
ive literally just installed cryptid and talisman too for compat testing
this too many
it looks like it lol
dam well ive 282 jokers
okay, I fixed it.
🫣
tbh, if you can still buy the free packs even once it debt, which you would be able to normally, and probably should be, it probably should be a higher rarity
Uncommon I'd say
it's a good effect
I think this is the first "ZZZ" post I'm seein, curious what all there is/will be for it
eye candy
^^
art is crazy
also
👀
lmao, not a bad joker though
think i might be ready to actually release some stuff
👀
my ability mod uses something from my voucher mod
ohh alr
install voucher mod
You better not start having the voucher mod depend on abillities too :P
though I know it's still configurable
so a moot point
i wont
whenever i elvove a card the ability causes it to crash
at the very least makes packaging for my mod pack easier
how does it crash
for example the re roll one i sold it to get a base one then i rerolled and it crashes
this all i need or more
you can install all from my repo
some mods about game Balatro. Use Steamodded (https://github.com/Steamopollys/Steamodded) to load them. - betmma/my_balatro_mods
alr so just download them and put them in my folder and ill be good?
hmm like this
do you have crash screen for this
110 vouchers wtf
no sorry ill try get it
it just crashed randomly
i haven't used evolution mod before 🤔 i'll try it
alr its pretty fun
maybe update smod
its the newest
@cerulean flare this is new what did i do
another idea
"3 Cup Game"
whenever a hand is played there is a 1/3 chance to swap chips effects to mult effects and vice versa
wait, no... cause chipXmult is the same as multXchip
a better is:
When a card scores, there is a 1/3 chance to swap chips and mult
this way it swaps chaoticaly and can give situations that give plenty of point
i don't think my mods have something called mpd_modicon
or no, i have a better way for cup game
move 1/3rd of the bigger score (between chips and mult) to the other one
so
30x5 -> 20x15
or no, just
move 1/3 of ships to mult
theere is little situations where mult is bigger than chips, and whn there are, this would be too op
cryptid has smth like this i think
f cryptid.
half of them are broken OP, and other half being unfunny forced jokes, and there is very few good ideas, and even when they are the good idea, they have bad art that in no way fits with the Balatro esthetic
can installing mods fuck up your game save?
dont let math hear you say that lol
"here you say that" XD
my saves have never been
bro i havent slept in a day leave me be
i assume thats the name of the creator, and he's here on the server?
yea
you're being unnecessary rude
gotta get my pacnakes
how to get banned 101
considering it's a collaborative effort
if you have an unfinished run on a mod stake (higher than 8th), after you remove stake mod game will crash on loading screen
yea
redownloading a bunch of mods i used to have
because it feels like ages since i actually played balatro instead of just making stuff for it
Bruh
what?
i genuently dislike this mod, and everyone is praising it like it sthe best hting to happen to balato
like saying the flooding of the orphanage is so great
Most people don’t give feedback like that
There're better and proper way to express that instead of saying "L CREATOR UR MOD SUCKZ!!!"
most people dont voice the negative opinion, and that goes for everything
so i compensate for the quiet ones
Also its has an alright config if there are jokers you dislike
There no issue with disliking it
by being louder than i would if more people would be with me
i dont HATE it, i dont mind people playing it. I'm just balancing the quiet with the loud
That’s not necessary and doesn’t actually work. The joker art is getting updated pretty often btw
To fit balatro style a bit more
As for the ideas boing “bad”, could you elaborate on that?
The way you said it it didn't seem like it
Is you make a PR on GitHub, math’ll probably look at it.
from what i seen, it's seams like the idea of the mod is to make the most overpowered and broken jokers possible. It doesn't seem like there is much balancing in there.
and i dislike mods (that goes for all games) that break the core of the game, and are either overpowered, or are completely not fitting to the game at all
like the original Pokemon mod for minecraft
thats trash
Okay well Cryptid, just isn’t for you
Cryptid is literally branded as an unbalanced mod
It’s pretty much the point
thats the problem i have with it, not my groove
cryptid is a sandbox for unbalanced ideas that would usually never work in a normal balatro mod
if cryptid never existed, something else would
i guess this can work as a sort of resume of what my jokers are about
so i don't feel like it's fair to attack its existence
im not attacking it. i just dislike the idea
it's like making a Minecraft mod that gives you full enchant netherite as soon as you load the game
i get some people like it
not my groove
Okay
my mod is:
Makes sense for it to be/that's a cool idea
You should make a forum for it in the modding forum
i already have a guy who said they gonne make my art come true, and there isnt yet a build of the mod so i dont see a reason as of yet
definitly later
“I don’t like unbalanced cards”
retrigger edition loop lul
- the edition itself doesnt retrigger unless there are multiple editions in played hand (very rare)
- the joker is rare, you aint gonna get it too often
also, it originates from my collection "Asylium Pack, The pack of insane jokers"
about half of these are from Asylium, and other half is from "Anti Pack, The paralel Pack" (some like Lobotomy fit in both)
I think doubling the number of blueprints in the rare pool is unnecessary, but some of these ideas I really like
Lucky 7s is really neat cuz it resets the slot chance on activation
if im making an anti of brainstorm, i gotta anti the blueprint
this was like, the 3rd art i made. the same day as Gambit, and Frozen
death 13 is pretty cool
idk if you can modify relative rarity in the "Rare" group
how about the new consumable im also making for this mod?
unfinished
Big Earner being uncommon? does it double interest or only gold from cards?
and some definitly need polish
all gold.
so 2X intrest, 2X from golden 2X from rocket, ect. ect.
all stuff that gives gold or contributes to the final payout is doubled
like if you had 2 of them
cool, I like the Caretaker album art one and the backrooms one
It feels like it should be rare imo
Caretaker is a genuently changing experiance
6h of music, that makes you feel the effects of dementia
The last message in there was 20 days ago. Not sure if that forum is going to find you a programmer.
what?
i think there is some kind of message slip
i think we might be talking about different places
i was refering to #1209506514763522108
i thourght thats what you meant
Modding has multiple forums in it
I found a forum within modding which I believe co-responds to your mod
JOKER IDEA!
"Class Clown"
same as the Ace joker but for 2s
tbh, Black stake is the last one that make the game more fun, instead of just more hard
when i beat all decks in gold
i will only play in black
can i get a refund?
hmm.... as someone who MAKES games, i dont like the glithced effect visual
nothing ever glithces to look like that
if it does, it's you screen not the game
a better one would be something similar to missprint.
shifted texture, shwoing textures nerby on the sheet, and maybe a displacement of the card itself
thats how glitches look 99% of the time
this is realy about as severy of visual glithces you gonna get that 1% of the time
no fuzzing of textures
hueshiting and texture misplacment is the most that happenes
even in corruptions at most it gets clown vomit.... JOKER IDEA!
"Clown Vomit"
random Joker and random Card in played hand re-activates itself random amount of times every hand played
a reference to the dark ages of RTC
now what the
happened?
where i can get the mod?
@swift matrix still ain't gotten to coding it. so you gotta wait. I'd code it myself if i wasn't already coding a game in a different coding language, and i cant afford to trash my brain with another language
guess i'll wait then

the coding misshaps would skyrocket, and thats bad for progress for the prophecy that HIM told me
Not for 6s and 9s?
The funny numbers?
no, the point is he sucks in class
Not like splash though right
i guess more like stones
like an invertred hiker?
"Lazy Joker"
call that Joker "Workout"
possible, absolutely, but it's possibel you are the first trying to do it
it's 100% possible.
just like recreating the entire Mario World in balatro
How to get OpenCL to work for Balatro?
voicing your opinion like this is lame, you should apologize. it's ok to critique someone's work as long as it's constructive and realistic, but it's 100% bad to critique - or in your case, insult - the person(s) who made that work.
So you read one message and nothing that follows in the conversation?
if that message isn't representative of the conversion that follows then you should delete it
there is a reason there is such thing as message history
if every message was to be deleted after it's conversation was ninished, the same conflicts would arise again and again
That's just rude, not constructive criticism
I argue that conflict can be avoided by doing a better job at communicating what we do and do not like.
so my ask is to do better
i had a whole damn conversation with math, he's cool with it, and i fully explained that i was just making up for the people that stay quiet with their dislike to it
thats what i was doing, communicating what i didnt like
and later i provided all the info on what i would improove with it
your behavior stinks of redditors
A bar
and it's not fair to hide behind speaking for "the quiet people"
considering you're likely not representing their opinion fairly in the first place
not getting the whole context, and just getting mad at a single line, maddening out of context
the chance that there is no other people who think like me about this topic is 0%, especially given that on previous occasions i voiced my dislike for this mod, some people agreed with my points
It's moreso that subsequent conversation does not amend what you said in the first place, nor does it absolve you of responsibility to do better
and my ask is that you do better
"It's moreso that subsequent conversation does not amend what you said in the first place"
how the fuck does that work?
so people cant say things they dont 100% stand behind for the rest of their life?
you always have to be 100% serious?
come on
Please just cease the debate of any kind. It's not productive at all
thats even more redditor stink
watching shows is also not productive, you have a problem with that?
this is called entertainment, and a civil discussion is a great form of it
Especially this kind of prejudiced and stereotypical remarks
I think there's some irony to coming into a space built upon collaboration and respect for fellow creators with that attitude - it's not productive either.
ah yes "redditor stink" what a great insult
not 👏 everything👏 needs👏 to👏 be👏 productive
impactful yet safe in places that could punish for being... outstandingly mean
same with calling someone a wet wipe
imho stereotypes never result in anything constructive
thats kinda the point of insults
I also think that you're shooting yourself in the foot with this argument
i'm not sure how that helps
this is the most dumpster fire i've seen this chat be in
The hell did I walk into
I'm sure he is not doing great job standing his ground
i asked the same exact thing 💀
mental combat,
opponent being more agitated makes them more prone to mistakes, that can be escalated to a victory
this was a joking response to this
what does a "victory" even mean here...
what
bro cant get context from 4 lines above💀
now you're saying that's a joke
didn't seem like a joke 
yes, there is setup, and punchline, let me write it down
you're digging your hole even deeper rn, first you double down on it then you say it's a joke
Me: "I dont like [stuff made by person A]"
B: "watchout, [A] is here,"
Me (louder): "Hey [A], i dont like your stuff"
What a logic
ah yes, openly insulting someone and saying it's a joke
say something rude, get called out, say it was a joke 
either way I think you should be better in how you communicate
communication is key, especially in development
subvertion of expectation.
One would assume that if the [A] is nerby, I'd stay quiet as to not insult,
...don't ping me.
and like, why you people are being offended on Maths behalf?
he siad he's cool with it
How even old are you my good sir
i think you're mixing up names
That is another math
I don't make balatro mods per say lol
old enough to screw your mom
m
i have a job
m
m
m
m
m(odlich)
Also mathisfun
What’s the meaning of your pfp
Odd -> 3x+1
Even -> x/2+1
Do not even dare doing such remarks towards my family
Oh
So slightly modified collatz conjecture
Knew it looked similar to that
ohhh that makes sense
Looks like somebody's not learning even slightly
Insulting is never the key to anything fruitful
what is there to learn from you getting second-hand insulted, when the target said he's ok?
only thing i can think of is you learning to not be insulted by things unrelated to you
When did your said target say ok
hold on, lemmie scroll a bit
fyi mathguy != mathisfun
here
Hmm
yeah no
holy shit lmao
lol
that's two different people
you can tell by looking at the author of the cryptid repo on gh
I do not endorse this Persons behavior
see
so like I said, apologize and do better.
for all i knew, i was convinced thats the person of the mod, as i assumed so via our conversation
also I think you've unfortunately lost a lot of trust and respect here
I literally referred to math in Third person
that's where you're wrong, there is no "person of the mod" technically speaking since it's a collaborative effort
and what does the loss of respect of strangers from the community 7th on my list of places i care about, is spouse to do to me?
well... if you want to make mods and get help making them
heavy emphasis on the "help" part
clearly you care enough to still be discussing it
I won't ask his apologies, I don't think he has that in his dictionary
damn what is going on here
Don’t ask
@tired roost dude just chill, if you don’t like Cryptid the least you can do is be polite about it
Ton of people are making Deltarune, but Toby is the guy
I will let the moderators know if you continue acting like this
like personally i dislike the unbalanced shit but i'm not aggressive about it
i am?
i just think the mod idea of "overpowered jokers that brake the game" is not that fun
I get that - the way you’re talking about it though is rubbing people the wrong way
whats impoline about "this idea sucks"?
The entire statement
isnt it synonymous with "this idea is bad"?
hey meth, two "at" patches targetting the same line should not duplicate the payload right
Because that’s not criticism
they will unless you replace the line you're matching
Like saying “hey your mod objectively sucks” in exclamation points is different than saying “I don’t like the idea of your mod because it’s too unbalanced, and the art style isn’t good”
Yeah
when was I saying i was doing critisysm?
i said that i find the idea bad, not that it's general bad. i can see people anjoying it, but its not for me
You didn’t say that tho, you said the mod sucks
Those two statements are fundamentally different
i already am
yeah but you were just saying it the wrong way
just own up to it and move on, don’t double down on your mistakes
even if I didn't enjoy the idea of a terribly unbalanced mod, it still got the modding community a lot more activity and new faces from streamers
and i can take someone syaing they dont like my game
for me that would be enough of a reason not to shit on it
they are like quintupling down at this point holy hell
Same tbh
It’s really funny seeing streamers’ reactions to the horribly busted stuff
As well as being able to casually crack naneinf
You’re definitely not even the fifth person who I’ve seen being like “this mod isn’t for me”, but your reaction is a bit inappropriate
I think it comes back to that, yeah. Mod you gotta work on your communication - you can't speak for others in that way, nor can you effectively explain why you don't like what you like when you open with that sorta statement
Just do better
🎺 🎺 🎺 🎺
the fanfare is playing they said they dont care about me not likeing it
/j, for those who cant tell a fucking joke
...
that's not even a good joke
I don’t know how to communicate with this person
Please just fridge off
m
m
m
M
I get the feeling that we're about to get hit with the "hur durr I've been having fun here trolling you guys"
m
what does that even mean? this joke makes no sense
em
M
erm
M
mm
that's how inside jokes tend to work
m
m
m
also I love how you criticized “my” art when I made a grand total of one joker art
isn't labyrinth like mostly computer generated anyway
m
0 it is /j
i was referring to the mod as a whole. when you say you don't like a mario game, you are not hating on Miamoto
incredible
for context @tired roost, math has been here since the beginning. he's pretty fundamental when it comes to balatro mods, especially lovely.
don't let them see art for my mod which is just ripped game art that's scaled down to hell
yeah I know :P
I don’t think you really understand what you typed.
Math you are being too kind
I remember for the poker hand example mod, which predates the games release btw, I used a downscaled Google image plopped onto the planet template
ok?
people that made nukes allowed for nuclear power plants. dont see your point
the H-man people made plenty of inventions used to this day
And then that poker hand got added into the game, so I had to change which poker hand I added
bestie what the fuck are you talking about
just cause someone contributed to somethign great, doesent mean all of their stuff is good
M
actually valid here, but “good” is subjective
The only thing people have an issue with is HOW you said what you said
absolutley
Nobody cares of you don’t like cryptid
I know what you mean, but the way you speak makes it come across like you think it is factual
getting shitted on by a pigeon sucks, but the parasite in there is happy
"shitted" 💀
that's never happened to me
this "myst blind" sucks
every goddamn time when i do a reply ping build...
Duh, not to mention some stray guy just singlehandedly flamed this whole community
y'all clearly care, cause this whole convo started cause i said i dont like it
god tier reference
needs a mod
worthy of a blindomancer
The issue is HOW You said it
hard to mix water with water
...
you can mix water with water
but you cant see the difference
why are they naming mods after spectrals, are they stupid?
Might as well call their mod Big Blind
why are they naming mods after popular games, are they stupid?
Hmmm…….
Thanks for reminding me drink water btw
rr omw to make Joker the mod
you're clearly not picking up what im throwing
You might be on to something
water?
Big Blind for a boss mod might actually be good ngl
you can't really pick it up unless it's frozen
alright who wants to work on 'lusty joker'
but then you can't really mix frozen water with water
LMAO
I like the way Sigil sounds 🙃
i'm still thinking of the dating sim idea
i can tell you what i meant by my mix metaphor, but i'd have to have the whole server sign a petition they wont report me for being mean
is that a racist joke? tf
Oh no
we have advanced ui technology now, it is possible
getting shitted on by a pigeon sucks
that's never happened to me
hard to mix water with water
L Corp. Myst (no reply pings)
i'm still thinking of the dating sim idea
take my money
missing a part here
ik
is the part the joke?
Btw, could someone send the code for invisible joker, I’m on Mac and unzipping Mac’s version of exe files sucks
i'm paywalling this behind a $100 monthly subscription where you will be sent a demo every month
there
as long as it's just me then we're good
yeah, if y'all dont see what i meant, go back to the class
water mixes with water
and the game barely works and has battle passes and microtransations
loot boxes! gacha mechanics! everything we could ever want
still a pretty low tier joke ngl
are you a preschooler, stupid, or criminaly annoying?
90 pulls for a 50/50 chance to get the rare slightly revealing jimbow skin
is there an "all of the above" option?
for you clearly
Why are we still in this oxpoop
cant wait for those summer skins
cause i still have stuff to answer to
those chances are too high for a summer skin
noticed how i havent said stuff unprovoked?
i too can spam links
And you still owe me and math apologies
- it wasnt unprovoked
- it wasnt a part of this convo
@gilded tulip I think we need to bring an end to this
this is actually sorta interesting if you can make it meta and not miserable
