#💻・modding-dev

1 messages · Page 303 of 1

tall wharf
#

you'll need to patch the code so it shows

vague helm
#

I'll change to the name of the modpack

tall wharf
#

i just do this

hushed field
#

Lm grab how I pass along glossary items for Kino, which are objectless description

tall wharf
#

p sure

vague helm
#

The box is there, just not the text. That's what's surprising to me

tall wharf
#

i just said what needed to be done 😭

glad osprey
hushed field
tall wharf
#

patch somewhere in common_events.lua inside function generate_card_ui(_c, full_UI_table, specific_vars, card_type, badges, hide_desc, main_start, main_end)

vague helm
#

"Patch the code" is not useful advice

glad osprey
vague helm
glad osprey
#

try

#

throwing the def into the joker localization lmao

hushed field
#

Just use other as the set. Plenty of mods do it, for glossary reasons. Kino, JoyousSpring, Cryptid, etc.

tall wharf
#

or that

#

if you use custom set you'll need to patch the code

hushed field
#

Defining a custom set isn't necessary when there's a set explicitly for various additional items

glad osprey
#

yea no do what they are saying

vague helm
#

Yes, using Other works. I don't know why it wouldn't work with a different set, but who cares. Thanks!

hushed field
#

I think JoyousSpring does add its own set, but that's for separate reasons. The other thing you can do is just create a dummy object. I do that for Spells

tall wharf
#

-# (i just said why it doesn't work)

hushed field
tall wharf
#

generate_card_ui function only accounts for sets that exists in the base game

#

so if you want to display custom sets

#

you'll have to patch that function

hushed field
#

It has to do with the set type determining whether variable passing is possible or not

#

Or whether an item has a name or not

glad osprey
#

because localthunk also works

tall wharf
#

i mean i got this working

#

here

vague helm
#

I was looking for the path of least resistance. I have it by using "Other". We're good. Thanks!

tall wharf
#

👍

#

that is fine

#

just make sure you have decently unique prefix

hushed field
#

I should update the Kino prefix I'm using in the other set away from 'k_' and to something that isn't a letter in the alphabet

tall wharf
#

you can just use kino?

hushed field
primal robin
#

My "small qol mod" now 4000 lines in total Trolge

glad osprey
red flower
#

@red flower

glad osprey
#

nah they wouldnt know anything about that

red flower
#

that's true

tall wharf
#

omg

modern kindle
#

i dont even think N has read his own mod yet

tall wharf
#

i feel like squidguset is popular here

glad osprey
#

those robot children i hate:

modern kindle
#

those robot children that i ate:

tall wharf
#

these are placeholder art 😭

limber blaze
#

you should keep that as the art its peak

glad osprey
#

make it its own rarity

tall wharf
#

programmer art

glad osprey
#

sketch jokers

tall wharf
glad osprey
#

your welcome

tall wharf
#

i redraw game art

limber blaze
#

i wish i had the capability to use programmer art but i just obsess over making it exactly perfect before the code is even there

tall wharf
#

put it in as joker

shell timber
#

idea for sketch art

#

make the base randomly generated out of like 4 segments

glad osprey
#

i just got a different idea for a joker that you can just customize yourself

#

like

#

draw

#

and set its ability

#

maybe not draw but def the second

tall wharf
#

draw your own joker

glad osprey
#

blank joker

tall wharf
#

you get to draw a joker

hushed field
#

I was playing some Megaman Battle Network a few days back, and having a customizable joker that works like how the perks in that series work would be interesting, though way too much fucking effort

glad osprey
#

nah

#

itd be easy

#

just

#

have the calculate check for context[option]

#

easy

#

easy

shell timber
#

My Awesome Joker

glad osprey
#

so easy

hushed field
#

i mean, gameplay wise it's doable for sure. I've got some jokers that work similar to that system

tall wharf
#

my awesome blinds

hushed field
#

But actually making a joker with customizable elements that you can touch in the art, that's quite the challenge

glad osprey
#

maybe like

#

you get to pick the hat, the face, stuff like that

tall wharf
glad osprey
#

from prepicked options

red flower
wintry solar
glad osprey
hushed field
#

I have intense nostalgia for them. the combat system is a favorite of mine, though I'd always play those games with a guide because the story's fucking whack and the level design's whacker

shell timber
tall wharf
wintry solar
#

Oh it’s in negative antes

glad osprey
#

oooooh

wintry solar
#

How does scaling work in negative?

glad osprey
#

neat

tall wharf
#

it's all 100

#

for base

glad osprey
wintry solar
#

Yeah thought so

tall wharf
#

so this is devious :P

shell timber
#

i think at one point i tried to make it the inverse of the positive ante

primal robin
#

No way it's working, even without localization file..

wintry solar
#

I was gonna say, that blind would basically just be “lose the game” upon encountering it

wintry solar
tall wharf
#

real

primal robin
#

Kinda

tall wharf
#

UI pros at work

red flower
#

I'm a UI con

tall wharf
#

i hate this shit every time i see it

wintry solar
#

Why not use the built in version?

primal robin
#

Which one?

shell timber
#

ever again is devious

wintry solar
#

tooltip or detailed_tooltip

#

I don’t remember which one actually works or what the difference is

#

I think it’s detailed_tooltip

primal robin
#

It requires a center

#

I don't have center

glad osprey
primal robin
#

And also it relies on localization file, which I don't have and not really planning to add

rapid stag
#

can mod config store a table?

tall wharf
#

wdymmmmm

wintry solar
#

I don’t think it relies on anything

#

You just give it some text

shell timber
#

anyways this joker is out now

rapid stag
#

so it won't explode if i try to store information i intend on staying persistent in a table in mod config girldmNoted

shell timber
#

but it's likely to get updated sometime

weak brook
#

code wizards i once again ask for your help!
I've got a cardsauce card that has this concept for an ability but i'm stumped as to how to implement it. the idea isnt too complicated but figuring out how to implement it into the scoring logic is hard since this isnt something that can be done normally. i made this diagram to showcase the idea. any thoughts on how best to do this?

shell timber
#

you'd have to patch evaluate_play

weak brook
#

yeah i know that much but figuring out exactly how is tricky for me since im not used to coding in there

#

like all the contexts and stuff

tall wharf
hushed field
#

I've tried to set up that exact effect for Tenet as a joker, and you'd have to set up evaluate play to basically trigger twice, but flipping the order of the table for the second round. I remember running into a whole lot of bugs with it, but that's also because I wasn't comfortable with SMODS yet, so I'm not sure if that's an actual warning to heed, haha

wintry solar
#

I think you can hook SMODS.get_card_areas to do that actually

hushed field
#

oh yeah, I guess you could just make a card area that has the exact cards that play has in it, but in reverse order 🤔 That'd also solve the trigger order issues

wintry solar
#

Just a dummy table would be fine

tall wharf
#

hmmmm

shell timber
#

oh that'd work probably

