#💻・modding-dev
1 messages · Page 611 of 1
is there like, an alternative to context.before or something else i can do to make it consider retriggers? i have a seal that gives other played cards +10 chips and the effect feels like retriggers should affect it, but because its done in context.before so that the cards scored before it still get the boost in time, it only ever triggers once
you'd have to rewrite how calculation is handled in that stage
is there a way to differentiate between normal and mega packs?
not really
i guess you could check if string.find(self.config.center.key:lower(), "mega") since usually people put mega in the keys of mega packs
which should work most of the time
nah its not a huge deal
i was thinking maybe mega's get reduced by 2
but 1 is already pretty powerful in itself
completely different question how do you generate a random tag?
ive been looking at things like diet cola but they use
add_tag(Tag('tag_key'))
so i have the code for the plant, but how would i make it disable 2s, 3s, 4s and 5s instead of face cards?
idk exactly what the plant does but dont you need to change the ranks?
SMODS.Blind {
key = "plant",
dollars = 5,
mult = 2,
debuff = { is_face = true },
pos = { x = 0, y = 19 },
boss = { min = 4 },
boss_colour = HEX("709284")
}
well this is the plant's code in vremade
to debuff multiple ranks you need to use a calculate, check verdant leaf for debuffing cards with calculate
wouldnt this work?
SMODS.Blind {
key = "birch",
dollars = 5,
mult = 2,
debuff = { value = '2', value = '3', value = '4', value = '5' },
pos = { x = 0, y = 30 },
boss = { min = 1 },
boss_colour = HEX("a84024")
}
ah i see
the next one just overrides the previous each time
also holy shit the plant if it was evil
.
just copy hack for the rank check
oh lol
also whats the vscode lua extension called again
is it just the first one when you search up lua?
would this work?
key = "birch",
atlas = 'blind_chips',
pos = { x = 0, y = 30 },
boss_colour = HEX("56789A"),
discovered = false,
dollars = 5,
mult = 2,
debuff = { value = '2', value = '3', value = '4', value = '5' },
boss = { min = 1 },
calculate = function(self, blind, context)
if not blind.disabled then
if context.other_card:get_id() == 2 or
context.other_card:get_id() == 3 or
context.other_card:get_id() == 4 or
context.other_card:get_id() == 5 then
return {
debuff = true
}
end
end
end
}
No, it's context.debuff_card
still doesnt work
just search lua and get the one by sumneko
should be near the top
also for some reason my balatro is just not saving at all
wdym
idk every time i start up balatro it gives me the tutorial again and my settings are reset
wtf
but yeah it still doesnt work
SMODS.Blind {
key = "birch",
atlas = 'blind_chips',
pos = { x = 0, y = 30 },
boss_colour = HEX("56789A"),
discovered = false,
dollars = 5,
mult = 2,
boss = { min = 1 },
calculate = function(self, blind, context)
if not blind.disabled then
if context.debuff_card:get_id() == 2 or
context.debuff_card:get_id() == 3 or
context.debuff_card:get_id() == 4 or
context.debuff_card:get_id() == 5 then
return {
debuff = true
}
end
end
end
}
if context.debuff_card and (context.debuff_card:get_id() == 2 or ...)
when using SMODS.create_card()
is the 'area' arg required? or will it default to something based on 'set'?
create_card doesn't emplace by default
?
if youre looking for automatic emplace try SMODS.add_card
all the same parameters are taken
ah, so for SMODS.add_card() does it default to X based on set if area isnt given?
yes
well uh
SMODS.Blind {
key = "birch",
atlas = 'blind_chips',
pos = { x = 0, y = 30 },
boss_colour = HEX("56789A"),
discovered = false,
dollars = 5,
mult = 2,
boss = { min = 1 },
calculate = function(self, blind, context)
if not blind.disabled then
if context.debuff_card and (context.debuff_card:get_id() == 2 or 3 or 4 or 5 ) then
return {
debuff = true
}
end
end
end
}
context.debuff_card:get_id() == 2 or context.debuff_card:get_id() == 3 ...
oh i see
or just context.debuff_card:get_id() => 2 and context.debuff_card:get_id =< 5
which should work too i think
well it would include ids between 2 and 5 from modded ranks potentially
thats probably fine
how can i clone a card
copy_card
takes the card you want to copy
returns the copy of the card
does ease_hands_played change the current hands? like the number near your discards?
yeah
local copy = copy_card(card)
card.area:emplace(copy)
copy:add_to_deck()
just current
how do you change hand size?
G.hand:change_size(amount)
to make it temporary you have to additionally increment G.GAME.round_resets.temp_handsize by the same amount
why is there a function for that as opposed to all other cardareas where you set the config directly
wdym
CardArea.change_size is a method of the CardArea gameobject
you can use it on any card area
oh
so like
G.hand:change_size(-5)
G.GAME.round_resets.temp_handsize(-5)
im suing vanillaremade
G.GAME.round_resets.temp_handsize = (G.GAME.round_resets.temp_handsize or 0) - 5
but other than that yes
is it possible to change how many picks you get from a pack mid pack
Sue thunk he’s the one who made the function and then only used it half the time
im suing everyone
i should change all of them to change_size that's true
how can i make a lovely patch not end with a newline
i want to turn an if into an elseif by prepending some stuff
use a regex patch
uh oh im not smart enough for regex patches apparently
10 trillion trial and errors go
how do I make a global for this and a config thing so it easy to add some
ok so, complete coding noob here
how do i make a consumable that like
when triggered ten times, allows a specific consumable to show up in a store
sorta like antimatter
You would increment a global variable in the use function, and check if that variable is greater than or equal to 10 in the other consumables in_pool function.
hmmm, so id make a flag?
No, it would be a number.
look at how ectoplasm does it in vanillaremade
it uses a global to check how much hand size to take away
wait where
looking for ectoplasm,,,
on the wiki
cannot find
src/spectrals.lua
oke i found it
is there a way to have tags add a specific voucher to the shop as opposed to just One in general
just took a look at the code
-# for reference im making a tag that works like the voucher tag but automatically gives you an upgraded version of one of your already redeemed vouchers [and blank if you have none]
im guessing G.GAME.ecto_minus is their variable
G.GAME.ecto_minus yeah
okok
inside of G.GAME because that gets saved with the run
and the G.GAME.ecto_minus = G.GAME.ecto_minus or 1 is to set it to 1 if the value doesnt exist yet
so would something like this work then?
P_centers?
oo i c 🤔
so G.P_CENTERS.modprefix_key for the info queue
info_queue[#info_queue + 1] = G.P_CENTERS.hatchet_key
return {vars = {G.GAME.daat_summon or 1} }```
oh vscode doesnt like that
the little lightbulb just showed up
lightbulb doesnt necessarily mean something
o oke
but also what type of object is it
so now it has an internal variable then? that keeps track of the kether uses?
oh wait there's optional key args whoops 👀
ty lol
oh kether is a consumable?
should be
c_hatchet_kether then
yeah it is
info_queue[#info_queue + 1] = c.hatchet.kether
G.P_CENTERS.c_hatchet_kether
oh oke
and then the variable should work as long as you actually increment it in the use function for kether
ok so thats been done, rn i need to make it so that the function returns with +1 to daat.summon
yesyes
im currently reviewing the code for Blank rn
since Kether is meant to function similarly to Blank#
yeah true true
hmmm, okay now im confused
im unsure how to code the incremental joker thing
i tried checking ectoplasm's code and it doesnt feel right
how so
would it be something like
G.GAME.daat_summon = G.P_CENTERS.c_hatchet_kether + 1
or
idk what im doing 😭 😭
my code rn
hold on wheres the fcucking key
here we go
G.GAME.daat_summon = G.GAME.daat_summon + 1
my edition isnt working, i know there isnt a shader im talking about the effect
i don't think editions auto-calculate from config values, you still need a calculate function
they do for some
oh hm
also use card.edition.chips and card.edition.x_chips
for loc_vars
also G.GAME.edition_rate is meant specifically for foil/holo/poly for hone and glow up to change their rates fyi
that crashed
what crashed
i know that
ah ok
oke
its doing nothing
not even the -chips?
is that all id need to do then
yeah
nope
for incrementing the value thatll work
do negative chips/mult returns work normally
i forget
neither of them do anything tho
i mean probably
i know xchips and xmult effects that are <= 0 get ignored
so like
idk
but anyway you can just make a calculate
yeah i could
x_chips is not procced automatically, it seems.
and check for (context.main_scoring and context.cardarea == G.play or context.post_joker)
okay its back to hell LOL
since last night i coded these things i understood from the vrm castle script
you took the wrong lesson from castle lol
you don't need any of the current_round stuff because you're always hardcoding it to 8 of hearts
you did also take the right lesson from castle though, in that you added a separate mult variable to your config table
Ive done something wrong
yeah
Yes, you need a context check.
the context in the corner of the room
yeah, but is there one for both cards and jokers?
btw is this the right syntax
Also this is stupid
it just keeps going LOL
yeah
if context.other_card:is_suit("Hearts") then
im not even playing a hand
thx
fixed ty
whats stack overflow
wait then it just does this
game ran out of memory
ruh roh
usually because of an infinite loop
if context.other_card:is_suit("Hearts") then
no ==
oh im blind
it happens whenever i try to summon kether with the debug menyu
what does kether code look like
It works!
so it infinitely adds tooltips for itself
wait okay so if this is how you detect the suit how do you detect the rank
now i just need to make the shader
remove the info_queue line
the floating box that appears next to some joker descriptions that includes the description of another object
e.g. Stone Joker would have a tooltip with Stone Card's description
which is what info_queue does
oh right that
ohhh
i only added that bc ectoplasm's code had that
ok, got rid of the info queue part
ectoplasm has it for the Negative edition's description
new error babeyyyyyy
so it looks like daat_summon is valueless by default
but not as like, 0
so id have to define it as zero first
and then do arithmetic?
yea you need to initialize G.GAME.daat_summon in a hook to init_game_object
i mean you could also just
you can just do G.GAME.daat_summon = (G.GAME.daat_summon or 0) + 1
G.GAME.daat_summon = (G.GAME.daat_summon or 0) + 1
true lol
yeah
ok lemme try that
ok, that seems to work
now to give daat unique spawn conditions
okay so would this be right for checking if a card is 8 of hearts
"8" instead of Eight
im checking the soul code rn
other than that
but it's usually better to use context.other_card:get_id() == 8
no returning
so this
Can you make a custom sticker in JF? (jokerforge)
no
sure yea
although you can simplify even further by just doing
if context.other_card:get_id() == 8 and context.other_card:is_suit("Hearts") then
-- do the effect here
end
doesnt seem like it
theres a lot you cant do yet
Ha. Im (my app is) already better
awesome
oh yea thats true
gonna try out malverk texting packing and not sure why it is crashing
cool, cool.
-# we don't really care that much
-# ik
or set it in reset_game_globals (depending on usage) on run start
missing the 2x version
ohh
true
can’t make joker yet
I can, trust
im working on it
getting there
but now you don't need to set a variable at all, you can just do the effect you want directly inside that if statement
in this case, it's scaling the card, right? so increment card.ability.extra.mult by card.ability.extra.MultAdd and return a message, all inside the if statement
so all of this is unnecesary now
yes, a lot of that is wrong anyway
alright
i just made this for the booster pack
local _card
if G.GAME.daat_summon > 10 then
_card = {
set = 'daat',
area = G.pack.cards,
skip_materialize = true,
soulable = true,
key_append = "hatchet_sephirot_pack2"
}
else
_card = {
set = "sephirot",
area = G.pack_cards,
skip_materialize = true,
soulable = true,
key_append = "hatchet_sephirot_pack2"
}
end
return _card
end,
}```
would this work
i assume you want to be using key for spawning a specific card?
also needs class and mod prefix
yes
o how do i do that
hmmm
the code rn for one of the boosters
the other booster is virtually the same code wise, it just has a different key
i can do that part myself
im pretty sure there is an extra closing bracket that shouldnt be there
right at the top of the screenshot
so literally this is all i had to do
not quite
first, get rid of is_8_of_hearts entirely. you don't need it at all.
inside the if statement with the get_id and is_suit checks, just have card.ability.extra.mult = card.ability.extra.mult + card.ability.extra.multAdd. don't return it, that's not how that works
so that
ruh roh
if G.GAME.daat_summon > 10 then
maybe something like if G.GAME.daat_summon > 10 or 0 then ???? idk
there we go
now, still inside that innermost if statement, add this:
return {
message = localize("k_upgrade_ex"),
colour = G.C.MULT
}
this will add a message when the joker upgrades
if (G.GAME.daat_summon or 0) > 10 then
anything else
?
i see that theres this entire section in vrms thing but idk if thats necessary or not
we're done with the first part, which is making it upgrade properly
the second part is actually returning the mult
after the second-to-last end, but before the last end, you'll need to add a context check for joker_main and return { mult = card.ability.extra.mult } inside it
yea this is irrelevant for your use case
alr
🤔 what is index local center
@slim ferry what do 🥺
whenever i try putting the return in there it keeps erroring
sending the code and error would be helpful
woops i forgot i had pixel smoothing on 😭
it says theres no ) even tho there is
by a context check i mean
if context.joker_main then
-- do something
end
yea looks good
alrighty
lemme test it out now
Watch final destination joker works by genevanougat and millions of other Balatro videos on Medal. Tags: #balatro
yippee
now i just needa make the thing that displays how much mult its currently at
shouldnt be that hard
woohoo
hopefully
that means it cant find the given key i think
at least
not a card with it
loc_vars = function(self, info_queue, card) will be your friend
what do i do
show the create_card code
local _card
if (G.GAME.daat_summon or 0) > 10 then
_card = {
key = 'daat',
area = G.pack.cards,
skip_materialize = true,
soulable = true,
key_append = "hatchet_sephirot_pack2"
}
else
_card = {
key = "sephirot",
area = G.pack_cards,
skip_materialize = true,
soulable = true,
key_append = "hatchet_sephirot_pack2"
}
end
return _card
end,```
It's c_modprefix_key
nvm apparently it is
how the FUCK do i concatenate this properly
card.ability.extra.currentMult
where do i put that
i think most of these things you have been asking about are in the vanillaremade examples
in place of the current key youre using for the card
okey
i might have fucked smth up here but i tried
i get the same error
is has to be
here's the full code
you aren't even making a consumable 😭
your mod prefix is actually hatchet right
that’s not how you
do i have to add all this in
if you’re not using it no
yeah it is
no
it says all the return values are optional above
i added the vars = { thing i missed originally
why are you looking at consumables???
you're making a joker right?
this is the localization wiki page
🥀
key should probably still be set in the second card thing
when you dont have 10 uses of the one card
and without prefixes
since im assuming youre still just making random cards of the type there
awesome
oh ok
we r back to this error
maybe key = 'c_hatchet_daat' should be set = 'daat' instead
oh, well i tried that and daat did show up, but with two jokers
yeah, daat is in its own separate set
and key is for a specific card
oh hm
oh you should probably add and i == 1 to the check if it should spawn
so only the first card gets replaced
consider: a key is required for an object definition
well yeah
well then
well then add one
the 2 for 1 special
oke
random question, is lua case sensitive
wuh woh
my code is set = 'daat' and i == 1
no like
G.GAME.daat_summon > 10 and i == 1
in the if statement
idek what im doing bro im so fkin confused LOL
i just realized i put p_centers twice
look at me go
youre making a consumable definition with only a loc_vars
thats
what youre doing\
the loc_vars should just be in the object definition you already had
its okay pivit im new to this too
i am starting to learn how locvasrs and stuff work a bit more
ok this seems to work
epic
ERROR 🗣️
theres only one issue, which i think i can fix
once daat is used, i want to set daat summon back to 0
i think i know how to do that, but ill need to test it out
also idk why it says error LMAO
okay question about vscode how to i toggle off the tab key navigation
i lowk fw it
esc? idk
nop
Show code I think I know why
in a sec, im currently trying to figure out how to reset daat summons
for some reason group_name in loc_txt just doesnt work
for packs
G.GAME.daat_summon = 0 should probably go outside of the event
uh
show code
WAIT
because
lemme cook
G.GAME just doesn't exist smh
that doesnt happen unless you add values in G.GAME during load
im pretty sure it does
an error ive seen often is people having a group_name and a group_key
my fellow modding devs....
i have fixed an error without help for the FIRST TIME...
IM SO PROUD OF MYSELF
GG
(i did GAME instead of G.GAME)
now to fix some of the smaller issues
mainly with Chesed and such
i was able to code the display of my joker ingame without it crashing
first ill need to make backups of these preexisting luas
oh
it didnt do jack shit but the game launched and everything else worked
theres a few more errors ill need to fix,,,
ima cash out 🤑🤑🤑🤑🤑🤑🤑🤑🤑🤑🤑💸💸💸💸💸💸💸💸💸💸💸
first some testing
literally what is even happening bro 😭
hard to know without seeing the previous line but it seems like it's using return as a variable
heres the full thing
yeah the comma in the previous line is wrong
but also that whole previous line is nonsense
delete that line
also you're still making an empty consumable
something you consume
helpful
just the description thing that some jokers have that show you how much mult you have on the card as it scales
have you looked at this
https://github.com/nh6574/VanillaRemade/blob/a18262ba0805ecd51ae91e9cc9cf69d0fbfed810/src/jokers.lua#L15
thats not my problem tho i cant get the center key to make the code work
whatever the fuck a center key is idk
what center key
your problem is that you dont know how a joker is structured as i see from your screenshot
my link shows you how to do it
yes because you're making a consumable without a key
you don't want to even make a consumable
I WAS LEAD TO THAT PAGE WHERE- sorry i need to calm down
im just aggravated asf rn
i was literally told earlier to go to a page thats supposed to fix my problem now it apparently isnt???
the page is an example on how to use loc_vars
you're supposed to already understand how to make an smods object
that's why I linked the example
i never had to deal with it until now
yeah that's why vanillaremade exists, so you can see how jokers use loc_vars
you're still trying to make a consumable...
you're now trying to make a new joker
you want those things to be in the joker you were making
not calculate, i think you already have that
im going to lose it
its some kinda progress at least
its tryna call the smods.customjokers as a nil value when it shouldnt even be nil???
uh what the fuc
can i see the code
?
SMODS.CustomJokers doesn't make sense
wdym
its ok i fixed it
like, it doesn't make sense. it's not a thing
when i was typing it in it said it was a real thing
before this loc_vars stuff what did you have
just the configs
do you have copilot enabled
can i see that code
how do i check
i dont remember rn sorry, im not on my pc
its alr
remove the SMODS.CustomJokers line and the extra }
you want just the loc_vars
nope
ty
AND WERE BACK TO WHERE WE FUCKING STARTED YAHOOOOOOOOOOOO 🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉
i love coding
it seems like a problem later in the code
presumably here bc thats where it comes up again
actually wait lemme try smth
nope nvm
i tried adding it to this thing
didnt fix it
heres everything you havent seen
this is line 18 but the problem is what i was crashing out coding for the past hour
ok, remove that and replace it for [3] = "currently #1#"
#1# points to the value in loc_vars
okay it didnt crash this time
lemme spawn in the joker rq
i mean
not quite
also in terms of text coloring does {C:mult} exist for that text style
ok that makes sense because you're not assigning anything to currentMult
that some other jokers have
i think ik how to fix that
usually you want {C:inactive}(Currently {C:mult}+#1#{C:inactive} mult)
alr
also i did not know how to fix that in fact
i tried turning the MultCurrentlyIs thing to a string instead of an integer
didnt work lol
just change that for 0
wdym
the values in config are the defaults
you don't want to use a variable, you want to set the default number usually
im sorry im dumb this is what it currently is what do i set it to instead
oh.. do you have two configs???
you can't have 2
theres currently a weird bug going on with sulfur cards. for some reason, theyre disabled whenever i get into suit disabling blinds
what is their effect
Gonna see if I can come up with some easier credit/config automation via my API mod
doing credits and config are all kinda boring boilerplate so I'm sure other modders might appreciate tht
What do you have in mind
Basically, all of my mods use basically the exact same framework for config/credits, and the config elements are used to filter item loading automatically
I'm thinking I can have a basic framework for the UI for both that can be automatically filled in based on other supported elements in the API, I.E. I have a set thing to detect that items have an 'artist' and 'programmer' field on them
I think the mods you’ve worked on are typically multi-person projects so they need more robust credits
And so far I’ve seen people copy Cryptid and maybe now how Hotpot does credits
could anyone find the reason behind this error (i assume its because of my mod):
I have particular opinions about credits and my mod is mostly single-dev so my janky implementation does what I want
fair, but this will also be opt in
I mean of course I was just commenting about who might be interested in an API
Which I think would be group projects
But then again those might want Credits with specific visuals you know
Although IIRC the mods you worked on had a very cool Credits collection menu
Which would be interesting to feature artists
@chrome widget I could tell you if you think that would help your API or if you’d just be interested in having a conversation
Yeah this is the main thing, at a certain point with enough contributing artists it becomes harder to manage, though obv not impossible
I’m trying to remember what else people argued when I brought up this topic recently but I can’t think of an useful insight
hi winter
Oh hi marisa!!
I guess the useful insight was the one given about most mods being single dev
Have you seen how other mods do it
no
wtf do i do man
its not in the config thing
n said you cant have 2 things in config
you can
I’d say Cryptid and Hotpot, maybe Ortalab, are the big ones. Aikoyori’s is mostly single dev but has an awesome custom Credits page that wouldn’t work for other mods. Cosmos was developing a Credits system but I don’t think it was released, maybe ask @shell tangle or @cinder briar
There’s a few other big mods but I don’t remember how they do Credits or if it’s significant
I would maybe tell you how I do it for my own mod but I don’t know if it’s particularly useful
@red flower liar
you can have 2 values in a single config
wait so how does that work
you can have multiple values but not multiple variables???
oh
Oh that's cool
yeah then i alr have this variable in here
Hotpot’s has something like this (this was a dev version of my credit ironically missing credit for this specific artwork)
so that means its a duplicate table entry
all the values should be in a single config
thatd make sense bc theres one down here
I do want to have hoverable things like this in the credits where possible, but that's a stretch goal for my current implementation
I think Hotpot also has badges with Credits on individual objects
I don't do badges, I use infoqueue tooltips
you can get it to recognize steamodded stuff
hold on
I don’t remember how Cryptid does it
Yeah most people do, which is why I brought it up
I like my tooltip style because it’s very visibly not a gameplay tooltip and looks like film credits
yeah i alr did that
Show me
i see
what is the intent behind the middle two values here
Oooh yeh don't like that, takes up too much space on the screen imo
The text is written individually because it’s unique for each Joker
okay so this is what the config thing is now
That’s fair but I think it’s important to be specific
addmulttocard is to make the incrementing work
well yeah but why are you trying to set another config value to it
and the current mult is the value i used to try and separate the uses from the increment display to the actual text
that seems not very useful
to have two of the same value
you dont need seperate values for loc_vars
^^^
actually yeah youre right
i dont even use addmulttocard anyways
I think it’s misleading if I’m using an edited or composite artwork and I don’t attribute it correctly
So I’d either show it during gameplay or not at all
I dislike a brief, incorrect attribution
personally idrc. If I don't personally think something should be credited to me I just don't credit it
Whoever is primary credit gets primary credit
It’s more that it should be credit but the crediting should be explicit. If I have a composite or edited artwork, I have to make sure not to misrepresent that
As it is my personal project, I have to predict what issues external contributors might have
Typically when working in group projects, most people don’t seem to care
okay i got rid of the useless shit and any lines that pertained to them
So if I edited their artwork minorly and didn’t say anything I don’t think they would care
However, my system needs to be robust against every possible contributor
now how do i get this shit to work
Hence I need to foresee that someone could take issue and act accordingly
personally I mostly just would say that if contributors don't like the way I do things they just don't have to be part of the mod
In group projects normally every member gets a say
^
Although for that specific example I'd mostly just put myself as art supervisor in a separate credit
just make that a single string
From my experience working in Balatro mods
and then where you want the variables
then this happens
#n# will be replaced by the nth value returned in loc_vars
If your experience is different it would seem to me as a bit exclusive among Balatro mods
But perhaps I’m making too anecdotal a statement
when displaying the description
I don’t know every group mod
I'm not super expert but for credits I think the one used for Hotpot was pretty good
I mean don't get me wrong, I'm doing a collaborative mod. But when I've done the largest majority of the work to actually push the mod to completion, wrangle artists, etc, I get largest say. If I didn't, I wouldn't work on it, and it wouldn't have access to my contributions
Do you remember the state of Cosmos’
I don't actually recall cards having artist credits
for fucks sake
Been a while since I paid much attention to Cosmos Pack 2™
I know they were listed on the GitHub page but not in game, but I seem to remember a branch with a tentative Credits page
That'll be someone's work if anyone
oh was n supposed to be a number
yeah
Usually I see mods where people have a more equal share of the contribution; even if there’s a main programmer, there’s usually a main artist, so there’s not necessarily someone with a bigger say
that would explain a lot then
thats usually what n means for like stuff but i probably also shouldve been clearer about that
Maybe Ortalab was a bit similar but even then the main programmer was Eremel while the original creator was Shinku
yeah
Jest is based on Nevernamed’s fanart through one or two programmers who asked permission to turn them into functional Jokers
and loc_vars is in the right place?
it should be
There’s a few other artists with similar mods, although most are smaller
hmmm
Anyways sorry I got off-track
With my mod people doing me art are mostly doing me a favor, either doing a free request or allowing me to use their own original art and/or concept because I asked. (So far I’ve only paid for one artwork.)
So this philosophy doesn’t make any sense in the context of my personal mod
People aren’t asking me to participate and then trying to tell me what to do
Anyways outside of art credit—I don’t think programming or conceptual design credits make much sense. So usually I don’t understand why people want to include them in group projects.
-# Although I do have at least one “concept credits” as shown above.
i think people should do art for my mod
People did ask me to participate. If they didn't ask to be part of it, then I'd just make it without them
n please help im going fucking insane
whats the issue
Konami help this ||conson||ant
Ms. Popular
what the fuck am i doing wrong to make the message thingie keep saying (Currently +nil mult)
are you restarting a run before testing
do i have to
yes
thats probably why then
Usually yes
I’ve had people offer me art which I like but I feel a bit bad so I avoid it. (I try to ask for a piece which I think would highlight what I like the most about a particular artist’s style which usually means I overthink it and don’t ask.)
That reminds me I have a few unused artworks like the one by @hushed field
What do you think of programming and concept credits by the way
that should not have taken me almost 2 AND A HALF HOURS
Though I normally don't bother with them (I don't have individual credits for them in my mod as it stands), if I want to do this automation thing, I'd need to list individual programming credits on each item for them to be automatically collected into the programming tab
Not at individual Joker level
The idea here is that when a joker is loaded, it reads if the center has artist, programmer, etc and then builds the credits table based on that
I think it makes sense on the level of the entire mod or maybe individual systems
None of my items currently have a programming credit, so I'd have to add them to make this work
Hotpot has a system like that if you want to save coding time or a reference
It has artist, programmer, and concept IIRC
Maybe a team name too
does it build the full credits menu from this?
a Team Name you say...
I think so
Although if you wanted something truly scalable
Maybe you could have a single Credits table
And it parses the job and person from that
the thing being that it's creating the single credits table this way
and then it builds the tab itself based on the info it has
object.artist_credit = … and object.credit = {artist: …} seem pretty close
Although I guess the latter would need custom localization for custom jobs
nope
That's what im trying to automate is the focus of this
I don’t think it assembles the entire credits info from individual objects because that’s never needed
But once each object has the info I don’t think building that table is too hard
The Credits menu is custom. Each person put whatever they wanted on their icon. Someone put Labubu Glass Bridge
okay quick question
is it possible to spawn in jokers with the debug mod
Yes
Hold tab
how
Then read
i forgot ab that function LOL
i ask bc im gonna be changing some of the vanilla cards as well to work differently (mainly the legendaries so theyre actually unique to eachother)
wait okay how do i find the vanilla code for the jokers if possible
The basic idea is this:
- by base, credits has some default categories (artist, programmer, direction, etc)
- upon loading a joker, if it has information for a category, it appends the info to the category and adds onto a list of the contributions that specific user made to that specific category
- the overall credits has x and y dimensions, by base 20x10. It can be provided custom dimensions
- each category has a start position and an end position within the dimensions. Once information is collected, and to build the credits menu, it loops through the categories and minds nesting levels by arranging the dimensions on the grid and defining sections that it needs to make
- the end result is essentially this:
use the take ownership function
https://github.com/Steamodded/smods/wiki/API-Documentation#taking-ownership
you'll have to rewrite some code depending on how much you change, but it's by far the easiest way to modify vanilla content (the only other way i can think of is lovely patching)
it's not nearly as simple as I made it sound since I'll have to experiment with a ton of constants for how to range text scaling
That feature would also be useful somewhere else
Stickers
If you can figure it out, it could be used to allow for automatic positioning of stickers
also isnt there a thing where changing the calculate will only override overlapping contexts
GUYS HOW DO I USE IMMOLATE
where do i code this in
thats also a thing to remember
I had discussed it with, I want to say Aure, but I couldn’t figure it out
you use it like you'd create a new joker
I DONT UNDRESTAND
I could definitely figure out automated sticker positioning sure
<------ overconfident and egotistical
doesnt display_size handle that already
you should ideally use it in contexts where your hand doesn't have a lot of cards you want to keep, because then it thins out your deck along with giving you the money 
NO LIKE THE TOOL
The idea being that Sticker sprites could be just the Sticker, not the entire card, and then automatically determined per Joker so there would be no overlap
yes that's why i appended
to my message. because i am making the silly. the jokes. i am the jester here
OK
so would i be able to take the highlighted text here and just paste it into the take_ownership table?
I HAVE JUST NOTICED THAT CAPS LOCK IS ON AND I WILL NOT TURN IT OFF FOR DREMATIC EFFECT
you would make a calculate in the table and put it in there
as if you were making another joker
What we had discussed was having a standard size, we had a specific number which I forget, which would be positioned automatically.
I was interested because I was curious about the possibility of stacking multiple of the same sticker in ways that would overlap, which sounds fun to me.
An issue with this approach is that I don’t know if it would work with the way Balatro handles sprite rotation.
Oh also
There was a different application
CardAreas
Sprite rotation in balatro is inherently a major issue yeah
With each mod adding a billion CardAreas, the introduction of a system that automatically positions them has been brought up
I've had some issues with some cards being offset specifically because of that
So a grid positioning system could also be used for this
Honestly forget the credits if you figure out grid positioning you’re solving a billion problems /hj
@chrome widget I don’t know how LaTeX handles text and floats but it seems to me like it would be an useful reference for learning how to handle text scaling and positioning in the Credits
and i assume all this extra stuff i dont need
yeah you only need to put in the values youre changing for take_ownership
alright
so if i were to make triboulet give all face cards 2x luck instead of just kings and queens this is the setup id need for it?
across the board, yes
and you shouldn't have the second calculate function at all
also if you want it to be face cards you should check context.other_card:is_face()
then it has the red squiggly
so just leave it alone with the one?
select everything from calculate to the end
and then do a {
should put the brackets around the entire selected field
i assume them being red is okay
being red is the one thing thats never okay
function SMODS.showman(card_key)
if next(SMODS.find_card('j_jabong_soulbottle')) then
return true
end
return smods_showman_ref(card_key)
end``` this goes outside the joker right
yes
okay so the brackets are red
what do i do
both
fully red means theres no closing bracket
Bump
and the underlining is probably the same issue
it says the brackets are an unexpected symbol
ah
Ortalab doesn’t have ugly tooltips, it has nice text in the main tooltip
i assume i also get rid of the local on the silent thing
yeah that closing yellow bracket
should be after all the closing squiggly
I remember them being green or red
i dont see a closing yellow bracket
after the cost
oh the parenthesis
yeah
okay i fixed everything
also which values do I return true to limit dupes of cards in SMODS.Showman
so you have ("triboulet", { the whole table thing }, true)
you could check how many of the card you already have manually
but the function itself only returns true or false
ah ok
that did not work
even after moving the silent line
okay so going back to this old setup for detecting what card gets played could i theoretically replace the numbers with strings of the respective ranks
so example instead of 11 itd be 'Jack'
and so on
it doesnt
just check context.other_card:is_face() unless there's a specific reason why you only want jacks/queens/kings
yea that didnt work either
elaborate on "didn't work"
and i'll leave eris to help you because i need to do irl stuff
the trib didnt score the 2x on the jack at all
@slim ferry
uhhhhhh
does pareidolia work
with is_face
1 sec
ill check that rq
okay weird no it doesnt
i also have to change the description for trib which seeing how that went an hour or 2 ago i think ill leave that for another day lol
fair
but yea no peradolia doesnt work at all with is_face()
probably because the if statement has both that and the old setup divided by an or thing
ok no bump two is there no way to make it so a deck sets a scoring calculation once at the start of the run?
wait no i might be stupid
he's wide
make the jokerdisplay wider
-# the +4 mult is a placeholder
how
idk actually
wait a second thats not how stickers work
how are you changing the size
why
this is in a toml thing
because i dont want to make a whole nother atlas for it idk!!!
does the joker have the two modes
wdym
or is it always sideways
okay ima come back to this later i gtg
the trick or treaters are (probably) waiting
always sideways
then just make another atlas..
goodbye chat o/
no!! im stubborn
why
because i am idk
there are functions for this specific thing
what are they
ok im still stupid but
G.GAME.current_scoring_calculation = SMODS.Scoring_Calculations["maxboism_bribe"]:new()
am i forced to call this every round or smth because i see 3 functions for a scoring calc and the load just crashes if i replace the new() with load()
pixel_size and display_size
oh i have pixel_size but not display_size
squok
yeah it uses pixel size
im the squoker baby
~~im not smart enough to read source code i need docs 😭 ~~
hmm then idk
where do the stickers even get placed
i might be able to mess w that
ok it's not center.children