#💻・modding-dev
1 messages · Page 495 of 1
where does hypermult and hyperchip come from
This?
wdym
assets should be lowercase
its just arbitrary operators
What did you return on said other joker
It turns a normal number into a Talisman big number.
just this
that's where my mind would go first in this scenario, I'd check what that's returning
if putting a value into hyperchip n that jazz works elsewhere I'd think my value is wrong
i dont see how the implementation is any different
if i manually replace the loc_vars listed under hyperchip_mod and hypermult_mod with numbers here it still does not work
ok joker with purple seal is so much funnier
I changed all the names and it remains the same.
you didn't change ASSETS to assets
oh, i sorry
Try not returning a negative number
It looks like if either of them is negative, it returns NaN directly
and also here
if i replace everything with a positive number it still becomes nan
The same error
aw man it would've been funnier as "discarded" because u can't discard a joker
it's the next best thing
Oh, what does your main.lua file look like
apologies for i am entirely stuck and unable to offer suggestions
😭 😭 😭
Did you start a new run after changing the values
Is empty
ive had like 5 people try to help me here and nothing works
yes
Who keeps putting ? emotes
you should put everything you have in your jokers.lua file into your main.lua file, and delete the jokers.lua one
something
Three more...
you're better off asking the person who made this stuff for talisman
My chud taser face card
i wouldnt even begin to know who that is
whenever I'm stuck on something I annoy aikoyori about it
have you tried asking ruby
that is a good idea
mathisfun
is anyone an expert in context.joker_type_destroyed
erm🤓 ☝️ acktually this goes in # fanar ..
it worked
no but maybe i can help
how are you testing?
i am DEVELOPING. it is IN PROGRESS. weh
i like your profile photo
I was making a joke abt how I was met with a similar response after posting a sprite update , apologies for the misunderstanding
But my mod it duplicated
Thanks
because you have multiple files with a steamodded header

using debugplus and spawning hex cards
hmm let me test it myself
that one tutorial on yt rlly causing problems at this point 💔
maybe is this file?
it's so outdated lol
attempted something that doesn't seem to be working
if you have a json file, go to your main.lua file and remove all the steamodded headers at the top
trying to make it so all catan cards give +1 consumable slot
and i figured it'd be easier to add the needed config, loc_vars and functions in post
youre right, it doesnt seem to be working for me unless I use SMODS.destroy_cards()
Thanks
damn
another question
is it actually spelled G.consumeables?
this is jus a curiosity question
yes
how i can change the rarity of my joker
that is so funny
caino
gluttenous
heirophant
balala
in your smods.joker table set rarity to a number
I don't kno the specific values tho
anyway, it seems like the config isn't there
in your joker set rarity = 1, 1 is common, 2 uncommon, 3 rare, 4 legendary
as my localisation is +nil
🫡
Wow, thanks
slight problem
i want to return multiple things at once
but i also want them to be conditional
how so?
so my issue with this was
i cant actually have arrows below 1 apparently
so i need to hardcode addition and multiplication
but
im returning chips AND mult
start_run is way to late to be changing centers.
right ^^;
and they both are supposed to have different (random) operators, between addition and tetration
Oh no my reply was also a joke. Arguably I should post less WIP pics however I am working on art and want affirmation
No, you can do it outside of any hooks I think.
don't let anyone argue u into becoming a #🎨・fan-art oid
ah :D
Just iterate over SMODS.Centers
return {
chips = not condition and 10 or nil,
hyperchips = condition and {...} or nil
}
something like this?
this is a bit confusing
I am simply a checks notes voracious sexual recipient for compliments
I need to play until I get it, or is there a way to make it appear?
essentially
#1228149931257237664 is a mod that lets you spawn jokers to test
mm, now it's complaining that card doesn't exist: return { vars = { card.ability.extra.no_of_cards } }
how do i explain
ternary if
condition and trueValue or falseValue

