#💻・modding-dev
1 messages · Page 185 of 1
you can just check whether a card has an edition already, right?
how would I make a sticker take away money like the rental sticker
tried to rip self-destruction code off Gros michel/Cavendish, either crashes or does nothing
how do you write that? context.other_card:is_foil ?
someday i'll get it 🤞
You can look at how chameleon works in ortalab, that does something similar
a friend of mine wanted to try my mod
the adachi true invasion
he plays his theme everytime he scores
not sure, i can check, but i'm quite sure that logic should already be there in wheel of fortune
@wintry solar for this joker here, is there a way to check for retriggers instead of regular scoring?
oop i forgot to paste
Just do not context.other_card.edition
key = "aroace",
config = { extra = { repetitions = 0 } },
unlocked = true,
discovered = true,
blueprint_compat = true,
eternal_compat = true,
perishable_compat = true,
rarity = 2,
atlas = "NeatoJokers",
pos = { x = 5, y = 0 },
cost = 6,
calculate = function(self, card, context)
if context.cardarea == G.play and context.repetition and not context.repetition_only then
if context.other_card:get_id() == 14 and context.other_card ~= context.scoring_hand[table.getn(context.scoring_hand)] then
card.ability.extra.repetitions = card.ability.extra.repetitions + 1
end
if context.other_card == context.scoring_hand[table.getn(context.scoring_hand)] then
rep = card.ability.extra.repetitions
card.ability.extra.repetitions = 0
return {
repetitions = rep,
card=self,
}
end
end
end
}```
Can you screenshot for mobile pls
okk
oh wait i just realized its probbaly the Not repetition thats stopping the retriggers from counting
what about enhancements?
not context.other_card.enhancement?
context.other_card.ability.set ~= “Enhanced”
thanks!
What’s it trying to do?
Well the joker itself is trying to retrigger the rightmost scored everytime a played ace is triggered
but it seems to ignore retriggers and only cares about the quantity of scored aces
Don’t check for repetition on the first block, check for individual
like this?
And the value check too
oh thank you very much!!
and back to our regular rubric "Sophie asking the most obvious questions"
how do i make a joker self-destruct 😭
what do i call
joker:start_dissolve()
im not sure what you exactly mean...
The repetition context is called once per card to check for how many further triggers to do, individual is called every time the card triggers, so to count triggers you want to increment your counter within the individual context
You still need the check for an ace that you already had though
is there a prefix for adding a custom sticker center to the infoqueue, like how enhancements take m_ or tarots/planets take c_?
i am bumping this again even tho i said i wouldnt because i just can't figure it out and it's literally the last piece im missing for completing the most complex joker i've ever made
so for the first block of ifs, i would need to change it to this?
if context.cardarea == G.play and context.individual then
nono it's just perishable
set should be other
I'm not sure I follow
info_queue[#info_queue+1] = {set = "Other", key = "perishable", specific_vars = {}}
should work
and so I just replace "perishable" with whatever the name of my custom sticker is?
I will ask again, what is the key word for change the atlas for tarots, planets and spectral cards
did you put your custom sticker's description in a localization file? if so then yes
wdym
the key word for the joker atlas is "Joker"
but what is the one for the consumable atlas
I created an SMODS.Sticker{} for it with a loc_txt field so I think so
i was thinking its "Tarot" but that dont work
how would i force a consumeable to be unusable
like judgement without any joker space
you have to add a
return true
end,```
to the card's data
except with a condition on how to use it and when to return true or false
this worked, thanks!
just had to make it key = "prefix_stickerName"
what if i was trying to make a sticker block a consumables use
does the consumable have the sticker on it, or does the target card have the sticker?
consumable
I don't think I'm qualified to answer this one, I'm not sure how stickers are stored yet. This is my first time trying to implement something sticker-related
can I change a joker's rarity dynamically? What I want to do is make my fusions have the default fusion rarity unless the player has DeFused installed, at which point they would have my pre-defined rarities for them
@wintry solar ive been trying many permutations of adding context.individual into the first if block and it doesnt seem to work at all, it completely obstructs the joker's functionality and it ends up doing nothing
Is there a way to dynamically and selectively apply lovely patches? Would I literally just need to move the patches I don't want to be applied outside of the lovely folder and reload the mod?
nevermind, got it
How did you do it, Rot8er?
Trying to add a self-destruct message to sisyphus :,>
one must imagine
the developer happy
once again, the responsible code
also it plays the sound multiple times fsr (i'm guessing 13, once for every card turned gold, EVEN THOUGH IT SHOULDNT(?))
I think it's executing for every card in hand
...in deck
Your play_sound isnt in a context check
...wait
yea
Try adding not context.repetition into your context check
on this
Does the loc_vars function require a different kind of return than for other objects? Because I don't think this should be giving nil
key = "ephemeral",
atlas = "New_Sticker",
pos = {x = 4, y = 2},
loc_txt = {
name = "Ephemeral",
text = {
"Debuffed after",
"{C:attention}#1#{} rounds",
"Has no sell value",
"{C:inactive}({C:attention}#2#{C:inactive} remaining)"
}
},
default_compat = true,
sets = {
Joker = true
},
config = {
extra = {
total_turns = 3,
current_turns = 3
}
},
rate = 0,
loc_vars = function(self, info_queue, center)
return {vars = {center.ability.extra.total_turns, center.ability.extra.current_turns}}
end,
}```
related question, are the values inside config mutable?
config.extra is mutable
awesome
and it's also a separate instance for every object it applies to?
perfect, thanks
after 3 days i finally got this effect to work properly
am happy
https://awoo.download/SvcrRGUh-.mp4
holy shit this is so cool
Ooh that's a sick visual
oooh that's cool as shit
Yooo thats awesome
oo... econ jokers if they were cool(er)
amazing
MROE GAMBLING?!?!>@<
i give my soul to whoever can fix this
NO WAIT
I FIXED IT MYSELF LMAO IM AN IDIOT
Can you show the code as you have it now?
that was a joke lads, nothing was fixed, i bamboozled myself
You need to hijack the function where loc vars are calculated
ye wait imma show you the full code
thank you 😭
the machine spirit is unknowable in its ways (i have no idea how and why it worked but it did)
info_queue[#info_queue+1] = G.P_CENTERS[G.GAME.last_tarot_planet]
oh damn, that looks rad! very smooth
them DOUBLE TAGS, good lord
this version works just the same as the old one which isnt what im looking for
(line 39 is just the return function for the hermit tarot)
hermit code even if it doesn't matter since this happens with all tarots
I added this within my mod's code. FusionJokers already does something similar to make a new rarity, so I just highjack it to go "does fusion exist? use its new rarity"
oh you'll need to pull the bottom part out of that check
so like, stupid question; how can i set up two if context.s, one for "after playing a hand" and one for "at the end of a boss blind"? my attempts managed to result in "after playing the last hand of a blind" and "Nothing™️", and the former is somehow proccing with our attempt at the latter somehow. (please pardon the excessive pseudocode for what we're planning to do later, first we just want to make sure the contexts Work And Are Good gsdjkhl)
the bottom part?
all tarots with variables*
yeah where you return the reps
judgement works fine
yeah why can't you just replace the line that's trying to add the specific vars with the one I posted?
i did, the crash happens when i use the center
what's the crash?
otherwise it just doesn't display the variables
hmmm
you could try patching in the info_Queues instead of taking ownership perhaps?
yall, how do i make custom variables?
i know it's not really good practice, but i need a boolean variable that flips on once the decay animation/its sfx is played to make sure it's not repeated
and it just crashes when i try to make one up
local var = true
thank you!!!
honestly yeah probs what i'm gonna do for the fool card
took ownership of all other tarots but fool doesn't cooperate
how do i log tables
Is there anything wrong with this patch file? The logs aren't turning up anything helpful...
The file is lovely.toml, and is placed in my mod's base directory, as per the instructions
[manifest]
version = "1.0.0"
dump_lua = true
priority = -9
[[patches]]
[patches.pattern]
target = "localization/en_us.lua"
pattern = '''name = "Chicot"'''
position = "at"
payload = '''name = "Lorem Ipsum"'''
match_indent = true
you can't patch loc files
Understood
I was having trouble with patching the misc_functions.lua file too, lemme grab the patch
version = "1.0.0"
dump_lua = true
priority = -9
[[patches]]
[patches.pattern]
target = "functions/main_functions.lua"
pattern = '''elseif not _c and char ~= '#' and not _s_gather then str_parts[str_it] = (str_parts[str_it] or '')..(control['X'] and char:gsub("%s+", "") or char)'''
position = "before"
payload = '''--'''
match_indent = true```
you typed main instead of misc
that's how i tried to do it
anywhere i put this, it crashes
Thanks, maybe modding at 4am wasn't a smart decision...
ok nvm sorry, doesn't crash outside of the joker
this isn't working, any clue why?
common_events.lua is under the functions directory
so you should target functions/common_events.lua
yes it does?
What's on unleashed_tarots.lua at line 39
it's the return for hermit
.
it also happens with other tarots which return variables
the crash only happens when The Fool calls them as info_queues, not on the tarots themselves
I assume if I want any sort of behavior for my custom stickers I'm going to need to use Lovely injections?
fuck it imma dump the ownership and rewrite everything as patches
okayyy, all the visual/audio fluff is finally done
imma call it a day for today, thank yall who helped me🥹
I believe in card.lua
on a related note, how do I force my custom sticker to be added to a Joker I've forced to be created?
I already have the joker creation done
question: how would someone create a new seal or edition?
ok new question does anyone know how to not allow a sticker to apply to a card with another sticker
if you used SMODS.add_card or create_card
you can add a stickers field that is a list of stickers by their keys
stickers = { 'eternal', 'rental' } for example
(sticker keys are <mod prefix>_<sticker key> btw)
this is what hate feels like
i am challenging the gods by running into concrete walls
hope you understood : i mean a custom seal or edition
no i wanted to clarify before
ah alr
I don't see it in the function declaration, but I guess it reads it anyways?
function create_card(_type, area, legendary, _rarity, skip_materialize, soulable, forced_key, key_append)
any other shop functionality requests before I finish off this update?
that's vanilla create_card
ah I guess I should be looking in the Lovely dump then?
SMODS.create_card and SMODS.add_card are wrappers around that function that take a single table as argument
for those you can just look at the docs
you know what i cant read the docs for i think
how to make stickers incompatable with eachother
bump
that's because the current system for that basically doesn't exist and it really needs to be reworked
that would explain it yes
add this as a sticker
you can set a should_apply function on both, but that doesn't get you the exact incompatibility that eternal and perishable share
idk where but add it
sure
how does should apply work tho ive been trying to figure out how to do that
like what next
I don't remember there being a base implementation on that
lemme check
no there totally is
just like how do i check whether or not it rolled succesfully to be added
you can call the base with SMODS.Sticker.should_apply(self, card, center, area, bypass_roll)
oh i can just put that in there?
this the function in question?
if not t.area and t.key and G.P_CENTERS[t.key] then
t.area = G.P_CENTERS[t.key].consumeable and G.consumeables or G.P_CENTERS[t.key].set == 'Joker' and G.jokers
end
if not t.area and not t.key and t.set and SMODS.ConsumableTypes[t.set] then
t.area = G.consumeables
end
SMODS.bypass_create_card_edition = t.no_edition
local _card = create_card(t.set, t.area, t.legendary, t.rarity, t.skip_materialize, t.soulable, t.key, t.key_append)
SMODS.bypass_create_card_edition = nil
-- Should this be restricted to only cards able to handle these
-- or should that be left to the person calling SMODS.create_card to use it correctly?
if t.edition then _card:set_edition(t.edition) end
if t.enhancement then _card:set_ability(G.P_CENTERS[t.enhancement]) end
if t.seal then _card:set_seal(t.seal) end
if t.stickers then
for i, v in ipairs(t.stickers) do
local s = SMODS.Stickers[v]
if not s or type(s.should_apply) ~= 'function' or s:should_apply(_card, t.area, true) then
SMODS.Stickers[v]:apply(_card, true)
end
end
end
return _card
end```
I think I can piece back together how to format it from here
like this correct?
although if I've already used the default card creation I could just copy the part that adds the sticker from this function and call it a day
I've been looking around the code but I haven't found an approach that I love. What'd be the best way to go about creating consumables that when used do something based on your next hand? My current approach would be to have them spawn tags, but I'm sure that there's a leaner approach
next hand?
local, not var. but yes
alr cool
how the heck do i even explain this joker better...
https://awoo.download/45IO1337L.png
why didnt it work :(
Thinking about it, maybe tags isn't such a bad idea, because that means they'd stay visible too
symbols?
dont you mean ranks?
psst, sorry to nag but still looking for help with this. while we are fairly confident in our ability to cobble things together (and troubleshoot if/when it turns out it doesn't work), that means nothing if we can't get the conditions working. ;P
the 3 on the card itself, watch the reply video for context
yeah but those "symbols" are called ranks
it can be a suit, # or 🧑🦱 too
oh hm
i guess symbol works well then?
its a complex joker it makes sense that explaining it is hard
yeah fair
Ok so this creates the card exactly as I want, except without the sticker
local new_card = SMODS.create_card({area = G.jokers, set = "Joker", stickers = {'reverse_ephemeral'}, edition = 'e_negative'})
like I said there's barely a system
stickers seem pretty jank still tbh
you'd need the should_apply of all involved stickers involved to make them incompatible. With only your sticker having the changed should_apply, eternal and perishable can still happen if they do so after your sticker
that's because they are
they've been on my to-do for a bit, I should work on them soon(-ish)
I'd recommend not to bother with the current system until there's something better I think
would hypothetically just adding card.ability.perishable and card.ability.eternal to the card work
that will make them perishable and eternal
dammit
still need help here
basically what I'm saying is this
your apply check does nothing after your sticker is applied
so if the card first gets your sticker, it can still become eternal
yea i understand that im just trying to make eternal and perishable not apply aswell
would ownership or hooking be the next best thing then?
yeah but iirc they're in a bit of a weird spot with being hardcoded to be incompatible from being on the same chance roll
.
I will work on making a better API for this either way, it's easiest to just wait for that
So I want the joker to give a card a random edition if your first hand of round is a single enhanced card. Is everything correct? Game doesnt crash but the joker doesnt work
can anyone tell me why this patch isn't applying?
yea i will update it when that gets added but for now i really wanna make this lol
thanks for all your hard work john smods
you'll save yourself some work by not doing it just yet, once it's implemented properly it will be very easy
i literally have nothing better to do
is this correct?
context.other_card.ability.set ~= "Enhanced"
omg john smods can you save me some time and help me understand this crash
it is correct for checking if a card physically doesn't have an enhancement
it does not account for there being any quantum enhancements of base cards though
wait it does the opposite?
I thought it checks for enhancement
not the lack of it
~=
ahhh
you put ~=, which reads not equals
ic ic
should be == if you are looking for equals
context: trying to take ownership of fool, crash only happens when a different tarot (which has a variable return)'s description is called as info_queue
what exactly are quantum enhancements? is it just functionality for jokers that would say 'all 7s count as Steel cards'?
didnt notice tilda
yes
nevermind i have plenty better to do
to account for quantum enhancements, use next(SMODS.get_enhancements(card)) or its inverse
just gonna quickly note this down for if I end up implementing a joker like that, haha. Better to refactor the code now than when it's a huge mess
can I see the full crash please
ok ye give me a sec
ohhh count as mechanic is interesting
how do i disable a sticker if the stakes are black or higher
set a flag in G.GAME and check for it in should_apply or use a built-in enable flag that is on by default and set to false when black stake is applied
oh 1308a
oh I think this is before fake cards were added right?
you need to update smods
omfg thank you
i love you john smods
it works now
https://github.com/Steamodded/smods/pull/469 aure pls check this before I blindly merge
will test and review it tmr if that's okay
So I wanna add 3 tooltips (one for each edition) for my joker. Is this correct?
I fkd up something didnt i
what's in the dumps where the crash points to, I'm not sure how that relates
I didn't ask for the full crash
dumps?
I want to see what is around line 2827 in functions/common_events.lua in your lovely dumps
I already turned off my PC and I'm too lazy to get back on it
besides you're not on latest smods so the line numbers would be different either way
mkay
yeah no problem
new version already out?
sorry how often it's updated?
I trust you on that jonh SMODS
Also, again big thanks to all ya folks for helping me out. This is the progress so far
truth is I haven't been doing much dev work on smods recently as it's been exam season for me. But I'll get back to some stuff I've been wanting to get done soon
im finishing med uni in the next 4-5 months
I can relate
Just passed winter session
on the finish line rn
gl with that
ty
is this how i would hook end_round in state_events.lua
yeah looks good from what I can see
shit
you could throw that in a consumable calculate function too so it doesnt check every round regardless of if you have them or not
doesnt work
fuck I'm tired
debuffed consumables stickers dont get calculated
throw a local card = G.consumeables.cards[i] in there
oh that is a good point I didn't pick that up from your code 🤣
or replace the for loop line with for _, card in ipairs(G.consumeables.cards) do
hmm, all of a sudden doubt is back and I'm not sure whether tags are the most eloquent solution 🤔
works now tysm 🙏
whats the G.area for booster packs
like the cards that come from booster packs
G.pack_cards
If a tag has an Apply that does something in the right context, but doesn't return tag:yep, does it just not get rid of the tag?
How can I iterate though each joker checking to see if it has a specific variable (i know how to iterate though each joker in G.joker.cards, but i want to iterate though each joker in the collection before a run is started)
what variable are you looking for?
its a custom one, stored in each joker if added
how would one change what sprite is used for the card here specifically
I currently have something similar, and when loading in my jokers, check for that variable and put it into an array
I have a similiar system but i want to expand it to every joker instead of just mine
how would i change the back sprite of a custom joker when it flips over on amber acorn?
is it a variable that existing jokers in the game already can have?
ik Photograph does it i think
It doesn't exist naturally but can be added, this is the all the code I use for it currently. what I want is to do is this but for every joker in game instead of just the ones from my joker folder.
It wont be used on base jokers
Am I able to just change the global color table to add a color to it at any time, or do I have to do something specific? I remember having issues attempting to add a different global value to the game before and ended up having ot patch it into game.lua in the main_menu() function
I used item not G.your_collection[i], that was a test.
How could I use a deck to increase the rates of mod-specific jokers?
The docs for backs/decks includes in_pool(), but with exactly the same description that most of the other Centers have, which tends to specify how that card specifically (I.E. the deck as a card) could spawn
how do i get position in hand of current card being scored? (context.individual)
iterate over the hand and check if it matches card
many thanks
where should i look for sprite dumps from the vanilla game? is there a pinned post for it somewhere?
balatro.exe can be renamed to balatro.zip and you can extract the resources folder inside and then set it back to .exe
is this an admin permissions thing? because renaming the file doesn't change its internal properties
at least not on my end
afaik they're all on spriters resource
turn on file name extensions
thats more my speed
if you have 7-zip you can also just right click balatro.exe and 7-zip > open archive
im trying to make a joker so that if you skip blinds then itll send you to the shop, i have its functionality mostly working with the one issue of any of the packs, if one opens it wont send me to the shop
i tried utilizing g.game.pack_interrupt to make it wait, but that didnt seem tow ork
is there a way to check when any of those packs are currently being used?
scopacane is basically done, rejoice!
simply problem here, i have a joker that has rng and also needs to display that side enhancement preview thing (like stone joker does for stone cards), how can i get loc_vars to do both? I tried just tossing in extra code:
info_queue[#info_queue+1] = {set = 'Other', key = 'acrylic_info'},
return {vars = {(G.GAME.probabilities.normal or 1), card.ability.extra.odds}} --1 in 4 normally
end,```
but this just crashes (unexpected symbol near 'return')
remove the comma right after 'acrylic_info'}
yo maybe stupid question but are custom rarities excluded from the shop by default? If not what pool do i need to supply to remove it them from the shop.
https://github.com/Steamodded/smods/wiki/SMODS.Rarity any of the weight options
ty
missed the default_weight one,
another silly thing, is it possible to add consumables to buffoon packs?
ah cheers
most likely, look at how the base game adds spectral cards to arcanas with omen globe
(idk how it actually does it)
ok so my code accurately adds base game stickers to my created joker, it must be an issue with how I defined my custom one then
I don't think you need to define one
I don't know why your sticcker isn't applying
Would you be able to send your sticker definition
yeah
key = "ephemeral",
atlas = "New_Sticker",
pos = {x = 4, y = 2},
loc_txt = {
name = "Ephemeral",
text = {
"Debuffed after",
"{C:attention}#1#{} rounds",
"Has no sell value",
"{C:inactive}({C:attention}#2#{C:inactive} remaining)"
}
},
default_compat = true,
sets = {
Joker = true
},
config = {
extra = {
total_turns = 3,
turns_remaining = 3
}
},
rate = 0,
loc_vars = function(self, info_queue, center)
return {vars = {center.ability.extra.total_turns, center.ability.extra.turns_remaining}}
end,
calculate = function(self, card, context)
card.cost = 0
if self.ability.extra.turns_remaining > 0 and context.end_of_round then
self.ability.extra.turns_remaining = self.ability.extra.turns_remaining - 1
end
if self.ability.extra.turns_remaining <= 0 then
card.debuff = true
end
end
}```
I do, maybe I could try adding a print somewhere
try going ingame and spawning a joker with your sticker
and then do eval G.jokers.cards[1].ability and send a screenshot of what that shows
I may need help figuring out what the command to spawn the joker is
relatively new to modding in general
eval SMODS.add_card { set = 'Joker', stickers = { 'reverse_ephemeral' } } I think reverse was your mod prefix, but if it isn't change it
put that in the debugplus console while ingame
yeah that's the prefix
and oh it's basically just the line I would normally write in the lua file?
yeah with debug plus u can execute lua code like that
it's just to see what's going on with your joker when the sticker is applied
I got error : attempt to index local 'center' [a nil value]
with this?
INFO - [G] < Table:
loc_vars: function: 0x2a44be98
default_compat: true
_saved_d_u: true
original_key: ephemeral
sticker_sprite: Table:
click_offset: Table:
y: 0
x: 0
children: Table:
sprite_pos: Table:
y: 2
x: 4
T: Table:
x: 0
w: 2.0487804878049
y: 0
h: 2.7512195121951
+2 more values.
offset: Table:
y: 0
x: 0
role: Table:
xy_bond: Strong
offset: Table:
y: 0
+1 more value.
role_type: Major
draw_major: Table:
click_offset: table: 0x2a4a7818
+34 more values.
+3 more values.
last_aligned: -1
+28 more values.
loc_txt: Table:
name_parsed: Table:
1: Table:
1: table: 0x2a5ee1f0
text_parsed: Table:
1: Table:
1: table: 0x2a5ed668
2: Table:
1: table: 0x2a5ed868
+1 more value.
3: Table:
1: table: 0x2a5edc60
4: Table:
1: table: 0x2a5ede10
+2 more values.
name: Ephemeral
text: Table:
1: Debuffed after
2: {C:attention}#1#{} rounds
3: Has no sell value
4: {C:inactive}({C:attention}#2#{C:inactive} remaining)
registered: true
sets: Table:
Joker: true
order: 5
calculate: function: 0x2a44beb8
rate: 0
pos: Table:
y: 2
x: 4
mod: Table:
version: 1.0.0
id: reverse_tarot
main_file: reverse_tarot.lua
lovely: true
can_load: true
badge_colour: Table:
1: 0.058823529411765
2: 0.87843137254902
3: 0.83137254901961
4: 1
badge_text_colour: Table:
1: 0.87843137254902
2: 0.058823529411765
3: 0.4078431372549
4: 1
+12 more values.
atlas: reverse_New_Sticker
prefix_config: Table:
key: reverse_ephemeral
config: Table:
extra: Table:
turns_remaining: 3
total_turns: 3```
Oh
stickers don't apply their config to the cards they're in
at least not by default
so you should so self.config instead of center.ability
interesting, guess they're the exception to that then?
because I've been using center.ability for everything else
yeah, i mean, stickers aren't a center
That said
still didn't apply to the joker though
For that specific effect you probably want to attach information to the card itself
you should add this to your sticker
and do something like card.ability[self.key] = val and copy_table(self.config)
Thanks! I'll give it a shot
Then, within your sticker loc_vars and calculate
You should access those values by doing card.ability[self.key].extra.turns_remaining for example
in this instance, self.key would just be reverse_ephemeral, right?
Yeah
better to use self.key directly tho, if you ever decide to change the key later
good point
or your mod prefix for that matter
Hm
okay one last idea, do eval SMODS.Stickers.reverse_ephemeral:apply(G.jokers.cards[1], true)
that should apply it to your first joker
so make sure you have one
Hmmm, set is required for consumable.. but I don't want it to appear in Tarot, planet or spectral packs.
add label = "Something" to your loc_txt
you can make your own set https://github.com/Steamodded/smods/wiki/SMODS.ObjectType#api-documentation-smodsconsumabletype
I have no idea why add_card is not applying it
yeah that fixed it. Strange, that field wasn't on the documentation page for smods.stickers
worst case scenario you can do local joker = SMODS.add_card { set = 'Joker' } and then SMODS.Stickers.reverse_ephemeral:apply(joker, true)
honestly yeah I think that's the easiest solution
it is incredibly weird to me that it's not working when you add the stickers to add_card, considering smods literally calls apply on it
unless you have an old version of smods where it's broken?
yeah this literally worked
I don't think so, I did a pull last night
thank you for the help!
still have to test its functionality but I should hopefully be able to manage that
is there a way to trigger something on context.individual but only on the first trigger of a card?
do you happen to know what the prefix key is for the ConsumableType?
i don't need context.repetition, because i need my effect to trigger as the card is scored
for your loc file?
Yeah and to call it with create_card
well in create_card you just put set = key where key is whatever you put in your consumabletype key
it doesn't have your mod prefix added
personally i don't like that it's not added by default
Yeah thats weirdly inconsistent
if you're like me you can add prefix_config = { key = true }, to its definition
and then it'll be prefixed
as for the loc file stuff, it's a bit weird, but in misc.dictionary you can add k_key = "whatever" for the text on the badge and b_key_cards = "whatever" for the text in collection
if context.other_card == G.play.cards[1] or any other cardarea besides G.play
Oh nvm
I completely misunderstood
Sorry
Is there a full list of contexts somewhere? because it's not on the Calculate Functions page
what context are you looking for?
an end of round, but when I use context.end_of_round it triggers the code inside of the conditional more than once
Yeah that's because end_of_round is also called for each card held in hand with context.individual
you can add context.end_of_round and context.main_eval
I don't think that one is in the wiki, but i could be wrong
I believe you're right that it isn't there
it's mentioned at a note at the end of the page
maybe should have its own section considering how important it is
it does seem pretty important
Now I'm getting a strange interaction, the sticker is debuffing the Joker properly, but it gets un-debuffed when I enter the cash out screen, and re-debuffed after I perform another action like using a card, buying something from the shop, or exiting the shop
What does your code look like now
why does this happen
the visual bug with vampire is weird, but it looks even weirder when I have this custom joker that turns cards into stone cards??
vampire causes the ranks of stone cards to appear before the stone is removed, but then having the joker that turns them into stone cards makes the rank disappear again once the stone is removed... even though the joker ONLY triggers on context.after, and isn't in effect yet whatsoever
(here is the code that turns clubs cards into stone cards)
these are the functions
return {vars = {self.config.extra.total_turns, self.config.extra.turns_remaining}}
end,
apply = function(self, card, val)
card.ability[self.key] = val and copy_table(self.config)
card.base_cost = 0
return
end,
calculate = function(self, card, context)
if card.ability[self.key].extra.turns_remaining > 0 and context.end_of_round and context.main_eval then
print(card.base_cost)
print("end of round")
card.ability[self.key].extra.turns_remaining = card.ability[self.key].extra.turns_remaining - 1
print(card.ability[self.key].extra.turns_remaining)
end
if card.ability[self.key].extra.turns_remaining <= 0 then
card:set_debuff(true)
end
end```
although I'll also need to figure out how to make the display of the rounds remaining update based on the card data too, since it always says 3/3 despite it updating the card.ability correctly
update
that looks like Cryptid lol
my thought exactly lmao
ADACHIIIIIIIIIIIIIIIIIIIIII!!!!!!!!!
for the updating the text, use center.ability[self.key] in loc_vars too
probably use SMODS.debuff_card instead of set_debuff
but I'm not sure what the exact problem is
doing this gives me nil
return {vars = {center.ability[self.key].total_turns, center.ability[self.key].turns_remaining}}
end,```
you forgot to access extra
remember center.ability[self.key] is a copy of your config
cus that's how you have it in apply
@minor furnace
ah shoot you're right
sure enough that fixed it
and this fixed the debuff issue
SMODS.debuff_card(card, true, self)
end```
Does anyone have a tutorial they can point me to on how to get started w/ Lua? Wanna try my hand at making a mod. I have a rudimentary understanding of Java and that's about it
I cannot for the life of me find what field I need to set for the background color of my sticker name
i think that's just how the game normally renders it, cause I think i've seen that issue before and I don't think it has anything to do with your joker.
the ranks showing before the stone is removed is vampire, but the ranks being completely gone when the stone is removed only happens when my joker is affecting those cards alongside vampire
white on white is not a good look
i think that's just what happens when applying stone card sometimes, it'll lose its suit and number before rendering the stone part
badge_color i think
it looks completely normal used on it's own, again it only occurs when you have both vampire and this joker
is there a way to tell when an ante was just started? I'm working on a deck that gives a joker every three antes
I guess this also just means if you've left the boss shop
Check the blind number and divide by 3
you could have it be an internal counter in the card that counts down every time a new ante happens if you're worried about hieroglyph
and then if you want hieroglyph to lower the counter you can probably detect that with the proper context
idk how that would exactly work with decks but if it's possible for jokers it'll probably be simple enough for decks as well
the only reason I was worried about heiroglyph was if someone went ante 3 -> heiro -> ante 2 -> ante3 and got a joker an ante early
which would happen if I just checked for [ante] % 3 == 0
yeah then you wouldn't want to rely on the ante counter itself and just have your own counter going
is there somewhere that can show me an example of how a custom sticker can be implemented? Cause I tried looking at how Cryptid does their banana sticker but it seemed way too complicated for the use case I want (I want to make a sticker similar to Perishable, but it removes itself after 3 rounds instead of debuffing the Joker after 5 rounds)
I mean
the docs on SMODS.Sticker don't seem too bad
unless you already checked that
yeah im just unsure of how one would implement what im looking for because stickers themselves don't have variables
i mean i guess i could just inject code into Card.lua so that the card itself keeps track but idk
I didn't notice that, actually
interesting
Cause like normally with Jokers you would put custom vars into config.extra
but with Stickers it doesn't seem there is a field for config
Which I'm confused with because it has its own calculate function so like idk
your phone linging
Anyone know in what part of the code tags are rendered
how can i make it so that this line triggers everytime the round ends, instead of having to be inside a joker's calculation?
okay so apparently stickers are jank rn so im trying this using a seal, i hope i can apply it to a joker.
you can modify the apply function of your sticker
what I said here
oh lmao
i hook smods.calculate_context, idk if there's a nicer way
thanks :D
that worked pretty well! thanks for the help
was for this deck lol
What does your sticker look like
I fixed it but I made it so that instead of being a sprite it instead makes the joker monochrome with a shader
tho idk why it's just white
“it” being the text, idk why it is just white
originally i just had the key for the localization entry be the key but then i realized i did still need the prefix
blank
okay i got everything working with the ability itself, i just don't know why the shader doesn't work (i think it draws an enlargened version of the joker instead of the joker but monochrome)
the way to make text for a custom challenge rule is to just put it in descriptions.misc.v_text under ch_c_[challenge_name] right? for some reason it's not working properly for me
Whenever I try to split the description of my joker the thing just crashes, what am I doing wrong?
It's written like such
loc_txt ={ name = 'Family Man', text = { 'This joker gains {X:mult,C:white}+0.2X{} Mult' 'if played hand contains a Full House (Currently {X:mult,C:white} X#1#{} Mult)' } }
missing a comma
loc_txt ={
name = 'Family Man',
text = {
'This joker gains {X:mult,C:white}+0.2X{} Mult',
'if played hand contains a Full House (Currently {X:mult,C:white} X#1#{} Mult)' } }
you need a comma after every line
loc_txt = {
name = 'Family Man',
text = {
'This Joker gains {X:mult,C:white}0.2X{} Mult',
'if played hand contains a Full House',
'{C:inactive}(Currently {X:mult,C:white} X#1# {C:inactive} Mult)'
}
}
C:inactive
Thank you!
What am I missing here to make the sell value 0?
card.extra_value = 0
card.sell_cost = 0
card.base_cost = 0
card:set_cost()
I might just write a patch for the Card:sell_cost() function for my custom sticker
that should work, yeah
bumping this, i still haven't managed to figure this out despite trying a lot of different things
i've looked at other mods' code and am pretty sure i'm doing what they're doing?
misc.challenge_names.c_ModId_challengeKey
oh rules
yeah
yeah that's misc.v_text.ch_c_ModId_challengeKey
yeah i have that, it's not showing up
i have a custom rule named grg_so_grunglover, seems to work for G.GAME.modifiers but putting ch_c_grg_so_grunglover in localization/default.lua under descriptions/misc/v_text is breaking
we stay winning
[patches.pattern]
target = "card.lua"
pattern = '''if self.area and self.ability.couponed and (self.area == G.shop_jokers or self.area == G.shop_booster) then self.cost = 0 end'''
position = "after"
payload = '''
if self.ability['reverse_ephemeral'] then
self.sell_cost = 0
end
'''
match_indent = true
times = 1```
here's what default.lua looks like
return {
descriptions = {
misc = {
v_text = {
ch_c_grg_so_grunglover = {"All {C:attention}Tarot{} cards are {C:attention}The Grungler{}"}
}
}
}
}
it is
misc goes outside of descriptions
is it wise to use a card's unique_val to check if a card is a specific one?
mmm yes it seems to stay consistent after reloading
how would i play two sounds in quick succession here? (one for the chips, one for the mult)
?
return {
chips = card.ability.extra.chips,
sound = "hpfx_thumbsup",
extra = {
mult = card.ability.extra.mult,
sound = "hpfx_thumbsup"
},
card = card
}
any recommendantions for what image software to use? Have been using gimp, but the scaling feature makes the pixels blurry, so I'll have to make the art twice for 1x and 2x
Are you resizing with "nearest neighbour" in mind?
You want to disable interpolation if you're scaling up pixel art. But in answer to your question, Aseprite or the free fork LibreSprite are great for pixel art especially
oh sweet thanks
Aseprite has about 9 years of extra development on top of the point where LibreSprite forked it and is worth the money imo. There's also a free trial version which you can grab on Steam of all places
yeah I'll try it out at the very least
Huh, I'm having trouble with an includes file for some reason?
require "libs.serpent"
require "utils"
I'm trying to find this library, in the same folder as the file that's requiring it, but for some reason it says it can't be found?
Is this something specific with SMODS?
If you're just making a lovely mod and don't want to require Steamodded, you can get Lovely to load modules like so in lovely.toml:
[manifest]
version = '1.0.0'
dump_lua = true
priority = 1
[[patches]]
[patches.module]
source = 'libs/serpent.lua'
before = 'main.lua'
name = 'libs.serpent'
With SMODS, you can instead just do
SMODS.load_file('libs/serpent.lua')() and skip the require entirely
SMODS is required so I'll do the latter
Let's see if this works....
Ugh, still struggling for whatever reason
Note Balatro runs on Lua 5.1
So if those libraries are for a different version then they might not work
Seem to have got it past
Anyone know of any Lovely mods that have implemented their own language/localization system outside of SMODS? I'd like to give it a try but want to know if there are any neat ways of doing it
you just patch the localization files directly at that point i reckon
Import them all as modules then write a wrapper to check the relevant one as needed?
Okay I think it finally worked???
so it didnt end up playing any sounds, anyone know if these are set up wrong?
Less of a "how to do" question and more of a "which way" question, but opinions on how to implement a card being able to count as two suits at once? Debating making it an enhancement or a seal, and not sure which to go with
I implemented a card that acts as basically a rotating version of smeared if that's what you wat
in which case I wrote a lovely patch for the is_suit() function
realizing i should also probably show how it's implemented because maybe i just messed up
and I think I was going to have to do this regardless of which way I did it
should be as simple as slapping a conditional onto it
I think my real question is, do I think it's too unbalanced to make it compatible with other enhancements or not
you just patch the localization files directly at that point i reckon
I should probably check to see how Seeing Double and Flower Pot work with this...
And Blackboard for that matter
you can't patch localization files
ETA: it most definitely will require me to patch Seeing Double and Flower Pot, Blackboard I suppose is up to my discretion whether I want it to count or not
but if wild cards don't break Blackboard then I'm fine if this doesn't either
That's a pity, do you know why?
source?
theyre just lua files that return a massive table
Someone attempted it right above this too
And no, I don't know why
It seems odd to me too
so the alternate answer is to stop pretending anyone cares if your mod is lovely only or requires smods
and thus not reinvent the wheel. for the fifth time.
Actually now that I look at it, it seems that person typed _ instead of -
so maybe it's possible to patch loc files
Lesson learned to not blindly trust what eremel says lol
Hmm.... I'm attempting to draw a canvas but it's not working as intended
I will admit, graphics programming goes over my head most of the time
That's very wise. Alternatively, i can reduce my dependencies and learn more along the way.
This is a relatively straightforward way to build a simple but functional localization table. No safety checks yet
local locale = {}
if not SMODS then
locale = {
['de'] = require('systemclock.locale.de').misc.dictionary,
['en-us'] = require('systemclock.locale.en-us').misc.dictionary,
['es_419'] = require('systemclock.locale.es_419').misc.dictionary,
['es_ES'] = require('systemclock.locale.es_ES').misc.dictionary,
['fr'] = require('systemclock.locale.fr').misc.dictionary,
...
}
end
function locale.translate(key)
if SMODS then return localize(key) end
return locale[G.SETTINGS.language][key ] or locale['en-us'][key] or nil
end
return locale
it makes sense, it seems lovely just straight up doesn't dump the localization files at all, which I imagine means it doesn't touch them at all
not sure why though
I wonder what logic it uses to decide those files to be excluded
i wonder who will ping dave lovely first
Maybe it's loadstring vs. load/require diff?
Someone tell me if i'm insane for doing things this way
alright I realised I probably put this in the wrong channel so:
ive been messing around with balatro and kinda making a mod, but it's not something I could easily send to someone else, as it's a modification to the base game files.
I saw the github for steammodded, and i've poked around in the guides, it looks like thats more useful for adding new cards, but what im doing moreso alters existing cards and some of the game files unrelated to the individual cards themselves
I don't know if there is a way to transfer that into a mod easily, and I dont know what to do at this point xd
I can easily keep poking around in the files and changing stuff but I would like to be able to send it to other people
I don't really understand why you'd need to do that
What's the better way?
also this seems probable
Okay yeah, can anyone help with basically just drawing something to the screen using base Love2D functions?
I want to use a canvas to just draw something a box in the center of the screen, but I can't seem to figure out exactly how to do that
I thought it was just create canvas -> renderTo() function containing a draw call with the image to render on the canvas
oh I don't know
TOO LATE
and localize is a balatro function so why would it depend on SMODS being loaded
simple: the game loads localization files in a really weird way
a way that doesn't end up touching the function(s) that lovely hooks to do patching
Localize doesn't, but without SMODS auto-loading the localization files into the tables, it returns nothing
iirc yeah it was something like this
members of the load* family of functions that don't end up calling lual_loadbuffer can't be patched in current lovely
in that case wouldn't you want to load the files into G.localization when SMODS isn't present
sorry if I'm misunderstanding the problem
I haven't found any way to read the localization files that wouldn't have to rely on nativefs or SMODS - and if i'm importing them as lovely modules, I might as well just access them directly instead of recursively inserting entries one-at-a-time into G.localization, only to have to do multiple dictionary lookups to get them back out again
I'm not stubborn about this approach, if anyone can think of a better way that doesn't require nativefs i'm keen to hear it. I don't like that importing each locale file through lovely means that the game won't launch if a localization file isn't found, so i'm not totally smitten by it
what about loading your localization file as a lovely module and then injecting it into the global table via patching the localization load function doodad thingie
I will clarify that I have only read up a little bit so I'm probably missing context
ah but no lovely
That would make the lua code a little cleaner, but might be more brittle if there are changes to the localization code later on
depends on how you implement it
but it shouldn't be that brittle, especially compared to your other options
loading this says theres invalid metadata in this file
obv not just this but this is the json for the mod
you need an id
ic
leaked new balatro joker
what if it added a number of chips equal to the frame that its currently on
how on earth do you animate a Joker like that
bad apple speedrun 💀
and more imporantly, can you make a Joker run Doom
(seriously though the Bad Apple is awesome)
Plss don't say you used a bazillion sprites for that /j
i made a program in rust that decreases the framerate of a chosen video and puts all of its frames on a spritesheet, and then i just copied the jimball code and changed it up a little
so i could just reuse the code and make roffles latest stream (or something, idk that was the first that came to mind) as a joker
are you going to make it play the song when you hover over it too?
I think it's still cool tho lmao
starting on my first modded joker, it's a really basic one that's supposed to double the amount of cards you can apply Lucky to when using magician (from 2 to 4)
the way I'm thinking about it, it should be as easy as simply changing the max_highlighted from a 2 to a 4, but like...
i dont know how to do that as a joker effect
and this is the first lua project ive ever made (much less programming thing ive done in years)
Is there a way to manually suspend the ability to interact with things like how you can't do most actions when there are events still happening?
when in doubt, patch it out
you mean like
What are your thoughts on the ability? I feel like swapping jokers between regular and negative would be fitting
directly modifying the game's lua file????
my naive approach would be to write a lovely patch for the code for using The Magician to check to see if you have that Joker
So yeah basically modifying the game's lua file, but writing a script to do it instead of editing the file directly
however, there may be a better way to do this interaction that I'm unaware of
hmm
I finally broke down my single lovely file into multiple 
good god
same, but currently I only have two jokers that really need lovely files
that's a lot of lovely patches
jesus tapdancing christ
that was all one file before?????
I only have two Reverse Tarots that require tomls, and it's only one replacement each
Up To Eleven - Aces and 10s count as face cards (so I had to add that to the "is_face" function)
Weighted Dice - All probabilities are guaranteed when this card is sold (so I added a new "base_normal" variable that the probabilities can reset to after the round ends)
patching that much would make anyone go crazy
although, the remaining 5 card will require quite a few because I'm doing wonky things with ranks and suits
There are admittedly a few things I could deprecate but most of it is very necessary lmao
deprecate the whole mod
start over
deprecate lovely 
deprecate steamodded
thoughts on the development experience?
I'm doing something very silly
Thank you for making something that helped me stay motivated to working on a personal project for once lmao
Now I should probs do the same thing with my main.lua
deprecate lua
how do you people survive with putting everything in main.lua
well that's about 4 times longer than mine currently is...
adhd probably
i have ADHD as well
those shouldn't be global variables!!
for context lovely is only about ~3k LOC
I section it off with big comment blocks
LMAO
I should probably separate out my main into files by SMOD type
and always collapse the code I'm not using so the file is super short until I need to actually modify something there
-# i have no clue how to link multiple files
i'm making everything a global variable, fuck u
LOC doesn't matter, it's all about how you use it
amen
just overwrite smods' metatable with your vars
I assume if I want to separate it out into files I just add whatever lua's version of an import statement is to my main?
SMODS.load_file is your friend
@normal crest is this better (right is in the only file that actually uses it)
This is very very true
srock when I release mistigris and there are a billion different global variables that could be made local
if you only use it in one place then yeah, local
namespace globals pls
otherwise i'd stick into a global object that has your mod id or prefix in it
Is there a way to conditionally apply a different sprite for a single enhancement? Without having to define more than one enhancement
hey just trying to give good advice
honestly using locals is an antipattern
unironically i do appreciate it, i just like to be silly
reminder that i will be pull requesting a bug to your util functions
Bleh it's too late at night for me to do this rn. I don't even know where to begin cuz this file is such a mess lmao
Like it's organized kinda but it's a LOTTTT
maximus refers to Astra maximizing his line count
what 76 jokers and a whole shit ton of other features does to a main.lua 
yeah that'd do it
All one file 
I mean this alone is probably > 4k loc
if my current 17 tarots is only 1600 lines, their corresponding jokers are going to add a decent bit as well
remember kids, start organizing early so you don't have to refactor later on
the way it was meant to be 🙏
(18 Jokers, 1 Blind, 2 Decks that are both temporary)
let's be real though, how many lines in the code are literally a single curly brace
About 1k off according to github
indeed
40 lines per kb, 104 kb in total
Tired Programmer (Legendary)
Gains X0.1 Mult for every line of code that's in this mod's main.lua file
more accurately in lua how many of them are just end
not as good of a guess
gains an additional X0.1 Mult for each time you boot the game up with debugplus installed and keep the game open for less than three minutes
I mean, that guess was only off by about 12%, the first one was off by about 25%
how many files are in your lovely/log
it's all about the vibes
i just deleted it all like yesterday but currently right now 17 files
Absolutely agree with this
my lovely file is currently at 34 lines, but that's going to go up exponentially soon
place your bets: will I be able to keep my mod files organized the more I add to mistigris?!
your patch file is a snack
it needs to be a meal
we're getting there
once I introduce my abomination that is 'The Lovers?' I'm going to have to do a lot
you terrify me
Is it worse that only recently it's starting to become unbearable for me?
what is the lovers? going to do?
so you know how the normal one turns it into a wild card that can count as any suit
this is going to let it count as any rank
only counts if you need to ctrl+f every 30 seconds
Oh trust me I do
Astra just has a really small font size
my left eye has a -5.00 perscription 
astigmatic af hell yeah brother
Astigmatism from the hit Balatro mod Maximus???? 
astigmaximus
let me just G my way to the end of the file real quick
glad I'm not the only one who has one good eye and one massively fucked up eye
I'm like +0.5 -4.5
autism from the hit balatro mod maximus?!
Oh no both of my eyes are fucked, my right eye is -4.75 
I'm blind as hell without my contact lenses
for legal reasons, I do not actually edit my files in vim
^2 mult if you have astigmatism
ctrl f > opening up structure and clicking
Luckily I'm not THAT cursed
not that that works in lua in IDEA 😭
holy shit!!!
y'all aren't using vscode?
erhm why use IDEA when you can use kakoune 
two vey different responses lmao
french spotted, opinion invalid
idea supremacy
you better watch it
intelliJ supremacy
I'll use intelliJ for Java, sure
I use Jetbrains Rider which isn't exactly the same thing as Idea but it's close enough
vscode is doodoo compared to IntelliJ 💀
can't even do git correctly without breaking in a 1 in 4 chance with 3 oops all 6's

