#💻・modding-dev
1 messages · Page 291 of 1
Consistently mad as hell that they waste genuinely excellent feature concepts on gag updates, never to be mentioned again
April fools is basically where they test shit
isn't it crazy how we got custom dimensions after the infinite update
i saw a comment saying that microsoft doesnt care what they add for april fool updates
so maybe thats why
There’s Confused cards in my mod
more accurately these things don't go through QC at all
Cute
Are you dating NL
did u beat the boss in craftmine yet aiko
Cinema
Floating @hushed field islands?
oh that looks great
🧊
The Netherlands?
Yes the entire country
how would i create a list of jokers to randomly create
sakdasldksalk i dont wnat to do thsisss
😭
im so gonna die
but i gotta get my mod done
the real invisible joker!
Ok, I was struggling to find something fun to do with my hidden easter egg joker, A kuma.
My whole mod is animal themed, but I had to include my boy
Don’t forget the missing pixel below
So I had him as a bear with a fur pattern of Akuma, lol!
Which Akuma
hm?
K
lemme rotate my screen rq
ih
oh
i see
fixed
no it wasnt
where the fuck did i just put the dot at
😭
dementia
demetia
R
Only on tuesdays
Makes sense because if you were there your head would be above water level
what
1 gazillion dollars for 1 jonkler
Instead of paying you I’ll give you gacha rolls where you can earn your payment
@gmail.com
egg_irl
egg irl
r/egg_irl
the only subreddit which consists entirely of NL
Sadly not bc like any creator I do anything but actually write the story 
Oh I thought you were gonna answer the other ping
hello where can i find Cryptid mod
Mood
Oh I could, that joker? Uh yeah sure
Is that part of your story’s lore
M
how would i create a list of jokers
I DON'T THINK IT IS SORRY I'M A LIL CONFUZZLED
What is needed to make a blue seal work with a custom hand? I am getting crashes when a blue card procs for me for a custom hand
@mellow sable what would be the lore of the film adaptation of Cryptid starring Jack Black
you need to be more specific
I.... AM JOLLY JOKER
i think you need to patch that out or make a planet card
vine boom
creeper boom
I used to rule the world
im wanting to make a joker that randomly picks a joker from a handpicked list (joker, jolly joker, etc) to create
i just realized
Chunks would load when I gave the word
if you need it to respect rarities you can create an SMODS.ObjectType, if you don't then just create a lsit of all the keys and pick one at random
hoyoverse washed
do i go for full accuracy and kill myself afterwards
or
hm
eh, i value my sanity too much :3
guys I'm going to spoil Minecraft Movie
Ok I will go away, bbl
Jack Black actually said "I am Steve"
😭😭😭😭
Why would he lie
deception just for box office performance
can’t trust anyone smh my head
Have you seen baby Jack Black
🤨
brainrot-tro
my new solution - i removed the set_sprites() from my joker and just had the mod look for a function to updatestate and call it as part of onrunstart.
and new issue (also the joker sprite should not be a 2 of hearts
):
i remember running into attempt to index local 's' (a number value) before, but that was when i was doing UI code stuff and the issue was that i forgot to double nest it, iirc?
but i'm not doing any UI code stuff here. this should just be returning a table from calculate() for each discard.
i'm also getting something printing "line not found" to my lovely console and i'm not sure where it's coming from
i only know that it's not the decrement counter print
wtf
Puyo Puyo Tetris 2S
Nintendo Switch™ 2にて、『ぷよぷよ™テトリス®2S』発売決定!
国民的、世界的アクションパズルゲームの「ぷよぷよ™」と「テトリス®」。
誰もが知っている二大アクションパズルの頂上決戦が、『ぷよぷよ™テトリス®2S』となってスペシャルにパワー...
1 new mode...
mouse control
No matter what Jolly Joker would have more depth than Steve
you have to add narration to jolly joker
kill me pls omfg
wtf is this
don't tell me you used shopee prop as reference
ok good then
Nice dude! You picked up Thori'dal, the Stars' Fury
This is EXCRUCIATING
Looks amazing tho
I thought Steve could mine deeper
Finally one less jar 
You could try a light gradient on the background of that one
its m7's color scheme, sooooo :p
So what
aka this girl
Does she not stand under the light
Yes
😭
Why is her name a date though
hi guys im november 7th
the date of her thawing ig
Like Captain America?
idk lol
-# did you mean “hatching”
My girl
when astral express (a train that travels through space to help planets with their stuff) found her
she lost all of her memories, so they named her after the date she thawed
Are you talking about stelle ?
Wait so she is captain america
she lost her memories too, but she definitely wasnt in an ice cube floating in the space
Was she in a space cube floating in the ice
Idk the lore
Wait
Genshin’s lore is more pathetic
I played about 40 hours of Genshin and I can't tell you what that game is about
I played 0 hours of Genshin and I can tell you what it is about
I can but the question is are you willing to listen
Who plays it for the story
I play it to gamble
spot on
I played because my gf told me to LOL
This too is yuri
Who the fuck
time to draw a trash bag
would it be funny if i get gappie to draw a trash bag
Hot take
:3
Draw genshin
actyuakly you know what
havging multiple literal trash should give you pulls eonce a month\
Thats not how life works G
good idea, it should also fix your keyboard once in a blue moon too ❤️
if i'm being honest, part of why i don't know the lore is because the more the characters spoke the less interesting I found it, so probably not 😛
,my jkeyboardi isnt broken im just lazy to use backspoace
to fix my tupoes
are you having a choke myst 😭
tupoes 🔥🔥🔥
sending an ambulance 💔
Toes
Are you implying @formal parrot is a Genshin character
actually
they might be
i will ask if gappie is interested lol
💔
I do yap a lot
But the repeated Ss were mainly broken S key not the dislecsee
i suyre hopoe none of my keys break
i think myst underwent lobotomy
maybe they should make a mod like... i dunno, lobotomy corporation...
what was the context for on joker create again?
i dont think theres any
That hair is gonna be a placeholder for a really hot minute cuz i am NOT doing allat
holy fuck
Something like added_card but you need to test the set
Whoever made that must be very pretty 
im going to kill you
🔥
im going to fucking kill you all raghhhh
I misclicked
The M stands for Lobotomy
the S stands for sane
the tand for ane
rate joker
❤️
🤝
Boss Blind
The Cook
Fight Aiko IRL
I think cardsets is working fully for jokers and consumables, but I'm trying to set it up basically globally. Everything that every gets pulled from a pool is basically in G.P_CENTERS, no?
so many jars
jars 😭
how do i convert a number to a string
tostring()
Not everything
I guess playing cards and suits would be exempt, huh
There’s some things not there
am i cooking
yes
Maybe Seals or Stickers
oh hey
Why doesn’t the right joker have a hand
Seals are, I thought but I'll check, yeah
dunno, thats the touhou texture pack
I should see if enhancements actually get banned if they're in the banned keys, as well. Otherwise this set up might not really work
i need to see if my custom pooling system works with banned keys
im trying to get a tag working for my booster pack, but i cant seem to get the key right
Is this for the per card rarities?
it'd be "p_prefix_booster" right?
yeah
should be
I'm so ready for this mod to result in so many bug reports entirely unrelated to it, but just due to other mods spawning in stuff without checking the banned keys, haha. That is, assuming other people actually start playing with this mod, of course
not sure why this wouldnt be working, code is copied from the game's tags
apply = function(self, tag, context)
if not tag.triggered and tag.config.type == context.type then
tag:yep('+', G.C.GREEN,function()
local key = 'p_kmjs_wallet'
local card = Card(G.play.T.x + G.play.T.w/2 - G.CARD_W*1.27/2,
G.play.T.y + G.play.T.h/2-G.CARD_H*1.27/2, G.CARD_W*1.27, G.CARD_H*1.27, G.P_CARDS.empty, G.P_CENTERS[key], {bypass_discovery_center = true, bypass_discovery_ui = true})
card.cost = 0
card.from_tag = true
G.FUNCS.use_card({config = {ref_table = card}})
card:start_materialize()
G.CONTROLLER.locks[lock] = nil
return true
end)
tag.triggered = true
return true
end
end,
you could try SMODS.add_booster_to_shop
oh wait i misread the code
its identical to any other tag that would give a booster
whats the crash log
how do i copy it?
you can ctrl-c the crash screen
what context do i look for if i want a joker effect to trigger after the hand has been played and after the scord has been tallied
like right before the draw
wait hold on 
does it work if you do a vanilla key
anyone wanna try my sapphire mod pack
?????????
curse of mod testing
lemme try, thought i tried that
can anyone vc i need help cwith a calculate function
@manic rune can you help me with rsomething rreal quick
...surely im not fucked
sorry im not comfortable with vcs :p
u can post the code here and tell me if smts wrong though
thatsa fine can you just help me here
mhm
im trying to spaw in a planot card how do i do that
SMODS.add_card{set= "Planet"}
do i just put that in the context.setting_blind
just noticed the line thats throwing errors isnt the key, but is this line
local card = Card(G.play.T.x + G.play.T.w/2 - G.CARD_W*1.27/2,
depends on what you want your effect to be
you can try using SMODS.create_card instead
i wnat it to be when eyou select the blind
then yes
????
alright ill try it
ill try that
@red flower thankyou
i know i need the set and key, not sure which others i need
SMODS.create_card('Booster', nil,nil,nil, nil, nil, key,nil,nil,nil,nil)
SMODS.create_card{key = "p_kmjs_wallet"}
it takes a table
ah
does Joker.update not work in the collection?
I'm pretty sure Card:update runs whenever the card is on screen.
that's what i thought
it does work
it does work but for whatever reason dt always returns zero
how does the code look like
is dt just like an unused variable
yeah dt pauses in the collection iirc
fuck me
you need to use G.real_dt or something like that
......hm
apply = function(self, tag, context)
if not tag.triggered and tag.config.type == context.type then
if context.type == 'new_blind_choice' then
tag:yep('+', G.C.GREEN,function()
local key = 'p_arcana_mega_'
SMODS.create_card(key)
return true
end)
tag.triggered = true
return true
end
end
end,
i might be cooked yall
6
bro I keep getting insane seeds during testing
it needs to be a table so SMODS.create_card({key = key})
baron in ante 1 💔
Just getting a baron is not that useful tho
true
god dammit i forgot description text doesn't update when you have the menu pulled up
u still need to build your deck surrounding it
fukin annoying
which can take a while
true but still
what are you trying to do
now the center is a nil value 
you could try adding a main_end UI to the description and set the text to a ref_table
p_arcana_mega_ is not a valid key
how do i give a custom consumable a classification like how planet cards do
Ante 1 baron sounds kinda dogshit
that sounds scary to my noob ass
like how pluto is a dwarf planet
Main end is just a function that adds stuff to your joker description
pretty sure main_end is meant to be a table you return in your loc_vars function that is a UI table
u right, forgot they concatinated a random number
I think create_badge is what you want?
thank you
Check the docs for more info on it
you can add this to loc_vars and it will update in real time to whatever value you have in ref_table[ref_value]
uhhhhhh
How could I put an info queue or similar on a card saying how many seals it has?
that means it worked, try adding the rest of the stuff back to see if it opens correctly
yeah
is there something you have to do with talisman with numbers in message? It's crashing in card_eval_status_text cuz number comparison and that hasn't been patched by talisman so I assume it's something I have to handle myself
like do I have to do something here ```lua
message = localize {
type = 'variable',
key = 'a_xmult',
vars = { card.ability.extra.x_mult }
}
huzzah! it works! now i just have to get my actual booster key
idk how to solve that issue but is there a reason you need to return the xmult message manually instead of letting smods handle it for you?
guh
I'm just showing it cuz this joker gains X mult
wrap it in another table
like this or
i mean the main_end
ohh shit okay
is this a thunk moment?!? wtf is happening???????????????????????
is there a process that runs through all the boolean values in a joker's config while the hand is processing and forces them to be false? there's no reason this should be randomly being set to false immedaitely after i set it to true
one last question - you know how i could apply the {E:2} wavy effect to the main_end text node?
you need to make a dynatext for that i think
this is how the game does it
you would replace assembled_string for {ref_table = table, ref_value = "value"}
so,
idk if that's the problem but don't save stuff in card.ability, save them in card.ability.extra
i realized
i forgot to put the code to actually refresh the deck when entering phase 3
:p
silly me
they're the {V:} and {C:} and {s:} tags etc
so you would replace those with the colour and the scale
ohh okay i get it now tysm
What do ya'll think of my totally useful joker?
erm what the scallop
niko
it needs to be a G.UIT.O node
i love 1 shot
ah thanks didn't notice
another time, then
How would i create something similar to the Index card from the ortolab mod
how do we feel about this so far
Looking good 👍
turns out my issue was that i typo'd the var
Average coding issue
ok so it's not actually crashing because of this
I thought it was because it's like the status text and that makes it show a status text but apparently not
so idk wtf I need to change here for talisman to work ```lua
if context.joker_main then
return { xmult = card.ability.extra.x_mult }
end
if context.end_of_round and context.cardarea == G.jokers and not context.blueprint then
local dollars = math.floor(G.GAME.dollars * 0.5)
ease_dollars(-dollars)
dollars = dollars + card.ability.extra.dollar_buffer
card.ability.extra.x_mult = card.ability.extra.x_mult + card.ability.extra.growth * math.floor(dollars / card.ability.extra.dollar_needed)
card.ability.extra.dollar_buffer = dollars % card.ability.extra.dollar_needed
return {
message = localize {
type = 'variable',
key = 'a_xmult',
vars = { card.ability.extra.x_mult }
},
colour = G.C.XMULT
}
end
what's the crash log
it crashes in common_events.lua:1094 in card_eval_status_text
lemme get the log real quick but I couldn't make sense of it
it seems to be the x_mult thing
i might or might not know the cause
well yes
can u show me that line rq, istg it was because of an oversight in talisman in my case
it's not the return in end_of_round tho because I tried removing it and it still crashes
it's the if amt > 0 or amt < 0 then or smtn
yeah cuz it's like bignum or smtn
i know this sounds stupid
but turn on Disable Scoring Animations
and it shouldnt crash
i love talisman
gotta ask MathIsFun to fix it on his end 💔
you're correct
oh bepis did you ever open your issue regarding disable scoring anims
you freaking buffoon
i have officially cancelled balatro star rail
NAWWWW
is there like a temporary patch for this?
you would need to patch it urself
change if amt > 0 or amt < 0 then to if amt > to_big(0) or amt < to_big(0) then in ur lovely patch
yeah I was thinking that
thought maybe some string bullshit with the big nums might get in the way
prob good enough
wait actually
i wonder if its already fixed in the latest ver, hol on
this one?
when does that crash happen
dunno, lemme check when the amp comparison happens
whenever smt uses this
u sure
check ur dump file
yeah i get that but it's weird that it doesn't happen to cryptid
mathisfun gatekeeping talisman for his own mod 💔
should be functions/common_events.lua
yes
no it's actually just still happening
it's patched in the dump file and it still crashes there
huh
do you think I'm stupid
[[patches]]
[patches.pattern]
target = "functions/common_events.lua"
pattern = '''
if amt > 0 or amt < 0 then
'''
position = "at"
payload = '''
if amt > to_big(0) or amt < to_big(0) then
'''
match_indent = true
times = 1
yeah wait, maybe the problem is that it didn't read the to_big function from talisman, since balatro files are loaded first?
actually no
considering you just said you fixed it in the dump file im assuming you modified the dump file lol
that doesnt make sense
since its not defined in common_events.lua, it should use to_big from talisman, i think?
yes
this creates a different issue if amt is a normal number
yeah uh, talisman shenanigans :3
ideally wrap both in to_big
yeah lemme try that
well the same issue
whats amt i wonder
bleh
maybe the amount of shake that gets passed to juice_up
it has to be
now it works
it's peak smh
surely mathisfun didnt plan on making a card juice up with an amt of 1 gazillion
dissing my grannyline
why
it's the number to show on the chips, mult, dollars, etc message
mult = 2, amt is 2
lol
yeah it makes sense why it needs to_big then
in that case they were making the xmult into a table by using G.GAME.dollars
ah makes sense
but its weird that never comes up in cryptid almanac or something
surely that wasnt already in one of their lovely patches
almanac used old smods/cryptid/talisman before dollars were bignum
oh wait if it's in card eval it'd just be
everything
hm
yeah i have no way of knowing without looking at the code idk
how do i fix the text in the badge :v
i will make smallnum
it's label = "Favorite" I think for loc_txt
ah thx
there's another one if that doesn't work but it's loc file
certified moment
balatro but with only 8 bit integers
i dont see the if amt < 0 part, weird
maybe cryptid has some black magic installed into it, idfk 💔
does C even have short floats
i dont see it patching that part
i actually have no clue
i think so
uhhh no no short float actually
only short int
compiler specific
not in C standard
looked it up
luajit compiles with MSVC so let me see if msvc has it
it probably doesn't because msvc has nothing
how do i get the amount of hands played in the current blind
okay you could probably compile luajit with gcc or a c++ compiler or something which does have 16 bit floats
G.GAME.current_round.hands_played i think
and then you can have smallnum
😭
what happened to my deck bro 💔
🦭 deck
but what if i wanted luajit2

you could do the same thing
what if you
wanted to x < y
but god said
attempt to compare number with table
me when attempt to compare number with table
i will approach thunk to remake balatro in php
rustify balatro 💔
what isn't hard coded in balatro
true...
how should i go about applying a modded sticker to a card?
Is there a way to make the message for the gold seal show up at context_post_trigger instead of before the card scores?
Without returning?
same as vanilla stickers?
where would a custom consumable type's localization entry go? i'd rather not use loc_txt in the actual definition
oh awesome, i wasn't sure if it'd just go off of the consumable key
or wait, where would you define the description of the consumable type itself?
good question, for this one i used loc_txt for the name/collection/undiscovered loc soo idk
yeah that's what i had wanted to avoid, guess i'll have to trial and error
what was the function for making a string lowercase?
string.lower(string)
this is not true
actually, i should try
with a fresh instance
yeah nope, same error
did you take ownership of it
yeah I think it's because of that
or otherwise override the key
take ownership has a silent argument that prevents mod badge
thanks
weird
try card.ability.extra.active:lower()
-# it will bug out if its not a string
actually
it might be something setting a var as "string"
for some reason
:lower() yeah... I recall using that during modding for SRB2's Lua.
whats SRB2?
star rail balatro 2
😭
guys, quick question, why is my code not working??
calculate = function(self, card, context)
if context.scored then
local queen_count = 0
for _, c in ipairs(context.scored or {}) do
if c.base and c.base.rank == 12 then -- 12 is Queen
queen_count = queen_count + 1
end
end
print("Scored queens:", queen_count) -- <--- Debug line (optional)
if queen_count > 0 then
local mult_gain = queen_count * card.ability.extra.mult_per_queen
return {
card = card,
Xmult_mod = mult_gain,
message = 'x' .. mult_gain .. ' (Queens)',
colour = G.C.MULT
}
end
end
end
}
I think it should work, but it's not really doing anything
i will forcefully claim ownership of what was once mine
does context.scored even exist?
i never heard of it before
eh, i ended up just changing how i was doing this but i'll try it.
a more pressing concern i have - i'm returning a table from calculate() and the game is just straight up ignoring it.
i've tried xmult, Xmult_mod and this.
the table is being built correctly and returned. the game is just straight up not doing it. what am i doing wrong?
should i just switch out for SMODS.calculate_effect()?
dunno, it's what I saw in the tutorial I was following lol, I'm pretty new to this
i think theres scoring_hand isnt there
watchu tryin to do
x2 mult for every queen scored
i see
use joker_main instead
if context.joker_main then
--run a loop through context.scoring_hand here, check how many queens were scored and return mult * (queenNum) basically
end
...i didn't even notice it was post_joker. i always thought i wrote joker_main there. i was about to lose my shit
let me try real quick
Resurrect.
did you try an event
Something this I made for.
nope, it ain't working yet. It prints what it should print to see if it activates, but I just tried to score two hands and it's still not working, not really sure why
k
Inside the for loop or outside the for loop?
does anyone know how I can use take_ownership in smods to replace the background shader?
So like this?
mhm
sorry for bothering btw, i'm trying my best
how do i get the total hands played in the run?
its all good, dw :p
G.GAME.hands_played
it's still not scoring ;-;
Flashback
Adds a red seal to a random joker
Marking
Adds a gold seal to a random joker
Sigillum
The limit of how many seals a card can have is removed.
ty vro ❤️
is there like SMODS.find_card but also any blueprints/brainstorms copying it?
i dont think so, i made my own for jokerdisplay
weird, can u try replacing "if c.base and..." with "if c:get_id() == 12"?
could I have that piece of code?
wait
did void leave the server???
-# the blueatro dev, and the one replacing hands and discards with a timer fyi
i think it's too specific for jokerdisplay because i store the copied card inside blueprint https://github.com/nh6574/JokerDisplay/blob/ed17bb2eed7d1f4b3ac0caf8857d229e454bac85/src/api_helper_functions.lua#L153
seems like it
theyre still in the joyousspring one tho :3
well, it was better, it now reads how many queens I play in the print, still no x2 mult tho
probably yeah
I think I'll just make it not blueprint compatible to avoid thinking about this
try just doing return { xmult = mult_gain }
oh also N', did u check out my m7 art :3
-# i think u did, but at the same time i think u didnt idfk 🥀
yes its cool
nice
its my first time making a joker art so wasn't too confident it will come out acceptable :p
THAT ACTUALLY WORKED
ur art is good
it's already kinda busted even without blueprint compatibility
or stacking
tysm
aw, thanks
ok so whoever told me i could just return xchips in a table from calculate() was wrong
but you can tho
your context must be wwrong
you can
i've tried xchips, chips_mod and xchips_mod and nothing works
no, because xmult works just fine
code?
i see in the video that the return worked, just not the multiplying
why is this not actually changing the cards? (mostly copied from death in vanilla)
where can i find the chances for each rarity to spawn?
go to gameobject.lua in smods and search for SMODS.Rarity
you'll find the default weights of each vanilla rarity
change base takes a string i think, not the ID
wat r u trying to do here
that's probably the case yeah
have a utility function I made to set the rank of a card ```lua
function Card:set_rank(new_rank)
local suit_prefix = string.sub(self.base.suit, 1, 1)..'_'
local rank_suffix = to_big(new_rank)
if rank_suffix < 10 then rank_suffix = tostring(rank_suffix)
elseif rank_suffix == 10 then rank_suffix = 'T'
elseif rank_suffix == 11 then rank_suffix = 'J'
elseif rank_suffix == 12 then rank_suffix = 'Q'
elseif rank_suffix == 13 then rank_suffix = 'K'
elseif rank_suffix == 14 then rank_suffix = 'A'
end
self:set_base(G.P_CARDS[suit_prefix..rank_suffix])
end
oh shit talisman stuff
lemme edit
i cant find it?
this fixed it, thanks!
nice, though what i'm trying to do is basically death but only for ranks
ah, lowercase
thanks
yeah that's why I gave you the rank one
👁️👄👁️
girl theres only 54 lines
thats the lsp_def
i was making a thing for making cards of a selected enhancement turn into another but im getting this crash
I put it in and outside the for loop both moved the messages to after scoring.
well my bad theres 2 files named game object and i just used the search function and that was the first i saw >:(
this is the joker code
also
ah, thanks
you should probably be using SMODS.Centers since it's a modded one, right?
I haven't really fiddled around with enhancements yet but I feel like G.P_CENTERS is not what you should be using here
and it also probably needs like your mod prefix
oh, lemme try!
they get saved in p_centers
but also you dont need a center for set_ability anymore, just the key
i took out the centers part but got 3 errors
did you add the mod prefix?
"m_fusion_claws"
show code
othercard:set_ability("m_fusion_claws", nil, true)
tyty!
new crash just dropped
howdy ho fellas
press_play = function(self)
print("[DEBUG] Sticker Storm triggered.")
local min_apply = 1
local max_apply = 3
local available_cards = {}
-- Collect all cards in the player's hand
for _, card in ipairs(G.hand.cards) do
table.insert(available_cards, card)
end
-- Select 1-3 random cards
local num_to_apply = pseudorandom("sticker_storm_effect", min_apply, max_apply)
for i = 1, num_to_apply do
if #available_cards == 0 then break end
local chosen_card, chosen_card_key = pseudorandom_element(available_cards, pseudoseed("random_card_sticker"))
table.remove(available_cards, chosen_card_key)
-- Ensure the chosen card is valid
if chosen_card and chosen_card.ability then
-- Generate pseudorandom values for Perishable and Rental abilities
local perishable_roll = pseudorandom('perishable_' .. tostring(chosen_card.uid or os.clock()))
local rental_roll = pseudorandom('rental_' .. tostring(chosen_card.uid or os.clock()))
local perishable_chance = 0.5 -- 1 in 2 chance
local rental_chance = 0.5 -- 1 in 2 chance
-- Debug: Log the rolls and chances
print("[DEBUG] Card:", chosen_card.name or "Unnamed Card")
print("[DEBUG] Perishable Roll:", perishable_roll, "/ Chance:", perishable_chance)
print("[DEBUG] Rental Roll:", rental_roll, "/ Chance:", rental_chance)
-- Apply Perishable ability
if perishable_roll < perishable_chance then
chosen_card.ability.perishable = true
print("[DEBUG] Perishable ability applied to card:", chosen_card.name or "Unnamed Card")
end
-- Apply Rental ability
if rental_roll < rental_chance then
chosen_card.ability.rental = true
print("[DEBUG] Rental ability applied to card:", chosen_card.name or "Unnamed Card")
end
-- Add a visual effect for the card
G.E_MANAGER:add_event(Event({
func = function()
chosen_card:juice_up() -- Visual effect
return true
end
}))
else
print("[DEBUG] Invalid card or missing ability field.")
end
end
G.GAME.blind.triggered = true -- Ensure the Blind is marked as triggered
return true
end
im attempting to make a blind which will apply the rental and perishable stickers to a random amount of cards between 1-3 (which is succesful)
im applying to the cards properly, but im running into this error when the round ends
...why is my shop under my card area?
i also can't figure out if a specific mod is causing the problem because it fixes itself on game restart
anyone know how to get a joker's description to pop out with a context thingy, like this: that describes steel cards effects
sounds like a Talisma issue
for many things you put the center in the info queue
info_queue[#1116390750314307698_queue + 1] = G.P_CENTERS.m_steel
in loc_vars
see id assume talisman already does their checks for perishable and rental since they are gold stake
that's not the issue it seems
The issue is a big number being compared with—
Wait that's a nil not a number
what is this?
post the whole thing
which, im not sure how it can be nil with both perishable and rental providing their values
the whole crash log?
try to see what line is that in the dump
imma send you the full thing in dm!
you can copy and paste it here
oh, too late, sorry😅
yea, thatll prob do it
Resurface.
how do i use SMODS.change_base() while still covering for face cards/aces? the id returned doesn't change the card
G.hand.highlighted[i].base.value
And remove the tostring
Also should add a check in case the other card doesn't have a rank, like a stone card
alright
how do you check for the key of a joker with G.jokers.cards[i]?
G.jokers.cards[i].config.center.key
hm i tried that but even when i do have a joker with the key maki my consumable wont be able to be used.
You have to include j_yourprefix aswell.
ahhh okay tysm
Is there any way to modify how an base game event is done? Like I know how to do it by modifying the source code but is there anyway to do that via steammodded?
what do you want to do?
I want to modify the add_to_deck function to make it so that all playing cards added are hearts if you have a specific joker. There is no easy way to convert cards added to hearts with just joker code, so that's why I have to modify it.
What ended up being the solution to the calculate issue you were having? I've been having the same issue for the past few days.
I have it working by modifying the source code. Works with DNA and crpytid too. Just don't know how / if I can modify it with a normal steammodded mod
I had overwrote the whole calculate function due to ignorance
how do i get when a card or joker is destroyed?
you can use a lovely patch to do exactly that
but also there is context.playing_card_added if that makes it easier for you
i wanna make a joker that does something when a card/joker's destroyed
ty
i'd ctrl+f'd in there before but couldn't find one that worked
i dont think there's one for when a joker is destroyed
what about for when a card is destroyed?
The thing with that is that there is no way to get the card that was added. context.cards for some reason is also a boolean value. That's what I was trying to do and I couldn't find a way to make it work which is why I'mm trying this roundabout approach.
context.remove_playing_cards
ty
then yeah you can use a lovely patch
wait that's for discarding, not destroying
according to the warning
and i want it to happen every time a card is destroyed
yea
it says also
is there an easy way to count a played hand as another one? (played two pairs, if they're the only cards played, act as a 4oak)
wait so can i check if scoring_hand is nil?
im pretty sure
In trying to do a lovely patch yeah? I was reading through your struggles like i stumbled upon ancient texts in hopes to solve my issue but i dont have any patches in my mod at all 😢
nah just hooking into calculate
and will this work for each destroyed card?
wait no i just checked and that warning is only for when cards are destroyed when discarding
_ _
i was wondering because i use it to count all destoyed cards in a run and it wasnt triggering on discard
so it should work?
yeah
Reinvigorate.
does anyone have any ideas what could be causing the trouble here
You need to add 3 more nils between G.jokers and the key and also 'G.jokers' should be G.jokers
also just use SMODS.add_card{key="j_jjok_amaki"} instead of those 3 lines
ty guys !!!
do you have any screenshots of the block that caused the problem? having a hard time telling if i'm overwriting or not
do you have a function Card:calculate_joker(context) block
nah only ever function(self, card, context)
then shrug, I got nothing
nards
reading this feels like you're talking about a completely different problem
show code
I don't think decks have a calculate
they do
ah
i think its a new thing so idk exactly hwo it works
does it never print
whats the context for when a hand has been played but before scoring?
context.before i think
context.before?
ah yeah u right ty
can you copy the code here? i want to see if i can run it
key = 'modulo',
loc_txt = {
name = 'modulo',
text = {'Test'},
},
atlas = 'decks',
pos = {x = 0, y = 0},
config = {hands = 10, discards = 10},
loc_vars = function(self, info_queue, card)
return {}
end,
calculate = function(self, card, context)
print('please run')
end,
}```
ty
Imma be real, I am super duper new to this so don't really know how to do that. Do you know any resources / information that could help me?
well, damn
i would recommend checking other mods with lovely patches too
appreciate you trying that that rules things out
whats your smods version?
1.0.0-beta-0401a
hmm yeah it should work then
🫡 thank you
yeah, ill keep trying things, thanks
hmm okay.. i disabled all of my jokers and now it runs... i dont know why they'd be overwriting though if im using calculate = function tho
Re-engage.
How would I be able to spawn in a tag?
Does priority matter for a lovely patch?
mostly no unless you need it to run before or after another patch
add_tag(Tag('tag_namehere'))
set it to 0 so it has default priority
how would you destroy a playing card in a played hand? this is the code i used but it doesn't do anything
Because there is a red dot.
so for destroying the first card in a played hand would the code be
cardarea = G.play
destroying_card = G.play.cards[1]```
or am i stupid
cardarea should also be in the if statement
if context.destroy_card and context.cardarea == G.play and context.destroy_card == context.full_hand[1] then
return { remove = true }
end
this is my entire calculate function and it doesnt remove anything ..
hmm try destroying_hand instead of destroy_hand maybe, thats weird sometimes
card*
@red flower by the way, I'm gonna try using copy_card to transform a Consumeable: by briefly creating a new Consumable then removing it
thats consumable abuse
i dont have a destroy_hand, do you mean destroy_card
while i set the perishable sticker on the backburner, ive noticed that for some odd reason rental sticker on playing cards seems to trigger its effect twice per card instead of just once
ie, if you have 4 cards rental will take 8 sets of 3 instead of 4
any idea what could be causing this?
sadly even this doesnt work
I tested this and it only happened once.
wait
He never forgets...
why is this reversed
Smash
interesting, i have it happening every single time for some odd reason, below is the blind
SMODS.Blind({
key = 'sticker_storm',
loc_txt = {
name = 'Sticker Storm',
text = {
'Randomly selects 2 cards',
'from your hand and applies',
'{C:attention}Rental{} ability!'
}
},
pos = { x = 0, y = 40 },
atlas = "blind",
dollars = 5,
mult = 2,
boss = { min = 1, max = 10 },
boss_colour = HEX('FFA500'), -- Orange to represent chaos
-- Function to apply abilities to exactly 2 randomly selected cards
press_play = function(self)
print("[DEBUG] Sticker Storm triggered.")
local num_to_apply = 2 -- Always select exactly 2 cards
local available_cards = {}
-- Collect all cards in the player's hand
for _, card in ipairs(G.hand.cards) do
table.insert(available_cards, card)
end
-- Ensure there are enough cards to apply the ability
if #available_cards < num_to_apply then
print("[DEBUG] Not enough cards in hand to apply Rental ability.")
return false
end
-- Select exactly 2 random cards
for i = 1, num_to_apply do
if #available_cards == 0 then break end
local chosen_card, chosen_card_key = pseudorandom_element(available_cards, pseudoseed("random_card_sticker"))
table.remove(available_cards, chosen_card_key)
-- Ensure the chosen card is valid
if chosen_card and chosen_card.ability then
-- Check if the card already has the Rental ability
if chosen_card.ability.rental then
print("[DEBUG] Card already has Rental ability:", chosen_card.name or "Unnamed Card")
else
-- Apply Rental ability
chosen_card.ability.rental = true
chosen_card.ability.rental_applied = true -- Ensure it is only applied once
print("[DEBUG] Rental ability applied to card:", chosen_card.name or "Unnamed Card")
-- Add a visual effect for the card
G.E_MANAGER:add_event(Event({
func = function()
chosen_card:juice_up() -- Visual effect
return true
end
}))
end
else
print("[DEBUG] Invalid card or missing ability field.")
end
end
G.GAME.blind.triggered = true -- Ensure the Blind is marked as triggered
return true
end
})
im not really certain why it would duplicate its effects when im not telling it to
omg im stoopy, forgive me im still getting a hand of passing in parameters and stuff
if you have smods in your workplace it should autocomplete it for you
WORKSPACE???
yes that
is that the tabs you have open?
this
or open the whole mods folder like i do
or you can also put it in the lua config but idk how
I tested this and it still only happened once.
then i have no idea what wizard tier difference our two spaces have, but here shows 2 cards with a sticker, but 4 removals of 3 dollars
stickered playing cards
dang
For me it only did it for cards in hand with the rental sticker.
i wonder if its because i have the cardarea of g.deck enabled as an optional feature
anyone know how to get the current game state? like whether it's a blind or a shop or w/e
Never mind it seems with cryptid and jens almanac it changes something, I tried without it and it did it twice but still didn't do anything in the deck.
interestingly im running neither
let me try disabling the g.deck feature
hmm, nope not that
I found this.
How would I set up an if...then to check if someone has a joker and make sure it isn't debuffed.
why are you checking if it isn't debuffed?
Idk lol
I'm making a lovely patch rn that changes the add_to_deck function to convert cards added to hearts if you have the joker
how do i get the round score and the blind goal?
g.game.chips for player total, g.game.blind.chips for the blind req iirc
ty
you don't need a patch for that
I've tried with just making the joker but I couldn't find a way to do it.
what did you try
Is there a way to have red seals on jokers retrigger editions?
Is there a way to have red seals on jokers
yes
something, myself and i think nopetoofast are doing it that come to immediate recollection
I mean that, it's a modded functionality not supported by SMODS
so, like, ask whoever made the mod
Autumn had Joker Seals too
I'm just giving an example
You should ask whoever made that mod
this ISN'T TRACKED?!
then they should ask themself
it is
thats it, im taking your grapes

i just looked through an output of print(tprint(G.GAME))) and couldn't find anything that would show this
is it not in G.GAME?
G.GAME is the run. G is all of the game, including the main menu
ohhh, so G.STATE?
The states also comprise states outside of the run
depending on what you need it for you might get 999 as the state too which is smods opened booster state
As I said, SMODS added at least 1 more
G.STATES?
does anyone have an example of adding a new type of consumeable to the game?
you could tryyyy looking through cryptid, but good luck
may be wise to look for a smaller and more focused mod
yeaaaaa was hoping someone knew of one or was developing one lol


