#💻・modding-dev
1 messages · Page 118 of 1
fair enough
oddly enough before I saw this
I already added some extra modifiers to the Carnelian and Obsidian decks
can anyone help me with making card enhancements? I'm trying to make one that has a chance to destroy itself like glass cards
Look in N++ for how glass card works for calculation stuff
what is n++?
Notepad++
me when smeared joker
You can search a folder’s worth of files
does anyone have any ideas
And you can use this: https://github.com/Steamodded/smods/wiki/SMODS.Enhancement-[wip]
ohh ok
i was looking through that
i was able to make the enhancement exist just not able to get the calculate to work
where weould i look?
n++ does the searching for you
well try undoing stuff til it works again to find it out
well yeah but like
it only crashes when i register a joker from the link i sent.
its literally just joker2 with the mult changed as a testing thing
SMODS.Joker {
key = 'japan',
loc_txt = {
name = 'Japan',
text = {
"{C:mult}+#1# {} Mult"
}
},
config = { extra = { mult = 40000 } },
loc_vars = function(self, info_queue, card)
return { vars = { card.ability.extra.mult } }
end,
rarity = "what",
atlas = 'THAW',
pos = { x = 0, y = 0 },
cost = 2,
calculate = function(self, card, context)
if context.joker_main then
return {
mult_mod = card.ability.extra.mult,
message = localize { type = 'variable', key = 'a_mult', vars = { card.ability.extra.mult } }
}
end
end
}
oh it happens when i do rarity = "what"
yea, if you have not made it a rarity in your mod it will do that
its right above
try removing pools
if it doesnt work then undo the deleteing of it and add the "weight" of the rarity showing up
so i want to make a persona 5 royal tycoon deck but
is tehre any way to get HD/4k card faces in
wdym?
Rarities have the prefix added
how do i get the rarity of a joker in the joker area?
as in really HQ detailed card textures
i want to make one based on a game's cards but they loo horrendus cmpressed
if you down scale the image to about the size of like 4 playing cards from balatro then modify the colors some then downscale again to the card size
i mean no way to make it good looking/hq?
no way to make the engine handle/run hq/4k images?
not to my knoledge
let me see if i cant work some magic on it,i am in a vc in the cryptid discord if you want to watch
For some reason when it depends on the time to select a random skin, it always selects a random skin, despite the selected index changing and the number of options being greater than 1
if you can get it to work without any compression id be most pleased
im making an entire set
The engine can handle higher quality images, but there's an upper limit to how big the image can be
i dont mind downscaling them
they definitely feel more distinct now
I think @mellow sable found out the upper limit when trying to make animation atlii
Now we need one for checkered
I might do a reskin for that
...huh, I thought some shader shenanigans would be needed for translucent cards.
really though Checkered staying as is is perfectly fine by me
nah you can just have transparency
Makes it all the easier, yeah.
lemme know if you get something drago
if you want to do any cool fog/fade effects, then you do, yeah
that looks cooooooool omg
hypothetically I could make Checkered+ and Tartan+ which would just be making those a bit less flush spammy
...could make it so all the odds turn into evens and vice versa, so you can't make straight flushes, but it's easier to make full houses 👀
This was not worth unpacking the archives within win32 of PSO2 stuff that ended up as 911946 files totalling up to 217GB, trying to find the actual UI parts. Ended up using green screening shenanigans.
asset ripping is a passion project
Well, you can try the DeckSkin template included in Steamodded
I've not touched the other folders... I'll need to move this off to my server box. But yeah, now I can properly do the intended PSO2 reference, though the current iteration of the Joker will need to be renamed to something else, alongside a design change.
nope
any clue how i would do this but with a joker from my mod instead?
j_modprefix_jokerkey
i tried that, didnt work
lemme double check tho maybe i simply typod
ok yup, guess i typod lol
ty
Is there documentation for creating a deck on the newest Steamodded version?
Thank you!
Is there a way to reload the game without quitting and reopening it every time?
holding M
I see. Thanks a bunch!
personally I find that annoying since it types in vs code after closing lol
fair enough, it also interferes with a debugplus keybind if you have the ctrl setting off
might be worth changing
387 x 289
ikr, then im in a panic trying to change it before the game loads it
but still ned more down scale
that is actually awesome
some kind of keyboard shortcut like ctrl + f5 or something would be great yeah
you can minimize vs code before doing M, that helps and it types in whatever else there is open (normally discord for me)
can ia sk how youj did tat thats amazing
that is a difficult thing to explain in text
its peak
I have multiple vs code windows open for references, its faster to alt+f4 at that point 😆
it's worse for me because i have autosave on focus loss LOL
you can have multiple tabs in vs-code, though for multiple references that can start getting rough on the space for main tab so
that would be super inconvenient for me lmao
so since I get to decide, no
yeah just thought about some laptop and (weird) keyboards
id do ctrl +f5 epersonally
lemme actually do that
I have a weird keyboard personally
you've mentioned it before 😄
but how do i change the M keybind tho
different folders
ctrl+f5 would be a hold through 3 keypresses for me
eh that's not even that bad tbh
could be worse but eh
how we feeling about ctrl+T
as i did mention before im in a vc in the cryptid discord if you wanted to watch
sadly was in middle o game hense couldnt see
and no channel vc here caled cryptid
release
I'd have to see if it's used by debugplus
the discord server for the cryptid mod
release, 100%
aight
(and as far as I can tell it's not used by debugplus)
as per the keys.txt it's not used
ah
so do i change keys.txt
so that's a debugplus doc
ye
o ok
I've changed it to [ on my end
theres multiple files, is it config.lua?
tbh we could have a config option for it
ikr
search for SMODS.Keybind in src/game_object.lua
the last occurrence in the file should be the definition of the keybind
ok thx
wanna do the same, what did you edit
[[patches]]
[patches.pattern]
target = 'engine/controller.lua'
pattern = 'if key == "r" and not G.SETTINGS.paused then'
position = 'at'
match_indent = true
payload = '''
if key == '[' then
SMODS.save_all_config()
SMODS.restart_game()
elseif key == "r" and not G.SETTINGS.paused then
'''
btw do i enter ctrl as a string like 'ctrl'
wasnt it M, why is it replacing R
ah I see. Smods is also doing a lovely patch
I killed balatro, it died right after this blind. crashed with no report XD
it doesnt work with my keyboard (/ didnt work either for debugplus for example)
is there any place I can check to see the value of each keybind?
key = 'ConstellationBooster1',
atlas = 'Booster',
pos = { x = 0, y = 0 },
loc_txt = {
name = 'Constellation Pack',
text = {
'Choose {C:attention}1{} of up to',
'{C:attention}3{} {C:purple}Constellation{} cards to',
'be used immediately'
}
},
discovered = true,
weight = 1,
cost = 4,
group_key = 'ConstellationConsumableType'
}```
so ive got the booster made, it appears in shop but crashes when I open it
btw was i right to make doubled joker a rare? or should it be a different rarity (creates a duplicate of the joker to left of this one if theres room, -1 joker slots as long as this joker exists in your joker area or whatever)
does it keep creating duplicates?
nope still crashes
once every hand
so you could make some op combos with it
SMODS.Back{
key = "antimatterDeck",
pos = {x = 1, y = 0},
unlocked = false,
discovered = false,
loc_txt = {
name = "Antimatter",
text ={
"Start with 1 {C:attention}Joker slot",
"Gain 1 per {C:attention}Ante."
},
},
apply = function()
G.GAME.starting_params.joker_slots = 1
end,
trigger_effect = function(self, args)
if args.context == "eval" and G.GAME.last_blind and G.GAME.last_blind.boss then
G.jokers.config.card_limit = G.jokers.config.card_limit + 1
end
end,
check_for_unlock = function(self, args)
if args.type == "ante_up" and args.ante == 9 and #G.jokers.cards >= 8 then
unlock_card(self)
end
end
}
My deck is working quite well, BUT how do i add the unlock requirment text? rn the text zone is blank. you don't know how to unlock it
thats strong lol
permanent -1 joker slot per duplication
that just makes it terrible
ngl
high risk high value
i just wanna know if you think i should change it to legendary/other rarity or keep it as rare
legendary
you cant buy legendaries, but since their sell value is 10 it should be 20
voucher idea: you can now buy legendaries from the shop
oh
wait so why does perkeo have a cost
to set the sell value (half)
at least I think so
thx
do you think Joker Lottery should also be legendary? id guess not since its just
Destroy joker to left of this card, create a random joker of the same rarity (if there is space (for edge cases like if the destroyed joker was a negative))
i mean its rare rn
ooh
Is there a way to make it so that if I select a card with a specific Enhancement, it disables the "Play Hand" button?
ooh what?
just looks interesting
thx
imma try to remake the art for doubled joker
try to make it fit legendaries more
do you think Rare is justified for this joker
obtained from packs?
anything that uses create_card
id say its more of a uncommon
(for playing cards)
but im not very experienced so dont listen to me 
yeah I also feel like its a bit underwhelming like packs are likely to give any of the 4 suits
maybe it should increase by 1 the amount you can pick
-# and leave it rare
also that unique thing
what does it mean when added
itll just self destruct when what
yes previous copy self destructs
cool idea but idk how youd do that
o ok
I do
I need an idea for an Enhancement card that's pretty anti-gameplay but gives a significant buff
so you cant stack it
go for it then
so im almost done all the jokers of my mod but im still iffy on the effect of this specific joker. it just feels kinda boring
its pretty useful
if anyone has suggestions on something cooler im open to them
it is but its just kinda dull
thats nice
maybe i do that but make it so you always have to play 5 cards, forcing you into flush/straight flushes
or a different number of cards
ill have to workshop it
hello! im new to modding balatro, and i got two questions in mind:
- if i could, how could i get a joker that multiplies chips to work?
2, for future reference) how would i get chance systems on jokers to work? like chance to self-destruct or chance to create a tarot / planet / spectral?
for 1) you can do ```
chip_mod = mod_chips((Xchips-1) * hand_chips)
not sure about 2 though sorry
i should specify that hand_chips is a global var containing the chips, but Xchips must be replaced with whatever number you need
What's the best way to make an enhancement that destroys itself after the hand is finished calculating a la glass cards?
I've been trying 'context.destroying_card', but that doesn't seem to be working here - but then again I may just not be quite understanding it
maybe it also remove the non spade tarot cards from pool?
wdym by anti gameplay?
Something that goes against how the player plays
No discards, unable to play hands, destroying cards etc
Not to worry though I already figured something out
maybe, this is the change I made for now
thanks for the warning. if you have succeded could you share your progress as i wanted to make a stone like enhancement myself. if not, am i able to help? work together
calculate = function(self, card, context, effect)
if context.cardarea == G.play and context.scoring then
if next(context.poker_hands['Full House']) or
next(context.poker_hands['Four of a Kind']) or
next(context.poker_hands['Straight Flush']) or
next(context.poker_hands['Five of a Kind']) or
next(context.poker_hands['Flush House']) or
next(context.poker_hands['Flush Five']) or
next(context.poker_hands['Royal Flush']) then
card.ability.extra.primed = true
card_eval_status_text(card, 'extra', nil, nil, nil, {
message = "Primed!",
sound = "fm_finalized",
colour = G.C.BLACK
})
end
end
Trying to make an Enhancement's flag (primed) turn to true once it detects one of those hands while it is in the holding hand, but it's not able to detect any played hands. Any help?
context.scoring_hand maybe
It's actually only really tedious if you do it exclusively with lovely injections. I ended up just using steamodded for defining enhancements for various reasons, which has several parameters that can make a card act like stone. replace_base_card, no_rank, no_suit, and overrides_base_rank should do it.
just realised, its free real estate with hologram
context.scoring isn't a thing
I think you want context.individual
this is a joker right?
replace the scoring one
so you have if context.cardarea == G.play and context.individual then
isnt context.individual used if you are checking every card like with walkie talkie
sorry, if context.cardarea == G.play and not context.individual and not context.repetition then
I should get some sleep 😴
What does not context.repetition do again? Is it a retrigger like Red Seals or something
context.repetition checks for retriggers on that object, yeah
I wonder if we should name each context and build the names into better calc 2 🤔
msg = string: "[SMODS FATEMAKER \"main.lua\"]:930: attempt to index field 'poker_hands' (a nil value)"
Whoops
It's this exact same code except I replaced that if case line
throw a and context.poker_hands in there
where is the logic that checks if the enhanched card is held in hand
it needs to say "joker" on it
Nope, unfortunately it isn't working
My intention is that if the card with this Enhancement is scored with a hand equal or greater than Full House, it would set the flag primed to true and play that "Primed!" message
its a legendary, a common trait with them is that they have their name instead of joker
plus some non-legendary cards have no "joker" on it iirc
do you mean to-do list?
til that one also has it
that one doesnt
oh it does
its the first character of each word
fr
lol yeah
i tried to mimic the general legendary style, though i couldnt figure out the little background thing so i just used some perlin noise
looks like a military related joker
if you throw some print messages in can you see where it's getting to?
smeared joker is the only joker i can think of that doesn't have the word "joker" legibly on it
and that's because smeared joker's art is just a mess
yeah its all smeared 
remember guys the driver's license expires later this month
i wonder if voroni noise would look cooler
Does anybody here happen to know how animating joker art works? I've tried asking in Cryptid but I didn't get much help there. Here's the code I wrote to handle it but I'm clearly missing something since it's not ticking/sending console messages
calculate = function(self, card, context, effect)
if context.cardarea == G.play and not context.individual and not context.repetition and context.poker_hands then
print("Card area checked")
if next(context.poker_hands['Full House']) or
next(context.poker_hands['Four of a Kind']) or
next(context.poker_hands['Straight Flush']) or
next(context.poker_hands['Five of a Kind']) or
next(context.poker_hands['Flush House']) or
next(context.poker_hands['Flush Five']) or
next(context.poker_hands['Royal Flush']) then
print("Poker hand checked")
card.ability.extra.primed = true
print("Primed")
card_eval_status_text(card, 'extra', nil, nil, nil, {
message = "Primed!",
sound = "fm_finalized",
colour = G.C.BLACK
})
print("Message displayed")
end
end
Ho shit, it's not even printing any of the messages at all in the console
this might sound dumb, but is this definitely in the right enhancement?
did you check Aure's mod?
Haven't even heard of that
it has some animated jokers
Six Suits?
no its just called aura or aure I dont recall precisely
hmm ok
Yes it is
Just checked
I'll double check the console
listening to the main menu music while spriting is such a vibe fr
listening to the main music while doing anything tbh
ye
just wait until you hear cardsuce track
Nothing in the console either hmm
I appreciate the suggestion but I don't think this is exactly what I'm looking for
sorry I misunderstood then
no worries
jimbo is going places
resprite done lez go
similarly; my joker is showing its ability, not unlock requirements. how do i set unlock text?
to loc_txt add unlock which is a list of strings just like text
oh thx, i thought it might be smth like that, but wasnt sure
oh i should prob do that too
calculate = function(self, card, context, effect)
if context.cardarea == G.play and not context.individual and not context.repetition then
if context.scoring_name and (
context.scoring_name == 'Full House' or
context.scoring_name == 'Four of a Kind' or
context.scoring_name == 'Straight Flush' or
context.scoring_name == 'Five of a Kind' or
context.scoring_name == 'Flush House' or
context.scoring_name == 'Flush Five' or
context.scoring_name == 'Royal Flush') then
card.ability.extra.primed = true
card_eval_status_text(card, 'extra', nil, nil, nil, {
message = "Primed!",
sound = "fm_finalized",
colour = G.C.BLACK
})
end
end
This is killing me, I still couldn't figure out how to make this Enhancement card fetch the hand type when scored
hm how should i make doubled joker be obtained by
bc its a legendary so it doesnt go on the shop
then the soul will get it
ah ok cool
imma make a deck in my mod where you start with doubled joker lol
btw is there an smods wiki thing showing all of the formatting things you can do in loc_txt text (like {C:attention})
do you mean all the colors
Is there a way to fetch the number of the current round?
ye
wrong reply but ok
oh thx
these
So if i want Spade's colour in my text field do I just do {C:spades}
yeah
Sick it works
maybe G.GAME.round
I keep getting this crash on startup and I can't figure out why?
Here's the code I think is at fault, there's probably a bunch wrong with it but idk how to see that yet
I've noticed an errant reference to the no-longer-existing new_card but fixing that doesn't solve the issue
Found it. I mistyped the modded rarity on a joker
this is what doubled joker looks like in game (after setting soul_pos)
i think you mean G.jokers.highlighted[1].key at the top
also recall the class and mod prefix
j_mod_joker
Where do I put that, when I'm making the card or when I'm checking the highlighted?
when you're checking the key
So like G.j_mod_joker.highlighted[1].key or what
no in the key you're checking
if G.jokers.highlighted[1].key == "j_bf_hoaxe"? That isn't how I have it formatted in the joker itself, but it isn't working either way
is it context.before to do smth before scoring
is there any way, with SMODS.Keybind, to check the mouse position when the button is pressed?
and also get the joker if one is being hovered over
debugplus does that, you hover over a joker in collection and press 3
is that another mod?
ye
Is there a context that checks when a card has entered your hand from the deck
you could look through its code to see how
Just found out this little quirk about soul rendering and I'm very frustrated by it lol
Mathematically accurate 4D joker
It'd be moving in real time if it were accurate :(
debug plus doesnt need steamodded so it doesnt reallly help
thx anyways
I've never thought I would do this but
screw it, we ball
I do need people to provide translations tho
So it turns out it's not getting the highlighted joker at all? Telling it to print the highlighted joker's key returns nil
tutorial
for some reason incantation refuses to stack my consumable type
SMODS.ConsumableType({
key = "index",
primary_colour = HEX("FFFFFF"),
secondary_colour = HEX("FF0000"),
shop_rate = 4,
can_stack = true,
can_divide = true,
loc_txt = {},
})
Funny
oh i didnt know
you can just use the method DebugPlus (and the game) uses to get the current hovered element
if G.CONTROLLER.hovering.target and G.CONTROLLER.hovering.target:is(Card) then
oh I meant to reply
there
the target will be the card
then you can check card.ability.set == 'Joker'
and X:mult is for Xmult background red
cool animation. mean ability XD
Hi it's me again. It's telling me card.ability.extra.chips doesn't exist
-- Jamminhead Joker
SMODS.Joker {
atlas = 'Estrocards',
key = 'jammin',
pos = { x = 4, y = 1 },
rarity = 3,
immutable = true,
config = { extra = { chips = 1, chip_mod = 0 } },
loc_vars = function(self, info_queue, center)
info_queue[#info_queue + 1] = G.P_CENTERS.m_est_transgender
return { vars = { center.ability.extra.chips, center.ability.extra.chip_mod } }
end,
loc_txt = {
['en-us'] = {
name = 'Jammin Joker',
text = {"Gain {C:chips}#2# Chips{} every time",
"{C:attention}Transgender{} card scored",
"when {C:attention}Chips added >= 77{}",
"make every card in deck {C:attention}Transgender{}",
"{C:inactive}(Currently{} {C:chips}+#1#{} {C:inactive}Chips){}"
}
},
},
calculate = function(self, card, context)
if context.individual then
if context.cardarea == G.play then
if SMODS.has_enhancement(context.other_card, 'm_est_transgender') then
card.ability.extra.chips = card.ability.extra.chips + card.ability.extra.chip_mod -- Error line
return {
message = localize('k_upgrade_ex'),
card = card,
colour = G.C.CHIPS
}
end
end
end
if context.cardarea == G.jokers then
if not context.before and not context.after then
return {
message = localize{type='variable',key='a_chips',vars={card.ability.extra.chips}},
chip_mod = card.ability.extra.chips,
colour = G.C.CHIPS,
card = card
}
end
end
end,
}
So true digital detective, I 🤷 as well
did you add the chips after creating the joker (if it's from a save)?
That's a pretty plausible explanation to the issue
it's also the most common reason for this
For future reference, it's usually good practice to start a new run any time you've made changes, as continued runs can have bad data
at least destory and spawn a new copy of your joker
mfw I never thought of that because muscle memory lol
friends
it is with great pleasure that i announce i have finished functionality for all 20 of my jokers
I'm so glad I don't have to do that lmfao
i got friends who are helping but i actually do wanna improve at art myself
The gang
Still plenty more to do
That's a good looking question
how do i detect when cards are removed from the deck? how do i also then check the deck size(full)?
check_for_unlock = function(self, args)
print(args.type)
end
args.type does nothing when i hang man delete cards
oh man im only on 18 jokers....
6 vouchers, 9 tarot, 10 planets, 10 spectrals, 14 oddities, 6 joker stamps, a set of 8 booster packs, 4 tags, 2 blinds, 6 decks, 16 hands, and 17 suits also tho
context.discard if you want to execute the function for each card individually(like ramen). context.pre_discard if you wanna look at the hand as a whole(like burnt joker)
im on 2 jokers and 1 deck XD
You're doing VERY fine 
16 hands and 17 suits?
yeah 16 new poker hands
im not wanting discard but deletion. im trying to check when the full deck has been reduced to 26 cards
ohh sorry misread
though really its 6 new hands, two of which have flush/spectrum alternate versions and one has flush/spectrum house and flush/spectrum five overlap too
a Blaze (5 face cards), a Skeet (2, 5, 9, plus two other ranks between 2 and 9), and the little/big dog/cat hands, which are each basically almost-Straights with particular high/low cards with no pairs; little dog is 7-2, big dog is A-9, little cat is 8-3, big cat is K-8
any ideas?
that must be fun to program
hands are actually pretty simple once you understand how the system works
its just abit weird
I'm gonna eventually need to learn how to make hands cuz this is a deck I wanna make
sorry im not sure maybe look in card:remove or card:remove_from_deck
ive wanted this!
And that's called market research LOL
there was a mod a long while back called Hand of Six, that still around?
instead of super flush why not blush XD
or we need a blush joker
instead of super straight: horseshoe gay XD
anyone do a hanafuda deck yet?
Actually I'm considering sending the doc of ideas my artist and I have for this mod if y'all wanna take a looksee. Just no stealing >:(
i'll only steal if i steal

Welp I'll just trust lol https://docs.google.com/document/d/1y2sIFrUXv2X2r0jEcyu4bZYZPM5WBBOtF5AacrlaSCQ/edit?tab=t.0
im too lazy to steal dw
If anything I hope it gives a little inspiration for some of y’all too
some bangin ideas!
Thank ya. Almost all credit goes to my artist lmao
I’m not too insanely creative ngl but I can at least code good
i got the ideas and code but not the art :/
Rather unfortunate
i love all the food synergies, maybe i can offload one of my ideas to you to implement with your existing?
im curious, how easy is it to do all the food joker stuff
do you have to check each one individually
Yes. It’s a lot of lovely patches
The idea is the flame effect for passing scores counts as 'cooking/burning' and so would trigger some abilities.
Like Soufley (idk how to spell that) is pretty strong but is destroyed if you burn
some food that is better well done eg 'steak' grows each time you 'cook'
stuff like that
im sorry
Worth it honestly
Very interesting idea but I have not a clue how I’d get that to work off the top of my head lmfao
fair
Glad y’all like the ideas though. Makes it really feel like this project will be worthwhile
The artist sent an earlier iteration of it in a gc and someone else asked for a more defined buttocks, and thus here we are lol
XD
i love soil joker
😭
well i love many of these
It wasn’t a shader but yes I did get it working
I just couldn’t apply it to the Soul sprite for whatever reason. Probably due to how it’s rendered
oh what, howd you do it then
im asking cause i wanna do something similar, just vertical
The same way Jimball does it, Game update ticks
Gimme a sec I can get you a link to it
please
asesomeeee tysm
Np
It’s a little hard to wrap your head around but once you get it it’s somewhat simple
i have no clue what jimball is so thats throwing me off a bit
OOOO
It’s basically just iterating through a spritesheet
i see ok
would you know how it defining Game:update here works?
i feel like that should conflict with Game:update in game.lua
I’m not 100% in the know of how that works, just that it does lmao
it gets the old Game:update function first
local upd = Game.update and then the first line of the new Game:update is upd(self, dt)
it's hooking the function and adding more to the update loop
peak
i had to do some function hooks for my mod to add to the game over screen and also to prevent discards of certain cards
oh i see it now, ty
thats actually a real clever way to do animation
but also a bit annoying
one of these days i need to just get lost in the sauce (the sauce being the modding documentation) and actually finish my half baked mod
ive added a handful of husks of ideas, 13 consumables, 8 jokers (i have more ideas just cant get them balanced right)
but none of them do anything because i cant wrap my head around the configs for cards
What exactly is the roadblock?
just having an idea that isnt in the game so i try and find other examples, to no avail (not because they dont exist, but simply because i cant find what im looking for) and then sit and stare at the crash log for 10 minutes before moving on to something else
or i get really invested in making a design for a card and then when it gets to the point of actually implementing it i just lose steam
i mean no shot i would have made as much progress as i did without asking around here
Same here. This channel is a massive resource
honestly though i kinda wish there was a modding help forum where people could ask questions, and instead of having a ton of people asking the same questions, just direct them to a forum post
the code is a mess made by one guy who thought the game would sell like 6 copies so who the hells gonna see the source code, and the smods api, while helpful, does lack some documentation
That’d be kinda nice for more involved questions, but smaller ones I think are fine for the most part
yeah, because i dont always want to ask a bunch of questions that have already been answered and i just dont know where they are
i do think this discord should have a modding beginners channel that links to smods and the example mods
plus, if i cant figure out the solution after the first answer i hate coming back and asking for clarification
Coding is not a straightforward process. Following up is nothing to be ashamed of
I think forums would be a good idea
but I suppose people are already sorta using #1209506514763522108 for that
SMODS.Booster{
key = 'ConstellationBooster1',
atlas = 'Booster',
pos = { x = 0, y = 0 },
loc_txt = {
name = 'Constellation Pack',
text = {
'Choose {C:attention}1{} of up to',
'{C:attention}3{} {C:purple}Constellation{} cards to',
'be used immediately'
}
},
discovered = true,
config = { extra = 3, choose = 1},
weight = 1,
cost = 4,
group_key = 'ConstellationConsumableType'
}
On that note... whenever i open this booster my game crashes
What does the crash report say? Top of the screen
Do you have access to the game’s source code? Because that error is occurring within the base game’s card.lua file
It’d be worth looking at that line to help diagnose
specifically you need to look at the code dumped by lovely since it'll have any patches added
this is what it is in vanilla card.lua
I didn’t consider lovely patches whoopsies lol
if steamodded has loaded then looking at vanilla line numbers is useless
always look at lovely dumps
which can be found...
mods/lovely/dumps/
could you expand the screenshot up and down a bit?
yes
you'd need to patch the thing
would i do that within my own lua file
do you have the new consumable type set up as well?
you should have installed it when you set up mods
Damn you beat me
haha
SMODS.ConsumableType{
key = 'ConstellationConsumableType',
collection_rows = {6,7},
primary_colour = G.C.PURPLE,
secondary_colour = G.C.DARK_EDITION,
loc_txt = {
collection = 'Constellation Cards',
name = 'Constellations',
undiscovered = {
name = 'Not Discovered',
text = {'Purchase or use', 'this card in an', 'unseeded run to', 'learn what it does'}
}
},
}
yes
they exist
you aren't defining create_card in the booster
so it just.... has no idea what cards you want it to make
oh then you don't need a patch
i was thinking you'd need to patch the function for boosters
remember that you can always assign functions to variables and reuse them for repeat boosters
but yeah that's way easier
technically you do need a patch but smods did it already
you really need to manually make a create_card function?
i think so?
so where does this line go?
:)
ive not made consumables or boosters yet but i feel like that shouldnt be needed
idk i've made a whole suit levelling system so
just in the lua file, anywhere before it's called
you could even do create_card = function(self, card) then blahlblahblah endin smods.booster itself if you prefer that way
but defining it on the highest level allows for its reuse
alright, im going in for the test drive
gl
btw whats that mod that had the safeguard joker called (if its publicly available)
nvm, one sec i need to increase the weight again
wait whyd i send this here, couldve gone in #⚙・modding-general
Any idea what the meaning behind 'b' and 'k' before the actual key in the localization files mean?
if you havent already, install the debugplus mod
already got it
sick
are events blocking by default?
cant you summon the pack from the collection screen then?
modding this game is fun because if theres something that you can conceivably ask "can i put this in balatro" the answer is probably yes
dont know all the features of debugplus
hold tab in game
LOL
well, it creashed when it appeared this time
hey thats progress
press 3 while hovering over a joker in collection, itll add it to your jokers area
good to know
(i should add jokers that increase suit levels somehow so you can actually level suits that aren't SHCD)
yessss
also is this the most hand name
are you calling localize() on a custom string somewhere?
yes?
you sound unsure lmao
may i see?
the jokers i was doing started as ripped from a youtube tutorial
hence the comments
hm that looks good, localize() needs specific strings passed into it so if you ever call it with something not supported it'll pop up errors. but k_upgrade_ex is supported
it also hasnt crashed until the booster showed up
and those jokers were the first thing in the file
ok, so update. It crashes when i hover the pack
ow wait, im a dumbass
oh?
i put the name = 'Constellation Pack', inside of the text = line
simple ctrl v error
oh lmao
new error, yipee
culling the pool?
in the function create_card does the key_append need to be something specific
im not sure tbh, again ive never added boosters or consumables so this is new to me too
we're all learning
its weird tho, i feel if you added everything in here it should be fine
thats what i assumed too
can i see an example of smods.consumable?
it doesnt have a config yet because im not focusing on that part rn
shouldnt need it yet
i want my things in the game before i make them do things
yeah im really not sure what's going wrong
well that makes two of us
you said the issue was when you hovered over the pack?
no, that was solved with this
oh right
now it crashes when it tries to spawn cards
oh
does it have a loc_vars? the booster
and when you hover does the text correctly say like "choose 1 of 3"
dw lol all my textures are temps too
OHHHH
i think its cause youre using the vanilla create_card, which wont work with any custom stuff
you need SMODS.create_card()

so if just toss in SMODS. in front of create cards it should do something different
WOO, new error
you need to put all the vars int a single table
just add {} and, assuming the values line up right, you should be good
easier and clearer to do {set="constellation", area = G.pack_cards, etc....} though
ill give it a shot
again the orders may be off, and also it might be iffy about the set name
nope same error
ok back to loc_var
wait, hold on
if the first one is calling the set, then i am once again made the joker
ConstellationConsumableType
is my set
not just constellation
still an error when opening right?
well hold on i havent tried this new fix
because previously it was looking for the Constellation set, but that doesnt exist... its ConstellationConsumableType
ah that might be it
nvm, still crashes
same error
still when opening?
yeah
can you comment out loc_text.text and trying hovering over it? i want to see if it crashes
im missing some info for this
you shouldnt need all of it
i suspect theres an issue retriving the number of cards to pull and let you choose. try adding loc_vars = function(self, info_queue, card) return { vars = { card.config.center.config.choose, card.ability.extra } } end, to the booster code
ok just for testing, put "tarot" as the first argument to see if itll make tarot cards
nope, thats not it... hmm
im pretty sure that wont work yea
this is vanilla code but you can see it doesnt account for case
and i think smods version is the same
alright i gotta sleep but essentially, if that works and it spawns tarots, the issue is with the key youre giving it and you might have to mess with the casing or add the prefix of you mod (if you have one) or even maybe prepend "c_" for consumable. if it doesnt then tbh im outta ideas. gl
ofc
does this sound good
I have no context other than this picture, seems crazy
tl;dr my mod adds a new card modifier (or however you wanna call it) and i'm working on a new version
this is one of the ideas i had for a new gem slot
how does that work? is it like a bonus per scored card or?
depends how hard to obtain. very useful ability
yes, based on the suit of the scored card :)
flush of hearts with lvl1 means +25chips and +5mult 0_0
thats very good
yes
planet cards
noice
okay i think i finally got this working right entirely now
so i play chekered deck, level up jupiter and spade planet
artwork by one Jevonn
why am i getting this out of the blue 😭
oh i love the art for these
thanks its not mine
don't mind the crap placeholder art for now but the start of a fancy animation thing
ended up having issues where sometimes the joker wouldn't be added and the cards not changed but i hooked start_run and added some stuff to it
that fixed the issues
Holy shit that's amazing, really love the Joker spawning animation
planning to make it even fancier later on
mostly was just trying to get a base for that set up for later
calculate = function(self, card, context, effect)
if context.cardarea == G.play and context.individual and not context.repetition then
if G.play and G.play.cards then
for _, playedCard in ipairs(G.play.cards) do
if playedCard.config.center == G.P_CENTERS.m_fm_slow or
playedCard.config.center == G.P_CENTERS.m_fm_freeze or
playedCard.config.center == G.P_CENTERS.m_fm_shatter then
card.ability.extra.money = card.ability.extra.money + 3
card_eval_status_text(card, 'extra', nil, nil, nil, {
message = "Cracked!",
sound = "fm_cracked",
colour = G.C.MONEY
})
end
end
end
end
...
Man I can't figure out how to fix this [SMODS FATEMAKER "main.lua"]:787: bad argument #1 to 'ipairs' (table expected, got nil)
Any insights? This Enhancement stores money in itself whenever those specific cards are played
i'd assume line 787 is the start of that for loop?
or is that somewhere else?
cause it's saying that G.play.cards is nil if it's that, but it can't be nil because that checks if it exists before doing the for loop
Lemme recheck
Now it's 785... on a different Enhancement
for i, playedCard in ipairs(context.scoring_name) do
The one I'm having problems with is called Shatter, it detects Shatter, Slow and Freeze cards to gain money when they are played. This line 785 is on Freeze
Lemme try with different cards
Line 720 brings us to Slow, at this line for i, playedCard in ipairs(context.scoring_name) do
I see hmm
if you're trying to find the names of hands within the played hand it's context.poker_hands
No I'm trying to find those specific Enhancements that are played, ones that start with m_fm
yeah ok so then change it to scoring_hand
scoring_name is a string which is the name of the played hand type
Righto
Alright at least it didn't crash now, but somehow it's just not able to add money to the Shatter card
But I'll fix that on my own later, gotta head out
Thanks for the help though!
what's the debug to skip a pack
It might not, I found it in the Cryptid code for green seal
maybe its a cryptid thing
is there a context for when a card is drawn to hand?
It isn't working with my joker though, I probably just have to loop through played hand and remove the scored cards from list or smth
are you trying to do something for each card individually?
or something that actually needs a list of only unscoring cards?
A joker that gives an enhancement to any played unscoring card
ooh
Can i get a list of all played cards?
context.full_hand
thanks
Is there a list of all contexts somewhere?
i feel dumb. how do i trigger an effect on joker addition and removal, i thought it was apply, but its not working
apply = function(self, card, context)
G.GAME.modifiers.money_per_discard = G.GAME.modifiers.money_per_discard + 1
print("Money per discard: " .. G.GAME.modifiers.money_per_discard)
end
add_to_deck/remove_from_deck
even tho jokers arent added to deck?
owning something is having it in your deck
thank you, that worked 🙂
You woldnt happen to know how to manipulate money recieved from discards like in green deck? the above i tried isnt working. G.GAME.modifiers.money_per_discard is nil
I have a Joker with custom size that I set using card.T.w and card.T.h in Joker's set_ability, but upon copying the Joker it's sprite gets "stretched" across it's size instead of adjusting the canvas (the copy gets stretched; but if I reload, it will be restored back to its normal look)
Not sure what to do, any ideas?
What’s the config of your deck look like?
i'm not sure if you can change the size of a sprite because of the way atlases are set up
Not on my PC rn, but check Cardsauce's jokers/wingsoftime.lua
I checked it but not sure what I could use out of that
it's the set_sprites one
you can modify the size there too
oh! i guess just copy the set_ability stuff to set_sprites
I use multiplication to do custom scaling so it just resizes two times and becomes worse lol
heck
just remake the sprite with new dimensions in set_sprites instead of modifying it maybe?
I want to determine what happens upon copying that doesn't happen upon loading or initial creation (or vice versa)
because if I just create the card as-is, it looks as expected
and in the collection too, and upon reloading the saved game all the broken ones fix
does your method of sprite resizing persist through save/loading
oh dang nice :0 i couldnt figure that out when i tried
i really wish we could just put in the size of the joker and smods would handle it ^^;
yes 😔
Even then that's a hilarious sprite lmao
gee firch how come jimbo lets you have two jokers
maybe don't scale off the existing values but the default card dimensions?
oh no its smodsmn everyone duck and hide
I mean I don't see how that'd make any difference if the default card has the same values as default global for the dimensions
idk because i insinuated smods should have more features :P
nah that's a good idea
I mean 
scaling for stuff like square joker or photograph are all over the place
yeah i tried to implement it back when i was makin oddityapi and i got stuck on getting it to scale the sprite correctly after reloads and in other niche situations
... these issues persist to my current version as well sigh
what's delay_sprites?
I mean I can see where it's used but is there any point in using it in joker's setup
No not in joker setup
I think it’s solely used for timing enhancement sprite updates correctly
i wonder if thats related to why my finicky custom centers for my suits have been weirder since updating
uhmmm, almost?
okay card.children.center:reset() did the thing
the full thing
is there any reason why
made the achievement notification not an actual card object
Because 
do.. do they give +8 mult?
nope, adding link/group-related jokers that aren't polymino
LINKED JOKERS....
PEAK...
it's not going to have linked jokers lmao
cryptid is right next apartment sir
(also happy birthday)
thank
Cryptid's source code is cryptic as hell
it's in the fucking name
He's just like me fr
Hey, I was wondering if there was a way to have a Voucher effect always be active as a sort of passive effect?
I know of the Update function but that runs on every frame, so I figure it's not a good idea to use it with a voucher- Gist of the idea is a voucher that gives you say, 5$, if you manage to one-shot a blind (aka the fire effect spawns)?
I'm wondering if it wouldn't be easier to inject a check at the end of a blind that gives you money if you one shot a blind upon redeeming the voucher, but I'm not really sure how to achieve that 😩
if you follow vanilla style, then you'd have something like G.GAME.boss_oneshot_reward = 5 and then check at the end of the blind if that amount is set (or > 0) and if boss got oneshotted, then give amount of dollars from that parameter
in voucher redeem function you'd just have to set that value

I haven't messed around with adding new g.game values or hooking into preexisting functions like the end of blind yet so I gotta learn now lmao
well anything you add to G.GAME will get automatically saved iirc
other than functions/files
yeah I assume that's why my test voucher did just fine keeping the +1 to hand upon reloading the save
also by end of blind I meant payout function
Oh yeah I figure that's what I should hook into
ok there we go
upon purchasing the voucher i have it set to true and print itself
then i reloaded the save and did an eval in the console
so I know the variable works
now i just gotta find the payout function to hook that new stuff into it lmao
You can also just check if the voucher is redeemed rather than setting a variable if this is the only effect you have that will use the variable
Oh true
i don't think thunk removed it
well, some mods like cryptid may modify voucher value so I'd say it is preferred to save the value
Unless steamodded now fully saves all vouchers with extra data
Can I get a bit of help here? I'm trying to make a joker that upon selling and highlighting a single card in hand, transforms 15 other cards into it. on the Steamodded Wiki, I didn't really find anything that could help me here
if context.selling_self and not context.blueprint and #G.hand.highlighted == 1 then
local selected_card = G.hand.highlighted[1]
for i = 1, 15 do
local random_index = math.random(2, #context.full_hand) -- Start from 2 to avoid selecting the first card
local random_card = context.full_hand[random_index]
-- Transform the random card into the selected card
local transformcard = copy_card(selected_card)
transformcard:start_materialize()
transformcard:add_to_deck()
G.hand:emplace(transformcard)
G.playing_card = (G.playing_card and G.playing_card + 1) or 1
table.insert(G.playing_cards, transformcard)
end
end
end```
It just does nothing when I sell the joker
Hmmm true I hadn’t considered other mods altering the voucher
for 1, do you want it to be 15 random cards in the deck? because 15+ cards in a hand is kinda crazy. also, full_hand is played cards, not the held cards. also, starting at 2 with random won't prevent it from selecting the currently selected card.
yeah in the deck
and do you want it to guarantee 15 different cards, or randomly be able to pick the same?
how can i make a deck which adds a joker to your hand on start?
what exactly do you mean by that? I'm a bit confused
change cards
so then if it randomly picks the same card, it wouldn't guarantee it would change 15 cards
oh, that's what you mean. yeah, I'd want to guarantee 15 different cards
how would I make something not show up in shop and packs? I've tried G.GAME.banned_keys and SMODS.remove_pool but but items still showup
what is it? a joker, voucher?
packs, planets and vouchers
outside of the SMODS.(whatever) call, you only need this once
local function nopool() return false end
then add in_pool = nopool to the item
or you could add other conditions that allow it to be in the pool
calculate = function(self, card, context)
local cards_to_change={}
if context.selling_self and not context.blueprint and #G.hand.highlighted == 1 then
local selected_card = G.hand.highlighted[1]
local maxCards=#G.playing_cards>15 and 15 or #G.playing_cards-1
for i = 1, maxCards do
local is_in_list=true
local random_index = math.random(1, #G.playing_cards)
while is_in_list do
local found=false
for _,v in ipairs(cards_to_change) do
if v==random_index or G.playing_cards[v]==selected_card then found=true end
end
if not found then
is_in_list=false
cards_to_change[#cards_to_change+1]=random_index
else
random_index=math.random(1, #G.playing_cards)
end
end
end
for _,v in ipairs(cards_to_change) do
copy_card(selected_card,G.playing_cards[v])
end
end
end
not the most efficient way but i think that'll work?
little nitpick, local function nopool() return false end, you don't want to define random functions in global scope
ah sometimes i forget local
Oh my god, thank you so much for this. It's a little funky that the game crashes/times out if I sell it when Nopeus' Fast forward is turned off, but works when it's turned on
I can't thank you enough.
hold on, I'll make a recording
apparently it froze anyway, but this is what happens
ah that's very weird
there's probably a better way to do that loop but i can't think enough right now
Yeah I'll see what I can do. Thank you so much again for the help, I didn't even really know where to start.
wait, i just thought of something and probably would be better than a while loop
ah do you want it to exclude cards in hand?
cause it's just possibly changing the whole deck including ones already in the hand
no, no. I thought It'd add them to the deck, not to the hand.
yeah since it's using G.playing_cards, that's the entire deck including in hand, played, and discarded, you could change that to G.deck.cards to only change cards in the deck currently
it creates 15 new cards now lol
which is arguably weaker because it adds cards, not transform
ah hm
Finally figured out how to solve ghost cards on destroying Enhancements
[[patches]]
[patches.pattern]
target = "functions/state_events.lua"
pattern = "if destroyed then"
position = "before"
payload = "if (scoring_hand[i].config.center == G.P_CENTERS.m_fm_volatile) end"
match_indent = true
calculate = function(self, card, context)
if context.selling_self and not context.blueprint and #G.hand.highlighted == 1 then
local valid_cards={}
local selected_card = G.hand.highlighted[1]
if #G.playing_cards>1 then
for i=1,#G.playing_cards do
if G.playing_cards[i]~=selected_card then
table.insert(valid_cards,i)
end
end
for i = #valid_cards, 2, -1 do
local j = math.random(1, i)
valid_cards[i], valid_cards[j] = valid_cards[j], valid_cards[i]
end
local maxCards=#G.playing_cards>15 and 15 or #G.playing_cards-1
for i = 1, maxCards do
copy_card(selected_card,G.playing_cards[valid_cards[i]])
end
end
end
end
try this, instead of using a while loop it adds all card indices except for the selected card, shuffles the indices, then grabs the first 15 or number of cards-1 if it's 15 or less, also doesn't run if for whatever reason there's only 1 card in the deck
Oh my lord, it works perfectly.
But the sequence of events is a bit messed up, when scored:
- Displays the custom message from
card_eval_status_text - Scores normally, giving chips and Mult
- Scored chips added to the total chip score
- Card gets destroyed
What I want to do is to have it score first then display the custom message and destroy at the same time, any insights?
if context.cardarea == G.play and not context.repetition then
if card.ability.extra.mult > 0 then
effect.mult = card.ability.extra.mult
G.E_MANAGER:add_event(Event({
trigger = 'after',
func = function()
card.destroyed = true
return true
end
}))
card_eval_status_text(card, 'extra', nil, nil, nil, {
message = "Blasted!",
sound = "fm_volatile",
colour = G.C.PURPLE
})
end
end
Again, I can't thank you enough for the trouble you saved me from. Thanks for taking your time for this
Okay question: I have a deck I'm working on and i need the starting deck to have 6 of each card, How do I make it so that it is that
Also I want a nominal to be a number (so it's in order) but I want the chips to be 0 for the rank
i need help on making custom rarities. I've been reading the wiki but i cant get my head arround it
SMODS.Rarity{
key = Your Key,
Loc_txt = {
name = "Your rarity"
}
i already have that. It just displays Error
i'll check
how to overwrite vanilla localization with a mod
I can't understand what makes the fish mod work
i promise this is ethical and it's gonna be really funny
Fish Mod mentioned
i can't understand what makes that mod work
I tried the same "method" (their lua file has 1 line of code and it's a debug message, they just have default localization that overwrites vanilla somehow)
oh you made it didn't you
yeah how'd you get it to work
Nah screw ethics.
Just cook
🔥 🔥 🔥
The current version is mostly handled by Steamodded
So I just have a localization file that replaces the entry in the vanilla localization
well yeah i have that too
but mine's not working
the mod is loaded, but the localization file doesn't overwrite vanilla
i js realized i dont have a localization file and have no idea on how to do it 🙏
what did you try to overwrite and how
the same method as your mod did it (by just having the localization file there) and uhhh
the entire localization file is getting overhauled
or at least, every joker and consumable and voucher and tag and blind
i'll probably stop after that this is very draining
Actually Fish seems not to work anymore
Some Steamodded update seems to have broken it v_v
reading the wiki it seems like it should work
@frosty dock bug?
There are a few mods that do it
was thinkingn of doing a persona 5 royal overhaul theme was all
making the shop into the velvet room
you need to be more specific for how you want it to look like
that means nothing to me :<
wrong one oops
anyways this might help https://discord.com/channels/1116389027176787968/1248865517112918016
JVGS Site https://jasonsvideogamessource.com/ JVGS Discord https://discord.gg/D9yVCsSnaf Rumble https://rumble.com/c/c-5117246
Odysee https://odysee.com/@JasonsVideoGamesSource:9 JVGS Amazon https://amzn.to/46SWOMg
so tghat nice blue etc in the velvet room
If you just want the colors a Trance palette might work
will it work per setting/section
like differnt per area
https://www.youtube.com/watch?v=xyrsclFy1nA as for the gameplay section
Ha, you thought you had this, huh?
(Oof at tired me writing 'screw Akechi' as the title, bad idea.)
PERSONA 5 ROYAL
https://store.playstation.com/#!/en-au/tid=CUSA17419_00
#Persona5Royal #P5R #Tycoon
maybe that background?
its pretty sick
are there better ways to do these (randomly pulling from a table, constructing a consumable's ID if I know it's from my own mod)?
so how would i do a background like that on the play/hand but swirl color in shop
what are you trying to do? create a random consumable from your own mod?
yeah, options is a subset of consumables I want to pull from
you can use pseudorandom_element
I knew it was something along those lines... arguments are the table and the pseudoseed?
and the weight of each individual Normal Buffoon pack is 1.2, right? I'm wanting to mimic the same weight scaling as those packs for my own consumable boosters
Anyone that knows UI, any idea if there's an easy way to make a toggle call a secondary function? I want to do the toggle thing, but I also want it to call a function that spawns/removes an object when toggled, and I'm reluctant to make my own button because I don't fully get how the ref_value, ref_table, and callback all work together in the create_toggle function.
See if there’s a poll function
I see no mention of poll in SMODS.Center, so I've got no idea what you might be talking about
Utility Functions at the bottom of the wiki table of contents.
Also you can probably search SMODS for poll_ and find the code for each one.
that... looks like it's pulling from a pool? I'm wanting to insert with the same weight as something else
oh yeah my consumables are also doing this when pulled from a booster pack and I have no idea why
and I don't know the details of making a loc file to localize the booster pack text either
I think that error text requires a loc file, just style it like how the source code does it.
yea that's what I was getting at, not sure where I'd look for that
localization/en-us.lua.
And, to double check, you're trying to figure out a way to fill the booster pack with cards from your custom consumable type?
this aspect was for making a consumable spawn other consumables
You can set a set like set = 'Spectrals' in SMODS.create_card if that's what you're asking for?
a subset of my consumables, I think we're getting lost in more general options here
Then yeah, you'd probably have to define that subset yourself in advance and use pseudorandom_element to pull from that list.
do you have any thoughts as to why my consumables might be swarmed by green particles when spawned via booster?
I thought it was something you might've added yourself, I don't remember encountering them, you could maybe try a skip_materialize = true in the create card funtion and see if that helps? There's probably a more solid answer that I don't remember, though.
chemistry? 👀
-- extra.active is true currently.
if card.ability.extra.active and context.end_of_round and game_over then
return {
saved = true
}
end
doesn't appear to "save" the run. Missing something?
yup, 26 elements have been chosen to have rank-manipulating effects
please ignore the fact Silicon doesn't change ranks and Element X is one of the chosen elements
and the artist and I have been pretty split on if we want to have a release with just the 26 elements, or if we should hold off for jokers or the spectral card as well
boosters have a particles key, it might be defaulting to something
oh thats pretty neat, im doing something similar
every metal as an enhancement
context.game_over?
particles isn't listed as a parameter in SMODS.Booster, so that probs needs to be documented then
Guess the https://github.com/Steamodded/smods/wiki/Guide-‐-Joker-Calculation#end-of-round mention of it should be updated to be context.game_over fully, not just game_over, oop.
Also particles controls sparkles that randomly appear around the booster pack, not the cards
Hold on, someone else had a problem like this and wasn't it fixed?
Bumping this question again.
Now to replace this...
Also looking back it seemed to be fixed from specifying parameters on SMODS.create_card (no other info specified by them)
I really do wonder if there's some better way to organize this page
There's been thoughts of changing how SMODS.Center page works
Especially since there's definitely undocumented stuff tied to info that's available for everything extending SMODS.Center, but since there's no section to put it it's undocumented.
bah, what are the things I need to pass to SMODS.change_base to make it change to a given face card
tried J, Q, K, and 11, 12, 13, both just give me an error
I think it's Jack Queen and King, full words
Ace too?
Yeah
That's just based on my experience with DeckSuit but I don't think they would change the way ranks are referenced elsewhere
...alright, how do I define the pattern for patching ..localize('ph_mr_bones')..? Figured I'd try adding something there to try changing the "saved" text.
Any name suggestions for this Blind?
You can just change the localization file
I'd rather keep the original as is, trying to allow custom text to be grabbed instead if a global variable is defined.
The Bottle. Because it's like a Bottle Episode!
What's that
An episode of a show that only uses 1 scene and a small number of characters to save on production costs
Couldn't you save the original then replace it?
And swap back on a toggle
I imagine just rigging up the lovely patch they're illuding to would be less hassle, honestly.
I don't imagine it
double or nothing
I don't want any replacing to be forced, like with my sound patch I already use.
And as I said you can replace it back
do I need to do anything special to make my new localizations load in? Or just put them in my mod like this?
Should work that way
Are you only adding text to custom objects?
how do i make it so if i score anything between 2 and 9 (2 and 9 included) i get +chip and +mult?
nope, I've got that loc file specifically for the booster pack text
everything else has a loc_txt defined on it
in theory it should work but I get the impression it's bugged
now I need to figure out what the key I need is...
no idea how to be clearer