why use intelliJ when you can use helix 
the tism!
localthunk new joker leak
i get it from work anyways so 
I unironically do all of my git stuff from the command line
that's fair!
nuh uh
I use cli git unless I'm doing big rebases or merge conflicts
the soyker
what mod is this from lmfao
speaking of git I should probably make a repo for my mod at some point
what sorta twisted mind comes up with a joker like that
Maximus (mine)
@deft bane
I have not been controlling my versions on this project

i decided to version my control because i was getting far enough along that if i lost anything i would want to commit Joker ( 2019)
ehrm why use github desktop when you can use github mobile 
oh god
dont use github mobile, i use github ps5
GitHub for Apple TV
github for my smart fridge
I should probably use git cli more, I've basically only used it so far via desktop for repo and command line for installations.
github gameboy
idk whenever i try to git add skill it says not found??
common mistake, you're supposed to clone it
Guys I'm a github Nook user, how long does it usually take to push again?
you have to manually push it like a car in neutral
I had to do that once. Was not fun
Alternator was broken
So I've noticed that after using the Cartomancer mod, even when the mod is deleted and the config is removed, it still creates a cartomancer.jkr config file every launch. What's responsible for this happening and how can I avoid it from happening in my mod?
iirc turn off cloud saves for Balatro through steam.
that's steam cloud doing steam cloud things
you can delete it while the game is running iirc
Ah, that's no problem then. I was concerned that functions were being serialized in the profile or something
They can't.
hey so just to make sure I have my understanding of lovely patches down right:
what they basically do is refer to a line of code within a specified lua file, and "overwrite" the content of that line with whatever is in the patch?
that's one use of them
they can also insert code before or after a pattern
and then there's regex patches, which are a lot more powerful
how so
they can let you select large amounts of text with a minimal amount of syntax, weave code into other code (like you wanted to replace an if statement's expression), etc. etc.
it's the pattern patch but on mondo steroids.
oh god i need to learn how to do that

the one if statement in Card:draw that is my mortal nemesis.....
i only ask bc I have literally zero clue where to actually start on this
do I make just a lua? do I need to make a patch?
this is all flying over my head and giving me a headache (although prob doesnt help that its past midnight)
A Rust regular expression editor & tester.
i feel so out of my depth
that's ok! It's a lot to take in
if you just want to make a mod then you probably don't need to mess around with lovely
if you do want to mess around with lovely then the best way is to learn by copying what other people have done
the lovely readme is a good place to start: https://github.com/ethangreen-dev/lovely-injector/. you can also dig around the smods repo and see how they do their patches
A runtime lua injector for games built with LÖVE. Contribute to ethangreen-dev/lovely-injector development by creating an account on GitHub.
ngl you do not need a lovely patch to do the effect you mentioned
unless you want to conditionally increase the max_highlighted amount
that's what I thought initially, but I think I just need to be able to read lua better so I can see how other people do it within their mods
I wonder what the utility of having a consumable that lets you scry the top few cards of the deck would be 🤔
like how misprint used to do (idk if it still does)?
I actually wanted to turn that into its own joker too lol
Yeah misprint still tells you the top card
Scrying would let you rearrange them though, or push them to the bottom of the deck
ah
i guess itd be really good for deck fixing that requires you to not remove certain cards from your deck
like say you have Ancient Joker right
you scry the top few (let's say 3 cards) and none of them are the suit being called for by ancient
how do you get the screen coordinates of a joker's sprite?
send em to the end of the deck in hopes of getting the cards that ARE called for below them
wdym by screen coordinates?
do you mean the position used for their sprite?
when getting the transform coordinates of say a card's front, I believe it's relative to the parent node/movable/whatever
I think scry could be a fun thing, but I’d hate to have to make an interface for it 💀
you wouldn't have to, I think
I’d need a place to hold the cards, and a way for the player to choose where on the deck it goes
oh you want to MANUALLY place cards within the deck
Well not within the deck. But on a per card basis you can choose to either put it on the bottom, or what order to put it back on top with the others
ohhhhhhhhhh
Like how it works in MTG
i can definitely tell you manipulating deck order is possible but yeah UI code is beans
yeah that might require its own interface which would suck
That’s about what I figured
but of course not impossible im just no ui wizard
This is future me’s problem after I finish my current ideas
and most people arent
And I need sleep because it is 2:30 in the am
card.T might be enough to get you started. Has T = {x, y, w, h, r}
Average coder sleep schedule
does anyone know if theres a mod somewhere that changes the effects of existing arcana cards?
if I have that I might be able to reverse engineer what I need for this joker
wait
i think I mightve found it?
yeah that's what you use for that
cryptid fandom in shambles rn
not so jolly now wendigos
relax, liberals, it's called dark humour
if cryptid installed then remove jolly joker
This is how cryptocurrency was born
man im so mad i didn't find this earlier
ill have to look over it in full later tho, i have class in the morning 😭
Is this linked anywhere?
it's been posted in here a few times but here's the link
https://github.com/Steamodded/smods/wiki/Your-First-Mod
Unfortunately, yeah, these coordinates aren't screen coordinates
Can someone pin this for easier access itf
What do you mean they're not 🤔
The screen cordinates of a card's center are somewhere in the 10-15 range it looks like. They're relative either to the parent node, or to the area they're in, or w/e
I’m pretty sure they’re just screen coordinates it’s just the unit is some weird jank

