#💻・modding-dev
1 messages · Page 522 of 1
oh, what should it be?
key = "trans_joker",
path = "placeholder.png",
px = 0,
py = 0,
})
SMODS.Joker({
key = "trans_joker1",
atlas = 'Trans_joker',
pos = { x = 0, y = 0 },
rarity = 1,
discovered = true,
blueprint_compat = false,
eternal_compat = true,
cost = 4,
})
here
under SMODS.Joker?
yes
keys should preferbly be unique , you can use them but you might
keyword might
get some bugs
the joker key should be unique
but the atlas field should be the same as your atlas
do i need to make any file for said atlas?
you can also add your modprefix before it , if somehow someone has the same key as your atlas ,(very rare)
no , you just need the image
there's something that's been bugging me
and it is
does it just access the assets folder on it's own? i thought you had to specify it
in smods.atlas, yes?
yes
can I make a consumable that isn't in any of base game sets?
can i show you the crash cscreen?
sorry its me again, I had it working but I don't know what changed lol
I updated my steammodded version to the latest release from gh and modified my code
SMODS.Jokers.j_lada.calculate = function(self, card, context)
if context.joker_main then
local left_effect, right_effect = nil, nil
for i = 1, #G.jokers.cards do
if G.jokers.cards[i] == card then
print('a')
local left_joker = G.jokers.cards[i - 1]
local right_joker = G.jokers.cards[i + 1]
if left_joker and left_joker ~= card and left_joker.config.center.blueprint_compat then
left_effect = SMODS.blueprint_effect(card, left_joker, context)
end
if right_joker and right_joker ~= card and right_joker.config.center.blueprint_compat then
right_effect = SMODS.blueprint_effect(card, right_joker, context)
end
break
end
end
if left_effect or right_effect then
local merged_effect = SMODS.merge_effects(
{ message = "Divine touch!", card = card},
{ left_effect or {} },
{ right_effect or {} }
)
return merged_effect
else
return nil
end
end
end```
this crashes and tells me that context is nil
'-'
key = "",
primary_colour = HEX("79005C"),
secondary_colour = HEX("A7154C"),
loc_txt = {
name = "",
collection = ""
},
collection_rows = {6, 6},
shop_rate = 0,
default = "c_hpr_placeholder",
}```
yes
thx!
adding this back crashed, so it must be this no?
assert(SMODS.load_file("trans_joker.lua"))
can i see the above and your mods folder
why's the calculate isn't inside the joker's code
you have an extra ,
what do you mean
this is missing the () at the end
i'm porting from an old steammodded version so there's probably api tweaks i don't know about
calculate=function should be inside SMODS.joker
i think this might be the issue, cause i don't have a comma 😔
are you tring to make two sided blueprint ?
yeah
1 sec
what does it mean
the code was working, N` shared theirs here
the variable you're using on line 820 is nil
lets see ur function
i... don't have anything on line 820
that crash is taking place in one of the vanilla functions
this is an example of two sided blueprint
Ok it is when the shop is generated
it's the code i shared
oh big syntax overhaul
see? i'm telling you man, it's that file
do you have permission to open it?
hmm can you share that file?
can i see inside your mod folder
chmod 777 and try again?
ofc
it might be because of the new consumable type being there
SMODS.ConsumableType({
key="Special",
primary_colour = G.C.BLUE,
secondary_colour = G.C.BLUE,
name = 'Special',
loc_txt = {
name = 'Special',
collection = 'Special', -- label for the button to access the collection
undiscovered = { -- description for undiscovered cards in the collection
name = 'Unknown',
text = { 'Special!' },
},
},
collection_rows = { 6, 6 }
})
was this for me? cause this made me think-
Is it becuse i was loading save file and didin't start a new run?
no like , the path
yes
Trying to readjust The Ride the bus ability to subtract 3 mult instead of reset it seems having a table for extra is making sum wonky not sure why. Not sure either if anyone will know since it deals withtaking ownership for joker
your atlas is still wrong ...
sorry! it was for someone who asked for it
SMODS.Atlas({
key = "trans_joker",
path = "placeholder.png",
px = 0,
py = 0,
})
SMODS.Joker({
key = "trans_joker1",
atlas = 'trans_joker',
pos = { x = 0, y = 0 },
rarity = 1,
discovered = true,
blueprint_compat = false,
eternal_compat = true,
cost = 4,
})
replace this with your current code
yo atlas should equal "trans_joker" btw
Oh, i'm struggling a bit with whole atlas part, thank you all for the patience ;-;
i fixed it lol
ah ok i was a bit slow at catching that lol
the original ride the bus uses card.ability.extra for its incrementing value doesn't it
i am going crazy trying to implement a bajillion if statements to invert every vanilla boss blind lol
still crashing, damn
ik thats why im asking to see if there a way to get around this
also thunderEdge you should text me , i need some devs to plan a mod if you're intrested
just don't have the table be extra
is it the same error or not?
ah ok didnt know that would work ill try tho
yup, same error
can i see the main file then
yes ofc
config = {multloss = { mult = 3}, extra = 2} will work
can we see the folder structure
that makes the table card.ability.multloss without changing card.ability.extra
Agreed
is there a way to do like a tree command just for my mod's folder?
im trying to just use integer as name for param and see if this fixes it
the issue is that ride the bus is trying to add card.ability.extra to its mult
if extra is a table that's not good and it'll fuck up
Yea i realized as i was trying to debug
seeing if better approach imma try urs tho
on windows it's tree /f iirc
looking at it in game.lua gave me this
but you can also just send screenshots
got it
both 1x and 2x have the upscaled artworks
very confused
should i take it out of the jokers folder?
it shows the file path to the folder you're in
yes the problem is that the path should be jokers/trans_joker.lua
assets/1x should be in your mod's root folder
you define an atlas by giving it a key and a file name, the file name points to the file in assets/1x and the key is used in jokers to tell them which file to look at
i literally said you should add any subfolder to the joker path if you have one lmao
how can I make a joker that upgrades through triggered editions/enhancements
Whats the triggered exactly?
like to cause effect outta curiosity
upgrades by 0.1 xmult
inside your calculate
if context.individual and context.cardarea == G.play then
if card.edition and card.edition.key == "e_foil" then
---do stuff if it's foil
end
if card.config.center == G.P_centers.m_steel then
---do stuff if it's a steel card
end
end
gains 0.1 xmult whenever an edition/enhancement triggers
ah this makes more sense
how do i make it like in general
so i have to do this for every single individual one
Yee good basis to it
oh if you want it to be any edition
Create a pool to reference
then it'd be likeee
for any edition you could just check for if card.edition, because card.edition is nil if it's not editioned
not negative as that doesnt really "trigger" its passive
Make a global table for mod like Stickmin = {} and use it to build pools
if context.individual and context.cardarea == G.play then
if card.edition then
---do stuff if it's editioned
end
if card.config.center ~= G.P_centers.c_base then
---do stuff if it's enhanced
end
end
this
i think
that works too
How would i make a joker detect if a certain seal is played? I have if card.seal == 's_btct_SealCrimson' but i don't think it's working.
it might beG.P_centers.m_base instead
oh ur prob right
but it's probably c_base
i think vanilla uses c_base whoopsies
first, check if you have the ID right. in-game, with the debugplus mod, hover over a card that has the seal and type into the console: eval dp.hovered.seal
yee i think ur right on that too
if card.edition and not card.edition == e_negative then excludes negatives right
don't forget quotes around the e_negative but yes
if value:get_seal() == "modprefix_sealkey" then
i always build pools as a manual workaround 😂
sooooo...
oh, thank you!
and not card.edition.key == "e_negative"
you were close
you are missing atlas, pos, and loc_txt
value is the card you're checking btw
alright
good news: no crash
in the main?
@stiff locust Not sure if its even possible to do what u suggested since its same error i orignally faced thank you for help tho
yes, if you still have it there
cause moving it to the mod root folder didn't crash
show your full code
yeah you were missing the folder in the load_file
iirc custom values directly in the joker's config table don't get copied to the card's ability table unfortunately, it's a hardcoded thing
that's why smods recommends making a table out of extra
do i just add jokers/ before the name of the .lua then?
yea i had a feeling based on crash
this has never been an issue for me
i used to do them all in card.ability.extra but i've been making a bunch of other jokers that just use the base tables
and they all work fine
send code pls
i did
directed at marie
the base table should work fine afaik, extra is recommended to not have clashes with preexisting keys
let me find an example that I can share without spoiling anything i haven't shown yet
but idk how it works with take_ownership
it did not sadly
tsunami uses card.ability.extra because I haven't made content for it in ages
yea i think sum goofy is happening
yes, thank you! it didn't crash
here's my source for "stuff outside the extra table might not get copied" btw
https://github.com/Steamodded/smods/wiki/API-Documentation#common-parameters
most of* (i just checked) the jokers in splatro's current public release don't use an extra table and they work i think that's my only public example
i thought this too but it might have changed at some point
yea im aware of this and always build with extra
what do i do to make jokers that specifically appear with certain mod installed
some mods will have a table you can check for to check if they're loaded
like if you're checking fo overflow you can do if Overflow then
but otherwise there's a way to check if a mod is loaded that is more convoluted
How do i make a tooltip for a consumable?
you can enable the debug menu and spawn them
if ur asking about debugging them
nah
im talking about like
oh like make a joker spawn another joker?
cross mod shit
i want to have a similar effect to the fool, when i hover on my joker i see the consumable it will give me
shouldn't matter
I know this isn't much but please chat...
i did it ;u;
(loads of help involved, thank you all <3)
or other's mod consumables
yes that's what i posted
in loc_vars add an info queue line
info_queue[#info_queue + 1] = G.P_CENTERS.m_steel will do it for a steel card
use the center for whatever you want the info queue to be of, in this case G.P_CENTERS.c_modprefix_consumablekey?
i thought its find_mod
you can add dependencies to your objects
that works too
but you can just have it in the joker
great work
thx!
Thank you!
I will start working on the localization
That's how the text appears (such as jokers' names, description and etc, yeah?)
I'll try that on my own, if i have any doubts, I'll annoy you guys again lol
yep
also this is going to be useful when you add colors to your descriptions
https://github.com/Steamodded/smods/wiki/Text-Styling#loc_colours-table
basically a reference for the available colors and how to add your own colors
Ah, like how the word "mult" is in red for example?
yeah
it has the colors for everything in the base game
so like the blue for chips, green for chance-based effects, etc.
i'm getting errors related to the atlas, i'm assuming that's another difference between the version i was developing on and this one
does the atlas replace this
SMODS.Sprite:new('j_fish', birthday_mod.path, 'Jokers.png', 71, 95, 'asset_atli'):register()
or is it in addition to?
In my mod's json file, what's the conflicts syntax for disallowing any version of a specific mod? My mod reimplements BetterTags and is therefore incompatible with BetterTags. I have ```
"conflicts": ["BetterTags"]
but that doesn't seem to work right (as in, I don't get an error if both mods are already enabled).
i have not seen that syntax
that must be an ancient version of SMODS lol
but yeah i think atlases replace that
is context.initial_scoring_step called with the G.hand cardarea?
where do you specify the dimensions of the sprite?
in the atlas table, px = width and py = height
thanks
the id is bettertags
...that'd be the reason. Thank you.
What would g.c.gold be used for, for example? Indicate card ranks?
i think gold is barely used
yeah, for money use {C:money}
ranks use attention (G.C.FILTER)
SMODS.calculate_context({initial_scoring_step = true, full_hand = G.play.cards, scoring_hand = scoring_hand, scoring_name = text, poker_hands = poker_hands})
trying to destroy first card in hand and its doing a big nothing (this tends to happen a lot with me i swear)
if card.ability.extra.man == 'Hamster' then
if context.destroy_card and context.cardarea == G.play and context.other_card == context.scoring_hand[1] and not context.blueprint then
return {
remove = true
}
end
end
``` something wrong with my syntax?? id be suprised because if have code that looks just like this amd it works great
oh
how would i do it properly then
.
yes
that makes sense
I modded an existing image in a mod and got this error: Could not decode PNG image (invalid CRC encountered (checking CRC can be disabled))
How do I disable CRC or potentially fix the check?
Looks like the CRC check is embedded in the LÖVE C++ code. CRC is basically a checksum to make sure the png isnt corrupt. How are you replacing the png?
if context.cardarea == G.play and context.destroy_card == context.scoring_hand[1] guhh?
Scoring_hand might not exists during that context check, add and context.scoring_hand before the destroy_card check
Sorry Thermo lol
I edited the existing PNG in GIMP. I just put in another sprite, and got an issue on the 2x version. Just replaced it entirely, if I understand the question.
what sdm said but I would recommend having if context.destroy_card at the beginning like you had before
instead of context.scoring_hand
it's a proper check
if context.destroy_card and context.scoring_hand and context.cardarea == G.play and context.destroy_card == context.scoring_hand[1] like this?
context.scoring_hand doesn't appear to be ever defined for that call?
working on the localization file
yes
How would i detect player money and maximum interest?
it's in the context variable during the entire calculation process
scoring i mean
G.GAME.dollars and G.GAME.interest_cap
alright, thank you!
i based it off of the text file i edited in my pack, but i'm assuming it's not the same lol
same crash
Maybe that's why
descriptions{
Joker={
j_jgbt_trans_joker={
name="Trans Joker",
text="test",
}
}
}
}
this is what i have
it should be descriptions = {
yes
i did get a new crash tho oops
Hmmm having trouble setting up this dependency. It says Arrow loaded correctly but both of my mods seem to lack the dependency? And I'm not sure what defines something as a lovely mod vs a steamodded mod
hi winter :3
Hello!!!!
what table?
oh the text probably also has to be a table, even if it's only one line
(so i.e. text = { "test" },)
ah, so these fuckers {}
yuh
i thought it could just be a string
most descriptions end up being at least two lines anyway, so there's not much of a reason to account for it lol
the ids seem to be different
can i see the crash and the code
alright
hmmm okay. I tried to use "ArrowAPI" but I also got a different lack of dependency before
oh and when a mod can't load properly it still loads lovely patches
that's why i don't use conflicts
yaaaay
i was about to ask if it was a key mismatch issue, i assume that was the case?
yes it was lol
if card.ability.extra.man == 'Hamster' then
if context.destroy_card and context.scoring_hand and context.cardarea == G.play and context.destroy_card == context.scoring_hand[1] or context.destroy_card == context.scoring_hand[2] and not context.blueprint then
return {
remove = true
}
end
end
wait,
1 is common
2 is uncommon
3 is rare
4 legendary?
for rarities
anyway now that you have a bunch of the framework stuff out of the way, future additions should hopefully be much less problematic
Yes
thats right
the logic is wrong, put the A or B part in parentheses
is that everything?
idk test it
yes. if you scroll up, you can see me bashing my head at basic stuff... but with it out of the way, now i just need practice
yes
i was going to. but not because you told me to!!
wait i just lagged lol
all good :3
you're doing great :3 keep it up
Also does higher priority order mean loads after or before?
wait, we have N and s
crash bandicoot reference
good luck modding
never played crash , should i be offended
/j
depends /j
after logically
smods has 0
and all mods use smods framework
works great! i was thinking to put the or in parenthesis but i just didnt because im a moron
it's not super intuitive
you can have negative priority (in lovely patches at least, don't remember if mods themselves can off the top of my head but it's probably not great to do if smods is 0), and "bigger number = higher priority = load first" doesn't sound wrong either
mods load after smods even if they are lower than 0
smods is not 0
it doesn't have one
can you even go lower than 0
yes
lol
0 is the default
so before even the game loads
Its seeming to me that higher priority loads first
no
i see
lower number loads first but everything after the game loads
it's a joke
if G.GAME.dollars >= G.GAME.interest_cap * 5 then
Is interest_cap a table or smth like what?
dollars is
ah
with talisman
what do i use to get the current money of player then?
that
oh G.GAME.current_money?
either uninstall talisman or follow this
https://github.com/nh6574/VanillaRemade/blob/3d719c5647c3e053c994ca8999dc19dfa3181925/src/jokers.lua#L4883
TIL you can put -card.ability.extra.whatever to make it a negative number because of course you can
no
Is there a way to setup rainbow text? Like, each text character gradients?
hm. For whatever reason it's saying one part of the ArrowAPI table isnt defined by the time one of my dependant mods loads
Puzzling
does SMODS have any plan of implementing animated sprites for other cards (not just blinds)?
I am thinking about creating a public github repo to help others with implementing animated jokers, consumables, etc.
yes
eremel said so at least
okok good to know
there's a PR about it in the smods repo
is there a context for when a joker is sold?
context.selling_card and context.card.ability.set == "Joker"
wdym
context.selling_self
still happens... i added both the to_big and the extra one for if talisman doesnt exist
Chat, imma take a break for today
I need to fix some of the text too
I hate
That
It
Looks
Like this yknow
may i see the code
slay
calculate = function(self, card, context)
if context.cardarea == G.play then
if context.other_card:get_id() == 14 or
context.other_card:get_id() == 9 or
context.other_card:get_id() == 7 then
if to_big(G.GAME.dollars) >= G.GAME.interest_cap * 5 then
return {
xmult = card.ability.extra.Xmultcap
}
else
return {
xmult = card.ability.extra.Xmultbase
}
end
end
end
end
i assume you're starting a new set of quotes for each color, you don't need to do that. the color tags can appear in the middle of a string, and you can turn it off (back to default black) with an empty set of {} in the string
you need to do it around interest_cap * 5
it's always better to do it on both sides just in case tho
oh ok thanks
That's exactly what i did lol
So for example
"{C:attention} text {} text",
config={extra={stonecards=2}},
rarity = 2,
atlas = 'gfy',
pos = { x = 7, y = 0 },
cost = 8,
pools = { ["gfy"] = true },
calculate = function(self, card, context, hand, planet, consumeable)
if context.selling_self then
G.E_MANAGER:add_event(Event({
func = function()
for i = 1, card.ability.extra.stonecards do
SMODS.add_card({ enchantment = "m_stone" })
end
return true
end
}))
return{}
end
if context.end_of_round and context.main_eval and context.game_over == false then
card.ability.extra.stonecards = card.ability.extra.stonecards + 1
return
{
message = "+stone",
play_sound('gfy_sandvichmake',1.3,0.8),
}
end
end
}
can someone help
{
"Both {C:attention}Kings{} and {C:attention}Queens{}",
"are treated as",
"each other"
}
Another issue I'm trying to fix is that for whatever reason, the atlas here isn't loading correctly? At the top of the file I load the stand_stickers atlas so I assume I'm missing something really simple
prefix config isn't set to off, seemingly
it crashes when selling
As each other sounds much better, yes
Thank you
hmm strange
maybe the spaces before the brackets are iffy? i dunno
onklers
I'd remove the word "both" for conciseness too
SMODS.add_card{ set = "Base", enhancement = "m_stone" }
ok thanks i think it works now, its back to the problem where it says other_card is a nil value, how do i fix this?
you need a more strict context check
read the calculation docs and use one that would be appropriate from there
ok thanks
"Both Kings and Queens are treated as each other"
With "kings" and "queens" being orange
btw, that's a really really hard effect to do lol
Can confirm
We'll get there lmfao
it works now thanks
Can confirm transitioning is very hard to do too
as in, I wouldn't recommend anyone do it even if they were good at modding
it's a "wait until SMODS gets quantum ranks done on their end" type of thing
Fuck
I've tried and somewhat succeeded but it's so jank and relies on patching so heavily that I also would not recommend it
the good news is that there's a PR for it now! but it still needs some testing and i dunno if/when it'll be merged
I was thinking it could be done the same way smeared joker was done, no?
unfortunately ranks and suits do not behave the same
unfortunately no
Ah, damn it :(
Suits are a lot easier to do that with than ranks
there's a has_suit() function in vanilla, which has smeared joker built into it essentially, but all of vanilla's rank checks are hardcoded instead of being a similar has_rank() check
you also need to handle straight calculation for quantum rank stuff, which is very complicated
I'll make a complete proper color with the purple
@maiden phoenix technically speaking, how would i use other sprites in the same atlas for the description's sprite?
Oh
i love 10
By modifying the atlas value and pos
hmm maybe you could have a toggleable joker where if it is in one mode, turns all kings into queens and in another mode, turns all queens into kings
in where exactly
i got this working
Back to the drawing board vscode
I think this is Susie's idea
i love how at the top it says oh no
lemme try again, maybe it's case sensitive
How would that be done?
modify the G.ASSET_ATLAS, and the center.pos
Well it definitely was case sensitive
i know others in here have added buttons to jokers that do things
its pretty advanced but not "kings and queens are treated as each other" kind of advanced
thanks
To give context: I was trying to convert This without talisman
So, anything that has to do with suit and suit changing is... Really hard
no not really its just rank stuff
*rank, and specifically making one card count as multiple ranks
an even simpler option would be to just transform all kings into queens, and vice versa, when played and scored
NOT SUIT, RANK AAAAA
Wait, this actually cooks
How can i make it show how much i have in storage?
"Scored kings transform into queens and vice versa" for example?
yeah thats actually pretty simple to implement
yea
Originally, i was going with that lol
But i decided to try and be more egregious lol
ofc when quantum ranks gets added to SMODS doing the whole kings and queens are treated as each other will be a lot easier
nvm
I realized the error of my code, I didn't even port the actual addScore part
Joker potential rework
oh how i long for quantum ranks
(i will immediately be adding a "stone cards count as all ranks" joker to my stone mod)
plays one stone card
counts as a straight
sounds about right
Stone mod?
...are there any weed related jokers
(sigh) yes /lh
ah yes 420 joker
Anyone know how to do gradient colors for text or backgrounds?
the straight calculation should only let cards count as one rank at a time unfortunately
but it is a very good 5oak-inator
if you have a custom gradient defined with SMODS then i believe there is an easy way to get the color for loc_txt purposes
i dont remember off the top of my head
I got a mod that added planet cards level up hands individually
Like, either mult or chips
Is that hard to do?
wait a second, it uses the same prefix
i wouldnt think so... havent messed with that stuff myself
i do know mods that modify the +mult of a hand individually tho
"All in jest" is the mod
Interesting concept
yea
looking at the code, it just sort of copies the vanilla level up hand function into two different functions. one levels up chips for a given hand only, the other does only mult. then the planet cards call one of those custom functions upon use
Is it possible to determine the final width of a UIBox?
i have NO idea how to make poker hands, is it possible to check for specific suits
Does anyone know how to disable the sound of an edition when it is applied to a card?
card:is_suit(suit_to_check)
4+1oak 🗣️
calculate = function(self, card, context)
if context.individual and context.cardarea == G.play then
if SMODS.get_enhancements(context.other_card)["m_mult"] == true then
context.other_card.ability.mult = card.ability.extra.mult
return
end
end
end,
im sleeping on the job how can i make this effect apply to the card before it scores?
where do i get card from tho
if context.before
from parts or hand
-# id assume hand but yk
and also what property like
something like for card in hand or something?
Isn’t it G.hand
this is for a poker hand
Oh i see
although i wanna check if the hand contains 1 of each of the specified suits
that doesnt work?
So I realized the +Score from Astronomica is actually a talisman version of the original card_eval_status_text in the base game, so I decide to use that instead
oh wait i have to cycle through the hand dont i
yeah use context.before then go through the cards in played hand
please dont judge my code i know for a FACT this doesn't work AT ALL it's just a basic thing to turn into something that DOES work, I just don't know what to do**
wait also that return isn't right either ignore that
i forgot it has to return the scored cards
wait i might have an idea
Huh...
Is it bad my thought went to lucky charms
Hearts stars and horseshoes, clovers and balloons
lmfao
Having multiple return won't work, it will return once on the first one it reaches, you could attribute each of them to a local boolean variable, and check if each boolean variable is true
alas i must bother you once more because i dont know how to cycle through cards apparently i thought for _, check_card in ipairs(context.scoring_hand) do would do it
Is that not what it is?
what are u trying to do with the cards?
that loop u gave should work
i know 😭
did u even read my message 😭
ehh but if u need exactly one of each then id suggest using a table that maps suits to occurences
i want to modify the mult a enhanced mult card gives when scored when a specific card is held
bumping this (im making dinner and haven't even looked at iit anyway
one or more
i am currently writing the worst implementation ever but it might work
currently doing it by applying it before the hand scores and removing it after because i have no idea how to properly do it (or attempting to)
oh so the issue is trying to modify the mult that a mult card gives then
probably, but im using the same code that worked for context.individual (only it applied after scoring) 😭
"I don't know what to do" Now you know
Chat, i was brainstorming with a friend of mine
She sent me this
Maximized is an effect Joker. It makes all face cards Kings and all numbered cards 10s for the purpose of Joker triggering.
i guess
i meant that i knew multiple returns dont work
that basically is rank replacement, not the same as having a card count as 2 ranks tho
it also doesn't apply to straight calculations and is really gross in implementation
@maiden phoenix doesnt work
Why did you redo the same lovely patch 😭
theyre mutiplying
okay the smods.get_enhancement check fails
Imma stick with the conversion
In the {S: } field you have to put whatever is the key to your center
I THOUGHT IT USES DIFFERENT
should I have an else condition that just like returns {} or something`
ah
But yea you can put whatever key inside
to the center?
if has apple and has balls
Tho it only works on sprite from center objects
real
.
mb
You have a center for your heart but not for susie?
Can you show me your consumable's localization?
Trying to figure out a way to add score to card_eval_status_text
like the localization files?
yes for the susie idea
i hate to disappoint you but i used loc_txt 😭
Whatever just show me the desc
i can't believe my stupid fucking code worked
My brain is gonna explode
WHAT WHY
-# oh fml
Wtf is tngt_I and why do you use j_joker as a key
-# dw its meant to be subtle
I feel like you completly misunderstood what my lovely patch does
-# IM NEW
what the fuck is happening 😭
-# IM NEW ;<;
its ok 🙏
Sorry Nxkoo it's 2am for me rn I don't wanna go over a long tutorial for this 😅
Does anyone knows what context check I could use to make a consumable unable to be "buy & used" in the shop ?
vald actually
thanks meta
I can't seem to figure out the stupid eval text thing
any time
(pls ping me if anyone has an answer)
i was following his tutorial
Not a context, you have to hook
A function, which is probably
G.FUNCS.can_use, but i don't remember
calculate = function(self, card, context)
if context.before and context.cardarea == G.play then
for _, check_card in ipairs(context.scoring_hand) do
if SMODS.get_enhancements(check_card)["m_mult"] == true then
check_card.ability.mult = card.ability.extra.mult
end
end
end
end,
but it doesnt want to? idk does this look wrong?
j_joker is the key that points to your center object, tho if you want to just use Sprites only a modification of the lovely patch is necessary
Remove the cardarea check
so like if you had [yourmodprefix_S:j_jolly} it would show Jolly Joker instead
huh that worked, thanks!
like the desc showing jolly joker or jolly joker desc has it
weird the context in the documentation said to have that aswell
maybe i didnt get it what it said
It would show the sprite of Jolly Joker in whatever you've put {yourmodprefix_S:j_jolly}
oh
ohhhhhhh
okay i see
so i dont need the joker key?
I mean you need the key of whatever center sprite you want to show
But again if you want it to work on any sprite from any atlas you need to modify the lovely patch
Making center objects just to show their sprite in desc doesn't seem reasonable
you said something about messing the center.pos for the sprite atlas
Since you use the key to get the object from G.P_CENTERS, I just fetch the pos from said center too 🤷
what even is nxkoo doing anymore bruh
So I don't have to look up the sprite in my atlas and manual hardcode it
He's trying to understand my lovely patch that adds sprites in description boxes
Nxkoo worst case scenario, just update your atlas with Susie in it and I'll pr you a better version of the lovely patch
tomorrow tho
you're so kind for my demented brain
but sure, ill push the atlas with susie in it
How would i retrigger only the last Gold card several times?
if context.repetition and context.cardarea == G.hand and context.end_of_round then
local other_card
for i=#G.hand.cards, 1, -1 do
if SMODS.has_enhancement(G.hand.cards[i], 'm_gold') then
other_card = G.hand.cards[i]
break
end
end
if other_card and context.other_card == other_card then
return {repetitions = number}
end
end
damnit somethingxom515 im on my phone i cant type that fast
sorry for reply umbral, lol
Damn
Guys, I've been wondering about something and pins suggested I ask here.
I'm pretty annoyed stumped playing on the black deck, and would like to get the fluff out of the way. I believe I saw a mod in Balatro University channel where Dr Spectre placed some parameters and the game rerolled until it found a seed where the parameters happened (Like starting with a mega arcana pack with legendary stone)
Could you let me know which mod that is and if so, am I able to use it without disabling achievements? I want these black deck wins to count for C+ so I can get the black deck out of the way. I'm already restarting a bunch until I get a good start so just want to save time and am already on the last 2 stakes
That's the Brainstorm mod iirc
Tho there's a new version of it
With a different name
for the other part: steamodded disables achievements by default but you should be able to re-enable them in the config tab of the Mods menu
i was just about to ask if i could append and context.cardarea == G.hand to the first line, thank you for the edit
Modify G.P_CENTERS.p_modprefix_key.weight?
hey, how i make to destroy a selected joker?
how can i make a randomizer for sounds?
SMODS.destroy_cards(G.jokers.highlighted[1])
Thx
You mean play a random sound or make every sound randomized?
play a random selected set of sounds
I'm super confused
seems like it works, thanks
does balatro happen to have a list of all the keys of the boss blinds? I need to know if a boss blind is not vanilla so i can handle it with a default inversion
or do i have to make my own list of keys of vanilla boss blinds? 😭
search for P_BLINDS
or you can do eval for key, _ in pairs(G.P_BLINDS) do print(key) end in the debugplus console and copy it from the lovely console
if blind.config.blind.original_mod?
Anyone have any clue why my 2x asset would get CRC failure from an existing mod (but my 1x asset doesn't?)
How can I disable CRC checking?
Bump
Cause i kinda just hard coded it and its kinda big lmao
Is it random from a list of sounds?
local sound = pseudorandom_element(list_of_sounds, 'seed')
play_sound(sound)
Yes
Thanks
I'm trying to set up a config setting that changes the pitch of a particular song. I got it working so it switches between a slow and fast versions of the song, but everytime I switch inbetween them, it doesn't start the song form the beginning, it's like if both versions are playing at the same time, but I can only hear one at a time. This is what I have right now. Is there any way to fix this?
vol = 0.6,
pitch = 0.8,
key = "music_middle_normal",
path = "middleNormal.ogg",
select_music_track = function()
return (G.GAME.selected_back.name == 'The Middle Deck' and G.GAME.blind and not G.GAME.blind.boss and not G.shop) and 0 or false
end,
})
SMODS.Sound({
vol = 0.6,
pitch = 1.0,
key = "music_middle_normal_f",
path = "middleNormal.ogg",
select_music_track = function()
return (G.GAME.selected_back.name == 'The Middle Deck' and G.GAME.blind and not G.GAME.blind.boss and not G.shop and ProjectMoonMusic.config.enable_fast_music) and 1 or false
end,
})```
I tried messing around with the priorities and adding a "and not" with the config to the slower version, but the result is the same
I think that is exactly what's happening, both play at the same time and you can only hear one
I dunno if there's a way to stop that, but maybe try messing with sync?
Hm, that's a bummer. I can't really sync the tracks, as they have different lengths and I still want them to loop perfectly. The odd thing is that I also have a version of the track that plays during boss blinds, and when it switches between them it resets the track without issue. I dunno why specifically the config setting doesn't cause the same behaviour in this case
hey im having trouble with a consumable
the game let me use it although im not selecting any jokers, how can i make the game dont let me use it when any joker is selected?
you'll want your can_use function to only return true if G.jokers and #G.jokers.highlighted <= card.config.max_highlighted and #G.jokers.highlighted > 0 i think
o tried to do thatand i write it wrong,thanks for the help
assuming you want it to only work with a single joker selected (if you want more jokers to work, still do that but also increase the max_highlighted variable in its config)
what do i change in SMODS.localize_box to reduce the height of text boxes
i tried adding minh = 0, reducing padding to 0, none worked
i want to do it for one joker
and the game crashed when i selected the consumable
what's the crash
i wonder if its related to this
it say that it was trying to compare a non-existing number, cuz the code had "card.config.max_highlighted" instead of "card.ability.max_highlighted"
oh my bad lol
so it sounds like you fixed it
yep, thats would be doing if now happen this >: (
never mind, i fixed again
thx for the help anyway meta
why does every resource include everything except decks
do you see something missing here?
It's backs
oh
does it include deck functions or just the way to make them look different
No, it includes the vanilla decks remade with SMODS
thanks
In a mod challenge can I change the base chips and mult for each hand type?
Is checking if card.playing_card then sufficient to tell if a card is a playing card
Or is there a scenario in which a non playing card might have that
Yes.
How do I make something happen when a user interacts with my create_toggle{} config item? I have opt_callback = "kcr_config_updated" with G.FUNCS.kcr_config_updated defined, but it doesn't appear that function is being called.
try just callback
instead of opt_callback
The hook I tried to write for the second challenge in this file is wrong I think I want to set the base mult and chips for all hands to zero
I'm not sure if I am approaching this correctly
my mod dosent appear in the list of active mods in the menu
Where?
my mods name is construction deck
you missed a closing quote on the line restricting judgment in the spongebob-hard challenge
you are either missing a smods header or you dont have a .json file
i have a .json whats a header
I do not recommend asking for syntax errors since you'll have to do that every time you have one
instead, use Visual Studio Code and download Lua Language server extension
yep yep. Thanks I fixed that. But I am still getting an error on start up. Is the hook where I try to change the chips and mult done correctly?
wuh
how do i check if the played hand had an unscored card? i know i can just do cardarea == 'unscored' but i'm not sure about the exact implementation of my idea
anyway for the hook itself, G.GAME doesn't exist yet in init_game_object. the function returns a table and then that becomes G.GAME. so replace all cases of "G.GAME" in the init_game_object hook with "ret"
is a header something really obvious im missing
you dont need it if you have a .json file in your mod folder
(also you misspelled the call to the ref function)
I see, I'll try that. Is the way I am going about it the best way to do this or is there a better way?
Is there a context for when any type of card is destroyed? (Joker, playing card, consumable, etc.)
i think the way you're doing it makes sense, but tbh it's too late for me to think about that
context.destroy_card?
(context.joker_type_destroyed or context.remove_playing_cards)
Does that include consumables? (I know consumables can't be destroyed in vanilla, I just want to make it mod-friendly)
Yes.
Well it is not crashing anymore but it also didn't change the chips and mult to 0
WHAT IS A HEADER
oh, I changed the wrong file
@mighty kiln
bump
Yeah the hook isn't working
compare G.play.cards with context.scoring_hand, probably?
What’s the context for if the played hand is the first played hand
if #context.full_hand ~= #context.scoring_hand
that makes sense, yeah
if G.GAME.current_round.hands_played == 0
Where does the hand text update when selecting a hand?
how can i put multiple sounds into a list?
SMODS.Sound({key = "Spam1", path = "Spam1.ogg",})
SMODS.Sound({key = "Spam2", path = "Spam2.ogg",})
SMODS.Sound({key = "Spam3", path = "Spam3.ogg",})
SMODS.Sound({key = "Fingers", path = "Fingers(1st).ogg",})
SMODS.Sound({key = "Explain", path = "Explain(2nd).ogg",})
SMODS.Sound({key = "Strings", path = "Strings(3rd).ogg",})
SMODS.Sound({key = "Heart", path = "Heart(4th).ogg",})
If I wanted to make the context “For every single unscoring card in played hand…” what would I write?
you would have to iterate through context.full_hand and check that the card is not in context.scoring_hand
and then apply your effect accordingly
oh, if you're going through context.individual, you can just check if context.other_card isn't in context.scoring_hand
in that case you want to use context.cardarea == "unscored"
yes!
Why isn't the hook I wrote at the bottom of this file not correctly changing the base mult and base chips for the hands in my challenge?
if context.individual and context.cardarea == “unscored” then
(Code for spawning a random negative consumable, I forgor)
It’s for Maxwell Scribblenauts
Yes.
move it to Game.start_run
Awesome! that worked. Why does it have to be in Game.start_run instead of where I had it?
this is actually the most horrid code I have ever written
because Game.init_game_object is only called at game launch and exiting to menu
and thus it does not work at all
That makes sense
it literally just scores like. seemingly a random card
Yes, i should start at 1
I will at some point create a poker hand called “3 musketeers” which is just 3 aces, which gives 50 chips and 10 Mult, level up gives only half its base.
Thanks @gilded blaze
that just made it score like a high card
can cards get editions by applying them the same way you would a joker?
Yes.
yay! ty
nvm fixed
ok so i changed it a little
in its current state, it scores the first occurrence of each of the suit
i want it to score the highest, no matter what the actual order of the hand is
Where does the hand text update when selecting a hand?
The main purpose of Maxwell is to spawn define
How do I make a joker spawn a random rare negative consumable too?
Ali
Do you know the code to spawn “any” negative consumable?
Even the rare ones
It’s for a joker
what you tryin to do here
local key = pseudorandom_element(G.P_CENTER_POOLS.Consumeables, 'seed').key
SMODS.add_card({key = key, edition = 'e_negative'})
oic
that could be itneresting
soon i wanna start messing with audio stuff on the user next
also hi smt
key in that is referencing a random consumables' key as target to spawn.
Is ‘seed’ a number? Like do I have to add a specific number in place of ‘seed’ or is that untouched?
No, it's a string.
So it’s untouched.
No, it's a seed for the randomness but as a string.
...I should update the create_card contents of my Booster Packs from this...
return create_card("Consumeables", G.pack_cards, nil, nil, true, true, leg and 'c_soul' or togabalatro.getrandcons('rar'), 'toga')
Can I write any number there?
No, because it should be a string.
pseudoseed(‘maxwell’) does that work?
Yes.
do I remove context.joker_main
bump
if to_big(G.GAME.dollars) >= to_big(G.GAME.interest_cap) then
if pseudorandom('Spamton') < G.GAME.probabilities.normal / card.ability.extra.Voiceodds then
local sound = pseudorandom_element("Fingers", "Explain", "Strings", "Heart", 'Spamton')
return {
play_sound(sound),
xmult = card.ability.extra.Xmultcap
}
else
local sound = pseudorandom_element("Spam1", "Spam2", "Spam3", 'Spamton')
return {
play_sound(sound),
xmult = card.ability.extra.Xmultcap
}
end
else
if pseudorandom('Spamton') < G.GAME.probabilities.normal / card.ability.extra.Voiceodds then
local sound = pseudorandom_element("Fingers", "Explain", "Strings", "Heart", 'Spamton')
return {
play_sound(sound),
xmult = card.ability.extra.Xmultbase
}
else
local sound = pseudorandom_element("Spam1", "Spam2", "Spam3", 'Spamton')
return {
play_sound(sound),
xmult = card.ability.extra.Xmultbase
}
end
end
uhhhh idk what i did wrong
Firstly, it needs to be a table, Secondly, move play_sound out of the return, Thirdly, you need your mod prefix on the sounds.
How do i make table with sounds?
-# sorry ive never done it before
{'modprefix_soundkey1', 'modprefix_soundkey2', 'modprefix_soundkey3', 'modprefix_soundkey4'}
what line is this?
if pseudorandom('Spamton') < G.GAME.probabilities.normal / card.ability.extra.Voiceodds then
Bump
What is the goal?
Maxwell
i removed context.joker_main lua calculate = function(self, card, context) if context.individual and context.cardarea == "unscored" then local maxwell_notebook = pseudorandom_element(G.P_CENTER_POOLS.Consumables, pseudoseed('maxwell')).key SMODS.add_card ({key = maxwell_notebook, area = G.consumeables, edition = 'e_negative', key_append = "maxwell"}) end -- sell this joker to create a negative dream card. if context.selling_self then SMODS.add_card{ key = 'c_busterb_dream', area = G.consumeables, edition = 'e_negative' } end end
Dogshit code?
muh ```lua
-- Maxwell
SMODS.Joker {
key = "maxwell",
atlas = "placeholder",
pos = { x = 0, y = 0 },
soul_pos = { x = 0, y = 0 },
pools = { ["Fantastic"] = true },
rarity = "busterb_Fantastic",
cost = 100,
blueprint_compat = true,
eternal_compat = true,
unlocked = true,
discovered = true,
loc_txt = {
name = "{C:blue,E:1,s:2}MAXWELL{}",
text = {
"For {C:attention}every unscored card{}, create a {C:attention}random{} {C:dark_edition}negative{} {C:attention}consumable{}.",
"Sell this joker to spawn a {C:dark_edition}negative{} {V:1,E:1,s:1.5}Dream{} {C:attention}card{}."
}
},
loc_vars = function(self, info_queue, card)
return { vars = { colours = {HEX('b00b69')} } }
end,
calculate = function(self, card, context)
-- For every unscored card, create a random negative consumable
if context.individual and context.cardarea == "unscored" then
local maxwell_notebook = pseudorandom_element(G.P_CENTER_POOLS.Consumables, pseudoseed('maxwell')).key
SMODS.add_card ({key = maxwell_notebook, edition = 'e_negative'})
end
-- sell this joker to create a negative dream card.
if context.selling_self then
SMODS.add_card{ key = "c_busterb_dream", edition = 'e_negative' }
end
end
}```
GRR
THIS SHIT IS FUCKIING ME OVER
can anybody help me?
i
i am going nowhere
It only happens if theres 3 of the joker idk why
i can't do this anymore.
nobody here can help me.
i'll just sit in this chair and wait for an answer
see if somebody here can tell me what's wrong with my code
It's Consumeables not Consumables
Got sidetracked working on my API mod however added deck crediting Galdur support
ooh very nice
I should learn how to make a deck
And a deck sprite
And then moving on to sleeves
Oh yeah I gotta make sleeve versions of all my art
As a whole my API adds support for easy crediting so you can do a little less than copy paste in loc vars
Not really, we usually just point people to the documentation resources that we have (like https://discord.com/channels/1116389027176787968/1349064230825103441)
I'm trying to make text with a custom color, but it keeps crashing saying:
Oops! The game crashed:
functions/misc_functions.lua:2025: attempt to index field 'colours' (a nil value)
Additional Context:
Balatro Version: 1.0.1o-FULL
Modded Version: 1.0.0~BETA-0615a-STEAMODDED
Here's my code:
loc_txt = {
vars = {
colours = { HEX('161616'), HEX('bdbdbd') },
},
name = "Duality",
text={
'Add a {V:1}White{} or {V:2}Black{}',
'seal to {C:attention}1{} selected',
'card in your hand'
},
},
Could anyone help?
colours go in loc_vars
oh, okay. thank you!
Ok so it’s so stupidly unbusted, I’ll change the context from “unscoring card” to “held in hand”
To get an ungodly amount of consumables in deck
That’s all I want
I may not be guaranteed a soul, but the chances of getting it should be unrealistically high.
I did that, but its still giving the same crash. Here's my updated code:
loc_txt = {
name = "Duality",
text={
'Add a {V:1}White{} or {V:2}Black{}',
'seal to {C:attention}1{} selected',
'card in your hand'
},
},
loc_vars = function(self, info_queue, card)
colours = { HEX('161616'), HEX('bdbdbd') }
end
}
I believe individual works with cardarea == G.hand?
loc_vars goes outside of loc_txt
oh im dumb
Also you need to return it.
thanks
how can i manually set a cards stickes like eternal or rental?
SMODS.Stickers['eternal']:apply(card, true)
Im trying to make a consumeable that gives either one seal or another, but every time i use it I get the crash:
Oops! The game crashed:
[SMODS Batrocities "items/consumables.lua"]:184: attempt to call upvalue 'seal' (a number value)
Additional Context:
Balatro Version: 1.0.1o-FULL
Modded Version: 1.0.0~BETA-0615a-STEAMODDED
Here's my code:
local seal = (pseudorandom("atlas_btct_consumeables_Duality",1, 2))
G.E_MANAGER:add_event(Event({
trigger = 'after',
delay = 0.1,
func = function()
if seal('atlas_btct_consumeables_Duality') == 1 then -- this is line 184
conv_card:set_seal(card.ability.extra.whiteSeal, nil, true)
else
conv_card:set_seal(card.ability.extra.blackSeal, nil, true)
end
return true
end
}))
Could anyone help?
just use if seal == 1 instead of if seal('atlas_btct_consumeables_Duality') == 1 im pretty sure
change the function for this and remove the local seal = ... at the start ```lua
func = function()
if pseudorandom("atlas_btct_consumeables_Duality",1, 2) == 1 then
conv_card:set_seal(card.ability.extra.whiteSeal, nil, true)
else
conv_card:set_seal(card.ability.extra.blackSeal, nil, true)
end
return true
end
that should work
oh, wait, in what line is saying the nil value
in what line is this
in card.lua:569
then i think its that card.ability.extra.whiteSeal doesnt exist
and same with blackSeal
ah
you are supposed to put the key of the seal
i have the key in the config
im going to try replacing the card.ability with the seal key
same error there, card.lua:569
did you ever set which card conv_card is?
would local conv_card = G.hand.highlighted[1] count?
me neither, im mainly just the spriter for my mod
Hi everyone. I am creating a joker that copies the LAST card in the hand when the blind is beaten with 2x score. I have one problem, which is that apparently context.full_hand is not available in context.end_of_round and context.after is somehow broken, triggering before scoring even. Does someone know a fix for that?
managed to get it working, thanks for the help!
np
you can store the card and use it later
im baffled how i didnt think of that
ty
np
No, you cannot.
no?
You can't store cards in the save file.
i meant in card.ability.extra.something
not even in config?
Yes, that is in the save file.
exactly
im confused, cause i made a joker that creates the last two destroyed cards when hand is played and i just stored the cards in card.ability.extra
Yes, it will break when you reload the game.
Do you have an idea elsewise? As said for some reason contect.after triggers before scoring aka not
Yes, you do it in an event in context.after
the problem is that for me context.after somehow dosent correctly work. wait lemme test smtn
oh yeah, i never tested reloading the game apparently
so slightly confused on why th it says G.play but in the context it says G.jokersfor context.cardarea
i assume storing it in a G value also breaks right
No, only in G.GAME
oh, well thats a fix i can do, thanks for helping fixing something i didnt know was wrong lol
You almost never need to care about the cardarea
btw, how can I check which stickers a card has?
i am unsure anymore but try out :has_sticker(name)
that didnt work no
so i have this
if context.after
and to_number(G.GAME.chips) >= to_number(G.GAME.blind.chips) * 2 then
print('Yippe')
but i get this
-# sorry for the lag im currently on my laptop and not my pc
You should change to_number to to_big
yea i was to lazy to do that, but i have that thing with "if talisman then function to_number" thingy so that wouldnt be the problem. i could also remove that and it wouldnt work
Yes, but to_number is not for comparing.
You need to do G.GAME.chips+(hand_chips*mult)
would i just be able to replace every instance of to_number with to_big
that makes sense
Most likely, yes.
ty
@maiden phoenix im sorry for the folder naming 😭
I tried my hardest to ignore it
do this instead
if context.after then
G.E_MANAGER:add_event(Event({
func = function()
if to_big(G.GAME.chips) >= to_big(G.GAME.blind.chips)*2 then
print('Yippe')
end
return true
end
}))
end
context.after is in fact called immediately
if you really want to check for something after the evaluation, put the check inside an event
it works now, ty tho
what function do I need to hook to do something when money is added to player's money?
ease_dollars
thanks
is there a way to check if a card has a seal same way SMODS.has_enhancement() checks for enhancements?
if card:get_seal() == "Red"
what about just having a seal in general, like if it has a seal return true or something
if card:get_seal()
Does the coding for my joker to activate its ability also go on the same file as the atlas and such?
yeah you can put it all in one file
Got it
it can
it can go anywhere tho
i think the atlas might need to be loaded first but thats basically it
key = "trans_joker",
path = "trans_joker.png",
px = 71,
py = 95,
})
SMODS.Joker({
key = "trans_joker1",
atlas = 'trans_joker',
pos = { x = 0, y = 0 },
rarity = 2,
discovered = true,
blueprint_compat = false,
eternal_compat = true,
cost = 4,
})
this is what i have, all works well
https://github.com/Steamodded/smods/wiki/Calculate-Functions
i'm using this as reference
“Creates a red seal steel polychrome ace”
how do I make this brah
SMODS.add_card{ set = "Base", rank = "A", enhancement = "m_steel", edition = "e_polychrome", seal = "Red" }
-- calculation code goes in here
end,
do i need SMODS.calculate?
also, is this a good start
thats correct
do i need SMODS.calculate?
no
if context.cardarea == G.play and context.main_scoring is this the one to convert cards?
yes
it depends, but likely no
the contexts are mostly* not to do things but with what timing you do things
main_scoring is not for jokers tho
ah, thought if was, oops
for jokers it's joker_main
what you're gonna do inside the if statement will happen when all specified contexts are met
context.before as an example happens before scoring
so, for this i'd need to make this joker check if the scoring cards are kings and then queens, i suppose?
one for kings and the other for queens?
what do you want to de exactly
when during the scoring do you want it to happen
if it's prior, doesn't it go into a loop?
no
you can de before or after scoring , i suppose before would be better
since you can add a flip and make it look slightly better
yes
i was thinking about vampire for example, it triggers before any scoring
before is more complicated if you want them to score as the other rank
I don't remember if SMODS.change_base has delay support yet or not
it didn't last time i checked
for now, i want something simple so i can practice. what do you recommend me?
also i believe it keeps the old chip value
use after then
how do I make the player immediately lose? making an active landmine joker that gives ^1.1 mult but if you play X rank you die
after it is
make a simple + mult joker than a scaling joker , then so some card creation and modification
you can check code in vanilla remade
and reference it
i will do that, yes
also utils tab and calculate has a lot of useful contexts
G.STATE = G.STATES.GAME_OVER
G.STATE_COMPLETE = false
and stuff that helps
winter had a more complete version of this, i need to check it out so i can steal it for the vremade wiki
how would I do ^1.1 mult? is there a global variable that is entire mult
hey, how can i make a planet card of the most played hand with SMODS.create_card?
what is loc_vars?
your variables stored in the joker
local variants
it's not straightforward, you need to manually check for the most played and the planet card for that hand
is that how for example, you make scalling jokers?
yes
any jokers actually
loc_vars return the variables to be displayed in the desc
example in the config you nedd to put example mult = (the initial mult) and mult_gain = (how many will scale the mult), then you need to codify the context
i'm gonna add the susie laugh
for the planet check blue seal
for the most played:
totally unrelated, but will jokerdisplay show this?
thought so
you need to add explicit compatibility
i need to do a custom function for the game to tell which planet is my most played hand?
you need to do a loop through all the planets and check which one it is
where i put the code? in the main.lua file?
if you're having a hard time understanding code sw i'll be making a tutorial soon
in the calculate
can i put calculate in consumeables?
oh if its a consumable then it should be in use
(but yes you can, not relevant to this tho)
i need help fixing this code
balatro is crashing and it says that the atlas code has to end at path