thanks
the intended effect is to give chips and mult, but both are seperately randomized to be additive, multiplicative, exponentional, or tetrational
its proving to be more difficult than i thought
what determines the operator
a pseudorandom function
which rolls during joker_main
or, well, two pseudorandom functions
one for chips and one for mult
that was an issue on my part
for simplicity its just 1-4
addition, multiplication, exponentiation, and tetration
so like
ah wait i've seen something unrelated
if i roll a 1 and a 3, it should return +Chips and ^Mult
there
And is the problem that addition doesnt work?
it still doesn't work but I'm proud of that
(the image is a placeholder, i dont know how do pixel art yet)
do v:loc_vars instead
no the problem is that the way return functions work dont let me code this unless i manually hardcode every single possible combination
assuming V is a center
at least for my skillset
closer!
because you cant have two return statements at once, making me put both chips and mult in the same return
but that doesnt work either
Well I'm asking because I want to do it for you lol
you need to create a fake card
eep!
i see
(in an online forum) an act of posting on an inactive thread in order to move it to the top of the list of active threads.
yeah my issue before was just that i was trying to use hyperchips/mult which didnt work
at all
okay please clarify ^^;
no clue how i'd go about doing that
sorry if im overcomplicating my explanation
try doing v:loc_vars(info_queue, v:create_fake_card())
like this?
local chance_mult = pseudorandom("seed", 1, 4)
return {
mult = chance_mult == 1 and card.ability.extra.mult or nil
xmult = chance_mult == 2 and card.ability.extra.mult or nil
emult = chance_mult == 3 and card.ability.extra.mult or nil
eemult = chance_mult == 4 and card.ability.extra.mult or nil
}
yeah
also talisman doesnt even have a wiki???
yeah, right? Had to go look thru their code to see whatever hyperchips meant
not that I understood it, but still
same, didnt even know eeemult was a thing
AAAAAAAHAHAHAHAHAHA THIS WORKSSSSSSSS >:3
SUCK ITTTTT thanks :3
your help was invaluable :3
YESSSSS GET INNNNNN
getting a weird, but very minor, bug
when checking out Settlement in the collection, it displays +nil consumable slot
but then, hovering off and back on, it corrects itself
must be a timing thing
yepyep
loc_vars = function(self, info_queue, card)
return { relevant = { G.P_TAGS.tag_rare } }
end,```
relevant here is a thing that lets the info_queue work with this system
tis a tomorrow problem though ^^; it's 3am
very glad i got this all working! thanks for your help!!
function SMODS.calculate_individual_effect(effect, scored_card, key, amount, from_edition)
if G.jokers and next(SMODS.find_card("j_tngt_autocorrect")) and key == "mult" or key == "mult_mod" then
return ref(effect, scored_card, "xmult", amount, from_edition) --Changing key to xmult. If you want to change how much xmult it should give, change amount, I assume.
else
return ref(effect, scored_card, key, amount, from_edition)
end
end
this somehow leaks
even without the joker needed
what happened
What is the goal?
this is a hook for a joker that changes all output of +Mult into XMult
IF the player has that joker
but somehow a run without that joker still got affected
how would i make something like "X0.5 Mult for every card you can currently play"
thanks
There is also h_mult as a mult key.
hand mult?
what does that mean
No, It's just normal mult.
why does it need parenthesis anyways
like.. card selection limit
oh
weird
thanks for telling me that
thunk (tm)
a and b and c or d
means if "a, b and c are true or if d is true"
a and b and (c or d)
means if "a, b and either c or d are true"
neat
thanks
xmult * G.GAME.starting_params.play_limit?
yeah
i actually need a reference screen somewhere here by god i forgot how normal joker color their description text sometimes
Hello
me again
i wanna do an joker be like observatory
but with the fool and for all hands
would "this joker gains +3 chips when a card is discarded" be like context.discard
context.pre_discard
Yes.
wait what
thank you somethingcom515 {seals on every}
SMODS.Joker {
key = "trash_bin",
config = { extra = { chips = 0, chips_mod = 3 } },
rarity = 2,
atlas = "pok_jokers",
pos = { x = 0, y = 0 },
cost = 2,
blueprint_compat = true,
loc_vars = function(self, info_queue, card)
return { vars = { card.ability.extra.chips, card.ability.extra.chips_mod } }
end,
if context.discard and not context.blueprint then
card.ability.extra.chips = card.ability.extra.chips + card.ability.extra.chips_mod
end
}
what the fuck is wrong here
What is going wrong?
return {chips = card.ability.extra.chips}?
vscode has like a red underline under everything
yeah i forgot to do this
No, you need to put it in a calculate function.
both what you and i said.
anyway something is wrong here
i have no clue what it is tho
Yes, you can't put ifs in tables.
again, put everything below the end of loc_vars in a calculate
oh wait
hey y'all, i'm trying to patch the get_pack function by changing the first pack to be something else. after a bit of testing, i added a print at the very start of the function, and it doesn't print. why could that be the case?
okay this is crashing
SMODS.Joker {
key = "trash_bin",
config = { extra = { chips = 0, chips_mod = 3 } },
rarity = 2,
atlas = "pok_jokers",
pos = { x = 0, y = 0 },
cost = 4,
blueprint_compat = true,
loc_vars = function(self, info_queue, card)
return { vars = { card.ability.extra.chips, card.ability.extra.chips_mod } }
end,
calculate = function(self, card, context)
if context.discard and not context.blueprint then
card.ability.extra.chips = card.ability.extra.chips + card.ability.extra.chips_mod
end
if context.joker main then
return {
chips = card.ability.extra.chips
}
end
end
}
Yes, but you should do card:get_seal()
missing an underscore in "context.joker main", should be "context.joker_main"
And card:get_seal(true) for bypassing debuff.
thanks
No.
k
skip tag cards?
Now to figure out how to merge them into ONE rank there in the UI
I don't want that to be TAG_BAL_THING
Trust me, if i figure this out, it'll OPEN up my modding
Well i'm trying to add an others rank and suit to basically do new custom cards
though i need to fix stuff like the spectrals crashing
is it COLOR = G.C.BLUE or COLOUR = G.C.BLUE
U
I believe so?
Most of the time, no.
It needs to be an ANIMATION_ATLAS
oh mb gang :sorry:
why aren't print(str)s called when i try to patch them into the get_pack function?
Code?
the function after the patch is applied (first bit):
function get_pack(_key, _type)
print("nuts")
if not G.GAME.first_shop_buffoon and not G.GAME.banned_keys['p_buffoon_normal_1'] then
G.GAME.first_shop_buffoon = true
print(G.GAME.selected_back_key.key)
if G.GAME.selected_back_key.key == 'b_picubed_rejuvinationdeck' then
return G.P_CENTERS['p_celestial_mega_'..(math.random(1, 2))]
end
return G.P_CENTERS['p_buffoon_normal_'..(math.random(1, 2))]
end```
patches:
[[patches]]
[patches.pattern]
target = "functions/common_events.lua"
pattern = "return G.P_CENTERS['p_buffoon_normal_'..(math.random(1, 2))]"
position = "before"
match_indent = true
payload = '''
print(G.GAME.selected_back_key.key)
if G.GAME.selected_back_key.key == 'b_picubed_rejuvinationdeck' then
return G.P_CENTERS['p_celestial_mega_'..(math.random(1, 2))]
end
'''
[[patches]]
[patches.pattern]
target = "functions/common_events.lua"
pattern = "if not G.GAME.first_shop_buffoon and not G.GAME.banned_keys['p_buffoon_normal_1'] then"
position = "before"
match_indent = true
payload = '''
print("nuts")
'''
SMODS overrides that function.
would it be feasibly easy to make a pack's background color change if a specific card is in said pack?
wait isn't there a function for it
34x34 per frame.
yo thanks bibby
thoughts on this?
it's a scaling joker where the scaling is in its odds
(odds increase over 2 means 1 in 20 goes to 1 in 18)
what'd happen if it triggers 10 times?
i set a cap to 1
Well then it isnt quite each time is it
I thought a cap to 1 means it only triggers the odds increase once
Meaning the best it gets is 1 in 18
nah, i just meant it can't go lower than /1
Mostly pray and stab yourself and cry
There was a small little guide in the modding area you can look for in regards to shadertoy shaders, otherwise I'd recommend looking at the smods examples are and look at their shaders to see how they do it
doing those first two already and atheist
Also the fuck is "shadertoy"?
ooohhhhh that thing
i didnt like that thing
balanced?
Smt why you thinking me am I wrong
No.
2x base is too low for that i feel
We're so besties :)
if i wanted a card to constantly wiggle but not use :juice_card_until() (too fast) what function could i do that in?
definitely not a drawstep, but also update() would not be smart either
that's the code im using as a base but it always turns out as some form of pink or it just flashbangs you
that'll get changed to X10 or something later
but other than that balanced?
is h_chips a thing
(i forgot to change it lowkey)
yea
bro what is hchips
mult = 10
now to see if anyone here gets the reference
Yes, but it is just normal chips.
i know how but i just forgot to change it
making sure
i might make it lose 1 dollar per hand
i want the blind to take a ridiculously long amount of time
like in the game i'm referencing
like no matter what i do to this it just appears as some form as pink
anyone have any ideas?
Why?
Also juice_card_until can take a custom delay.
missing texture maybe?
ive even given up on what i originally wanted to do and im settling for anything that's a similar color to what i'd want
try putting it in glsl.app
nope, if it were a missing texture itd just crash the game
good guess then idk
this card has the same chance of appearance as the soul, and understandably is powerful. it already changes the background when spawning to a deep red, but because of its slightly unhinged art, i'd like to make it as insane as possible
...did not know that
adding a whole blind, joker, and consumable based off this one game because i like it so much
don't even know what ima call my mod, it's just silly things i feel like adding
THANKS A LOT FOR THE HELPFUL ADVICE
LET ME GET RIGHT ON THAT.
somethingcom boutta see my favorite image
Why is the message for the chips here "ERROR"? (0:25)
if i knew how, i'd make the screen darker when this appears too
the plan is already to slow down music
You're trying to localize something that doesn't exist.
can you detect player's most played ranks
Yes.
how to
it's just chips though
when i try adding a custom message it shows in addition to the two previous ones
i wanna add a joker that gives mult based off the players high score in another game, specifically their endless score, should it be +mult or xmult, and how much should it give, the average score is around 2000 so should it be score / 100 = mult?
local ranks = {}
for k, v in pairs(G.playing_cards) do
ranks[v:get_id()] = (ranks[v:get_id()] or 0) + v.base.times_played
end
local mostplayed
local played = 0
for k, v in pairs(ranks) do
if v >= played then
mostplayed = k
played = v
end
end
thanks alot
wouldn't this just detect the rank they have the most of?
It shouldn't anymore.
what does the "collection_rows" element do in SMODS.ConsumableType?
Each number in that table says how many columns should be in each row.
For example {5, 5, 5} would be 3 rows and 5 columns for each.
I've got this, where j_willatro_box is the key of an upgraded version of chad. How could I set it up so that I can put one thing there that could apply for all upgraded joker versions? If any of that makes sense.
use = function(self, card, area, copier)
G.E_MANAGER:add_event(Event({
trigger = 'after',
delay = 0.4,
func = function()
play_sound('tarot1')
card:juice_up(0.3, 0.5)
return true
end
}))
delay(0.2)
for i = 1, #G.jokers.highlighted do
G.E_MANAGER:add_event(Event({
trigger = 'after',
delay = 0.3,
blockable = false,
func = function()
G.jokers.highlighted[i]:start_dissolve(nil, false)
SMODS.add_card({ key = 'j_willatro_box' })
card:juice_up(0.3, 0.5)
return true
end
}))
end
G.E_MANAGER:add_event(Event({
trigger = 'after',
delay = 0.2,
func = function()
G.jokers:unhighlight_all()
return true
end
}))
delay(0.5)
end
hey guys
trying to find & destroy the first queen held in hand. any ideas on why this error is happening?
i know im likely doing this in the worst way possible but bear with me
If you have that table you would just do table[G.jokers.highlighted[i].config.center.key] also you should be using card:set_ability()
Yes, cardtodestroy doesn't exist.
Also you should be using context.destroy_card
No, it's local
what difference does this make/what does this do
You should still be using context.destroy_card
It destroys the card safely.
... and if its not destroyed 'safely'?
thank you rouxls card
you're welcometh
There might be ghost cards.
awesome
No, those are unhighlightable cards that shouldn't exist.
(it was sarcasm)
would it go in the outer if statement? now its not crashing but its also not destroying any cards
i also removed the local from found
i think i wrote the for loop wrong since its not finding any queens in the first place
if context.destroy_card and context.cardarea == G.hand then
local found
for k, v in pairs(G.hand.cards)
if v:get_id() == 12 then
found = v
break
end
end
if found and found == context.destroy_card then
return {remove = true}
end
end
locals exist only in the statement they where defined in.
which one do yall fw more
how do i make a consumable spawn two cards from different sets (1 for each)?
SMODS.add_card({set = "set1"})
SMODS.add_card({set = "set2"})
had to make a variable so i could switch cases and make both while preserving the animation, but thanks!
this didn't work! fuck the animation then lmfao
I am again asking if anyone can help me with making a shader :3
whats stock
your best bet might be either aiko or eremel
Noted, when I see them I'll ask for help
what is foo and bar, i see it everywhere
thunk is online, quick post your awful joker ideas
Bit of a dumb question, I'm not too familiar with Love2D, and I think I'm running up against a feature of Love2D specifically.
G.E_MANAGER seems to have a definition for add_event in the balatro source, and I don't see a place where SMOD is messing with this. However, when I try to rawget this function, I get nil. I come to find out this is because the function is actually stored in a metatable. Is this from the fact that EventManager is a subclass of Object? If not, then where is it coming from? If so, how does that even work?
How do I make something that isnt retrigg-able (idk if its a word)
"retrigger-able" (with or without hyphen), and no idea
give me a second I'm fixing some bugs
Like I have this part that I dont want my thing to be upgrade multiple time
Not bug, feature
Only thing that can be retriggered without mods are cards, so unless this is an enhancement or edition, don't worry abt it
its an enhancement
blueprint_compat
I see you figured out your jokerforge dilemma
?
they mean:
No, jokers are cards.
how do i do something like collection_loc_vars on something that isn't a blind
Don't want to be copied? blueprint_compat = false in Joker definition, then use if context.blueprint then return end.
Don't want the Joker to be retriggered by other things? Add and not context.retrigger_joker as condition.
"is there a way to make the message box display variables? #1# doesn't seem to work, and message colors don't change either"
You could count the amount of times it triggers per hand perhaps?
Jokers can be retriggered?
Yes.
yeah but Its like a weird gold card that upgarde. I dont want the upgrade part to be retriggerable but the part where it give cash can be retrigger
Elaborate, please
oh, joker description variables are easy enough, I meant in the messages upon certain triggers
which I still haven't figured out
what is doing the upgrading
You have to enable it but it would be if context.retrigger_joker_check then return {repetitions = 1} end to retrigger all jokers once.
upgrade the cash amont
You can also retrigger consumables but it's a bit more work.
no i mean, is it a joker?
Ah
no its an enhancement
explain more on what it does
I''ll show you guys
Couldn't you just make the upgrade happen past when the retrigger context happens? (Like context.after or context.final_scoring_step)
bump
I like how those cards look
yeah just make the upgrade happen on a different context
ok I'll do that
thx
here's a demo for Blazing Umbra
(wild cards only count as one suit at a time, so I had to manually add in the wild card effect)
also what is that on the right
Its the mod TheFamily
what's it do
its show some stat
Its realy good for testing things
with that it works how I intended, thx y'all
whyyyyyyyyyyyyyyyyyyyy
G.GAME.ante doesn't exist.
i see my issue
calculate = function(self, card, context)
if card.seal and context.repetition and context.cardarea == G.play then
if card.seal == "Red" then
return {
repetitions = card.ability.extra.repetitions,
xmult = card.ability.extra.red_xmult
}
end
return {
repetitions = card.ability.extra.repetitions
}
end
end
not giving retrigger and xmult
whats wrong
context.other_card:get_seal() not card.seal
Move it to the end of the if
oh thanks
like this?
Yes.
thanks some
Yes, you can't do xmult in context.repetition
aw darn
Do it in context.individual
No, just put another if like if context.individual and context.cardarea == G.play and context.other_card:get_seal()
if context.individual and context.cardarea == G.play and context.other_card:get_seal() then
if card.seal == "Red" then
return {
xmult = card.ability.extra.red_xmult
}
end
like this?
oh
if context.individual and context.cardarea == G.play and context.other_card:get_seal() then
if card.get_seal() == "Red" then
return {
xmult = card.ability.extra.red_xmult
}
end
lke this?
No, it's : not .
whoops
Code?
calculate = function(self, card, context)
if context.repetition and context.cardarea == G.play and context.other_card:get_seal() then
return {
repetitions = card.ability.extra.repetitions,
}
end
if context.individual and context.cardarea == G.play and context.other_card:get_seal() then
if card:get_seal() == "Red" then
return {
xmult = card.ability.extra.red_xmult
}
end
end
end
Are you playing a scoring non-debuffed card with a red seal?
not add, set
You mean change the played hand?
maybe im missing some context?
ease_hands_played((-G.GAME.current_round.hands_left)+number)
thank you gangalicous
It's context.other_card:get_seal() == "Red"
the first if?
No, the one where you check if the seal is red.
oh okay
it works
thank you
how can i make it so in a blind every hand makes you lose 2 dollars
if context.before then ease_dollars(-2) end
in a blind
...do you mean entering the Blind you lose $2 per hand or you lose $2 per hand played?
a blind causing you to lose 2 dollars per hand played
also does ease dollars go negative
Blinds have calculate too, you just toss if context.before then ease_dollars(-2) end there.
like under 0 for the total
And yes.
ok nice
nvm fixed
now how can i
make it so cards that go to the discard pile
instead go back into the deck
Hook G.FUNCS.draw_from_play_to_discard()
guys thats totally intended
k
As someone who has play tested this effect it’s really not impactful at all
i need it for my blind because you are expected to take long
if you run out of cards its game over
thats why i give you an absurd amount of hands
because the blind is REALLY big
how to check if current blind is my modded blind?
Eremel! I was told to ask you for shader help
if G.GAME.blind.config.blind.key == "bl_modprefix_key"?
yuh i hooked it wrong
i also need to do the same for draw from discard to discard
actually isnt there a function for
why are you drawing from play to discard?
hold up i think im onto something
What is bro cooking
Yes, you need to draw it to the deck.
No, it doesn't.
wdym im playtesting rn it does
Yes, it draws cards already in discard to deck.
But not the ones in play.
You need to draw them to deck after.
i want just to basically disable the discard and keep moving it to deck, this accomplishes that
No, it doesn't.
how do i check for how many times someone has won a run?
Move the G.FUNCS.draw_from_discard_to_deck to after the old function has run.
how not?
like this?
No, move the return to the end.
?
Also it should just be return ret
No, it should just be return ret
The if is useless.
hi
hi
hi
bye
bye
now whats the function for discard to discard
spooky ass error
everything works
now how high should i make the blind
nvm
i beat it and clicked cash out
What do you need?
is there a way to check for if a player has won 3 times
i want to make shaders but i don't know anything at all abt it
I wanted to make one for different kinds of emotions but i can barely make one not be pink
You just want basic colour grading?
Originally i wanted more than that but it's taken so long that ill settle for that
Real
Right, do you have a shader file ready to go?
variable that's stored in the joker and goes up by 1 at the end of the round is how i did it
a .fs?
oh idk
Yeah
i have one but the code in there is just a copy paste from this: https://github.com/Steamodded/examples/blob/master/Mods/EditionExamples/assets/shaders/anaglyphic.fs
everything is set up properly, all i need to do now is make the actual shader
Okay that one’s a bit more involved to begin with, I’d probably grab the greyscale one as a base. I’m just about to head out for an hour or so, I’d recommend using the debug plus watch command and just playing around with changing different things to learn what stuff does, but a lot of it is just colour math
the watch command?
Lets you see changes to the shader without reloading the game, it’s on the debug plus wiki
But as a very quick summary, you’re telling each pixel what colour it should be in the shader file, so basic colour effects are reasonably straight forward once you are used to the syntax
I'm scared
somethingcom515
do you have enough wisdom to helpeth me

