#💻・modding-dev
1 messages · Page 691 of 1
why cant the context stuff be universal to everything like zeebee was a good point to add it
tags behave too differently compared to other objects
its return values don't follow the same structure (a boolean for most effects, a card object for creating shop card), which probably explains why it's still not yet decided to be improved
let me grab my complaint from smods server about tags 
is it possible to create a custom color that cycles from for example, red to blue?
Look up SMODS.Gradient
It’s on my list of things to add in the future but I go down the list in order of interest to me and I don’t find tags very interesting right now
Yall know if I can make a joker that gives you an specific effect depending on what deck are you playing
you can have it check which deck you're playing on
Yeah that’s what I’m saying
you can get the current deck by checking G.GAME.selected_back_key.key
Thanks bro
U sure it works
WTF is this
you missed .key at the end
Alr Ill see
if context.remove_playing_cards then
local function better_copy_card(card, new_card, area, nodeckeffects)
if not card then return nil end
area = area or card.area or G.jokers
local cardwasindeck = new_card and new_card.added_to_deck
local copy = copy_card(card, new_card, nil, card.playing_card and G.playing_card)
if not nodeckeffects and new_card and cardwasindeck then copy:remove_from_deck() end
if card.playing_card then
G.playing_card = (G.playing_card and G.playing_card + 1) or 1
copy.playing_card = G.playing_card
G.deck.config.card_limit = G.deck.config.card_limit + 1
table.insert(G.playing_cards, copy)
end
if not nodeckeffects and ((new_card and cardwasindeck) or not new_card) then copy:add_to_deck() end
if not new_card then area:emplace(copy) end
return copy
end
for k, v in pairs(context.removed) do
if v.glass_trigger then
local other_card = better_copy_card(v, nil, G.deck)
other_card:set_ability('m_gold')
end
end
end
omg thank you
it's context.removed not context.cards
attributes = {
"rank",
"nine",
"mult",
"enhancements",
"seals",
"editions",
"economy",
"six",
"chips",
"seven",
"four",
"five"
},
this is genuinely one of the attribute lists for one of my jokers
You need to check if context.destroy_card exists.
so then
if context.destroy_card then
if context.cardarea == G.play and (context.destroy_card:get_id() == 8 or context.destroy_card:get_id() == 4) and SMODS.pseudorandom_probability(card, 'finalflight', 1, card.ability.extra.odds) then
return { remove = true }
end
end
```?
why is it not working
all other tarots/spectrals that add modifiers to cards have this problem
why is it doing that
Also somehow this Joker works almost perfectly first try which I was absolutely NOT expecting
Am I secretly goated???
info_queue[#1116390750314307698_queue + 1] = G.P_CENTERS.purple
im trying to get a popup about purple seals
but idk the code to
you're missing the seal prefix
oh
idk what it is tho 😶
let me check
uh
wait isnt it m_ for all modifiers
The only issue was me forgetting to make the mult in the localization use #2# after copying the section from the chips section of it
im trying to make a joker that allows me to retrigger the hand played if it has a red, blue and purple seal in that order
with 2x mult for each card
can anyone help me i have no clue why it is doing that
No, it should be G.P_SEALS.Purple
huh
also i may be stupid but its not showing up with the mult amount ingame
return {vars = {card.ability.extra.Xmult}} in loc_vars
The sprite itself isn't finished yet, but I'm shocked that it worked absolutely perfectly on the first try
why is it doing that. can anyone help me. pleas.
doing what
wait a second now i actually need to code the joker....
it crashes the game
wait gimmie a sec to get the crash message
this thing
how could i check to see if your current hand has a red seal, blue seal, and purple seal
which part are you having trouble with? checking current hand? checking for seals?
checking for seals
If you want the exact order, you'd probably have to just go through the whole hand looking for a red seal, see if the next card (should it exist) has a blue seal, and repeat that for the purple?
you want to loop through context.scoring_hand (scored) or context.full_hand (all) in any of the scoring contexts
Hey, has someone created a mod for things that can urge the player not to do a negative effect -- like playing a face card to reset ride the bus, or discarding which would activate green joker?
you'd have to do smth like this
for i = 1, total cards in hand
if cards[i] is red seal then
for j = i+1, total cards in hand
if cards[j] is blue seal then
for k = j+1, total cards in hand
if cards[k] is purple seal then
do your stuff and return
i created a small mod for myself -- but if this isn't a thing someone has created, I might create it
I think there are some for specific things but not for all of them
that works if you just care about having the seals in order, and not necessarily next to each other
can anyone help me please
what mod has them? JokerDisplay? Cartomancer?
or not sure?
G.P_CENTERS['m_wheeloff_fondue'] is nil so the key might be incorrect
i was thinking of some mods ive seen in the past that tell you when youre about to do some bad play but i dont remember what they were called
i can tell you jokerdisplay does display if some of the multipliers would reset when you play a hand
like obelisk
yeah and it does that little shake effect, which I think the vanilla game does not do
jokerdisplay doesnt add any effects
i absolutely messed something up
yeah jokerforge was just pulling off some bullshit its wheeloffortune not wheeloff
two things:
locals reset between function calls. this means that between joker_main and repetition cantrigger goes back to false
and that yeah
😭
you can just loop in context.repetition directly
you dont need the second context
it is a little more inefficient but its easier and doesnt really matter
well if anyone knows of any modpacks that are "anti-suck" (like a "shake" effect that the invisible joker gives, but to the notify you not to accidentally ruin your ride the bus) not accidentally resetting ride the bus), let me know. Maybe i'll create mine own if its not already been made and post it!
how can you make it so you can use consumables within booster packs
I don't want to recreate something that's already been made
specific ones or all of them like in vanilla?
like all of the vanillas
have you checked vanillaremade
i mean i want it to check beforehand
so that it can retrigger every card
oh wait
it is
😭
im stupid
genuine question how do you do ts
i looked through vanillaremade and still have no clue
how could i set the round's mult value?
okay it works but i want the xmult to appear on the card
message_card = card
also i assume you want all 3 seals in that order right?
ehhh as long as it works i'll be happy
no i mean thats what youre doing rn
yeah
do you have a custom consumable type
can i see your current code for boosters
i finished....
ah yeah
remove select_card
you're explicitly telling it to save the card
i remember someone made something where you could steal jokers or vouchers from the shop, but i forgot how theyr did it and i wouln't know what to search to find that discussion again 
does anyone know
do you just mean making a joker free
no
is there a way i could undebuff cards
with SMODS.debuff_card(), yes https://github.com/Steamodded/smods/wiki/Utility#smodsdebuff_cardcard-debuff-source
Can a Sticker force a certain Joker Description to show up instead of the description the joker it is applied to
Hello, I'm working on a texture pack for a friend that replaces some of the art in the game, I tried to have Hologram be P03 from Inscryption but when I'm in-game most of his face doesn't render, anyone know how I can fix this?
okay, well i'm working on a mechanic where the player can mark an item in the shop using a joker and when the shop phase ends, they have a chance to get it for free.
the mark should go away if the item is purchased beforehand (i.e. you mark a booster, if you buy the booster anyway, the mark goes away. same for anything else)
the problem being that the only thing i know how to actually do out of all that is the button functionality. that's it. i'm thinking of using a custom sticker as the mark, but then i don't know how to remove it if something else gets marked (only one thing can be marked at a time), i don't know how to remove it if the item in question is bought, and i don't know how to look for the marked item and steal it (i.e. buy for free) at the end of the shop phase 
i could have sworn i saw discussion about a similar idea here once
a sticker seems like the best solution yea
you can iterate through the shop's card areas to check for a marked joker
not sure how you'd auto buy it though
well if it's something like a joker, consumable or playing card, i imagine i could just do SMODS.add_card with the item key as substitute
the real headache comes from vouchers and boosters
like for spectral and mega packs an easy cop out woud be their respective tags, but what about jumbos and mega spectral
oh
i can refer to how vremade does the free booster tags for all boosters
voucher:redeem()?
is there a way to check if you sell a negative joker?
try ```lua
if context.selling_card and context.card.ability.set == 'Joker' and context.card.edition and context.card.edition.type == 'negative' then
local voucher = SMODS.create_card{ key = [voucher key here] }
voucher:redeem(voucher)
```?
hi po3
Is it possible to give $0 per remaining hand on a specific boss blind
does anyone know how i could do a popup like this but for a custom seal
-- in loc_vars
info_queue[#info_queue + 1] = G.P_SEALS[card.ability.extra.seal] -- whatever the key for your seal is
Your seal's key automatically has your mod's prefix added to it, include it when referring to the seal's key in your Tarot
Use G.P_SEALS[card.ability.extra] without adding .seal, because your extra value is the seal's key, instead of a table.
i dont get it 😭
i have a joker in my mod that buys itself when you see it in the shop and i think i just call the buy function on it
you can probably just check all the areas to get the marked item and get it and or remove it
so set cost to 0, :buy()?
yes for the first thing, no for the second thing
it's like G.FUNCS.buy_card or something
let me check
any idea as of why the cards are pulsating or why they would be
why does my mouse dissapear when i open the game 😭
anyone know the best way to learn pixel art for balatro style jokers and icons
is G.shop_jokers.highlighted a thing?
yeah
and for all the other shops? G.shop_booster.highlighted, G.shop_vouchers.highlighted
i have it set as the right key but like
it just doesnt work
oh my god
i fixed it
question, G.shop_jokers, G.shop_booster and G.shop_vouchers are still populated with the items that were there when context.ending_shop, right?
you can print it and see :3

is this proper code for changing the enhancement?
looks right but tarots can automatically add enhancements without having to code a use function
they can?
yeah you set it in the config, check vanillaremade
i mean its also not working
so
~_~
How would I go about adding a 4th layer of playing card modifiers?
Something stackable with enhancements, seals, and editions, but not with itself
You would need to either pretty much implement all related functions from scratch (calculate, drawing, etc) or extend SMODS.Sticker and steal collection stuff from paperback
For the former you can probably also look at some other mod though
Okay, makes sense

.add_event?
is that not right 
i have something wrong....
it turns too many into the card, and it wont let me set the card that is originally the enhancement to the default enhancement
now something wacky is happening when i do a booster
yeah boosters are weird with states
i would recommend maybe another event wrapping that event?
it's c_base not m_default
also if the left card doesn't exist the loop won't get to the right card
no change
try one more
double event?
yeah
that has the blind select screen come up at the same time as the booster opening
don't tell me i need to triple event 😭
should i just not put a slight delay on the wrapping event
a delay wont do anything
try the triple event but if that doesn't work the solution is to wait for the state to transition
i was thinking of creating a context.blind_select call and doing it in that 😭
you can just wait in the event until the state is blind select
What's left of him anyway lol
no change
hmm dunno then
i cant wait to code them
got it working, but i can't get it to save the run where if you quit to menu while in the pack and load the saved run, it will reopen the pack
oh my god it crashed the game 😭
also is there a way for when it eats the card to display the card it eats like how it would when you use a planet card or something
that needs save_with_action or something like that
ive never done it myself
yeah but you need to do the animation manually by placing it in G.play or something
It should be (#G.jokers.cards + G.GAME.joker_buffer) < G.jokers.config.card_limit
ohhh
it's not working.
i've tried all sorts of variations with the same save_with_action behaviour that G.FUNCS.use_card does around the use_card call, in an event, outside of an event, even patching the condition inside the use_card call to do its save_with_action if the state is blind_select as well as shop, nothing
the only thing i can think of is that G.F_NO_SAVING might be true
i came back to balatro modding and forgot EVERYTHING
how do i malverk
has anyone tried printing the actual chip value of cards that have been enhanced by Hiker on top of the card? If I need to pick between possibilities, it'd be nice to know the actual chip values quickly.
card:get_chip_bonus()
i'm running into a syntax error in my lua code. i don't think i fully understand how it works just yet lol. anyone able to help?
get_id() returns a card's rank, right?
What is the goal?
i'm trying to see if all cards held in hand have different ranks
so i figured i'd run a for loop to add all the cards to a table and see if any of them match any other cards
i'm grabbing a card held in hand, comparing it to all the cards in the table, and if it's unique, then it gets added to the table as well
local ranks, passed = {}, true
for k, v in pairs(G.hand.cards) do
if ranks[v:get_id()] then
passed = false
end
ranks[v:get_id()] = true
end
if passed then
return {mult = card.ability.extra.mult}
end
if ranks[v:get_id()] then
so does this line automatically every check if a rank is in an array/table?
i didn't have to do all that extra table stuff?
where is the code responsible for calculating jokers retriggers?
in this case the table wouldn't be an array, it would be more like a dictionary/map that sets the key (in this case the rank id) to true
i think it's in a couple of places, search for retrigger_joker_check in the code
ohhhhh, i get it now. we're creating a dictionary and we're searching for if a certain rank is in it. if it can't find anything, i guess it returns nothing? either way it then adds a new entry for the next loop
basically
if ranks[id] doesn't exist it is nil which evaluates to false
ah and the : in get_id is important too
card:get_id() is the same as card.get_id(card) which you were missing earlier
I have made a custom texture for the base deck. Does anyone know how I can replace the default card texture for my new one? Also is it possible to rename one of the four default suits without having to write an entirely new suit into code?
is it just syntactically different or are they technically doing different things?
for the textures: https://github.com/nh6574/VanillaRemade/wiki#how-do-i-make-a-texture-pack
for the text you can make a localization file and replace the keys in the vanilla localization (just unzip the exe and look for en-us.lua)
https://github.com/Steamodded/smods/wiki/Localization
they both do the same thing, but in your code you were doing card.get_id() so it was missing an argument
ahh ok
deckskins might have a way to change the localization without editing vanilla but the documentation doesn't seem very clear on it
i love documentation
not to mention localization for colodblind options (low contrast/high contrast) doesn't even work for modded languages

I just had a idea
we should make a public pastebin which every number slop mod uses
so when they do tetration it puts the exponentiation number base needs to get to specific height
so when doing tetration it'll only pick highest number or equal to tower height and start from there
so we could invest like 1 universe worth of memory ram just for number slop balatro
So I have the en-us file. I just replace everywhere is says ‘Diamonds’ with the new name of the suit?
you need to make your own localization file in your mod and replace those specific keys
like
return {
misc = {
suits_plural = {
Diamonds = "new text"
}
}
}
@red flower figured something out. on load, the re-opening isn't being done correctly.
something is weird about the card argument (e.config.ref_table) in G.FUNCS.use_card on run load.
if i print card.ability.set, the first time around it's correctly 'Booster', but on reload, it's 'Default'
if i try to learn anything more about card, i get nothing. i've tried printing it directly, i've tried putting it in tprint, i've tried Card.is(card, Card), nothing.
it probably needs to be saved? im guessing
at this point, i'm just gonna cheat and patch in my own functionality to savetable action to parse types and do other side and then do it that way
doesn't work
i am so confused
left = my code, right = game.lua, patched
oh, i need to save earlier, i see
can't save during booster opening
still nothing.
i don't get it. i made sure to pass true for nosave into use_card
why is the action not saving
The mod looks good
But i can't help with the code
I just make android fixes
Not really coding
i fixed it. my save timing was wrong
👍
it's because the booster pack doesn't exist at the time of loading
for opening booster packs at an arbitrary time, you need more work
well, the keepsake is a card, you can store certain things inside that
here's how I do it with a joker from my mod
it takes tags that spawn booster packs into account to avoid conflating packs
once again asking if anyone knows how id fix this to not be purely visual
what's this supposed to do
its for big hands beyond standard sizing, it works in the ui elements but then the score and displayed calculation are differnet
why can't you make them new poker hands?
i tried that but it didnt work the way i wanted plus this scales planets easier
can you elaborate?
well the poker hand method was working but i couldnt get them to level up with the og hands plus it wouldnt let me hid them from menus
that sounds very easy to solve
leveling up with the og hand would just be hooking level_up_hand and making them not visible in the menu is literally a feature
game just hates me ig
id rather get this one working but if not i can probably find the old pokerhands code
this one looks like it would break from other things like scoring params
i really recommend just using the api features that are designed for this
i would never do something as cryptid does it
cryptid probably coded it like 2 years ago
yeah ok fair enough
anyone know how i can make new hands
check the smods wiki
i know that but i don't know how to implement it
thanks
vanillaremade poker hands dont really help with this
oh
because it leaves out the SMODS.PokerHandParts which are pretty important for custom hands
never tried to make them before so I wouldn't know ;-;
otherwise youre restricted to vanilla parts
@tawny mica
or well
it just uses the vanilla parts for everything
so it doesnt actually really do anything
you can make a hand without implementing parts but parts can still be useful
don't really know what the means but what should i use then
...why is my deck sprite a gold seal...?
you know any places that will explain evalute functions also lol thats the main thing thats confusing
im trying to get this seal to work but it doesnt go down at the end of round
you are given the played hand and you need to return a list of hands that make your poker hand
the only thing i did was patch in a couple lines into set_ability in overrides.lua:
how did this happen
try context.playing_card_end_of_round
self.config.roundCount refers to the prototype
can i see the code
you need to remove the main eval and game over stuff
also you should use SMODS.destroy_cards instead of start_dissolve
oh and card.ability.extra is incorrect too i think
because it's a seal not the card's ability
yeah
oh I think I found it
yeah seals are confusing
card.ability.seal.extra
not extra in this case
woah who wrote that
no clue
they seem pretty cool though
this reminds me that i should update the game dump i got on my phone
its from like a year ago
lol
does anyone know how to force update a back's sprites
ohuhhghgg
here you go
replace ability.extra with ability.seal
update how exactly
ogughghgh
you're missing card in the loc_vars arguments
loc_vars = function(self, info_queue, card)
return { vars = {card.ability.seal.Xmult, card.ability.seal.roundcount, card.ability.seal.totalrounds} }
end,
should be this
still nothing...
supposed to be saying 2 rounds left
wait hold on
i may be stupid
my deck sprite randomly started turning into the gold seal sprite on run start & load and i don't know why 😭 i need to force it back
nevermind im not stupid huh
you need to change it for every card im pretty sure
i would look into fixing the issue instead of trying to change the sprites lol
unless its just not triggering at the end of round?
you can add a print to check that
bump2
yeah the code just doesnt run
can you post your current code, i can test it
this works
idk it doesnt for me
is the card in hand
thats the issue
i want it to do it regardless
you need to enable the optional deck cardarea
or use mod calculate instead of the seal's calculate
ah
i think you might need to enable the discard area too
how?
i don't understand this, but one of the things i did before i ran into the issue was that i had a var in the deck's config with a name that started with "gold", i changed it and that seems to have stopped it
but for some reaosn i'm unable to reproduce it with my other decks
im still struggling making a custom hand
what hand are you trying to make
idk if this is the right channel to post this on but it seems the most appropriate, and I apologize for interrupting anything currently going on
I'm trying to make a Balatro mod and I'm getting the hang of the coding aspect, but I still have one big problem: no art
I kinda suck at drawing in general, let alone pixel art, so if there's anyone who's bored enough to work with me, I'd really appreciate it
-# it'd be volunteer work, though, I dont have a stable source of income to even think about paying anyone 😔
you can reply to this message (with @ on) or DM me
three of a kind flush
i think you will have more success in #🎨・fan-art tbh
wait I've been thinking about making flush hands of everything else for a while now
copy that
yeah and a pair flush but i thought three of a kind would be easier
four of a kind flush, three of a kind flush, pair flush, two pair flush
etc
I'd be interested when the mod's done
im trying to make it but im struggling with even getting one hand done 😭
how would i add a sprite to a playing card using enchancements
bump3
for 3oak you can use parts._3 which contains all three of a kinds, then you need to get if those are the same suit which is not straightforward as of yet
i would recommend checking get_flush in the vanilla code for that part
ok
id assume that would be in card.lua?
you set the atlas of the enhancement to the sprite you want
unless im misundertanding what you want
ight thanks
ok
info_queue[#"Info"_queue + 1] = G.P_CENTERS.m_oozing
end,```
this doesnt add an enchancement description to my joker.
descriptions = {
Enhanced = {
m_shit_oozing = {
name = "Oozing Card",
text = {
"",
},
},
},
},
}```
theres no text
dont worry about that
it's missing the mod prefix in loc_vars
ah no that still doesnt do aything
bump4
wait i think i fixed it
i recommend just bumping the original question, i get its funny but it's less likely someone will answer if they have to do more work to see the post
when i hovered over the joker 😭
bump
Gotcha
key = 'oscar',
loc_txt = {
name = 'Oscar',
text = {
'Adds one {C:attention}Oozing{} card to deck when {C:attention}Blind{} is selected',
}
},
atlas = 'oscar',
pos = { x = 0, y = 0 },
rarity = 1,
cost = 1,
unlocked = true,
discovered = true,
loc_vars = function(self, info_queue, card)
info_queue[#info_queue + 1] = { key = 'shit_oozing', set = 'Enhanced'}
end,
pools = { ['shit'] = true, },
}```
```return{
descriptions = {
Enhanced = {
shit_oozing = {
name = "Oozing Card",
text = {
"die",
},
},
},
},
}```
what's the enhancement code
i dont have it yet
well
is that why
yes
ight mb 😭
i got one hand done lol
im not good at art now i got to model the planet card 😭
that image would result in a flush tho
i know i was using a random place holder
im changing it
if i have 2 different hand types, how can i compare them and see which one is a stronger rank (without taking into account leveling up hands)?
bump
can you tell me if theres a simpler way to do this
local pair = parts._2[1]
local suits = { "Spades", "Hearts", "Clubs", "Diamonds" }
for _, suit in ipairs(suits) do
if pair[1]:is_suit(suit, nil, true) and pair[2]:is_suit(suit, nil, true) then
return { pair }
end
end
return {}```
no, in fact you're making some assumptions that make it easier
you are only using the first pair and only checking vanilla suits (which i assume is because you checked the vanilla code instead of the patched dump, which is my fault)
wait i just found something in the misc_functions
this is a pair flush so im assuming they are only playing one pair
return { pair }
end```
nope
this doesnt acount for cards treated as multiple suits
right
it doesnt really matter for modded content but if an effect checks for containing hands it might care about every combination of flush pair
i dont think you need to add it im just saying that not accounting for it makes it easier
well if i add jokers ill do that
i also dont account for it in some of my hands because just finding one is easier
what should i change then?
a check if a card is a wild card?
the original is correct?
this
oh
the only problem is not accounting for modded suits
hm
check get_flush but in the lovely/dump
for x = 1, #suits do
local suit = suits[x]
if pair[1]:is_suit(suit, nil, true) and pair[2]:is_suit(suit, nil, true) then
return { pair }
end
end```
yeah
thanks lol
i didnt know checking the lovely dump would be that easier
next thing i need to figure out is making it level with the base pair and stuff
i think you need to hook SMODS.upgrade_poker_hand
yeah i just need to figure out how to find out whe it upgrades the base one
question do crossmod joker atlases have to be in a separate atlas than the normal atlas
no
there's no "normal atlas" but im assuming you mean a different one from the ones youre using
where are scored cards calculated example:
When a card is scored and gives +10 chips what function it comes from
wait I think It's SMODS.score_card
do you know how to make it upgrade with the original
check the hands that are passed to upgrade_poker_hands and add yours
How would I be able to make something identical to Marble Joker but have it make a card that isn't stone?
have you checked vanillaremade
Yeah
what's the issue with it
Marble joker does add the card but makes it stone, so how would i change the code to make it not stone?
instead of m_stone you put the key for the enhancement you want
and for no enhancement?
remove the enhancement from add_card
and how would I make it make a certian card (for example, a king of hearts)
thank you
long story short i want to make a joker that retriggers first played card for every card destroyed this ante
how would i make it tell the game that my hand is a flush variant
because flush jokers don't work with it
would i use the combine?
bump
yeah nvm that would be broken
😭
you could do a whole flush pair run off of it
Is it just my Setup or do CanvasSprite 's eat up much more performance? ^^'
I'm putting my Canvas Sprite on a Playing-Card/Edition, and just 8 of them already of a noticeable Impact x'3
Also for completions sake, the Code for the Text:lua SMODS.CanvasSprite{ --ref_table = card.base, ref_value = 'suit', text = card.base.suit or localize('SEMBY_empty_memory'), text_offset = { x = 8.0, y = 07.5 }, text_h_align = 'left', text_colour = card.base.suit and G.C.SUITS[card.base.suit] or G.C.BLACK, text_height = 8.0, canvasScale = 2 },
are you just drawing the suit? or are you going to do other things
if you are id probably just hardcode the sprites for vanilla suits
I'm technically also drawing other text (that actually changes) below it - I disabled it for the Screenshot x3
ah okay
I'm trying to optimize retriggers by instead doing tetration exponentiation and multiplication on the returned table depending on the value of the retriggers however I can't figure out how retriggers are done in SMODS(I already have the system of increasing values depending on retriggers and even made it work for SMODS.scale_card() ) I just need to figure out how retriggers are done in SMODS so I can make it work
what I currently have for testing:
SMODS.insert_repetitions = function(ret, eval, effect_card, _type)
local effect = {}
for k,v in pairs(eval) do
if k ~= 'extra' then effect[k] = v end
end
print("inserting repetition:",eval)
if eval.extra then
print("repetition has extra:",eval.extra)
end
print("ret is:",ret)
print("effect is:",effect)
print(effect.card.chips)
table.insert(ret,{retriggers=effect})
local this_retriggers = 5-1
effect_card.bl_optimized_retriggers = this_retriggers
--effect.message = nil
--effect_card.bl_optimized_retriggers = 5
--for i = 1,5 do
--table.insert(ret,{retriggers=effect}) -- This adds 5 repetitions to scored card!
--end
end
INFO - [G] calculating individual effect: chips
INFO - [G] amount: 4
INFO - [G] inserting repetition: Table:
repetitions: 2
message: Again!
card: Table:
under_overlay: false
click_offset: Table:
y: 0
x: 0
facing: front
children: Table:
center: Table:
click_offset: table: 0x40ef2900
+36 more values.
back: Table:
click_offset: table: 0x41178fe8
+35 more values.
shadow: Table:
velocity: table: 0x412c4458
+29 more values.
ambient_tilt: 0.2
parent: Table:
click_offset: Table:
y: 0
+1 more value.
static_rotation: false
shuffle_amt: 0
T: Table:
x: 4.7573170731707
+5 more values.
+30 more values.
sticker_run: black
+56 more values.
I noticed insert repetitions is being called only after chips from scored card has already been calculated though
canvas text seems to be poorly done in smods imo, i was meaning to fix it but i dont want to break anything
basically it doesnt cache the text
Ay, that makes sense x'3
Maybe, as a workaround for myself (and to reduce the amount of rendered text);
How would I reference these Sprites and draw them Instead?
-# if you know and can help ^w^
the problem is not with text specifically but with how smods renders text by default
-# + I'm gonna hide the Text in Deck-View
if you add custom canvassprites, either text or sprites it wouldn't have this issue if you cahce correctly
this is how i implement mine, it's a sprite with a number over it https://github.com/nh6574/JoyousSpring/blob/5ef54fa49bbb5a4450c78294fb7b2854134f5d44/src/others/Shaders.lua#L32

i did a lot of this by trial and error so i would ask Meta if you need better explanations lol
I'll Trail and Error my way aswell then 
-# Otherwise, I'll be back asking question owo
if i am having trouble with a mod i am working on would i put it here or in modding support?
cus i guess it counts as modding dev but idk
I think I figured it out
the card repetitions should be set in calculate_repetitions
insert_repetitions just calculates which card is doing the repetition
confusing names
thats why I name my functions accordingly
like
local function debug_value_when_variable_should_debug_values_is_enabled
way easier to understand
here
alr then imma just paste it here instead:
i have made a little mod for me and my friends but it seems an issue happens where if my mod is ingame it bugs out how item caps work, like if you grab a negative joker and sell it your joker cap stays at 6 instead of going back to 5, same thing with the dice joker my friend bought it 5 times and sold it and still had all the probability from it even though he didnt have the joker anymore) and i am just wondering if anyone else who made a mod has had that same issue or not?
here is my mod incase anyone wants to test it or look at it cus i wanna fix it for my friends...........
Unusual error when it comes to Sephirot Booster Packs in the latest version
i am unsure how to fix this
are you sure it is your mod
have they tried without your mod enabled
yeah it is my mod
specifically the main lua in my mod
the seal one doesnt break anything but the main lua breaks the numbers idk why
sooo just get rid of that and it SHOULD be fine?
i made it work with planet cards idk how well the method is but it works fine
yes, i dont see an Essencia here so it shouldnt change anything
what's the best way to check if a given card is a consumable?
card.ability.consumeable iirc
SMODS.current_mod.calculate = function(self, context)
if context.using_consumeable then
local key = context.consumeable.config.center_key
local hand_map = {
c_mercury = 'mcjk_Pair Flush',
c_venus = 'mcjk_Flush Three',
c_earth = 'mcjk_Two Pair Flush',
c_mars = 'mcjk_Flush Four',
}
if hand_map[key] then
level_up_hand(context.consumeable, hand_map[key], false, 1)
end
end
end
does that seem fine i mean it works lol
not how i would do it but its fine
well i found a level up function and i thought well i might as well just check if a planet is being used lol
holy guac it worked thanks
been trying to figure out why that wasnt working
and lowkey made me stop working on the mod entirely!!!!!!!11
i would recommend checking newer example mods because a lot of things seem outdated
i recently (just a couple of minutes ago) updated the smods examples that i see you were using
wait you are THE smod example maker??
the examples were made by other people a long time ago but i became an smods dev recently and have been updating them
i also made https://github.com/nh6574/VanillaRemade
still like the bible 2
N' is basically john balatro modmaker himself
so i need your input on this should i make these count towards the jokers that affect flushes or would that ruin the point of it being vanilla type hands
and if it would be to op
what is the concept
ah i see
"flush five" versions of other hand types
yeah
if flush five triggers Droll Joker, probably make them trigger flushes too
what other flushes should i add
if youre playing a flush with extra steps, it should trigger the stuff thats meant for easier to play flushes
can it fry eggs too
a flush requires 5 cards so a pair flush is not a flush if we go by vanilla
high flush 🔥
son ☠️
and stat change
ok how about it makes a high card flush ONLY IF it has that like one enhancement that makes it count as all suits??
omni flush and it's a flush full of wild 🔥
yo thats smart
wild card being stronger is good for game balance
can i know name of that mod
make it check the suits in a way that makes all "multi-suit" effects (so things like Smeared Joker too) trigger High Flush
idk how to add mod settings ngl
tks bro
how do you add settings to mods?
kinda
this also makes planet cards useful lmao
holy complicated
ill do that when im done with the mod
its funny how two pair flush can lwk solo a whole game
is there a way i can check if a probability event is happening, and check if it fails?
like if i hit the wheel of fortune and it failed
then i could detect that
bump
here's sephirot.lua for help
yeah theres contexts for that i think
context.pseudorandom_result iirc
bump
extended_corpus = true
Still eats performance but MUCH less x3
Thank you!! :3
nah only wild card
Thank you so much! :D
hey so im having a problem checking if a card has the wildcard enhancement
should i be checking for m_wild or m_wildcard
thanks
would this be proper?
evaluate = function(parts, hand)
if not next(parts._highest) then return {} end
local card = parts._highest[1]
if SMODS.has_enhancement(card[1], m_wild) then
return { card }
end
return {}
end,
what is the hand supposed to be
flush high lol
yeah but high card but the card is wild or highest wild card
its activating if the card is all suits basically
i had a stroke reading that
is it the highest card in hand, if that card is also wild
or is it the highest wild card in hand
SMODS.has_any_suit(card) then
highest wild card
then that's wrong
what should i check then
_highest gives you the highest card in hand, you need to make your own check for highest wild card
ok
what if i just want the highest card and if it has wild then it activates
is it correct then?
yes
😭 bro my mod randomly deactivated thats why it wasnt working ghten
how does SMODS.gradient work? i cant make sense of the documentation.
also how do i format it into a description
Can someone help? I'm not a programmer and I don't understand anything.
for a description it's C:modprefix_key
is this a mod you're making?
seems like a corrupted game or a mod breaking it
Yes
verify your game files through steam
no that's from their mod
well the boot.lua was throwing some weird shit
return{
descriptions = {
Enhanced = {
shit_oozing = {
name = "Oozing Card",
text = {
"die",
},
},
},
},
}```
```SMODS.Joker {
key = 'oscar',
loc_txt = {
name = 'Oscar',
text = {
'Adds one {C:attention}Oozing{} card to deck when {C:attention}Blind{} is selected',
}
},
atlas = 'oscar',
pos = { x = 0, y = 0 },
rarity = 1,
cost = 1,
unlocked = true,
discovered = true,
loc_vars = function(self, info_queue, card)
info_queue[#info_queue + 1] = { key = 'shit_oozing', set = 'Enhanced'}
end,
pools = { ['shit'] = true, },
}```
```SMODS.Enhancement {
key = 'oozing',
pos = { x = 0, y = 0 },
config = { bonus = 1.2 },
loc_vars = function(self, info_queue, card)
return { vars = { card.ability.h_x_mult } }
end,
}```
mb 😭
im on my phone sorry can you post the individual lua files, at least the main one and the edition
I just send this
go back to the G.P_CENTERS.m_shit_oozing
And this
can you screenshot your file structure?
Also I use Smod 771a because i'am too lazy to update every other mod
the only thing i can think of is all the stuff you are doing with SMODS.current_mod.path
you shouldn't be changing that value
if it's from jokerforge i would ask in their discord
key = 'oozing',
path = 'oozing.png',
px = 71,
py = 95
}
SMODS.Enhancement {
key = 'oozing',
pos = { x = 0, y = 0 },
config = { bonus = 1.2 },
loc_txt = {
name = 'Oozing Card',
text = {
'{X:mult,C:white}X1.2{} Mult{} when scored',
}
},
loc_vars = function(self, info_queue, card)
return { vars = { card.ability.x_mult } }
end,
}```
wont show up?
ignore the ERROR
50/50 my stupid ahh code and jokerforge code
talking about the sprite
the enhancement is missing the atlas key
how would you make a joker discovered by default
add
discovered = true,```
to your joker
for example
loc_txt = {
name = 'Oscar',
text = {
'Adds one {C:attention}Oozing{} card to deck when {C:attention}Blind{} is selected',
}
},
atlas = 'oscar',
pos = { x = 0, y = 0 },
rarity = 1,
cost = 1,
unlocked = true,
discovered = true,
loc_vars = function(self, info_queue, card)
info_queue[#info_queue + 1] = G.P_CENTERS.m_shit_oozing
end,```
how would i make an enhancement allow another card to be played if in hand?
i dont know exactly how but you would run a check to see what cards are in hand if a card in hand has it then increase select size
ight
is there a way to do an info queue for a joker?
info_queue[#"Info"_queue + 1] = G.P_CENTERS.J_Mations_Lightportal something like
do you have two jokers referencing each other
add a if not card.fake_card check
can i make a
custom version of the card
like i can make my own info
without having to reference something
how long does it take for bmm to approve mods usually?
why would you ask me 😭
i don't like bmm
why
i also did like a million years ago
breaks mods sometimes and i prefer installing manually
i cant lie i have some cool ideas
is there a context for holding in hand
holding what
is it the enhancement
i have an idea for like a new section in the shop where you can pay money to start something, then come back the next round to collect a card
the only problem is im not sure how to create new ui elements
yeah like holding a card that has the enhancement
context.main_scoring and context.cardarea == G.hand
if you mean for a joker/another object to check for that it would be
context.individual and context.cardarea == G.hand
there's an smods property for that
there is?
so my config should look like that?
yes i know lol
so i need
???
end```
and
```context.cardarea =~ G.hand = function(slef, card)
???
end```
no that doesn't make any sense
does anyone have an example of a button that can be added to the shop
this in the config should do it
playing cards only increase hand size when they are in hand
ight ill test that
what are you thinking of exactly
i can maybe find a mod that does something similar
how can i check if i card is currently in the shop? i have a joker with a timer and dont want it going down in the shop
ui is hard to explain sadly
something like the hot potato mod
😨
card.area == G.jokers?
theres a button you press to bring up a ui
true...
where you can pay money, then come back a round later and a card will be waiting for you
didnt think about checking for the lack of being in the jokers area rather than check for shop
hot potatos shop was made by the ui wizard i cant help you there
just a little button you can press in the shop
key = 'oozing',
atlas = 'oozing',
pos = { x = 0, y = 0 },
loc_txt = {
name = 'Oozing Card',
text = {
'{X:mult,C:white}X1.2{} Mult{}',
}
},
config = { card_limit = 1 },
loc_vars = function(self, info_queue, card)
return { vars = { card.ability.extra.size } }
end,
}```
ignore how it still says x1.2 mult
like a button here that you could press, and it'd bring up a menu
if you search for b_next_round in the code you can find where the next round button is defined and you can start by adding those nodes twice
here's an example of how i make an overlay menu
https://github.com/nh6574/JoyousSpring/blob/5ef54fa49bbb5a4450c78294fb7b2854134f5d44/src/graveyard.lua#L516
the function just below that one is the one that my button calls
(it's not in the shop tho)
well you removed the rest of your config lol
you just need to add the card_limit to what you had
?
oh wait
never mind
return { vars = { card.ability.extra.card_limit } }
so i need to replace ability with what
no i mean
you had config = { extra = {...} }
yeah i fixed that
oh i see
you can remove the .extra
smods already adds a tooltip for it too
key = 'oozing',
atlas = 'oozing',
pos = { x = 0, y = 0 },
loc_txt = {
name = 'Oozing Card',
text = {
'{X:mult,C:white}X1.2{} Mult{}',
}
},
config = { extra = {card_limit = 1 }},
loc_vars = function(self, info_queue, card)
return { vars = { card.ability.card_limit } }
end,
}```
gets easier once you learn the quirks
no
question
is ts correct
--first played card is retriggered for every hand destroyed this ante
SMODS.Joker {
-- How the code refers to the joker.
key = 'laceration',
atlas = 'JokersGrabBag',
pos = { x = 0, y = 0 },
rarity = "gb_boss",
config = { extra = { repetitions = 1, repetitions_mod = 1}},
cost = 7,
blueprint_compat = false,
perishable_compat = true,
eternal_compat = true,
demicoloncompat = true,
discovered = true,
unlocked = true,
loc_vars = function(self, info_queue, card)
return { vars = { card.ability.extra.repetitions, card.ability.extra.repetitions_mod } }
end,
calculate = function(self, card, context)
if context.remove_playing_cards and not context.blueprint then
local destroyed_cards = 0
for _, destroyed_cards in ipairs(context.removed) do
destroyed_cards = destroyed_cards + 1
end
if destroyed_cards > 0 then
repetitions = repetitions_mod * destroyed_cards
end
end
if context.repetition then
return {
repetitions = card.ability.extra.repetitions
}
end
if context.ante_change then
return{
destroyed_cards = 1
}
end
end,
}```
does it work
you should test before yes
oh and i should probably also give it a description beforehand
i can see that ante_change returns destroyed_cards tho and that's wrong
else it will just crash
how should it be, then? i just wnat it to reset the count
a local variable will only exist for a single function call
you need to save the number to card.ability.extra.destroyed_cards
then reset that
so i just define destroyed_cards beforehand in the loc_vars?
--first played card is retriggered for every hand destroyed this ante
SMODS.Joker {
-- How the code refers to the joker.
key = 'laceration',
atlas = 'JokersGrabBag',
pos = { x = 0, y = 0 },
rarity = "gb_boss",
config = { extra = { repetitions = 1, repetitions_mod = 1, destroyed_cards = 0}},
cost = 7,
blueprint_compat = false,
perishable_compat = true,
eternal_compat = true,
demicoloncompat = true,
discovered = true,
unlocked = true,
loc_vars = function(self, info_queue, card)
return { vars = { card.ability.extra.repetitions, card.ability.extra.repetitions_mod, card.ability.extra.destroyed_cards} }
end,``` this better?
yes
am i able to remove the tooltip myself?
i'm so flummoxed
do i just put it in an event and have it wait until G.pack_cards and G.pack_cards.cards and #G.pack_cards.cards > 0 before iterating over it
i dont think so
i dont think it needs to wait, just an event should work
can anyone help me fix ts.. pleas
repetitions = repetitions_mod * #destroyed_cards
yes, you don't need a loop at all
but the issue here that causes the crash is that you named one of the loop variables "destroyed_cards", which completely obliterated the counter that you also named "destroyed_cards". so it stopped being a counter and started referring to each card in context.removed
if context.remove_playing_cards and not context.blueprint then
card.ability.extra.repetitions = card.ability.extra.repetitions_mod * #context.removed
end
...
#context.removed is the total number of elements in the table context.removed
so you don't need the loop at all
because lua will count it for you
if context.remove_playing_cards and not context.blueprint then
local destroyed_cards = 0
for _, destroyed_cards in ipairs(context.removed) do
destroyed_cards = destroyed_cards + 1
end
if context.remove_playing_cards and not context.blueprint then
card.ability.extra.repetitions = card.ability.extra.repetitions_mod * #context.removed
end
...
end```
yeah no this is probably wrong
you don't need the loop at all
if context.remove_playing_cards and not context.blueprint then
card.ability.extra.repetitions = card.ability.extra.repetitions_mod * #context.removed
end
?
also i noticed a couple of other problems
the code i gave replaces all of the code you gave here
yeah i figured that out
but now theres a couple of problems
1.- it retriggers every played card instead of just the first
2.- every time a card is destroyed it resets the amount of retrigger
but i think i can prob figure out how to solve 1.- on my own
yeah i think i solved 1.- on my own
yeah no i didnt solve 1.-
--first played card is retriggered for every hand destroyed this ante
SMODS.Joker {
-- How the code refers to the joker.
key = 'laceration',
atlas = 'JokersGrabBag',
pos = { x = 0, y = 0 },
rarity = "gb_boss",
config = { extra = { repetitions = 1, repetitions_mod = 1, destroyed_cards = 0}},
loc_txt = {
['name'] = 'Laceration',
['text'] = {
[1] = 'First played card gets retriggered #1# time(s)',
[2] = 'Increases by 1 every card {C:red}destroyed{} this round.',
[3] = 'Resets after each ante'
},
['unlock'] = {
[1] = 'Unlocked by default.'
}
},
cost = 7,
blueprint_compat = false,
perishable_compat = true,
eternal_compat = true,
demicoloncompat = true,
discovered = true,
unlocked = true,
loc_vars = function(self, info_queue, card)
return { vars = { card.ability.extra.repetitions, card.ability.extra.repetitions_mod, card.ability.extra.destroyed_cards} }
end,
calculate = function(self, card, context)
if context.remove_playing_cards and not context.blueprint then
card.ability.extra.repetitions = card.ability.extra.repetitions_mod * #context.removed
end
if context.repetition and context.cardarea == G.play and context.other_card == context.scoring_hand[1] then
return {
repetitions = card.ability.extra.repetitions
}
end
if context.ante_change then
return{
destroyed_cards = 1
}
end
end,
}```
Where can I find the code for the decks? Don't see it in vanilla remade or anything
vanillaremade
they're called backs
thanks
because they're the back of the cards get it
asking this here because it might be the more appropiate channel, oops
anyone know a good way to get the count of all held jokers excluding negatives?
do you only want to not count negatives or any that increase limits
any that increase limits
lovely patch that checks for the deck key
isn't there a var that stores original initial limit - so do i do min between that and #G.jokers.cards
i see, thanks for the lead, ill look into it
bump
i think there's a starting deck one but it won't account for any permanent changes
hmm i think areas now have a real limit value
im trying to find it
G.jokers.config.card_limits.base?
or print card_limits and check which one it might be
codewise, what's the difference between a playing card's id and a playing card's value?
they're both used to identify the rank but id is a number and value is a string key
the important part is that ids have get_id which accounts for having no rank and can be hooked
gotcha. i want to do some rank addition for a joker idea i had, but i want all face cards to be worth 10 and aces to be 1. assuming rank treats the cards J-A as 11-14, i may have to use value and create a table/dictionary to assign a custom integer for each rank
but you're saying that there's no equivalent get_id() for values?
there isn't but you can use SMODS.has_no_rank and a bit of not caring about what wacky things other mods do to replicate it
but if you are only coding vanilla ranks i think ids and values are the same?
doing get_id() on an ace would return 14, right?
yes
card.base.nominal is closer since faces are 10s but aces are still 11
if i wanted to only enable the end of the round to restore hands but not discards, I'd have to replace the bit of code that refreshes discards on round end with a blank space and then patch G.GAME.current_round.discards_left = G.GAME.round_resets.discards into whatever part of the code increases the ante, do I have this right or am I using patches wrong here? (and would it have unintended side effects?) just want to make sure this will only affect the game while the deck is active. Apologies for the massive question, will wait a bit before sending this and no rush to reply
(more specifically, card.base.nominal is how many chips that rank gives on its own)
wahh long ping
im sorryy
for the first part you would have to patch a conditional, not blank space
-- obviously pseudocode
if deck ~= your deck then
-- vanilla stuff
end
for the second part that is correct but it's easier to do it in SMODS.current_mod.calculate using context.ante_change and context.ante_end
i think i can work from this, thanks for bothering to reply
The crash logs say that at this specific line of code that there's an unexpected symbol at 'return'. Can someone help me with this?
also idk if im doing the info queue correctly or not
what happens if two decks have the same order in game.lua? is there a way to make it so that my patch sets the deck to the highest order number + 1?
order is automatically assigned by SMODS as the decks are created, it isn't manually set. there should never be two decks with the same order unless your patches are going in a very strange direction that you should probably re-evaluate
ah, makes sense, so i wouldn't have to touch anything here right? just use SMODS.Back as usual
correct
uh how do i check which deck is currently active? im trying to ctrl f my way through finding which variable tracks that but i'm not finding anything somehow
ah, this?
G.GAME.selected_back_key.key
nifty, thanks
for clarification, do i replace both key with the deck key or just the one after the dot
neither, that field has the key as a string, you need to compare against it
G.GAME.selected_back_key.key == "b_modprefix_key"
should have figured, thanks
also i recommend checking
https://github.com/nh6574/VanillaRemade/wiki#how-do-i-get-the-set-pool-or-key-of-a-specific-cardobject
context.poker_hands doesn't return an integer or anything, right? if you wanted to check and see if a played poker hand was stronger than another poker hand, how would you go about that?
im going to leave it here for tonight since i can feel my concentration reallly falling off, but this is my toml file and it currently does nothing, its on the lovely folder in my mod folder, unsure what i'm missing here but it might be obvious tomorrow? going to wait a bit to see if anyone notices some obvious stupid thing
if G.GAME.hands[context.scoring_name].order < G.GAME.hands[hand].order
to clarify, my intended effect is that the discards are not refreshed at end of round if my deck is currently active
awesome, exactly what i need. thanks!!!
ah, can it find game.lua from the mod folder?? i'm going to sleep now if anyone can inform me on this pls ping
i'm probably missing something pretty obvious, but i can't get my joker to trigger when i test it. i'm probably missing something obvious but i've been troubleshooting for the past 20 minutes with no real progress. anybody able to take a look?
You should be using card.ability.extra.poker_hand instead of highest_hand
it's still not triggering
it seems that the poker hand var never changes
well part of that is cause i commented that out during troubleshooting
Code?
card.ability.extra.poker_hand will never be High Card because context.scoring_name would have to be higher than Five of a Kind for card.ability.extra.poker_hand to change to it.
do the higher poker hands have higher values or lower values?
i was assuming that five of a kind would have been the biggest number
Firstly, Flush Five is the highest poker hand, Secondly, higher hands have lower numbers.
So my deck here won't work. Doesn't crash the game, just won't show up. What am I doing wrong?
how can i make the vanilla deck unplayable?
is there a way i can make a new popup menu
Hello, i've been working on all of this of deck skins, i've made some of them but i have no idea on how to turn them into a mod, could someone explain me if It isn't a Big deal? Thanks
API documentation: https://github.com/Steamodded/smods/wiki/SMODS.DeckSkin
example code from my mod:
I dont understand It, but thanks
been attempting to get ui to work and i keep getting this error message
neverind fixed it
you need to actually call the function
is there a way i can apply the background effects of the arcana booster pack onto a ui object
still waiting for help with this
I'm trying to make a consumable that changes enhancements but in different lines of code it states there's and unexpected symbol near ',' or '}', specifically lines 85, 87, and 93. can someone help me with this?
code starts at line 54 btw
there's a rogue comma in can_use after the if statement
when i delete those, it just says there's an unexpected symbol at the end bracket
further set_enhancement doesn't exist, it's set_ability and used different
you pass the center or just the key as a string (include the mod prefix!)
well there's also one too few end in that function
you should really install a lua extension so that it highlights errors for you
ive revised the code slightly, but the crash logs say i attempted to index 'config' (a nil value)
do you need to have your mod hosted on github to post it in #1209506514763522108
from what i know you just need the code to be public
I mean that's the easiest way
how can i cause music to play when you have a joker
I believe there's an explanation in the smods wiki
select_music_track = function (self) return next(SMODS.find_card("j_modprefix_key")) and 100 or nil
replace 100 with whatever priority you want
why
if next(SMODS.find_mod("GrabBag")) then
-- grab bag jokers go here
NFS.load(mod_path .. "jokers/laceration.lua")()
NFS.load(mod_path .. "jokers/sailboat.lua")()
-- the line above is 167
end```
sailboat.lua exists.
why is it doing that.
it worked just fine for laceration.lua
probably a syntax error in sailboat
also SMODS.load_file is preferred instead of NFS.load
heres the code for sailboat.lua in case it helps
loc_vars = function(self, info_queue, card)
return { vars = { card.ability.extra.odds} }
end,
local new_numerator, new_denominator = SMODS.get_probability_vars(card, 1, card.ability.extra.odds, 'j_wheeloffortune_sailboat')
return {vars = {card.ability.extra.destroyedcards, card.ability.extra.repetitions, new_numerator, new_denominator}}
end,
yeah this would be it
thanks
can i erase some vanilla deck?
Hi, I want to change names of decks when I choose a certain texture with malverk, is it possible?
I have the function to change the name, but I dont know how to make it work with malverk
do you see the key in loc_vars?
read the comment i wrote next to it
ohhh
also you can delete the whole loc_vars in your case like it says in the other comment
card.seal
this returns its ley
key
if you need the data do card.ability.seal
question is there a way to implement ^mult without talisman
look at how talisman does it
then copy
👍
remove the _1
