#💻・modding-dev
1 messages · Page 562 of 1
I think I figured it out
The function name was changed
Now let's see if it actually functions
pun :3 hehe
hear me out
bsod joker
X1 mult
Gains X1 mult at end of round
1 in 16 chance to self destruct and crash your computer
[eternal]
they're telling me this is "malware" and "puts their machine at risk"
they're all full of shit 🗿
If 1 in 4 never hits what makes you think 1 in 16 would ever hit in your lifetime
Card please just animate
-# look at what phanta does :3
Why does renaming my own mod file while having Talisman causes the game to crash on startup with this oblique crash message?
hello friends. I'm having a little trouble with a joker here.
Rayquaza eats stone cards, and it adds to an xmult value. However, that's not the problem. I want it to display text at the same time the cards are destroyed.
and believe it or not, I actually experimented beforehand, by putting [message = "Eaten!"] in different "return" groups
but none of them did what i wanted it to
so now i'm coming for help
add your message alongside the remove = true :D
wait actually i tried putting it next to remove = true
but i'll try again to see how it works
yeah that's not what it does
it says "eaten!", and then a card drops
that's alright
would there be a way to detect when the cards are about to be destroyed? maybe then, I could display the message at the same time
is there any way to change the amount of suits per page in the deck summary it's really annoying only having 4 when 5 fits well still
even if i have to hook it somewhere and add a config or smth that's fine
Yes, hook Card:remove()
imma keep it real boss, i dont know how to hook
ok, where/how would i implement this?
😭the tutorial says how
Esz what’s reading
are you asking what i'm reading, or what the concept of "reading" is?
The concept
"Reading", as traditionally accepted in linguistics, is the act of comprehending and gaining information from written words
how those words are written is a product of the format the writer is using
are you going to ask me if I'm comprehending and gaining information from the words written in the tutorial or am i free to ponder it by myself
really reallyyy stupid question but how do i get the vars from loc_vars outside of the text styling stuff
Ha?
Wdym
like from this
basically im just stealing the code i used to make the description accurate for the actual mult giving but i want to see if theres a way to reuse the function so that i dont make my code more inefficient than it already is
Buddy
You can store variables in joker config and access them as card.ability.extra.variable
ty
Also return them as said
is it possible to change the jingle that plays when you win?
Sound ?
Ye
If you can find the key
watdahell
is there something i can hook which is ran after all centers are loaded
You can make your mod have a very low priority like 9999999
i hook SMODS.injectItems
yeah but the code for its main file will still be ran before all centers exist
that prolly works for me, ty
is this from a mod youre making
the priority doesnt matter because smods always inserts objects after
lily what are you cooking in the pot... 
oh this is unrelated to hotpot
Oh lmao
oh then i should have given you a good answer..
was that a bad answer...
im joking
no im using a mod
sobs
then #⚙・modding-general
it wouldve been true if there wasnt a critical bug in my optimizations of xp gain
eeyouch
which it was still a huge optimization because it went from ~30,000 levels at once before ur game hardcrashed to being able to earn any amount at once w/o lag
like while i was testing i gained e70 levels at once and it was fine
Messing with Joker Forge and attempting to fix things in lua, but I'm stumped. Here's the card description for reference, but the Joker won't add any hands. I think it's reading discards after they're all removed, but I dunno how to make it add hands before removing discards. I tried custom variables and reading the mod variables directly, and switching around the order, but no luck.
Joker Forge blocks for reference as well
readding a variable to record the starting discards amount, then adding that to Hands
That did it. Red deck starts every round with 12 hands
ok so ive finished making my joker but since you get a lot of multi should i remove the indicator that shows how much you need (the 72 thing) or be nice
also wait i need to improve this because half the time it wont be possible
but originally it was way easier
Is there a better way to word this effect? It doesn't feel right but I dont know what to change
I think this is worded clear enough ngl
Is there someone good with event manager cause I have this fonction that change the seal but the seal get change before the card is flip and thats not what I want
"1 in 2 chance to give X2 Mult and $2. Otherwise, give X0.5 Mult and -$2."
"1 in 32 chance to give X10 Mult and $20, then self destruct"
small changes but i think it helps
Yes, remove nil, true on the Card:set_seals.
ok I'll try that
I did it and now its removing the seal before turning the card ?
Ok, mod's returning an error message on bootup. I don't understand the lua errors it's picking up, cause the references I'm using don't have symbols there and it's asking me to insert brackets in the middle of variables and functions?
is returning remove = true only valid during discard and destroy_card?
Yes.
what should i do to say remove them while being scored?
Remove every , that's outside of a table.
You would use context.destroy_card
okay do i say context.destroy_card and context.individual?
No, it would just be context.destroy_card
Is there a more up-to-date list of all contexts than the Calculate Functions page on the wiki?
that destroys them at the end after done scoring
is it possible to score a card, when joker gets 'triggered' remove it then go to next?
Ok, thank you!
Hmm... so Jokers like DNA start juicing before the first hand is played, and I need to have a Joker start juicing right before the third hand is played. What context should I use for that? I can't use hand_drawn like in DNA's code because that won't trigger if no cards are actually drawn
context.press_play?
I phrased that poorly, I mean I basically want it to start juicing after the second hand is completely finished scoring
is this impossible
context.hand_drawn and G.GAME.current_round.hands_played == 2
Like I said, it doesn't seem like context.hand_drawn activates if no cards are drawn (which can happen if cards held are greater than hand size)
context.after
Thank you! :)
Hmm... actually, that seems to trigger after the cards finish scoring, not after all the scoring finishes
since I can't find it in the docs, what's the best way to add an extra option after opening a booster pack?
like, instead of a spectral pack giving two cards, it gives three
Modify G.GAME.modifiers.booster_choice_mod
thanks! :>
Can anyone help me figure out why the new properties aren't applying? I have the required mod.
@umbral zodiac since you made the CardPronouns mod
You need your mod prefix.
if youre on latest cardpronouns
it uses the pronouns key and not a table
so itd be "she_her" and not the table
also yeah you would need the mod prefix for the joker
Wait what does cardpronouns actually do
I've not heard of it
i made it 3 hours ago so ideally you havent heard of it
ah
it gives every card ingame random pronouns
lmao
example
Then it doesn't match up with that GitHub says. Just a heads up
blueprint should copy pronouns trust
it does
shrug
i just changed it like 15 mins ago
if it doesnt update when you reload the page then something is strange
for sure
calculate = function(self, card, context)
if context.before then
card.ability.extra.cards_to_chomp = {}
end
if context.individual and context.cardarea == G.play then
if SMODS.pseudorandom_probability(card, 'chomper', 1, card.ability.extra.odds) then
table.insert(card.ability.extra.cards_to_chomp, context.other_card)
return {
xmult = card.ability.extra.xmult,
message = "...",
colour = G.C.CHANCE
}
else
return {
xmult = card.ability.extra.xmult
}
end
end
if context.destroy_card then
for _, value in pairs(card.ability.extra.cards_to_chomp) do
if value == context.other_card then
return {
remove = true
}
end
end
end
end
why no cards being destroyed
So I did the changes you said aaaaand-
yeah i think your cardpronouns is outdated still
add_to_deck = function(self, card, from_debuff)
G.GAME.modifiers.booster_choice_mod = G.GAME.modifiers.booster_choice_mod + card.ability.extra.booster_mod
end,
remove_from_deck = function(self, card, from_debuff)
G.GAME.modifiers.booster_choice_mod = G.GAME.modifiers.booster_choice_mod - card.ability.extra.booster_mod
end
added this to my joker but I'm getting a nil value error
G.GAME.modifiers.booster_choice_mod = (G.GAME.modifiers.booster_choice_mod or 0) + card.ability.extra.booster_mod
ahh, appreciated! thanks!
Just updated again. Thanks.
Hi! How do I make a planet card for a custom poker hand that only shows up when the hand was played before?
calculate = function(self, card, context)
if context.before then
card.ability.extra.cards_to_chomp = {}
end
if context.individual and context.cardarea == G.play then
if SMODS.pseudorandom_probability(card, 'chomper', 1, card.ability.extra.odds) then
table.insert(card.ability.extra.cards_to_chomp, context.other_card)
return {
xmult = card.ability.extra.xmult,
message = "...",
colour = G.C.CHANCE
}
else
return { xmult = card.ability.extra.xmult }
end
end
if context.destroy_card then
for _, value in pairs(card.ability.extra.cards_to_chomp) do
if value == context.destroying_card then
return { remove = true }
end
end
end
if context.remove_playing_cards then
for _, value in pairs(card.ability.extra.cards_to_chomp) do
if value == context.removed[0] then
return {
message = "CHOMP!",
colour = G.C.RED
}
end
end
end
end
any ideas why the chomp message isnt showing?
Put softlock = true in the config.
Tables are 1-indexed in lua, not 0-indexed
you cant be serious
thankyou
That easy? Thanks! And to make the card for specific hand it would be hand = prefix_name in the config too?
name = "amethyst",
key = "amethyst",
loc_txt = {
label = 'Amethyst Card',
name = 'Amethyst Card',
text = {
"{X:mult,C:white} X#1# {} Mult",
"{C:green}#2# in #3#{} chance to",
"create a {C:spectral}Spectral{} card",
"{C:inactive}(Must have room)",
}
},
badge_colour = HEX("b2112a"),
atlas = "Jokers",
pos = {x=9, y=13},
config = { Xmult = 2.5, extra = { odds = 4 } },
shatters = true,
loc_vars = function(self, info_queue, card)
local numerator, denominator = SMODS.get_probability_vars(card, 1, card.ability.extra.odds, 'balalalatro_amethyst')
return { vars = { card.ability.Xmult, numerator, denominator } }
end,
calculate = function(self, card, context)
if context.destroy_card and context.cardarea == G.play and context.destroy_card == card and SMODS.pseudorandom_probability(card, 'balalalatro_amethyst', 1, card.ability.extra.odds) then
if #G.consumeables.cards + G.GAME.consumeable_buffer < G.consumeables.config.card_limit then
G.GAME.consumeable_buffer = G.GAME.consumeable_buffer + 1
G.E_MANAGER:add_event(Event({
func = (function()
SMODS.add_card {
set = 'Spectral',
key_append = 'balalalatro_amethyst'
}
G.GAME.consumeable_buffer = 0
return true
end)
}))
return {
message = localize('k_plus_spectral'),
colour = G.C.SECONDARY_SET.Spectral,
remove = true
}
end
return {
remove = true
}
end
end,
}```
[SMODS Balalalatro "Balalalatro.lua"]:1314: attempt to call field 'get_probability_vars' (a nil value)
Was copying VanillaRemade's Glass
Did the function get changed or smthn?
No, it would be hand_type = "modprefix_key"
Thanks
Update SMODS
Oh that message timing is a little jank if your new run crashes immediately
You need to update talisman too
ah
can someone tell me the key/id for oops all sixes or where to find that info
j_oops
Yep that fixed it.
yall are amazing
thx
Is there a way to call post_trigger on your own joker? I'm trying to create Hiker with a limited number of uses
i'm gonna try context.other_card == card and see if that works
calculate = function(self, card, context)
if context.individual and context.cardarea == G.play then
context.other_card.ability.perma_mult = (context.other_card.ability.perma_mult or 0) + card.ability.extra.mult
return {
message = localize('k_upgrade_ex'),
colour = G.C.MULT
}
end
if context.post_trigger and context.cardarea == G.jokers and context.other_card == card and not context.blueprint then
if card.ability.extra.s_count - card.ability.extra.s_mod <= 0 then
SMODS.destroy_cards(card, nil, nil, true)
return {
message = localize('k_eaten_ex'),
colour = G.C.MULT
}
else
-- See note about SMODS Scaling Manipulation on the wiki
card.ability.extra.s_count = card.ability.extra.s_count - card.ability.extra.s_mod
return {
message = "-"..card.ability.extra.s_mod,
colour = G.C.MULT
}
end
end
end
this works, but the message pops up on the affected card rather than the joker itself
and I wouldn't want a random 6 or something with a little "Eaten!" popup over it x3
couldn't you give the joker it's own variable that counts down once every trigger and doesn't let it trigger when the variable reaches 0?
that's what I'm doing, I think
card.ability.extra.s_count is how many uses of the joker remain
return an additional message_card parameter with the value set to your card
ahhhh i forgot that existed for a sec, oops! thanks
Does anyone know what just happened? From what I can understand (and I understand that poorly) the game wanted to add edition to the planet card (??)
You can add editions to planet cards, so that isn't inherently the issue
@red flower sorry for the late response but this is what I tried to do with my custom tag:
basically like the uncommon Tag does, it makes a Scienceful (this is not a rarity but an objectType) Joker appear in the shop for free.
The result is that it makes it appear but as a separate entity, I can move it freely but not buy it and it shouldn't do that...
Also it kind of messes up with the vanilla tags:
...why are you redefining Tag:apply_to_run?
Yes, because you're overwriting Tag:apply_to_run so other tags will always do that.
oh, I shall remove that function
apply = function(self, tag, context)
if context.type == 'store_joker_create' then
local card = SMODS.create_card {
set = "Scienceful",
area = context.area,
}
create_shop_card_ui(card, 'Joker', context.area)
card.states.visible = false
tag:yep('+', G.C.GREEN, function()
card:start_materialize()
card.ability.couponed = true
card:set_cost()
return true
end)
tag.triggered = true
return card
end
end
oh wait, so the apply function kinda works like the calculate function of a joker?!
I still have to re-read the Tags part of the doc cuz it kinda confused me
Yes, but it has different contexts.
I have a set of jokers that I wish to hold in a different collection page within this area
Is there a way to do this?
There are some other helper functions somewhere
G.E_MANAGER:add_event(Event({
func = function()
for k, v in pairs(G.playing_cards) do
if v.base.rank == 'A' then
v:set_ability('m_gold', true)
end
end
return true
end
}))
end```
I always forget what the rank id is for aces lol
14
How would I make custom suits not appear from the beginning of the round and enable them through consumable?
how to incorporate other scripts than main.lua?
assert them in main
assert(SMODS.load_file("<path (relative to current file)>")()
I mean I already have the way to enable them... The thing is they're enabled from the beginning. Is there some way to run certain code at the start of every new run?
v.base.rank doesn't exist.
Yes.
No, it would be card:get_id() == 14
Define SMODS.current_mod.reset_game_globals(run_start) and check for run_start being true. Additionally, suits have in_pool(self, args), with args.initial_deck being true when the deck is being generated.
oh alr thanks!
how can I check if there are jokers with editions in the joker slots kinda how abstract does?
I tried putting the function that gets the editionless ones and modified it but it then gave me error.
so I left it like this:
loop over G.jokers.cards, and check each one if they have card.edition
SMODS.Edition:get_edition_cards(G.jokers)
alrighty
to the local variable or to the G.jokers inside the return?
What is the goal?
like abstract gives Mult for each joker in the jokers slots, I wanna do that this joker I'm making, gives Mult for each joker with an Edition in the joker slots.
Then it would be in the return.
The problem is, I tried like this but then it gives me this error when I hover the arrow over the joker:
(the calculate function is still wip)
G.jokers and #SMODS.Edition:get_edition_cards(G.jokers) or 0
it works now, thank you!
how would i make a joker flip and change sprite? i know config.center.pos is used but i dont know how i'd do it by flipping
oh wait i'll check bunco's cassette
What is context.cry_press?
mmm is there any mod that creates a button below the joker card area?
joyousspring but that's above iirc
that could probably work as well tbh
i just checked it out that's basically what i needed
how do you check if a hand only contains debuffed cards
i think debuffed cards have card.debuff set to true
Card.debuff
Isn’t there a utility function for that? Or was it to set the debuff status?
this
SMODS.debuff_card? its for debuffing cards
if you want to check whether a card is debuffed or not you should be checking card.debuff
If the amount of debuffed cards == #G.play.cards
Or scoring cards
if card.debuff == true then
?
just if card.debuff then will work too
just iterate through the card table lmao
Or a for loop
but yeah, change card with whatever card ur checking
Btw i told him how to do it yesterday
i still dont get it
Card references the joker
thats checking for if the joker is debuffed...
It’s a bit confusing since it doesn’t use self to refer to the Joker itself
i have no clue how to do this
😭it’s so simple
The played cards are generally accessible via a context
like what s said
Cut to the chase
You can take a look at some vanilla effects
Or N’’s vanilla remade mod
i tried
Context.individual doesn’t trigger effect for debuffed cards from my knowing
theres no Joker that messes with debuffed cards
Nxkoo you know how to loop through the played cards right?
Just change the internal stuff there to return
this?
Clever but I don’t know if context.scoring_hand is what you want
I thought you wanted the played hand
so what should i do
If context.before then
Local debuffedcards=5
For _,v in iprais(G.play) do
If v.debuff then
Debuffedcards=debuffedcards+1
End
End
If debuffedcards==#G.play then
Return
End
On phone btw
Quick question: What counts as a mechanic for the tag in https://discord.com/channels/1116389027176787968/1209506514763522108 ?
It depends on the timing
It depends on what the effect is for what you’d use
But also I think there’s a context for the full, played hand
I thought you surrendered
i DO
Something new introduced to the game
Or overwriting something existing
Matador 2
I mean it’s hard to say without knowing what you want to do
Stupid
FUCK
Why are you breaking
The timing (context) depends on the actual effect
Ns why did you set it to 5
because the example said so
The rest of the logic doesn’t need the full effect, but it needs some description of the effect as a map
my heart breaks
You know what break does
Heartbreak from Victin’s Collection?
I thought the original implementation with break was smart
You presumably don’t need an integer counter
So just a Boolean and a break would suffice
so do i delete the break or
Depends on if you want 1 card to be debuffed or to check if all are
If your question is: “do all elements of a table have a property?”, you can answer it by setting the answer to true then iteratively checking each element and breaking when you find one without
all
Setting the answer to false before breaking of course
i see
They don’t need a number though
so debuffs == #G.play then
If they want to check, they just need a Boolean
It depends on what you want to do
They said they wanted to check if all cards were debuffed or not
Then do what i said
And remove the not in the if statement
This was pretty good
Did you see who posted it
yes he mean it
Remove the not
I think the code I had indicated was almost good enough
Anyways, I think s is overcomplicating but also I don’t think having too many cooks is helpful
it crashes before it
This counts non debuffed cards
So I’ll let s handle it despite thinking they’re making it harder than it needs to be ;P
Not really i just think this is easier to understand
I disagree mainly because their previous code was shorter and close to functional AFAIK
So you told them to do something completely different for no reason
Which is harder to understand than the code they had already written and was close to working
can you just tell me which one is working
it took me a day to write this joker
I think this excerpt does what you want except for looking at scoring cards instead of played cards
it crashes tho
I can’t tell if the code around it works
can i dm you of it instead
But just that excerpt makes sense to me
Sure
I have a question. If the joker card area is hidden and contains jokers within it, can it still score after you hide it (with states.visible = false)?
does lovely has an easy way to identify where the mod is located at instead of having to loop through mod folders?
yes
great, thank you
my head hurts, im trying to make two card areas and both work fine on their own but once i try to put them together they follow each other and the positioning goes to shit 
Question: why does the game not check if a joker in the joker slots has an edition?
that function checks a card area, not a card
oh, then what is the function that checks the single card's edition?
card.edition
oh right
how could i make a card area score before the joker area? Right now it scores after all of the jokers finish scoring
inject it before the joker area
how would I do that? Sorry if it's a really vague question
how are you currently adding your area?
local start_run_reflocust = Game.start_run
function Game:start_run(args)
if not self.locust_area then
self.locust_area = CardArea(
0, 0,
self.CARD_W * 4.9,
self.CARD_H * 0.9,
{ card_limit = 5, type = "jokers", highlight_limit = 1 }
)
end
G.locust_area = self.locust_area
start_run_reflocust(self, args)
if not self.locust_ui then
self.locust_ui = UIBox {
definition = {
n = G.UIT.ROOT,
config = { align = 'cm', r = 0.1, colour = G.C.CLEAR, padding = 0.2 },
nodes = {
{ n = G.UIT.O, config = { object = self.locust_area, draw_layer = 1 } }
}
},
config = { align = 'cmi', offset = { x = 0, y = 0 }, major = self.jokers, bond = 'Weak' }
}
G.locust_ui = self.locust_ui
end
if G.jokers and G.jokers.config and G.jokers.config.type then
self.locust_area.config.type = G.jokers.config.type
end
I mean to calculation
are you asking how I'm making it score or
yes
[[patches]]
[patches.pattern]
target = '=[SMODS _ "src/utils.lua"]'
pattern = "-- TARGET: add your own CardAreas for joker evaluation"
position = 'before'
match_indent = true
payload = '''
if G.pactive_area then table.insert(t, G.pactive_area) end
if G.locust_area then table.insert(t, G.locust_area) end
'''
okay, so you want to change where in the table you insert it so it's before the joker area
that worked, thank you a lot !!!!!
does card.config.center.config contain the base ability values of a card, or are there things that affect this table too
they should contain the base values
may be stupid but how do i make a joker just give +1 hand or discard at scoring for just that round?
ease_discard and ease_hands_played
Is there a way to remove a card's base chips value with an enhancement while still keeping the suit and rank? I tried replace_base_card = true, but it also removes the suit and rank.
Not remove permanently, just while the enhancement is there
is rarity 1 uncommon or common
common
oh
you can configure any sticker's compatibility on a joker (including modded) with <key>_compat
does everything inside of a center definition get copied into the object's G.P_CENTERS entry, or just the pre-existing parameters?
everything
except rental I think
i feel sorry for ruby
😭
we already have dramas about me not too long ago
dont worry
the prayers has been answered
good luck
i shouldnt be joining eiher way
How do I get poker hand's level? Like in planet cards descriptions there's [lvl. 1] and text after
after drawing from play to hand, the drawn card flips over and becomes unselectable
i know vaguely why this is happening, the game's still trying to draw it to discard
but, why?
and how can i fix this?
You use G.GAME.hands["Poker Hand Name"].level
[be careful, as Talisman can break with that]
Will break that
Wait are you able to index a map this way in lua
That's sick
And how do I implement that in text? Do i just:
desc = '['..G.GAME.hands["Poker Hand Name"].level ..']lvl AND TEXT AFTER'?
I guess not
Why does this happen? I've set unlocked and discovered true and it uses the right atlas
key = "animation",
pos = { x = 0, y = 0},
atlas = "animation",
unlocked = true,
dicovered = true,
no_collection = true,
update = function (self, card, dt)
card.children.center:set_sprite_pos({ x = math.floor(G.TIMERS.REAL * 10) % 50, y = 0 })
end,
in_pool = function(self, args)
return false
end
}```
-# Sorry for the wall
it says dicovered
ooooh in vars... yeah that makes sense
thanks
I have a uh.. problem.. I made a separate card area for another set of jokers and I added a Swap button for ease of use so you can manage both areas whenever you want. This works perfectly fine but when I try to play another deck and THEN the deck with this double card area function the area just flips to to the other side when i press the button and idk how to get around this.
It's always them damn typing errors TwT
whats the code
i have this thing in my mod too
(bump)
dihhcovery 
want me to share here?
yeah
alright, one moment
Card Area
local start_run_reflocust = Game.start_run
function Game:start_run(args)
if not self.locust_area then
self.locust_area = CardArea(
0, 0,
self.CARD_W * 4.9,
self.CARD_H * 0.95,
{ card_limit = 5, type = "jokers", highlight_limit = 1 }
)
end
G.locust_area = self.locust_area
start_run_reflocust(self, args)
if not self.locust_ui then
self.locust_ui = UIBox {
definition = {
n = G.UIT.ROOT,
config = { align = 'cm', r = 0.1, colour = G.C.CLEAR, padding = 0.2 },
nodes = {
{ n = G.UIT.O, config = { object = self.locust_area, draw_layer = 1 } }
}
},
config = { align = 'cmi', offset = { x = 0, y = 0 }, major = self.jokers, bond = 'Weak' }
}
G.locust_ui = self.locust_ui
end
if G.jokers and G.jokers.config and G.jokers.config.type then
G.locust_area.states.visible = false
self.locust_area.config.type = G.jokers.config.type
end
end
Button Functionality
local game_start_run_ref = Game.start_run
function Game:start_run(args)
game_start_run_ref(self, args)
if G.GAME.selected_back and G.GAME.selected_back.effect.center.key == "b_tdec_tainted_nebula" then
self.locust_buttons = UIBox {
definition = {
n = G.UIT.ROOT,
config = {
align = "cm",
minw = 1,
minh = 0.3,
padding = 0.15,
r = 0.1,
colour = G.C.CLEAR
},
nodes = {
{
n = G.UIT.C,
config = {
align = "tm",
minw = 2,
padding = 0.1,
r = 0.1,
hover = true,
colour = G.C.RED,
shadow = true,
button = "SwapSets"
},
nodes = {
{
n = G.UIT.R,
config = { align = "bcm", padding = 0 },
nodes = {
{
n = G.UIT.T,
config = {
text = "Swap",
scale = 0.35,
colour = G.C.UI.TEXT_LIGHT
}
}
}
},
}
}
}
},
config = {
align = "tr",
offset = { x = -7.3, y = 3.4 },
major = G.ROOM_ATTACH,
bond = 'Weak'
}
}
end
G.FUNCS.SwapSets = function(e)
G.E_MANAGER:add_event(Event({
trigger = 'immediate',
func = function()
if not G.locust_area or not G.jokers then return true end
if G.locust_area.states.visible == false then
G.jokers.states.visible = false
G.locust_area.states.visible = true
else
G.jokers.states.visible = true
G.locust_area.states.visible = false
end
return true
end
}))
end
end
theres sticker:apply but is there sticker:remove im trying to make a hook that does something when a specific sticker is removed but its not working
did you try without the if not self.locust_area check
no, i'll do that right now
sticker:apply(card, true) adds it, switching the true to false removes it afaik
that seems to have fixed it funnily enough
i feel a bit dumb now but i suppose it's a learning experience
i spent hours trying to get it to work
Where would I put SMODS.debuff_card in the context of a Joker preventing specific kinds of cards from being disabled? I have two separate jokers that would provide immunity from debuffs:
- one that prevents Jacks and 8s from being debuffed
- one that prevents cards already played that Ante from being debuffed, reverse Pillar style
I'm not sure if this is anadd_to_deckkinda scenario since I haven't yet worked with debuffing cards
ALSO THANK YOU A LOT
What number is 'In a round/game' in G.STATE?
please use G.STATES["state name"] not numbers
you probably want G.STAGE for that tho
Okay, why though?
magic numbers are harder to read than enums
and if they ever change it can break
Okay, thank you :3
What is the sandbox stage?
ive seen a couple of functions related to it but no idea honestly
How would I use it in an if statement?
literally the exact same but with that in place of a number
G.STAGE == G.STAGES.RUN is what you want
And how would I change this?
if G.STATE == 11 then
return 6
end
end```
Because changing `G.STATE == 11` to `G.STATES == G.STATES.MENU` or `G.STAGES == G.STAGES.MAIN_MENU` doesn't work
G.STATES != G.STATE
G.STAGE == G.STAGES.MAIN_MENU
Thanks once again
i hope i meant x1.1 mult because otherwise there is no reason to get this
i like this more
i love card areas
using my consumable (when its in the custom card area) entirely skips booster packs as if you pressed the skip button
this is torture
chat is this a good rare
but i use numbers sometimes
depends on what payout entails. Does it count jokers/interest or is it just blind payout
Bumping this, also curious how I could get the current Blind's skip Tag
(G.GAME.round_resets.blind_tags.Small or G.GAME.round_resets.blind_tags.Big just give me a Voucher Tag each time)
we hate numbers here
im pretty sure you can return prevent_debuff = true in context.debuff_card
@red flower sorry to bother you again but is there a way to make a card area straight up just act like a consumable area but not get registered as one
calculate = function(self, card, context)
if context.other_card ~= nil then
if (context.other_card.base.value == "8" or context.other_card.base.value == "Jack") then
if context.debuff_card then
return {
prevent_debuff = true
}
end
end
end
return nil, true
tried this, doesn't seem to be working
hmm
try context.other_card:get_id() == 8 or context.other_card:get_id() == 11 instead maybe?
idk if that would change it
checking
no idea, but a lot of things are hardcoded to look for G.consumeables specifically sadly so you would probably need to patch/hook those functions
what localization do i need to fix here?
this is what i have bc im def not doing it right
skipping or entering a blind now makes the game straight-up close lol
it wasn't even during launch, the game ran fine before i tried going into a blind
I think the issue might be my implementation because I'm also trying to use quantum enhancements alongside it
oh yeah
with quantum enhancements you need to be VERY careful with what you do outside of context checks
i would just move the context.debuff_card check to the outside
calculate = function(self, card, context)
if context.other_card ~= nil then
if (context.other_card.base.value == "8" or context.other_card.base.value == "Jack") then
if context.check_enhancement then
return {
m_wild = true,
m_gold = true,
m_steel = true
}
end
end
if context.other_card:get_id() == 8 or context.other_card:get_id() == 11 then
if context.debuff_card then
return {
prevent_debuff = true
}
end
end
end
return nil, true
end
this implementation still causes an auto-quit though I'm not really sure how else i'd do it
I'm guessing that initial context.other_card ~= nil prob wouldn't work in this order
context.other_card ~= nil doesnt change anything here since it exists in both of those contexts anyway
actually try removing the return nil, true at the end maybe
how do i fix this? the label shows up on the individual cards
you need a label in misc.labels
o7
should I return anything at all or nah?
well in the contexts you do have to return for the effects
but returning nil, true at the end doesnt do anything
ah, yeah, i just mean at the end
yeah at the end you shouldnt return
thx
this is what it looks like, but ill try'
doesn't crash now, but Jacks and 8s are still debuffed
isn't there somewhere I'd have to put recalculate_debuffs or something like that
im not entirely sure but that might fix it
unfortunate, ty regardless
i'm trying to make it function like a consumable slot purely because I seem to be running into a few issues all the time, one of them being the fact that all consumables upon use just cancel out the booster pack
the label shows up on the cards fine (placeholder stuff for now), how do i make the UI button say anything but "ERROR"
since youre using loc_txt it would be collection = <text>
sorry i had to go eat, just blind payout
i have a question how could i go about changing these numbers in probabilities with a joker?
return denominator = <number> in context.mod_probability
awesome thank you
(bump)
Well, now I'm even more confused. Card areas suck.
When I try to use a consumable (which is in this card area) it completely skips any booster packs UNLESS you are opening the pack via tags
I think I'm just not going deep enough into it but yea this is whacky. Not only that but the buttons are also really scuffed for consumables in custom card areas.
i just remake all the buttons for my custom areas
i don't really know how to do that unfortunately which is a shame
new day, new mind, old error (after 30min i still have no idea why this happens)
What do you mean that it skips?
It's basically as if you skipped the booster pack
it gets closed even if you never chose anything
it weirds me out that this only happens in a shop
how i check if a glass card gets destroyed?
by its own ability?
isn't it something like removed_card.shattered
any way but also including that
have you checked vanillaremade glass joker
no
loop through context.removed in context.remove_playing_cards and check if any is glass
card.glass_triggered
but it only check its own ability
the consumable itself works perfectly fine if it's operating under the G.consumeables area
the swap reminds me of something oddly familiar
what exactly
like SMODS.has_enhancement(context.other_card, 'm_glass')?
i use it to swap between locusts and jokers so they arent clumped together
ofc both jokers and locusts will do their thing no matter what, it's just a visual thing to reduce clutter
yes, but it doesnt have context.other_card
ok thanks
if context.remove_playing_cards and SMODS.has_enhancement('m_glass') then ?
no, you need to iterate through context.removed
yo uh im not really finding a way to fix this?
its not displaying the amount for some reason
like if context removed playing card the
if smods has enhancaments(glass)
what does your localization file/loc_txt look like, and what does your loc_vars look like
i dont really know wtf that means 😭
can i see the code?
not that good at modding, are those like files i should have in my mod or smth?
suree
theyre parameters on your joker
old metadata header jumpscare wtf
okay why is this file so fucked up
it still works technically but it's deprecated, highly recommended to switch to using a separate json file for metadata
yeah we kinda started making this a year ago and gave up on it
and im coming back to fix the mess but
have you been looking at vanillaremade as reference for your jokers
i believe so?
also the issue with your description is that you dont have a loc_vars function defined on the joker at all
which is whats supposed to be used to pass variables into the description
i swear that error is a thing that happens the fisrt time and then you wont suffer again
i did see a template on github but idk if its vanillaremade
probably yeah
also the actual code is literally all of vanilla remade with smods so thats a really useful reference
If I wanted to set my custom joker cards in a specific order in the joker collection, how would I do that?
change the order of the joker definitions in your mod files/the order in which individual files load
I wish we could just place an order value on where it goes numerically
Instead of it being by load
why message still classic orange, while i have this in my code?
bump from yesterday
you gotta identify it when it's a diff file iirc
how?
i have this at the top of my file whenever i wanna use the color
because G.C is a different table than G.ARGS.LOC_COLOURS
but it works in localize file
this code causes the skin to show up as blank.
I have a feeling that it might have something to do with the positioning
this too
fair
code in question
https://github.com/Steamodded/smods/wiki/SMODS.DeckSkin
the default position of any Jack/Queen/King is way off to the right at x = 10 or so
i see
so what would i do if i wanted a specific y co-ord but wanted to do pos_style 'ranks'?
i think 'ranks' expects you to have a different atlas for each suit
if you go to the link there's also a way to set pos_style to a table, which lets you set each card's position individually
it's a bit tedious but it'll let you keep your atlas as-is
so how would I write the syntax for that?
Because the wiki just has the thing down as [rank]
Would i just list each rank in a brace?
i havent messed with it but my guess is
pos_style = {
["Jack"] = { atlas = (insert atlas here), pos = { x = 0, y = 1 } },
["Queen"] = ...
...
}
alright i'll try that
getting this warning from vsc and it's concerning me
fairly sure you can ignore it
but i'll go dig into deckskin code to see what's up
well
it does work
yea that's just an alignment issue in your image i think
yeah
glad the code worked tho
thanks :3
anyone got any experience with effects that upgrade a poker hand that isn't the one you are playing? Got a joker that upgrades a different poker hand every time a straight is played. It's coming up with a ton of ui problems
are there any mods that do this?
yeah that's pretty easy to do, what does your current code look like?
calculate = function(self, card, context)
if context.before and next(context.poker_hands['Straight']) and card.ability.extra.used == false then
level_up_hand(false, Find_Most_Played_Hand('Straight'))
end
if context.end_of_round then
card.ability.extra.used = false
end
end
trying to get the animation to run, but it ends up blending with the hand that's being played
adding the wrong figures to the display
okay, so you want to return some stuff instead, something like this would always upgrade a Pair, for example
return {
level_up = 1,
level_up_hand = 'Pair'
}```
ffs, I need to stop using other mods as a basis and just experiment with SMODS itself
ty
much appreciated
yay balance?
placeholder for now as im basically taking some code from vanillaremade
huh weird
why is the value nil? if i set _played to 0 if it's nil before checking for unlock will that fix it?
guess ill just nilcheck for now
you dont set G.GAME.hands[most-played]._played anywhere there
s
@cursive gazelle
i've been summoned
does it not use the table?
hi toma
hi s
_played is a local variable
yeap..
so should i just use the regular played then
I can suggest a temporary solution, and I have to imagine someone knows a permanent one
But it's weird that happens
i think so
kay ill check
I'll take anything for now really
see if moving the consumeable to the usual consumeable area before using it helps
and by moving I mean
just in the background
no animation
Hmmmm not sure how I could achieve this but I can try
You can see how the function that moves cards (not emplace) works
should work
thanks n
yw
Getting an error that "has_seal" is reading as a nil value, but "has_enhancement" works
config = {
extra = {
chips = 80,
mult = 10,
Xmult = 1
}
},
loc_vars = function(self, info_queue, card)
local enhance_count = 0
local seal_count = 0
local edition_count = 0
if G.playing_cards then
for _, playing_card in ipairs(G.playing_cards) do
if SMODS.has_enhancement(playing_card) then
enhance_count = enhance_count + 1
end
if SMODS.has_seal(playing_card) then
seal_count = seal_count + 1
end
if SMODS.has_edition(playing_card) then
edition_count = edition_count + 1
end
end
end
return {
vars = {
card.ability.extra.chips,
card.ability.extra.mult,
card.ability.extra.Xmult,
card.ability.extra.chips * enhance_count,
card.ability.extra.mult * seal_count,
1 + card.ability.extra.Xmult * edition_count
}
}
end,
calculate = function(self, card, context)
if context.joker_main then
local enhance_count = 0
local seal_count = 0
local edition_count = 0
if G.playing_cards then
for _, playing_card in ipairs(G.playing_cards) do
if SMODS.has_enhancement(playing_card) then
enhance_count = enhance_count + 1
end
if SMODS.has_seal(playing_card) then
seal_count = seal_count + 1
end
if SMODS.has_edition(playing_card) then
edition_count = edition_count + 1
end
end
end
return {
chip_mod = card.ability.extra.chips * enhance_count,
mult_mod = card.ability.extra.chips * seal_count,
Xmult = card.ability.extra.Xmult * edition_count
}
end
end,
in_pool = function(self, args)
for _, playing_card in ipairs(G.playing_cards or {}) do
if SMODS.has_enhancement(playing_card) then
return true
end
if SMODS.has_seal(playing_card) then
return true
end
if SMODS.has_edition(playing_card) then
return true
end
end
return false
end
based on the remade Steel Joker
has seal and has edition dont exist
ahhhhh
I misread. It's card.seal and card.edition, correct?
my only thought would be to just have it not draw with specific states or menus up or something, im not super familiar with drawstep or anythin like that though
do I need to define the enhancements to look for?
Yes, I've done that, my only problem is screen shake.
yes, if you need to check if it has any it's different (check the link)
are all the contexts stored in a table? if so, where is it?
pretty sure you can find all of them in the smods lsp def
i see! thanks
was asking if they already existed as a table, but its ok ill just make it myself
what do you need a table of all the contexts for?
something devious
I made it just turn into G.consumeables when you're opening a booster pack which is working alright, janky but i don't know how to make this work 💔
(if it ends up working)
I don't even know what you're looking for 🤣 a lot of contexts are dynamic
I feel like Eremel would know more
about your issue
gulp
this might be prone to crashes then lmao
only one way to find out
If you want to check if theres any context active you could probably just do smth like #context > 0, idk if thats a good idea though
I'd hope so
i forgot to use math.floor whoops
No, it would be if next(context)
ok yeah got it working
now i gotta weed out the dynamic ones so the effect actually applies lmao
unless...
Is there a quick way for me to say "every enhanced card" or do I need to have it look for every individual enhancement? As of right now, it's giving an error that it's recieving a boolean and expecting a table
if next(SMODS.has_enhancement(playing_card)) then
enhance_count = enhance_count + 1
end
next(SMODS.get_enhancements(playing_card))
No, it's get_enhancements not has_enhancement
if i have a card, how would i find out if that card is being played or held in hand?
I need to learn to fuckin read 💀
check the cardarea
thanks lmfao
how do i do that
do context.cardarea then
G.play for being played, and G.hand for
well
being in hand
no it happens to be in calculate but im not calculating the card
its in context.money_altered
what are you trying to do
i get a random card and need to know where it is
giving the full effect is much more helpful than vague hints if you want help
get a random non-diamond card from full deck and convert it to diamonds
i need to find out if its in hand or played so i can flip it if it is
and then unflip it after the conversion
check card.area == G.play/card.area == G.hand
so then just use card.area instead
ty
though I don't see why those areas would be different cases
do info_queues have to use keys for their titles? or can they be titled like with a string? im not the best at them so forgive me if this is obvious
like if i wanted a tooltip that went
Current Phase:
[actual information]
do you mean for what they're accessing
you could do that yeah
youd put that in Other in the localization
ohhhh okay
and then access it like this
info_queue[#info_queue + 1] = { set = "Other", key = "para_to_big_goldseal"}
when i tried to select a deck
replace para_to_big_goldseal with your tooltip
ok ty
Warning?
yeah lmao
I'm now getting this error. Here's my joker's code for ref, based on Steel Joker
SMODS.Joker {
key = 'thunderlord',
loc_txt = {
name = "Thunderlord",
text = {
"Gains {C:blue}+#1#{} Chips for every {C:enhanced}Enhancement{} in deck,",
"{C:red}+#2#{} Mult for every {C:attention}Seal{} in deck,",
"and {X:red,C:white}X#3#{} Mult for every {C:dark_edition}Edition{} in deck",
"{C:inactive}(Currently{} {C:blue}+#4#{} {C:inactive}Chips,{} {C:red}+#5#{} {C:inactive}Mult, and{} {X:red,C:white}X#6#{} {C:inactive}Mult){}"
}
},
blueprint_compat = true,
perishable_compat = true,
eternal_compat = true,
rarity = 4,
cost = 20,
atlas = 'JokerPackOne',
pos = { x = 1, y = 0 },
soul_pos = { x = 1, y = 1 },
config = {
extra = {
chips = 80,
mult = 10,
Xmult = 1
}
},
loc_vars = function(self, info_queue, card)
local enhance_count = 0
local seal_count = 0
local edition_count = 0
if G.playing_cards then
for _, playing_card in ipairs(G.playing_cards or {}) do
if next(SMODS.get_enhancement(playing_card)) then
enhance_count = enhance_count + 1
end
if playing_card.seal ~= nil then
seal_count = seal_count + 1
end
if playing_card.edition ~= nil then
edition_count = edition_count + 1
end
end
end
return {
vars = {
card.ability.extra.chips,
card.ability.extra.mult,
card.ability.extra.Xmult,
card.ability.extra.chips * enhance_count,
card.ability.extra.mult * seal_count,
1 + card.ability.extra.Xmult * edition_count
}
}
end,
calculate = function(self, card, context)
if context.joker_main then
local enhance_count = 0
local seal_count = 0
local edition_count = 0
if G.playing_cards then
for _, playing_card in ipairs(G.playing_cards or {}) do
if next(SMODS.get_enhancement(playing_card)) then
enhance_count = enhance_count + 1
end
if playing_card.seal ~= nil then
seal_count = seal_count + 1
end
if playing_card.edition ~= nil then
edition_count = edition_count + 1
end
end
end
return {
chip_mod = card.ability.extra.chips * enhance_count,
mult_mod = card.ability.extra.chips * seal_count,
Xmult = 1 + card.ability.extra.Xmult * edition_count
}
end
end,
in_pool = function(self, args)
for _, playing_card in ipairs(G.playing_cards or {}) do
if next(SMODS.get_enhancement(playing_card)) then
return true
end
if playing_card.seal ~= nil then
return true
end
if playing_card.edition ~= nil then
return true
end
end
return false
end
}
it's get_enhancements
not get_enhancement
illiteracy hits again
my mod (warning j*kerforge) crashed when i tried to select a deck
is absolutely nobody currently talking
you were too fast 😭
just realized there wasnt even a shader
i hate you "none" dropdown option you betrayed me
Ahh, even with the edition set it still says nil
Is anyone even listening
Oh wait, Jokerf*rge doesn't even have a joker edition effect
calculate = function(self, card, context)
if context.first_hand_drawn and not context.blueprint then
local eval = function() return G.GAME.current_round.hands_played == 0 and not G.RESET_JIGGLES end
juice_card_until(card, eval, true)
end
if context.discard and not context.blueprint and
G.GAME.current_round.discards_used <= 0 and #context.full_hand == 1 then
local card_rank = context.hand_card:get_id()
local tarot_cards = {
[14] = "c_magician", [2] = "c_high_priestess", [3] = "c_empress",
[4] = "c_emperor", [5] = "c_heirophant", [6] = "c_lovers",
[7] = "c_chariot", [8] = "c_justice", [9] = "c_hermit",
[10] = "c_wheel_of_fortune", [11] = "c_strength",
[12] = "c_hanged_man", [13] = "c_death"
}
if tarot_cards[card_rank] then
G.GAME.consumeable_buffer = G.GAME.consumeable_buffer + 1
G.E_MANAGER:add_event(Event({
func = (function()
SMODS.add_card {
set = 'Tarot',
key = tarot_cards[card_rank],
}
G.GAME.consumeable_buffer = 0
return true
end)
}))
remove = true
end
end
end
is this a viable way of checking each tarot's number?
like this is supposed to look at the number of the hand played and correspond it to the numbers on the tarot cards
but doesnt seem to be working
where did you get context.hand_card from?
well i tried hand_card alone and it didnt work
don't you want context.other_card here
so i tried putting context. before
context.hand_card isn't a thing
oh alr
try reading the docs, it can save you some headaches haha
-# i should note that the calculation docs are vastly incomplete when it comes to newer features
u got a link to that?
decided to rework my 6-card selection joker, thoughts?
yeah that's what you wrote?
you have context.discard
obviously it's gonna be on discard
oh lmao
do you want it on play?
did you also want the card to get destroyed? i see a rogue remove = true but it's not the right format
mkay then what you should do depends a bit on what exactly you want the effect to be
if it should give the tarot when the card is scored, you should use context.cardarea == G.play and context.individual
i've added a new deckskin palette to all suits, how can I add options for that palette for each existing collab?
yeah thats what its supposed to do
yeah then replace context.discard with that
alr
-# and remove the rogue remove = true, it doesn't cause any harm in isolation but you're setting a global variable for no reason
np
how do you print to the lovely console again
for log checking purposes
how would i make code in a joker run every tick
ok im stumped, im trying to make it so that all unscored cards instead get retriggered 3 times, but i can't figure out which context i should be resetting the retrigger_targets array to {} in
just print(string) i think
it shows up in the debugplus console at least, i assume it goes to the lovely log too but i haven't checked
update function
ty
yeah but i need it to go to the lovely log cause hardcrashes lmao
oh lmao
uhhh still worth a shot, i don't see any reason why it wouldn't work in just the lovely log
k
is it possible for a voucher to play a custom sound when redeemed
how do i add money and detect how much money the player has
no. quantum ranks are fair game but that's where we draw the line
G.GAME.dollars is how much money you have
to add money mid-round you should return dollars = (amount to add), there's a separate function to do it in the cash out screen that i don't remember the name of off the top of my head
alright ty
Xnil mult??
what are you passing in loc vars
loc_vars = function(self, Xmult, xmult_gain)
wrong
well yes thats wrong
it should be uhh gimme a sec
can i see your joker's config
does it have nothing
yep
loc_vars = function(self,info_queue,card)
return {
vars = {
card.ability.x_mult,
card.ability.extra.xmult_gain
}
}
end
but in the vars table they should be valid values in your joker's config table
i once again ask you to read the docs before you blindly do stuff
😭
my bad gng
this example assumes you have
config = {
x_mult = 1,
extra = { xmult_gain = 0.25 }
}
alright
or smth like that
bump
how would i add money outside of a calculate function
You can't put cards in cards.
Also context.cardarea == "unscored" exists.
im.. not trying to put cards in cards?? wdym
Yes, you are.
where
it worked for another joker that does a similar thing so idk 🤷♀️
but on that joker i only needed to target a single card whereas here i need to target every unscored card
Do you want unscored cards to score like scoring cards?
yeah the effect is that unscored cards score AND are retriggered 3 times, but normal scoring cards dont retrigger, which is why im trying and failing to keep track of which ones were unscoring
Then you would hook SMODS.score_card
i mean it also should affect debuffed cards but. ill figure this out first lol
why do i need to hook score_card
surely theres gotta be a better way to keep track of which cards were unscored
No, that's how you would make them score, also you would flag them.
im confused
why wouldn't add_to_hand work
it works for one of my other jokers just fine
good job
Do you also want them to be added to the scoring hand?
how do i prevent code in an update function from running in the collection
nah im fine with it just working like how splash does
if not G.SETTINGS.paused
i broke it 💔
Then you would flag them instead of putting them in a table.
and how would i do that
card.modprefix_unscored = true
You would also have to remove the flag.
i love adding compat with other mods
swear word warning 😨
so i could either patch the game so it always gives the unscored flag to unscoring cards incase i wanna use this mechanic for more jokers, orrrrr i could just set the flag to false if they're scoring and have it only work with this joker
im lazy and wanna be done with this joker. i choose option 2
censor that word please…
ok so now why isn't
if context.individual and context.cardarea == G.play then
if context.other_card.debuff then
context.other_card.hodge_unscored = true
card:set_debuff(false)
end
end
doing anything
fuck
nvm im stupid i see it now
if context.playing_card_added and context.other_card:get_id() == 7
would this work?
how do you know a word is swear word?
is this the place where i beg for assistance
yeah
everytime i play a card this happens
also talisman wont change config when i change it in-game
or maybe i just dont know how to restart the game?)
ok nope nevermind context.other_card:set_debuff(false) still does not work
it doesnt say "HAND WILL NOT SCORE"
you should be using SMODS.debuff_card
is it possible to detect if you're playing a small or big blind?
so, SMODS.debuff_card(context.other_card,false)?
no
oh
what are you trying to do
if a playing card is debuffed, undebuff it and set hodge_unscored on it to true
preferably before context.repetition is calculated
im not sure if thats even possible tbh because debuffing is only called at certain points in the game but i could be wrong about that
wdym its only called at certain points
does context.individual not even touch debuffed cards
debuffs are (afaik) only updated at the start of the round and the start of the shop
i can patch a custom context for that
so you dont think jokers setting debuffs is even possible
that sounds. odd
i mean clearly it must be tons of mods do it
as i said i could be wrong but im pretty sure thats what i was told
well then why does smods even have SMODS.debuff_cards if you cant even use it. that makes no sense
im gonna investigate
im not saying it doesnt work, im saying you wouldnt be able to update a debuff in the middle of a round
ok well i jsut did it with debugplus lmao
eval G.hand.cards[1]:set_debuff(false) worked fine for me
that doesnt answer the question
wdym by your question
How you know a word is swear word
if the word isnt a swear, text will say "Hand Will Not Score"
ok im gonna patch in a context.debuffed_individual
no how the game knows its a swear word
pleasee speed i need this.... my balatro is kind of broken
aikoyori's letter deck is only english letters
can i add some to the table
Btw can't you just dump the swear words in a dictionary into a txt
It's easier than writing every single swear word
do you have mods installed?
thats what i did
i have a table full of swearwords based off of a list i found online
yea
i can launch the game but whenever i play a card
it crashes
im fairly certain its talisman
reinstall talisman then
another thing to note is that talismans config doesnt let me change it in-game
btw i reinstalled it and it did the same th i9ng
idk i dont use talisman
sure
######## #### ###### ######## ###### #### #### ######
w*man
How would I repeat discard effects?
how would i make a deck that starts the player off on a specific ante?
hmm what did i do wrong
SMODS.Back {
key = "glyphic",
name = "Glyphic Deck",
config = { ante = 0 },
atlas = "crp_placeholder",
pos = { x = 4, y = 2 },
loc_vars = function(self, info_queue)
return { vars = { lenient_bignum(self.config.ante) } }
end,
apply = function(self, back)
G.GAME.round_resets.ante = self.config.ante
G.GAME.round_resets.blind_ante = G.GAME.round_resets.ante
end,
crp_credits = {
idea = { "Glitchkat10" },
code = { "Glitchkat10" }
}
}
wait a minute the blinds are on ante 0
but it doesn't display ante 0 in the ui
currently, i'm using G.GAME.modifiers.booster_size_mod to modify the sizes of booster packs
is there a way to modify the sizes of one particular type of booster pack? (eg. Buffoon)
You would take ownership of it.
👍
Coding a Joker that gains XMult when tarot cards are used, based on the tarot number. Does anyone know of a mod I can study the code of that'd help?
Like stuff that has effects based on different cards inside the tarot group or other groups
have you looked at constellation's code?
is there no vanilla remade for the skip tags??
I have a base made based on that and Fortune Teller, but I want each Tarot card to give a different amount of XMult and I dunno how to approach that
Been brainstorming thru Vanilla Remade and and Mod Dev QNA
there is
you should have started with that haha
you can check the key of a consumable in context.using_consumeable with context.consumeable.config.center.key
i dont see it here
oh
how do i replace the vanilla music tracks, i looked through the SMODS.Sound wiki but im confused
how would i access another mod's folder inside of my mod?