hushed field
#

i keep forgetting that card areas in that function don't need to be actual card areas

south lintel
#

how would I check if I am not inside the shop?

glad osprey
shell timber
#

oh the joker text in japanese is neat

tall wharf
#

this one is also in japanese

weak brook
paper zealot
weak brook
#

that way certain jokers dont interact with it again

tall wharf
#

this one also is but you can barely tell

hushed field
tall wharf
#

and also these two

open aspen
#

guys, should adding cards to G.game.banned_keys make stuff like the soul not pick them?

#

normally?

fickle stag
#

is there a way to just force restart the game

shell timber
#

hold m

fickle stag
#

uh

#

the function

#

D:

hushed field
daring fern
open aspen
fickle stag
hushed field
#

Is this for Playsets, rocket?

tall wharf
#

btw i do also try to make the joker text fit the actual card itself

wintry solar
#

I think that would achieve what you want

weak brook
#

ok to start im trying this but i must have done something wrong cause now the game just crashes when trying to load a run

tepid crow
wintry solar
tall wharf
weak brook
#

thought i did

wintry solar
#

And youd need to format your “area” correctly and add it to t

weak brook
#

oh yeah

glad osprey
wintry solar
#

Sorry not type, context

#

I don’t remember if everything is passed the context though

tepid crow
wintry solar
#

It might not be necesssary

glad osprey
#

you could also flip the breaker to your computer

tall wharf
#

for your house

glad osprey
#

stolen joke

tall wharf
#

actually just cut the fucking wire to your house

#

👍

#

or just

#

work as a nuclear scientist and make a small mistake

#

I'm sure they won't mind

weak brook
#
    Local variables:
     _type = string: "jokers"
     _context = nil
     t = table: 0x3e4d62a8  {1:table: 0x3e6a30b8, 2:table: 0x3de148b8, 3:table: 0x3e111f88}
     (*temporary) = C function: next
(1698) Lua field 'find_card' at Steamodded file 'src/utils.lua:346' 
    Local variables:
     key = string: "c_csau_diamond_killer_btd"
     count_debuffed = nil
     results = table: 0x3e4d6280  {}
     (*temporary) = C function: ipairs
tall wharf
#

actually just

weak brook
#

no crash screen but i get this spammed in the log

#

until the game closes

tall wharf
#

become eggman

glad osprey
weak brook
#

not sure what the deal is there

tall wharf
tepid crow
#

there's variants of fuck you can say, and variations you can't

tall wharf
#

true

#

still ..

glad osprey
#

CHICKEN JOCKEY!

glad osprey
tepid crow
weak brook
#

oh

#

yeah that makes sense

#

though it seems like this is hard to filter seeing as most of the times get_card_areas is called it doesnt pass context

tepid crow
#