i think i found it
c_wins
would this work
if c_wins >= 3
return {
true
}```
No.
G.PROFILES[G.SETTINGS.profile].career_stats.c_wins >= 3
oh
its working but this is going to take so long lmao
oke
It’s just one of those things you have to learn
yea...
You got this Violet
You can look at the book of shaders too
That’s a very good resource
it still doesnt work
did i formulate it correctly
if G.PROFILES[G.SETTINGS.profile].career_stats.c_wins >= 3
return {
true
}
end
end
}```
crash log:
wow, bo burnham was right, all coding is is "words, words, words"
No.
owh
unlock_card(self)
Instead of return {true}
ok
Yes, show full code.
okay
in dm's?
ill do it here
name = "Transendence",
key = "j_bali_trans",
config = {
extra = {
xmult = 1.5,
face = false,
number = false
}
},
loc_txt = {
['name'] = "Transendence",
['text'] = {
"{X:red,C:white}1.5X{} Mult if both a",
"{C:attention}face card{} and a {C:attention}7{} are scored"
}
},
pos = {
x = 0,
y = 4
},
cost = 6,
rarity = 2,
blueprint_compat = true,
eternal_compat = true,
unlocked = true,
discovered = false,
atlas = 'CustomJokers',
loc_vars = function(self, info_queue, card)
return {
vars = { card.ability.extra.xmult } }
end,
calculate = function(self, card, context)
if context.individual and context.cardarea == G.play and context.other_card:is_face() then
card.ability.extra.face = true
end
if context.individual and context.cardarea == G.play and context.other_card:get_id() == 7 then
card.ability.extra.number = true
end
if card.ability.extra.number and card.ability.extra.face then
if context.joker_main then
card.ability.extra.face = false
card.ability.extra.number = false
return {
xmult = card.ability.extra.xmult
}
end
end
end
check_for_unlock = function(self, args)
if G.PROFILES[G.SETTINGS.profile].career_stats.c_wins >= 3
unlock_card(self)
end
return false
end
}```
You're missing then
ohhh
And a ,
where?
Before check_for_unlock
for some reason it doesnt affect jokers but the playing cards itself
Code?
function SMODS.calculate_individual_effect(effect, scored_card, key, amount, from_edition)
if G.jokers and next(SMODS.find_card("j_tngt_roblox")) and (key == "chips" or key == "chips_mod" or key == "h_chips") then
return ref(effect, scored_card, "xchips", amount, from_edition) --Changing key to xmult. If you want to change how much xmult it should give, change amount, I assume.
else
return ref(effect, scored_card, key, amount, from_edition)
end
end
It's chip_mod
No.
It's chips, chip_mod and h_chips
Also you should do effect.message = nil
in?
Before you change the key to xchips
it doesnt work i think. it doesnt show up in game as locked and it doesnt unlock after 3 wins
You should probably only do that if it’s chip_mod though
No, if key == "chip_mod" then effect.message = nil end inside the if
sure
mod.reset_game_globals time...
glink nugget request
it's going to take days and it'll look like shit based on current progress :D
why cant i set the unlock text
it shows the jokers effect as the unlock text
i changed it in en-us.lua and everything
Do you have unlocked in your description?
No, in the loc_txt/Localization
unlock or ['unlock']
Both work.
huh
in_pool = function(self, args)
return false
i put this in already
why is it still showing up
Show more code.
hold up
SMODS.Joker {
key = 'nxkoo',
loc_txt = {
name = 'Nxkoo'
},
rarity = "tngt_fourwall",
atlas = 'DEVS',
pos = { x = 0, y = 0 },
soul_pos = { x = 0, y = 1 },
cost = 20,
unlocked = true,
discovered = true,
config = {
extra = {
lines_mult = 0.1,
lines_count = 8528,
joker_chips = 5,
joker_count = 105
}
},
loc_vars = function(self, info_queue, card)
return {
vars = {
card.ability.extra.lines_mult,
card.ability.extra.lines_count,
card.ability.extra.lines_mult * card.ability.extra.lines_count,
card.ability.extra.joker_chips,
card.ability.extra.joker_count,
card.ability.extra.joker_chips * card.ability.extra.joker_count
}
}
end,
set_badges = function(self, card, badges)
badges[#badges+1] = create_badge('DEAD', G.C.RED, G.C.BLACK, 1.2 )
end,
calculate = function(self, card, context)
if context.joker_main then
return {
xmult = card.ability.extra.lines_mult * card.ability.extra.lines_count,
xchips = card.ability.extra.joker_chips * card.ability.extra.joker_count
}
end
in_pool = function(self, args)
return false
end
end
}
It goes outside of calculate
ohh
i didnt think i could be more dissapointed in you
YOU DIDNT EVEN TELL ME WHAT TO DO
BECAUSE YOU GAVE ME 4 LINES OF CODE
how do i modify vanilla enhancements' value
cool thanks
okay turns out context.poker_hand shouldve been context.poker_hands
what is the equivalent of G.P_CENTER_POOLS["Enhanced"] for editions
G.P_CENTER_POOLS.Edition
How would i create a card with a random edition with SMODS.add_card
how does this even happen, i did nothing related to tags
nvm turns out cryptlib is fucky
is SMODS.destroy_card not a real function? vanillaremade uses it but it crashes my game when i use it
SMODS.destroy_cards
did i write destroy_card somewhere
no i just cant read
why does my game crash on this now? vanillaremade does the exact same thing for familiar, incantation etc and this card is pretty similar
what's the crash
what's card.ability.extra.cards
where is it defined
wait
no
i used the wrong variable name oops
okay i dont even know what causes this
i feel sorry for how many crashes your getting rn 😭
are you trying to give a table to poll_edition
this?
the arguments are not structured the same as the smods ones
I should make a smods wrapper for poll edition at some point
when its not a table vsc gets pissy
have you ever called a function before
i have and those worked
functions in lua don't have named parameters so you can't do guaranteed =
it would be poll_edition("seed", nil, nil, true)
(the second nil can be true if you want to remove negative)
how can i make a joker trigger when opening a pack kinda like hallucination
context.open_booster?
How can I make a custom deck with Steammodded
very similar to jokers just with a few differences
I'm trying to figure out how to modify jokers when they are bought from the shop
Or added in another way
what's the exact effect you want?
If a joker is added; make them Eternal
made a deck but game crashes the moment its selected
Unless the joker can't be Eternal
use context.card_added
Okay
How do I get the card that was added
Oh got it
I think
in the menu* (so it crashes before i can even open it)
be more specific + crash log would help alot
how to detect if a booster pack is a celestial booster pack
booster.config.center.kind == "Celestial"
so i can put any packs by their name?
wdym
Uh no I don't
context.card is the card
etc.
"Arcana"
i should figure out how to make diviner's chance work later
(what it's supposed to do is have 1/3 tarot cards generate another tarot card when used)
Is it possible to forcably end the shop?
G.FUNCS.toggle_shop()
Rip all the real estate
so, i have this calculate function (sorry if im using the wrong terms im very new) and its supposed to just give one card when it triggers, but uh as of current when it triggers it begins infinitely giving cards? how do i make it just trigger once?
this calculate function is attached to a deck btw, not like a joker or anything else
if context.individual and context.cardarea == G.play then
if pseudorandom('extraterrestrial_deck') < G.GAME.probabilities.normal / self.config.odds then
G.E_MANAGER:add_event(Event({
func = function()
local card = SMODS.create_card { set = "Base", rank = "votd_Extraterrestrial" }
G.deck:emplace(card)
table.insert(G.playing_cards, card)
end
}))
return { true }
end
end
end```
return true in the event
oh im really silly
how did i not notice that lmao ive taken note of the fact that events need to return multiple times
i guess its always the silly mistakes that get you
key = "SStar",
loc_txt = {
name = 'Sale Star',
text = {
"+1 option in booster packs",
}
},
rarity = 2,
atlas = "RiskOfJokes", pos = {x = 4, y = 0},
cost = 5,
unlocked = true,
discovered = true,
eternal_compat = true,
blueprint_compat = true,
perishable_compat = true,
calculate = function(self, card, context)
if context.open_booster and context.card.ability.name and not G.GAME.rerolled_pack then
G.E_MANAGER:add_event(Event({
trigger = 'after',
delay = 0,
blockable = false,
blocking = false,
func = function()
if G.pack_cards and G.pack_cards.cards and G.pack_cards.cards[1] and (G.pack_cards.VT.y < G.ROOM.T.h) then
G.GAME.pack_choices = G.GAME.pack_choices + 1
if G.GAME.pack_choices > #G.pack_cards.cards then
G.GAME.pack_choices = #G.pack_cards.cards
end
return true
end
end
}))
end
end
}```
it doesnt have a discription nore name? also the wrong rarity
did you restart the run before testing
how do i make effects like turtle bean, that gives you +5 hand size if you have it?
the code looks fine to me idk
no, i mean, if you HAVE it, it adds +5 hand size
srry, i didn't explain myself
i want a joker that increases ante +1, but gives you some spectral cards every time you defeat a blind
so, if i sold this joker, the ante goes down by 1
ok then you would do what turtle bean does but with antes
yeah
and thats what i linked
but without the decreasing element
yeah, the relevant part for you is add/remove from deck
oh, i understand now
i was changing the wrong file😔
ok, now it works :D
thx
now i need to figure out how to create specific spectral cards...
SMODS.add_card{ key = "c_key" }
lol
you would replace c_key for the spectral key or use set = 'Spectral' for a random one
ok, so the prefix for spectral cards is s_?
no, c_
ok then
how do you detect if the player has modded joker
Check its center object if it has a mod field
Like by checking if G.P_CENTERS["joker_key"].original_mod exists
Iirc this field isn't on the card itself
hmmm
original_mod is supposed to be the id of the mod?
It contains data about the mod it's from, like prefix or optional features
Just noticed .mod exists too and seems to be the same thing?
got it
imma make sure im doing it right by checking @shell timber Jokers
i forgot their name tho
thats the jerma icon looking one right
dont do it my way
do not do it my way
well if you insist
im just looking on how you do it
whats the name of the joker again
query tmj with !mod:vanilla and check against that obviously /j
see the funny thing is that that would work
Actually ig G.P_CENTERS[card.config.center.key] is always true
what's wrong with card.config.center.mod
i was just about to
Copy this instead
uhh im not sure
steamodded makes a "mod" for vanilla iirc
but i don't know if it's used there
hover over a vanilla joker and eval dp.hovered.config.center.mod
that'll answer that question
rhanks
I don't think it is
figures
@red flower what's the performance difference between vanilla and vanillaremade?
i imagine it's written when a center is created through the smods API and vanilla jokers aren't
if you've ever tested
update joker display I think
got it
never tested sorry, I can't imagine there would be much difference except for maybe the jokers that count cards in deck every frame
oh true its the old probabiltiy jokerdisplay still oops
i still don't know how to recreate that crash
gotcha. once the game stops being worked on it might be fruitful to rewrite joker behavior to work better with luajit
(in 100 years)
yeah haha
what would that involve?
....buying fake scholar hard crashes my game...
fake scholar?
all i did was click BUY
game instant crashed, no log, window gone
not sure if eremel knows what inscryption is, and even then that's not a helpful description
I do
he's helped before with him, i was gonna explain anyway
👍
is this the first fake one you've tried?
no, i tried splash and golden joker before this
both worked (ijiraq didnt mimic splash but ik how to fix that)
I would guess that it's infinitely calling add_to_deck
but I don't know how you've set up the other stuff
the setup is so repetitive i have a snippet
the add_to_deck is supposed to just add the alt key and a sticker
yes but if you infinitely call it the game will overflow and crash
how do i infinitely call it? last line in the lovely log according to the files
well I don't know if you're calling it specifically in your ijiraq stuff
also you absolutely do not need to be doing your ace count in every calculate cycle
that could also be the problem
bet
it is incredibly rare to do things outside of a context check
i'll see if that fixes it
how can i spawn someone in a shop so i dont have to reroll hunt
does it have to be a tag thing
do eval dp.hovered:set_ability('joker_key_here')
got it thanks
does this mean i have to hover my cursor over the shop or
yes
out of interest, can you show me your Card:get_id function in the dumps?
yeah hold
I have no idea what's causing the infinite loop then 🤷♂️
unless you hook it somewhere
nope, only used in contexts
but hey
no crash so im not complaining
nvm i tried to score
how do i generate a joker of a certain rarity
is asserting destroy_cards bad
SMODS.add_card{ set = "Joker", rarity = "[key]" }
rarity = 'Rarity' in your add_card
at least i'm guessing that's the issue
many thankses!
👋
hello dilliard
Hi N
Hey at least you have progress
hi dilly
Hi toma