(a stacktrace with 1000+ entries should've hinted at that)

#

if you swap the order of the if you might not infinite loop?

weak brook
#

ok i'll try that

tepid crow
#

since SMODS.find_card calls SMODS.get_card_areas with _type = "jokers"*

weak brook
#

ok yeah there we go

#

no crashing but now i just need to figure out how to actually get the retriggers going even if they arent technically retriggers

valid trench
#

why is my lovely script just not loading

#

Like I have no idea anymore why it's just not replacing that line

#

I have tested manually replacing that line does work as intended

tepid crow
#

check the dump?

glad osprey
#

is
the pattern correct
the formatting correct
the path correfct

valid trench
#

I think?

#

functions/common_events.lua is the correct file

south lintel
#

so this doesn't work, why? I don't really understand how to work with hooks

valid trench
#

my plain is to replace the numbers with some variables that are saved to the run and just make them 1, 0.95, and 0.7 respectively so effectly it will change nothing but other jokers/vouchers can edit them easier

glad osprey
daring fern
south lintel
glad osprey
weak brook
#

last i checked that did not exist

daring fern
weak brook
#

oh wow it does exist

#

neat

#

i can optomize one of the cardsauce jokers with that

south lintel
red flower
#

SHOP uppercase iirc

valid trench
#

oh I included too many quotes I think

south lintel
hushed field
valid trench
#

nope

#

nvm It just doesn't match with the line even though it's right there

weak brook
#

im kinda confused by these TARGET comments like are these meant to be used as targets for lovely patches? cuz i thought you couldnt lovely patch outside of vanilla balatros files

shell timber
#

you can i thinj

hushed field
weak brook
#

how the hell do you do that

hushed field
#

It's a bit of an awkward formatting. I have it in Kino, but not at my pc right now, so I can't check until later

red flower
weak brook
#

thanks

hushed field
#

N to the rescue

weak brook
#

i'm gonna try using that to add to the get_card_areas but something tells me its not gonna work well either

valid trench
#

it's saying there's no match

red flower
#

you need to match the whole line

south lintel
red flower
#

or use regex

valid trench
#

oh lol

glad osprey
south lintel
#

I did

glad osprey
#

hmmmm

valid trench
#

thanks

placid star
#

can anyone tell why my code isnt working? id hoped for my joker to kill the joker next to it and gain half of its sell value as Xmult but it doesnt kill the joker or gain Xmult

fickle stag
#

is there a reliable way to detect when you game over and automatically restart 😭

red flower
fickle stag
#

i tried G.STATES.GAME_OVER

glad osprey
#

did you G.STATE == G.STATES.GAME_OVER

fickle stag
#

right

daring fern
red flower
#

having so many "at" patches worries me

thin anchor
weak brook
hushed field
red flower
#

im going to end up remaking master duel in lua

glad osprey
#

how do i A make a blueprint joker and B apply a shader to a joker

hard needle
#

Is this too situational or nah

rapid stag
#

let's say i want to add an SMODS.Achievement. how often is check_for_unlock called?
do i have to add more calls cirDerp

glad osprey
#

then like an extra +1 xmult if negative

glad osprey
#

its the same thing used for unlocking decks and jokers and such

hard needle
glad osprey
#

ya

#

excluding other mods

hard needle
#

someone got hacked xD

glad osprey
#

k

hard needle
#

they're even learning how to hyperlink too

glad osprey
#

slowest takedown ive seen yet

hard needle
#

@glad osprey what about I make it X2 Mult and any edition

glad osprey
#

ya

#

and then maybe add +1 xmult for negative if you wanna keep the og idea

rapid stag
# daring fern 42 times.

cirThink do you know off the top of your head if there's a check_for_unlock call either at the end of or directly following add_joker() (in functions/common_events.lua)

rapid stag
#

...wait why am i patching this cirLost i should just hook it

glad osprey
#

yea

weak brook
daring fern
red flower
rapid stag
#

cirLost wait, add_joker() doesn't do what i think it does. what handles creating new jokers in the shop?

red flower
#

create_card_for_shop

glad osprey
red flower
#

lol even

rapid stag
#

girldmSad undocumented smods functionality

hard needle
daring fern
red flower
#

i only know about it because ive seen eremel mention it when he added it, ive never used it

glad osprey
#

@wintry solar stop teaching children and document this

wintry solar
weak brook
#

oh yeah

#

how'd i miss that

#

lets see what that does

#

hmm no still nothing

glad osprey
wintry solar
#

That might be scuffed I don’t remember

#

It was hastily written in my notes to remind me to add it properly to the new docs

weak brook
# weak brook hmm no still nothing

tbh im confused in doing this cause idk if this is actually what im looking for
like im not sure what differences this code will make in game cause im looking for the reverse scoring that i documented in the graphic i made and

#

thats just not happening

#

just normal hands being scored normally

hasty mist
#

bump

glad osprey
#

also pls share the code i am making that exact joker rn lol

hasty mist
hasty mist
glad osprey
#

oh wait yea old bp i should check that

red flower
#

idk if it's discord but this formatting is very cursed

hasty mist
rapid stag
wintry solar
weak brook
thin anchor
#

how would i force a card to have a sticker

rapid stag
daring fern
rapid stag
#

alternatively could do not context.blueprint yeah

red flower
#

== nil is not necessary unless you explicitly want to make it distinct from false

rapid stag
#

fair cirBox

placid star
#

so my game is crashing on 331...

hasty mist
#

hm i'm lost

#

i'm new to coding so this is a bit confusing

hushed field
hushed field
#

you wanna use card

red flower
soft echo
#

sorry if this is a dumb question but how do i check what suit a card is during calculation? (i'm having a hard time understanding the documentation)

thin anchor
#

alternatively
how would i check if a card doesnt have a sticker

rapid stag
red flower
# placid star

knew it, it should be calculate = function(self, card, context)

hasty mist
hasty mist
placid star
rapid stag
soft echo
daring fern
rapid stag
#

and some jokers

#

hm

hushed field
# soft echo would it be `card.base.suit == "hearts"`?

yes! You'll wanna check for smods.has_no_suit and smods.has_any_suit as well, but honestly, depending on the case, you most likely wanna do it by checking the suit against every suit in the game, and seeing if it's true, rather than grabbing the suit from the item

rapid stag
# hasty mist here

wrap everything in your calculate()
in if not context.blueprint then [your code here] end

rapid stag
wintry solar
#

It depends on what they need

hushed field
#

if you just wanna know if it's a Hearts, you can just grab that

#

as is_suit does the checks as part of its function

soft echo
#

i'm just trying to check if a card of hearts is in hand

hushed field
#

but if you wanna, for example, compare the suits of two cards, you'd have to iterate through all possible suits (which might include modded ones)

hushed field
thin anchor
#

is this correct?

red flower
#

if you want infinite money yes

hushed field
thin anchor
#

oh

#

how would i check the rarity of the jokers then?

wintry solar
#

It won’t crash

hasty mist
wintry solar
#

It’ll just do nothing

hushed field
#

Oh yeah, because they do have a center

#

it's not trying to index

red flower
#

doesnt number + nil crash tho

wintry solar
#

I don’t think so

#

But it also might so

#

Either way, it doesn’t work

red flower
hushed field
#

But yeah, you also don't wanna use calculate, there is a specific function for payouts

thin anchor
hushed field
# thin anchor

you also never really wanna use self in a calculate function

daring fern
wintry solar
#

What’s the actual intended effect? Give money based on each jokers rarity in the cash out screen?

thin anchor
#

yes

rapid stag
glad osprey
#

what would this red colour (ff0000) be in terms of shader vecters

#

nvrm got it

hasty mist
rapid stag
# hasty mist yeah, that's what i'm trying to accomplish

in which case, you could, in your joker code where you create the blueprint context for the calculate call, do something like
context.blueprint.fromRight = true
and then in the if statement at the start, make it not context.blueprint or (context.blueprint and context.blueprint.fromRight)

that should allow it to copy itself

glad osprey
#

how would i make a shader that only applies to the red part

#

ive done this but the red keeps showing up from it bleeding into other colours

rapid stag
#

it'll probably be a bit weird, but that might be the effect you're after

glad osprey
#

only issue with that is that the soul does the funny move thingy

rapid stag
#

only in the opposite direction of the normal graphic and slightly out of sync.

tall wharf
hasty mist
rapid stag
thin anchor
rapid stag
#

...oh, right cirDerp it's a number

#

uhhhhhhhhhhhhhhhhh

tepid crow
#

why are you decreasing context.blueprint

rapid stag
#

no, my bad, i gave them bad code

rapid stag
# hasty mist

ok, instead of context.blueprint.fromRight just do context.fromRight
and then after

context.blueprint = nil
context.blueprint_card = nil

do context.fromRight = nil

tepid crow
#

you don't have to make it that complicated

tepid crow
rapid stag
#

they wanna make a version of blueprint that does to the left without crashing on a normal blueprint, but is able to copy instances of itself

tepid crow
#

yeah I saw that part

#

that doesn't answer my question

hasty mist
tepid crow
#

context.blueprint is an internal counter that's supposed to stop infinite loops

#

why are you decreasing it

rapid stag
#

wait

rapid stag
#

oh, so they are

hasty mist
#

wait

#

i think i see

rapid stag
#

yeah, decreasing context.blueprint is why you're crashing

#

increase it

hasty mist
#

rookie mistake, my bad

rapid stag
hasty mist
#

everything seems to be in order now

#

whoops

#

see what went wrong is

thin anchor
#

what is the context for the rarity of your jokers

hasty mist
#

instead of just changing [i + 1] to [i - 1], i changed EVERY + into a -

placid star
#

does anyone know the config.center... for sell value?

daring fern
tepid crow
hasty mist
#

yeah, fixed

#

oops

daring fern
placid star
tepid crow
hasty mist
#

wdym

daring fern
hasty mist
#

i think i tried using it at first

#

but i couldnt figure out how

tepid crow
# hasty mist wdym

it's an SMODS function you can use for blueprint-like jokers like the one you're making

hasty mist
#

so i just referenced old blueprint in cryptid's code

#

i'm very new to coding as a whole, only started learning like a week ago

soft echo
#

so i'm trying to have this card give x2 mult if your played hand has a card of hearts. for some reason it's not working and i don't get why

hushed field
soft echo
#

oohh my bad. this is my first time modding this game. so i'm trying to figure this out

hushed field
#

the way you'd wanna do this is iterate through context.scoring_hand in context.joker_main, and call is_suit("Hearts") on each of them, and just return if it's true. You're not actually doing something each individual card, so there's no reason to be in that context. It's more for when a joker makes specific cards do something, like make 3s give +10 chips, or something

hushed field
soft echo
#

so something like

  if context.scoring_hand and is_suit("hearts") then
    return { stuff }
  end
end
```?
hushed field
#

context.scoring_hand is an array that contains each card that scores! You'll still need to check each card in there. It's also always passed along with context.joker_main, so you don't need to check if it exists!

I'd write it like this:

if context.joker_main then
   for _index, _playing_card in ipairs(context.scoring_hand) do
      if _playing_card:is_suit("Hearts") then
        return {
          xmult = card.ability.extra.xmult
        }
      end
    end
end
#

I don't know if the function sets it to lower, but I think is_suit is capital dependent, so you'd use Hearts instead of hearts

soft echo
#

alright that makes sense. i'll try it

red flower
#

anyone who's good at graphics knows how to make this kind of outer glow with particles or shaders or something
or do i have to learn myself

hushed field
#

I could make that shader for you in unity, N, but I've still not been able to figure out Balatro's shader framework :/

red flower
#

sad

soft echo
#

thank you so much for the help

hushed field
#

I should start setting up the ui nodes for the codex jokers, so I can actually start making those jokers. I keep just going for the easy way out, and making new simple jokers instead of the ones that need my complicated fucking mechanics

valid trench
#

I'm just trying to go through the joker pool and set the Rare and Uncommons to a modded rarity that's the same as the normal one but more common

tall apex
hasty mist
tall apex
hasty mist
#

ohh

#

thank you!

tall apex
#

Mhm!

valid trench
#

how could I take a table's name as a string

#

wait, no I'm just dumb

cinder light
#

hey is there any context that checks after all jokers have been activated

#

context.

valid trench
#

I don't think so

cinder light
#

aww man

daring fern
cinder light
marble flint
valid trench
#

how

#

I don't think take ownership works on rarities does it

daring fern
valid trench
#

well rarity is very weirdly implimented in the game

#

like modded rarites are actual like tables and shit but the vanilla rarities are just a value and any weighting and stuff is done by the functions

marble flint
#

you can lovely patch those functions

#

especially because the rarities will still get used even with no jokers in them (j_joker everywhere)

thick panther
#

How would I make a voucher work like Tarot Merchant/Tycoon where it increases the spawn rate of certain consumables, specifically a modded one? I found this in the source, but does SMODS.Consumable or SMODS.ConsumableType add a var like G.GAME.tarot_rate?

if center_table.name == 'Tarot Merchant' or center_table.name == 'Tarot Tycoon' then
        G.E_MANAGER:add_event(Event({func = function()
            G.GAME.tarot_rate = 4*center_table.extra
            return true end }))
end
valid trench
#

the rarity is only really used for the spawning card calculation

#

but a lot of mods need that to function

#

and smod already edits it to impliment custom rarities

tall wharf
#

😭

valid trench
#

am I stupid?

tall wharf
#

i think you can change the weight or smth idk

valid trench
#

I can directly change the weight via a lovely patch but I want it to be triggered by a voucher

#

and I can do that also with a lovely patch and a if statement but that feels yucky

#

more hard coding in

tall wharf
#

😭

valid trench
#

it's fine, next content patch will change this

#

finally Balatro will be a good game

tall wharf
#

😭😭😭😭😭

hasty mist
#

how would i go about coding a joker that's like credit card, but with an infinite debt limit?

#

if possible of course

modern kindle
#

probably just set the bankrupt to -math.huge or something

thick panther
# hasty mist if possible of course

you would just add this to your SMODS.Joker:

add_to_deck = function(self, card, from_debuff)
        
        G.GAME.bankrupt_at = -math.huge

    end,

If -math.huge doesn't work, just set it to a really big negative number.

hasty mist
#

thank you!

red flower
neat plover
#

no syntax stuff, just the code is doing nothing

karmic arch
#

hi chat!!! Is 30,000 on 8 ante ok for this deck?

daring fern
daring fern
daring fern
neat plover
#

im stupid

#

been a while i ve coded so i forgot how to do the most basic stuff

#

still nothin

tall wharf
#

Formulaic Deck

karmic arch
karmic arch
tall wharf
modern kindle
#

probbaly because its a formula used in it

#

makes sense to me

tall wharf
#

how do i add Tetris to Balatro

modern kindle
#

look it up

unborn bay
#

"tetris love2d" on google

tall wharf
#

I'm not copying code

modern kindle
#

you should prob rewrite ur mod then

#

all code ever has already been written, thusly everything is a copy

tall wharf
glad osprey
tall wharf
glad osprey
#

I mean it'd probably not be totally hard

tall wharf
#

i want it to be decent accurate

glad osprey
#

hardest part i can think of would be getting the game to render it without it fucking shitting itself

unborn bay
#

you could always just use base love2d drawing functions so that you don't have to use ui nodes

glad osprey
#

and that's just cuz I've never messed with rendering before

unborn bay
#

plus making tetris using ui nodes sounds like

#

hell

glad osprey
#

maybe

tall wharf
#

because it probably is

glad osprey
#

idk how the engine works

thick panther
#

How do I get the number of times a modded consumable has been bought at the shop in a profile?

daring fern
thick panther
daring fern
#

It only increases the tarot rate.

thick panther
#

Sorry, I meant the unlock condition for it. It keeps track of number of tarot cards purchased in the shop through c_tarots_bought.

daring fern
#

You could try hooking that.

faint plank
#

wonder how many people will recognize this fella

soft echo
#

so i'm having trouble with another thing. i'm trying to make to where if you play a three of a kind every card scored gets a retrigger

soft echo
#

this is my current code

daring fern
soft echo
#

if it is a three of a kind

glad osprey
#

not context.individual

#

idk if rep has a reference to what hand is being played tho

daring fern
# soft echo if it is a three of a kind

Replace your current code with this: ```lua
if context.scoring_name == 'Three of a Kind' and context.repetition then
return {
repetitions = 1,
card = card,
}
end

glad osprey
#

well how about that

soft echo
#

i thought i tried that!

glad osprey
#

how tf do config pages work

cursive sentinel
#

is money earned calculated on joker after a hand is played?

#

like if you earn 20 from lucky and you have bootstrap, does it take the 20 into account into the same hand's scoring? or only then?

daring fern
cursive sentinel
#

okkk its because i had the wrong game.dollar

#

bootstraps uses (G.GAME.dollars + (G.GAME.dollar_buffer or 0))

#

ok thank you!!

high sinew
#

keeps not working

steady smelt
#

where is the code that prevents multiple of the same tarot from appearing without showman? I want to make two specific tarots not show up when the other is present without showman

daring fern
thick panther
#

How do you make your own tooltips for text styling?

daring fern
thick panther
rose dragon
daring fern
primal robin
#

Speaking of UI. How I can make this description looks better? Unfirtunately adding formatting like for xmult doesn't support spaces

thick panther
daring fern
unborn bay
primal robin
#

Oh well..

scarlet spire
#

I mean, if you're using smods then that means you can use this

high sinew
#

its still giving an error

daring fern
daring fern
high sinew
#

ah

#

the card give +100 but literally says ERROR

#

after it

unborn bay
#

need better specifics here

#

like does the game crash after this

#

or is it just something saying 'ERROR'?

high sinew
#

no game crash

#

idk how to explain better when scoring hand calcs it literally goes "+100 in red, then ERROR in yellow)

#

its impossible to sc to show i dont have that quick of reaction

unborn bay
#

the format should be

return {
    message = "fuck",
    mult = 5,
}

for example

high sinew
#

shit ur right that was an accident

#

was trying to trial and error

unborn bay
#

error usually means that there was a localization error

#

if it cannot find localization info for a specific key then it simply returns ERROR

high sinew
#

ah ok

#

do I need to make somethign for localization for my mod?

unborn bay
#

im not sure why it pops up here since message uses a string directly here and not a result from localize

#

could be related to the odd invalid return table probably???

#

idk

high sinew
#

yea idk thats why its stumping me

thick panther
#

For adding a card from a Modded set using SMODS.create_card, would the set value be modPrefix_cardTypeKey?

high sinew
heavy hare
#

so i have the modded vanilla files, what's the process to publish it as a mod?

unborn bay
high sinew
#

sometimes thats how u get erros to work XD

unborn bay
#

could just be that a_powmult is not a valid localization string

#

in fact pow mults don't exist outside of talisman anyway

high sinew
#

ik

#

im using tailsman tho

daring fern
high sinew
#

i havent made any localization

#

set up for mod rn i might need localization i think thats what the issue is

worldly thicket
#

I'm making a tarot card, and was wondering if it's possible to when used it puts the cards in your hand back in your deck, shuffles, and deals the same amount the player had

high sinew
thin anchor
#

is this correct?

daring fern
thin anchor
#

just put that in for testing

#

i dont know why

#

but thats besides the point

#

is it correct

high sinew
#

@daring fern do i need a SMODS.localization? crashed game but idk if this is how u define

daring fern
rapid stag
#

how can i get the active profile name? cirThink

daring fern
sturdy monolith
#

i got a randomized description working but it has a newline that says nil? how can i fix this?

soft echo
#

does anyone know how to get the modify_rank to work?

tall wharf
thick panther
#

Did you ever manage to get this to work? I've tested this without any other mods and get the issue.

errant karma
hasty mist
#

is it possible to easily create factorial mult?

rose dragon
#

why isn't it getting marked as a collection_card?

[manifest]
version = "1.0.0"
dump_lua = true
priority = 0

[[patches]]
[patches.pattern]
target = "functions/UI_definitions.lua"
pattern = '''
G.your_collection[j]:emplace(card)
'''
position = "after"
payload = "card.collection_card = true"
match_indent = true

# 
[[patches]]
[patches.pattern]
target = "card.lua"
pattern = '''
if self.sticker or ((self.sticker_run and self.sticker_run~='NONE') and G.SETTINGS.run_stake_stickers)  then loc_vars = loc_vars or {}; loc_vars.sticker=(self.sticker or self.sticker_run) end
'''
position = "after"
payload = """
print("called")
if self.collection_card == true then
    main_end = VS.collection_ui()
end
"""
match_indent = true
rose dragon
rapid stag
#

for SMODS.Achievement, when unlock_condition(self, args) is called, what exactly is args? cirThink

#

is it the same args passed into check_for_unlock()?

hasty mist
faint plank
soft echo
rose dragon
# hasty mist something like multiplying mult by n!

you will need talisman for this to work
util function

function UTIL_TABLE.factorial(n)
    local res = to_big(1)
    for i = 2, n do
        res = res * i
    end
    return res
end

calculate function

function calculate(self,card,context)
  if context.end_of_round then
    card.ability.extra.n = card.ability.extra.n + 1
  end
  if context.joker_main then
    return {mult_mod = mult*UTIL_TABLE.factorial(card.ability.extra.n), message = "X"..tostring(card.ability.extra.n).."!", colour = G.C.BLACK}
  end
end

rename my placeholder variables too

tall wharf
#

i don't remember the actual name or the argument

soft echo
#

still getting the error

tall wharf
#

as i mentioned

#

i don't remember

soft echo
#

alright sorry to bother you

tall wharf
tall wharf
rose dragon
#

where in the code do they create the jokers in the collection?

rapid stag
#

how can i make a joker unlock dependant on an achievement being unlocked? cirThink do i just give it the same unlock condition or

tepid crow
#

Thunk gives some jokers the same condition as achievements yeah

surreal marsh
#

why my smods.UndiscoveredSprite doesn't draw in 34*34 size

#

i remember it worked well before

high sinew
#

feel like im super close on this still isnt working tho the +100 mult works but ERROR given on calculation for squaring

hasty mist
#

if that isn't too hard

rose dragon
hasty mist
#

thank you!

#

also, how do i set the joker's initial Xmult it starts at?

rose dragon
#

config = {extra = {}}

ocean niche
#
        if context.starting_shop == true then 
            --below gets a random joker that isnt eternal
            local eligible = {}
            for k, v in pairs(G.jokers.cards) do
                if not v.ability.eternal then
                    eligible[#eligible+1] = v
                end
            end

            --below destroys selected joker
            local randomjoker = pseudorandom_element(eligible, pseudoseed('seed'))
            if randomjoker then
                randomjoker:start_dissolve()
            end
              
            --below gets a random joker that has no edition
            for k, v in pairs(G.jokers.cards) do
                if not v.edition then
                    eligible[#eligible+1] = v
                end
            end

            --below adds eternal and negative to selected joker
            local randomjoker = pseudorandom_element(eligible, pseudoseed('negative'))
            if randomjoker then
                randomjoker:set_edition({negative = true})
                randomjoker:set_eternal(true)
            end
        end```
#

how do I make this not select the joker thats being destroyed

hasty mist
#

this is probably something really dumb but im new to lua and cant for the life of me figure out why this isnt working

hexed stump
#

Does anyone know how stay_flipped works? I saw that smods lets you use it in other contexts but I couldn’t quite figure it out

tall apex
#

-# teteteteteto teteteteteteto
teto kasane teto kasane teto

chrome widget
#

My morshu vouchers are complete :3

hasty mist
tall wharf
#

areas

surreal coral
#

that was intended for a search bar but you've inspired me

#

areas

#

tryna figure out how to move a card to the middle of the screen. very new to this

hasty mist
#

syntax will be the death of me

wooden nexus
# chrome widget

Should have it say "Lamp Oil" when you get the lamp oil voucher

rapid stag
#

how do i determine whether or not the current run is seeded?
and if the SMODS unlocks override is active

wooden nexus
#

Then "Rope, Bombs" for the upgraded voucher

chrome widget
#

The sounds are probably gonna get stripped out actually

hasty mist
rose dragon
# hasty mist this is probably something really dumb but im new to lua and cant for the life o...
SMODS.Joker(
    {
        key = "factorialtest",
        loc_txt = {
            name = "Factorial Test",
            text = {
                "placeholder"
            }
        },
        pos = {x = 0, y = 0},
        cost = 10,
        rarity = 3,
        unlocked = true,
        discovered = true,
        blueprint_compat = true,
        eternal_compat = true,
        perishable_compat = true,
        atlas = "j_placeholder",
        config = {
            extra = {
                n = 3
            }
        },
        calculate = function(self, card, context)
            if context.end_of_round then
                card.ability.extra.n = UTIL_TABLE.factorial(card.ability.extra.n)
            end
            if context.joker_main then
                return {Xmult_mod = card.ability.extra.n, message = "X" .. tostring(card.ability.extra.n)}
            end
        end
    }
)
hasty mist
#

ohh i see

#

pretty big oversight on my part

scarlet thorn
hasty mist
#

ty for the help

rose dragon
hasty mist
#

hm

#

yeah im still getting a crash

#

it should be there

scarlet thorn
hasty mist
rose dragon
#

do you have hte UTIL_TABLE.factorial function and did you set UTIL_TABLE to {} prior to defining it?

scarlet thorn
#

add that before hand

hasty mist
#

alright that works now

#

but im getting another crash when ending a round

rose dragon
hasty mist
rose dragon
sullen fern
#

also it doesn't act like a consumable should, it's always usable when it should only be usable when a card is selected

chrome widget
#

How do you reset sprites while bypassing discovery? Using copy_card seems to copy the card with the collection UI rather than the regular one if it was copied from the shop

glad osprey
#

has anyone experimented with adding extra textures to a shader?

chrome widget
#

I have. I use some passed in textures for a few shaders

glad osprey
#

what did you do

chrome widget
#

Clarify the question? I used passing in a texture to create a water shader, with the overlayed texture wavering

glad osprey
#

how did you pass in the texture

chrome widget
#

You declare an extern/uniform like
extern Image my_texture;

And then you pass it to the shader whenever you go to draw it using
G.SHADERS[shader_key]:send('my_texture', G.ASSET_ATLAS[texture_key])

#

You can also do the latter by assigning the key and texture to an array and then passing it into the draw_shader() function's third argument

glad osprey
#

i am already using draw_shader() so how do i do that

sullen fern
#

what if i try ortalab

#

because the crashlog mentions crypid

chrome widget
#

Declare an array, or using self.ARGS.send_to_shader (which is already declared during the current draw steps), add a table like this as one of its entries

{ key = 'my_texture', value = G.ASSET_ATLAS[texture_key] }

glad osprey
#

final thing does that give the entire image or am i able to get a specific sprite from it

stark geode
#

am i losing it

chrome widget
#

Actually determining what section of the sprite is used is up to the logic in the shader itself. It passes in the entire image, and the shader does what it needs with him

stark geode
sullen fern
#

and um

#

it lets me select every card and give them a modded enhancement

sullen fern
glad osprey
sullen fern
#

i'm gonna try it with unstable installed

red flower
#

i recommend looking up localization keys to find this stuff btw

rapid stag
sullen fern
#

it works with unstable too

glad osprey
sullen fern
#

for now the mod is incompatable with cryptid

sullen fern
#

i want to fix the card selection limit issue and the scuffed animation

#

i want it to be like an enhancment giving tarot card

glad osprey
#

how do i make a joker give birth to a child sprite

sullen fern
tall wharf
glad osprey
#

do you have an answer

tall wharf
#

no but I'm adding Battleworm Insomniac to my mod

glad osprey
#

battleworm

tall wharf
#

worn

#

my bad

#

i should Shri

#

sorry Shri

#

sleep

glad osprey
#

battleworm

tall wharf
#

thank god

#

battle

#

with

#

worms

#

what's that game called again

#

game where you battle with worms

#

battleworn insomniac

glad osprey
wooden nexus
sullen fern
#

unstable

#

that's why

north terrace
#

hello, ive come with a question my googling has failed to answer (so has searching the server). how on earth do i replace the shop sign asset with a smod or love mod? :>

crisp coral
sullen fern
#

how do i make it so my card does the "flipping into a new enhancment" animation to the cards it effects

crisp coral
#

look at the mod_conv and suit_conv consumables

#

in card.lua

weak brook
#

i made this button

#

but the problem is since its stored in the same group as buy and use if i focus on a card that cant be used it doesnt show the new button

#

any other method of working around this is resulting in failure rn does anyone know how to help with this

still jacinth
#

im makin a joker that creates a card with a random enhancement, im wondering do i have to make a list of the enhancements that exist? or can i just use a variable to get all the possible enhancements

red flower
weak brook
#

tried that but it resulted in it not being rendered behind the card and also rendered all the time even when a card is not focused

daring fern
red flower
#

how are you doing it

red flower
rugged star
#

Is there a way to only load a lovely file if a config option is set?

red flower
#

afaik no because smods can't access that part but you can make the patch itself conditional

#

like adding a condition to the patch code i mean

surreal coral
#

anyone know where the code is that pulls a card to the center of the screen when purchased

shell timber
tall wharf
shell timber
#

i gave up on that

rapid stag
#

remind me how i get a joker's name from center cirDerp

tall wharf
rapid stag
#

oh i guess i could just localize([joker key]), right?

#

am i crazy or

daring fern
rapid stag
rapid stag
rapid stag
daring fern
manic rune
#

am i cooking

edgy reef
#

Very much so

tepid rock
#
        return { vars = { card.ability.extra.Xmult } }
    end,
    calculate = function(self, card, context)        
        local face_cards_played = 0
        if context.other_card: is_face() then
            G.E_MANAGER:add_event(Event({
            func = function() 
                face_cards_played = face_cards_played + 1
                card_eval_status_text(card, 'extra', nil, nil, nil, {
                    message = localize{type = 'variable', key = 'a_xmult', vars = {card.ability.x_mult}},
                        colour = G.C.RED,
                    card = card
                }) 
                return true
            end}))
        end
        if context.individual and context.cardarea == G.play then
            return {
                mult = (face_cards_played * card.ability.extra.Xmult) + 1
            }
        end
    end

it is meant to give 0.5 Xmult per face card played but it crashes as soon as i open a blind

sturdy compass
#

Am I cooking with this idea chat

tepid rock
#

Could possibly cut down on the wording but its cool

sturdy compass
sturdy compass
#

You should add on a context.individual onto your check

unborn bay
#

creating a random spectral card may be too much but whatever

tepid rock
sturdy compass
#

in the same if statement

#

if context.individual and context.other_card:is_face() then

tepid rock
#

sweet, thank you

#

this card is gonna be hard to program i can feel it

daring fern
unborn bay
#

this is truly seals on everything

sturdy compass
tepid rock
#

this part is basic

sturdy compass
#

Ah there's more to it lol

tepid rock
#

it'll also reset itself after a while or 1 in 1000 chance to destroy itself

sturdy compass
#

Just take a look at Cavendish code for the 1 in 1000 destroy chance tbh

tepid rock
#

thatll be an easy part (i got most of my chance issues done)

sturdy compass
#

Could also peep Campfire code for reset

tepid rock
#

true, forget about campfire

#
        return { vars = { card.ability.extra.Xmult } }
    end,
    calculate = function(self, card, context)        
        local face_cards_played = 0
        if context.individual and context.other_card:is_face() then
            G.E_MANAGER:add_event(Event({
            func = function() 
                face_cards_played = face_cards_played + 1
                card_eval_status_text(card, 'extra', nil, nil, nil, {
                    message = localize{type = 'variable', key = 'a_xmult', vars = {card.ability.x_mult}},
                        colour = G.C.RED,
                    card = card
                }) 
                return true
            end}))
        end
        if context.individual and context.cardarea == G.play then
            return {
                x_mult = 1+ (face_cards_played * card.ability.extra.Xmult) 
            }
        end
    end
``` back again tho cus it is detecting face cards but wont give the message until after the hand is played nor actually give xmult
sturdy compass
#

you could honestly do without the event wrapper for what you're trying to do here

#

I think that's what's messing it up cuz your face_cards_played won't actually increment until the animations actually play out

tepid rock
#

wdym?

sturdy compass
#

Internally, the game handles all of the math before animations/events are shown to the player

#

so face_cards_played doesn't get incremented during that math phase, but the animation phase instead, therefore no score

#

Also your scoring context should just be context.joker_main

tepid rock
#

so chuck face cards played after the animation?

sturdy compass
#

Hold on

unborn steeple
#

Hi! I'm trying to make a texture pack that replaces the planet cards with versions I've made. I've done texture packs for the deck, stickers, and jokers, and all of them work. My planet cards texture pack isn't working. It loads in, but the textures don't change. This is the contents of the .lua file:

--- MOD_NAME: Adanadhel Planets
--- MOD_ID: AdanadhelPlanets
--- MOD_AUTHOR: [BerryBerryDogberry]
--- MOD_DESCRIPTION: Replaces Planet cards with Selena

----------------------------------------------
------------MOD CODE -------------------------

function SMODS.INIT.AdanadhelPlanets()
    sendDebugMessage("Launching Adanadhel Planets!")

    local selena_planet = SMODS.findModByID("AdanadhelPlanets")
    local sprite_trt = SMODS.Sprite:new("Tarot", selena_planet.path, "Tarots.png", 71, 95, "asset_atli")

    sprite_trt:register()

end

----------------------------------------------
------------MOD CODE END----------------------

Can anyone help me figure out what's wrong?

shell timber
#

ok so that's the 0.9.8 mod format

sturdy compass
# tepid rock so chuck face cards played after the animation?

It should look something like this. Also, face_cards_played is being re-instantiated every calculate call. Store this within the card's extra table instead of locally

loc_vars = function(self, info_queue, card)
        return { vars = { card.ability.extra.Xmult } }
    end,
    calculate = function(self, card, context)        
        local face_cards_played = 0
        if context.individual and context.other_card:is_face() then
           face_cards_played = face_cards_played + 1
           card_eval_status_text(card, 'extra', nil, nil, nil, {
               message = localize{type = 'variable', key = 'a_xmult', vars = {card.ability.x_mult}},
                   colour = G.C.RED,
               card = card
           }) 
        end
        if context.joker_main then
            return {
                x_mult = 1+ (face_cards_played * card.ability.extra.Xmult) 
            }
        end
    end
shell timber
fickle stag
#

how do I access UI elements from this uibox definition in the game src?

unborn steeple
icy oak
#

hi, is there a way to make vscode's autocomplete thing to recognise vars and stuff

#

rn when i hover over them it just says unknown and any

tepid rock
daring fern
sturdy compass
#

Did you see my suggestion about how to handle face_cards_played?

tepid rock
#

(it isnt updating xmult on the card but idk if i have the message done yet

sturdy compass
#

I guess not. face_cards_played is being re-instantiated every calculate call. Store this within the card's extra table instead of locally

icy oak
unborn steeple
tepid rock
# sturdy compass I guess not. `face_cards_played` is being re-instantiated every calculate call. ...
config = {extra = {Xmult = 0.5, face_cards_played = 0}},
    rarity = 3,
    --sprite location
    atlas = 'Jokers',
    pos = {x = 1, y = 0},        
    cost = 10,
    loc_vars = function(self, info_queue, card)
        return { vars = { card.ability.extra.Xmult } }
    end,
    calculate = function(self, card, context)        
        if context.individual and context.other_card:is_face() then
            face_cards_played = face_cards_played + 1
            card_eval_status_text(card, 'extra', nil, nil, nil, {
                message = localize{type = 'variable', key = 'a_xmult', vars = {card.ability.x_mult}},
                    colour = G.C.RED,
                card = card
            }) 
        end
        if context.joker_main then
            return {
                x_mult = 1+ (face_cards_played * card.ability.extra.Xmult) 
            }
        end
    end
}```
like this?
#

or in vars?

sturdy compass
#

almost. gotta add card.ability.extra to all of your face_card_played usages in calculate

tepid rock
#
    loc_vars = function(self, info_queue, card)
        return { vars = { card.ability.extra.Xmult, card.ability.extra.face_cards_played} }
    end,
    calculate = function(self, card, context)        
        if context.individual and context.other_card:is_face() then
            card.ability.extra.face_cards_played = card.ability.extra.face_cards_played + 1
            card_eval_status_text(card, 'extra', nil, nil, nil, {
                message = localize{type = 'variable', key = 'a_xmult', vars = {card.ability.x_mult}},
                    colour = G.C.RED,
                card = card
            }) 
        end
        if context.joker_main then
            return {
                x_mult = 1+ (card.ability.extra.face_cards_played * card.ability.extra.Xmult) 
            }
        end
    end
```??
sturdy compass
#

yep. No need to return it in the vars table

iron haven
#

can I?

chilly jolt
#

The code is in python or lua?

sturdy compass
#

lua

iron haven
#

lua

unborn bay
#

lua

tepid rock
# sturdy compass yep. No need to return it in the vars table
    loc_vars = function(self, info_queue, card)
        return { vars = { card.ability.extra.Xmult} }
    end,
    calculate = function(self, card, context)        
        if context.individual and context.other_card:is_face() then
            card.ability.extra.face_cards_played = card.ability.extra.face_cards_played + 1
            card_eval_status_text(card, 'extra', nil, nil, nil, {
                message = localize{type = 'variable', key = 'a_xmult', vars = {card.ability.x_mult}},
                    colour = G.C.RED,
                card = card
            }) 
        end
        if context.joker_main then
            return {
                x_mult = 1+ (card.ability.extra.face_cards_played * card.ability.extra.Xmult) 
            }
        end
    end
}
sturdy compass
#

Now why is that nil

#

You didn't happen to remove it from your extra table did you

tepid rock
#

config = {extra = {Xmult = 0.5, face_cards_played = 0}}, this one?

#

wait-, i forgot to chance it no?

#

*change

sturdy compass
#

no that's correct

#

the way you have it now

tepid rock
#
SMODS.Joker{
    --identifier
    key = 'cassetteTape',
    --what it says
    loc_txt = {
        name = 'Cassette Tape',
        text = {
            "{X:mult,C:white} X#1# {} Mult",
            "per face card played"
        }
    },
    config = {extra = {Xmult = 0.5, face_cards_played = 0}},
    rarity = 3,
    --sprite location
    atlas = 'Jokers',
    pos = {x = 1, y = 0},        
    cost = 10,
    loc_vars = function(self, info_queue, card)
        return { vars = { card.ability.extra.Xmult} }
    end,
    calculate = function(self, card, context)        
        if context.individual and context.other_card:is_face() then
            card.ability.extra.face_cards_played = card.ability.extra.face_cards_played + 1
            card_eval_status_text(card, 'extra', nil, nil, nil, {
                message = localize{type = 'variable', key = 'a_xmult', vars = {card.ability.x_mult}},
                    colour = G.C.RED,
                card = card
            }) 
        end
        if context.joker_main then
            return {
                x_mult = 1+ (card.ability.extra.face_cards_played * card.ability.extra.Xmult) 
            }
        end
    end
}
``` whole thing in case
sturdy compass
#

which line is line 327 in your code? is it the card.ability.extra.face_cards_played = card.ability.extra.face_cards_played + 1?

tepid rock
#

} after that

#

if context.joker_main then
return {
x_mult = 1+ (card.ability.extra.face_cards_played * card.ability.extra.Xmult)
} <--

#

the arrow is pointing to it

sturdy compass
#

Huh that's a weird one

#

I wonder, did you remember to save? If not, did you start a new run to test the new code?

iron haven
#

hey guys, quick question.

unborn steeple
chilly jolt
#

:3

iron haven
#

What is the code to do 26 jokers?

tepid rock
unborn bay
tepid rock
#

also, it immediately gives 1.5 x mult

#

is there a way to not do that?

sturdy compass
iron haven
#

guys?

chilly jolt
tepid rock
daring fern
sturdy compass
iron haven
sturdy compass
#

Yes it's the same algorithm as your scoring function lol

sturdy compass
iron haven
#

I have to make 26 kokers

sturdy compass
#

No, but it might help diagnose it

shell timber
tepid rock
#

So just play a round and see what happens?

unborn bay
#

i don't get what you mean by "make 26 jokers" because i don't have any other advice than make 26 jokers

sturdy compass
unborn bay
#

this feels like a don't ask to ask situation

scarlet spire
#

yeah there's not gonna be a "make 26 jokers" button, you gotta code those yourself

iron haven
#

So i have to copy and paste the make joker code 25 more times?

#

from the video

unborn steeple
#

I think if you want to mod 26 custom jokers into the game, the first step would be to learn how to mod 1 joker into the game, then do that 25 more times

unborn steeple
iron haven
#

that video

sturdy compass
#

I have never been more confused in this chat

daring fern
tepid rock
manic rune
sturdy compass
scarlet spire
tepid rock
unborn steeple
#

I just came in here to ask for help with getting my planets texture pack working and now I'm just more confused than I was before

manic rune
#

u should use Malverk for that one

sturdy compass
unborn steeple
# manic rune u should use Malverk for that one

can I not do it without using Malverk? I'm just confused because all three of the other texture packs I've made using the exact same format are working completely perfectly, it's literally JUST the tarot/planets one that isn't working, and I can't figure out what the difference is

tepid rock
# sturdy compass ykw try tacking on a `and not context.repetition` in your if statement. I wonder...
    loc_vars = function(self, info_queue, card)
        return { vars = { 1 + (card.ability.extra.face_cards_played * card.ability.extra.Xmult)} }
    end,
    calculate = function(self, card, context)        
        if context.individual and context.other_card:is_face() and not context.repetition then
            card.ability.extra.face_cards_played = card.ability.extra.face_cards_played + 1
            card_eval_status_text(card, 'extra', nil, nil, nil, {
                message = localize{type = 'variable', key = 'a_xmult', vars = {card.ability.x_mult}},
                    colour = G.C.RED,
                card = card
            }) 
        end
        if context.joker_main then
            return {
                x_mult = 1+ (card.ability.extra.face_cards_played * card.ability.extra.Xmult) 
            }
        end
    end
``` one face
sturdy compass
#

huh.

tepid rock
#

i think i see the problem

daring fern
scarlet spire
#

key can be anything, it's just the identifier for that joker, but yes it's best practice to make it the name of your joker all lowercase without spaces

iron haven
scarlet spire
#

so, if I have a joker named Red Joker, the key would probably be 'redjoker' or 'red_joker'

tepid rock
#

did not see the problem

    calculate = function(self, card, context)        
        if context.individual and context.other_card:is_face() and not context.repetition then
            card.ability.extra.face_cards_played = card.ability.extra.face_cards_played + 1
            card_eval_status_text(card, 'extra', nil, nil, nil, {
                message = localize{type = 'variable', key = 'a_xmult', vars = {card.ability.x_mult}},
                    colour = G.C.RED,
                card = card
            }) 
        end
        if context.joker_main then
            return {
                x_mult = 1+ (card.ability.extra.face_cards_played * 0.5) 
            }
        end
    end
scarlet spire
#

oh wait

daring fern
iron haven
#

oh

#

why is this kinda weird....

chilly jolt
#

I'm starting to code games in assembly language

sturdy compass
#

My guess is it's getting the cards held in hand too

frosty dock
sturdy compass
#

aure jumpscare

iron haven
chilly jolt
#

I was thinking to mod some math abilities and add insane functions like Ackerman's function lmao

tepid rock
sturdy compass
#

Huge

iron haven
#

does this work so far?

scarlet spire
#

thats about it for the atlas, yes

daring fern
iron haven
#

isn't it suppose to be in both?

scarlet spire
#

yes

#

though it might be a bit information dense

unborn steeple
# shell timber ok so that's the 0.9.8 mod format

re: this, I guess, like, can someone help me out with finding a more updated texture pack format, or something, without needing Malverk? I have all these planet cards I'm really proud of and literally only this specific texture pack is having a problem, all three of the other packs I've made are functioning without a hitch

iron haven
#

so this is where I put the key of my joker.

scarlet spire
#

yes

daring fern
scarlet spire
#

oh wait yeah you're missing an s

#

I'm tired

tepid rock
#

how do i do two sets of odds for one joker? like, in loc_vars section

unborn steeple
#

I'm sorry if I'm being annoying, I swear to God I don't want to be a pain, I'm just getting frustrated because I don't know how to troubleshoot this

iron haven
#

ok. now I have to add the text.

daring fern
daring fern
wintry solar
iron haven
daring fern
daring fern
iron haven
#

I'm onto that part.