#💻・modding-dev

1 messages · Page 207 of 1

gaunt thistle
#

idk what I'm looking at

#

which john

strong jacinth
#

The one that can help me

crisp coral
#

.

gaunt thistle
#

I can give you life advice

tall wharf
#

this looks even more ass

zealous glen
#

Can you give me LSP advice

turbid maple
#

the john balatro himself

gaunt thistle
#

hmmph

zealous glen
#

what do you think LSP is

crisp coral
#

can you give me advice on how to pay taxes

zealous glen
#

well in this country it’s mostly automatic

gaunt thistle
tall wharf
zealous glen
tall wharf
#

_ _

gaunt thistle
zealous glen
manic rune
#

🪟 🍎

tall wharf
gaunt thistle
#

log

manic rune
#

are lovely logs supposed to look like that

tall wharf
#

i don't think so

tepid crow
#

no lmao

tall wharf
#

ill get log from the file

gaunt thistle
#

that buffer is getting patched

#

could be a ducky pattern

#

check dump to make sure

tall wharf
crisp coral
#

christ why did discord display the wyhole file

vital warren
#

Okay, might just give up, this guide is not super for someone who has no idea what they are doing

#

Ill just uplaod my JPeg and tell people to replace it in thier game files lmao

strong jacinth
#

no

crisp coral
#

hand not hands

strong jacinth
tall wharf
strong jacinth
#

Where do you see hands

tall wharf
strong jacinth
crisp coral
#

🗿

tall wharf
#

🗿

zealous glen
#

🗿

tall wharf
#

are you sure you're fit for coding

manic rune
crisp coral
#

that is a hand

#

mf

strong jacinth
#

Thats a hand

manic rune
#

oh, my bad

strong jacinth
#

no

manic rune
#

🖐️ 🖐️

zealous glen
#

Where did you get two right hands

manic rune
#

dont question.

crisp coral
#

from jimbo

manic rune
#

or i will be adding a third one.

strong jacinth
tall wharf
crisp coral
#

add above_hand i guess

lament rapids
strong jacinth
gaunt thistle
#

professional help

#

idk your problem but put your two logs into the lovely channel

tall wharf
#

ok

#

on it

gaunt thistle
#

I cannot repro because I'm not a fancy Mac users but maybe I can discern something from the 🦫

strong jacinth
rough basin
#

yall how do i check how many cards have been played?

#

i want to make a joker that triggers only when 5 cards are played

#

not necessarily scored just played

#

oops nvm just found it

#

context.fullhand

strong jacinth
#

#G.play.cards returns a int

wise jungle
#

i'm trying to find that one github link that has the definitions for each SMODS function for autocomplete but i can't find it, can someone help me and give me that link

rough basin
zealous glen
wise jungle
#

well if you'd be kind to me, can you tell me how on vs code or show me a tutorial to it?

zealous glen
#

I'm trying to find out too lol

#

I don't think I did it right

strong jacinth
# rough basin thanks!

So like

SMODS.Joker {
  ...
  calculate = function(self, card, context)
    if #G.play.cards == 5 then
      -- Your code
    end
   end
}
rough basin
#

thank you so much!

zealous glen
wise jungle
#

YEAH THAT

#

thank you 🙏

frosty dock
strong jacinth
#

Yo

#

John

strong jacinth
frosty dock
strong jacinth
frosty dock
#

you should look at the base Xoak hands for reference

frosty dock
#

(you can just return get_X_same(6, hand, true))

strong jacinth
tepid crow
frosty dock
#

can i not play another unscored card with it?

strong jacinth
#

My other method wouldnt work

strong jacinth
frosty dock
#

so why would it be different for a 6oak?

frosty dock
strong jacinth
tepid crow
red flower
#

I feel like that would be a bit nauseating

strong jacinth
crisp coral
#

can you make the tag icons flash too please

#

preferably at 60fps

tepid crow
frosty dock
manic rune
red flower
red flower
frosty dock
crisp coral
#

crash screen should have solitaire cards bouncing around

red flower
#

YES

crisp coral
#

with hall of mirrors

tall wharf
frosty dock
tall wharf
#

surprisingly still readable

red flower
#

looks christmas theme

frosty dock
#

yeah the reds are fully out of phase with each other

tall wharf
#

add siren

light gazelle
#

I know this is really basic, but how do I go about spawning in a joker with debugplus?

strong jacinth
frosty dock
light gazelle
#

thanks

manic rune
#

merry christmas everyone

manic rune
#

bro really brought up the on-touch keyboard 😭

crisp coral
#

THE FUCKING ONSCREEN KEYBOARD

#

😭

frosty dock
strong jacinth
#

Thankies

tall wharf
#

does get straight support arbitrary number of cards in a row

frosty dock
tall wharf
#

and multiple sets

frosty dock
#

shaders?

tall wharf
#

you mentioned something about quantum enhancements

tall wharf
#

and it returns multiple sets of straights

#

?

frosty dock
#

if they're on separate ranks, yes

crisp coral
tall wharf
#

if they are on the same rank i guess god help me

frosty dock
#

i don't feel like just animating the sprite

strong jacinth
#

Is there an easy way to create a straight? Kinda like the get_X_same() function of ... of a kind?

frosty dock
#

get_straight

strong jacinth
#

So get_straight(6)?

frosty dock
#

get_straight(hand, min_length, skip, wrap)

strong jacinth
#

Whats skip and wrap?

frosty dock
#

skip is shortcut

#

wrap is.. well, wraparound straights

#

both are bools and can be omitted

manic rune
#

rq, what do i return here to get money again

tall wharf
frosty dock
manic rune
#

doll_hairs, got it

strong jacinth
#

Do i need the steammodded header in ever file in my mod?

manic rune
#

no

frosty dock
strong jacinth
#

What about the mod prefix?

red flower
wise jungle
#

okay need someone to explain to me how can i exactly access context.post_trigger's other_ret
so far this is how i'm trying to access it but i do think that i'm doing it completely wrong, as the only other reference i can find is being inside eval_card function

strong jacinth
#

Like i have main.lua and pokerHands. Pokerhands.lua isn't included and "Run"

red flower
tacit hazel
#

you can load it yourself from the main file with something like

assert(SMODS.load_file("path/to/file.lua"))()
#

yeah that

red flower
#

lua is case sensitive

strong jacinth
#

I forgot

quartz ravine
#

Hi guys, for some reason this card is apply xMult to each card when it is scored.

It's actually supposed to look at the hand when the hand is played, then when the joker itself is scored, apply the xMult if it matches the condition

Do you see what I am doing wrong here?

if context.cardarea == G.jokers and context.full_hand and not context.before then
--blah
end
red flower
#

yes, you need to restrict it to a context

#

you want to check if context.joker_main is true in your case

frosty dock
#

you're just checking what context you're not in (context.before), not which one you actually are in

quartz ravine
#

ahh, thanks folks 🙂

frosty dock
strong jacinth
#

Uhh, why is that a super straight

frosty dock
#

what is your smods version

strong jacinth
frosty dock
#

yeah there's your issue

quartz ravine
frosty dock
#

the new get_straight wasn't merged until <2 days ago

strong jacinth
quartz ravine
#

I can test this if no one knows offhan, but I was wondering if it is normal for a blueprint to trigger an upgrade for a joker?

For instance when runner is played with a blueprint, would the runner card upgrade two times, or would instead the blueprint just play the earned upgrade on the runner?

strong jacinth
#

I get this error

#

(I git pulled)

frosty dock
#

(i take accessibility quite seriously, i literally made a screenreader mod)

frosty dock
strong jacinth
#

yes

wintry solar
#

Thunk uses Color?

strong jacinth
#

Revert it so i can git pull xD

frosty dock
frosty dock
strong jacinth
#

bruh

frosty dock
#

i can't repro the crash on my end

#

when does it happen

strong jacinth
#

When i press play

red flower
red flower
strong jacinth
#

I have started probably cuz of the smods version popup thing

red flower
#

I'll try deleting the saved run

frosty dock
#

nope i can't repro at all

red flower
frosty dock
#

and yes i have an outdated run

long sun
#

hihi! Teardrop has a bug where playing a Gold Seal will cause the money part of her ability to give $9, instead of $6

#

code:

if context.joker_main then
      local outcome = {}
      
      if pseudorandom('teardrop') < G.GAME.probabilities.normal / card.ability.extra.odds then
        outcome.chips = card.ability.extra.given_chips
      end

      if pseudorandom('teardrop') < G.GAME.probabilities.normal / card.ability.extra.odds then
        outcome.mult = card.ability.extra.given_mult
      end
      
      if pseudorandom('teardrop') < G.GAME.probabilities.normal / card.ability.extra.odds then
        outcome.x_mult = card.ability.extra.given_xmult
      end
      
      if pseudorandom('teardrop') < G.GAME.probabilities.normal / card.ability.extra.odds then
        ease_dollars(card.ability.extra.given_money)
        G.GAME.dollar_buffer = (G.GAME.dollar_buffer or 0) + card.ability.extra.given_money
        outcome.dollars = G.GAME.dollar_buffer
        G.E_MANAGER:add_event(Event({func = (function() G.GAME.dollar_buffer = 0; return true end)}))
      end

      return outcome
    end```
#

i can't see why, though. ideas?

strong jacinth
frosty dock
manic rune
frosty dock
strong jacinth
night pagoda
#

Is there an uniform way I can check if a card isn't real? (for ex. preview in the view deck menu/poker hand menu preview)

long sun
#

will try that, thanks :D

strong jacinth
frosty dock
#

it's the version right before this commit

red flower
#

I had 301f too

frosty dock
#

I accounted for older version not having th version info yet and that shouldn't mess with any colors

red flower
frosty dock
#

tbh I don't see where this is coming from at all

red flower
#

do you want the log or the save?

frosty dock
#

yes

red flower
long sun
#

didn't work :(

tacit hazel
long sun
#

oh no wait two seconds, i see what i did wrong

night pagoda
long sun
#

bingo :D

#

thanks!

strong jacinth
night pagoda
tacit hazel
#

ahhh, huh

quartz ravine
frosty dock
strong jacinth
#

Bruh

red flower
#

just delete the save

quartz ravine
#

Also if you’re a part of steammodded I opened an issue about the links in the wiki, I think their order is swapped which causes a startup problem

frosty dock
zealous glen
#

What do you think would be a safe way to destroy Consumeables during scoring calculation

wintry solar
#

You should be able to destroy consumables by just calling start dissolve on them just fine

#

Same with jokers

zealous glen
#

Like Observatory

#

Or Baseball Card applying effects on other Jokers

#

or even a Joker applying an effect on itself, but in an Event

wintry solar
#

Have you tried?

red flower
#

If anything else is trying to access a card without checking nil in an event then it's on them imo

zealous glen
#

In case you repeat it somehow

#

Or even just have two copies thanks to Invisible

#

So part of the questioning is how I should write it

#

If SMODS already handles their part somehow, that's good

#

this is what I have at the moment

wintry solar
#

“How do I do this?” “Try it like this” “I don’t think that’ll work” okay

zealous glen
#

destroy_cards calls start_dissolve

#

and by your account, I don't need to worry about SMODS

manic rune
#

good morning everyone

zealous glen
#

now I'm wondering if my own code makes sense

#

the candidate.debuff = true part seems unnecessary based on what you said

#

But I'm trying to understand how

little rivet
#

hello chat

#

how does one make a mod????

wintry solar
#

Are you like, allergic to getting crashes or something? Why must your code be perfect every time? Just try stuff and if it doesn’t work it doesn’t work

red flower
manic rune
#

i suggest reading this, and the one above

zealous glen
#

I don't understand what's the issue with me trying to figure out how to make it work without needing to see it crash first

manic rune
#

mods in here should give you the general idea of how to get stuff work

#

outdated tutorial, but still good in telling you what to do

little rivet
#

alright

zealous glen
novel drum
#

is there any way to tell in a can_use function whether you're in a round? like round vs shop vs blind selection etc

manic rune
#

i think you can use context for that

normal crest
#

can_use doesn't have a context

manic rune
#

oh

#

fuck, didnt know that

#

hm

novel drum
#

yeah

normal crest
#

you can check the state with G.STATE == G.STATES.BLIND_SELECT Or smt

novel drum
#

hold on let me try that

normal crest
#

all the states are in globals.lua probably

red flower
#

G.GAME.blind.in_blind tells you if you're in a blind

normal crest
manic rune
#

why is splash a state

red flower
#

DO NOT CHANGE

wintry solar
#

Splash screen

manic rune
#

DO NOT CHANGE 🗣️

novel drum
#

DO NOT CHANGE

zealous glen
little rivet
#

is there a template joker sprite i could use?

zealous glen
#

By the way, does anyone know if NFS.load(SMODS.current_mod.path .. "etc")() works in Lovely patches?

#

I feel like SMODS.current_mod would be wrong by the time the patched code runs

red flower
normal crest
#

you can also pass the mod id to SMODS.load_file iirc

zealous glen
#

I guess it would also not work if you created Consumeables mid-round

#

Hold on. If I return func = … I might be able to make everything happen instantaneously, except I might need to manipulate the score directly

zealous glen
#

What's the SMODS function to evaluate effects nowadays?

worthy stirrup
#

Just to be sure, this will make it so it says X2 blind size?

SMODS.Joker {
  key = 'Malformed',
  loc_txt = {
    name = 'Malformed',
    text = {
      "A being of suffering. It shares it's pain with you.",
      "{C:red}X#1#{} Blind size, "
    }
  },
  config = { extra = { worth = 2 } },
zealous glen
#

No

#

You need loc_vars

green mica
#

Hiii, does anyone know if you can use blindexpander to summon a random blind rather than a specific one somehow? I'm trying to modify the small blind so that it changes to a random blind from a pool once you start it (which I also have to figure out how to instantly win the blind to summon the next one but that's a separate issue)

worthy stirrup
#

ohh right

zealous glen
manic rune
#

.

#

oh wait nvm

#

its random blind

worthy stirrup
#

I think this should be it

SMODS.Joker {
  key = 'Malformed',
  loc_txt = {
    name = 'Malformed',
    text = {
      "A being of suffering. It shares it's pain with you.",
      "{C:red}X#1#{} Blind size, "
    }
  },
  config = { BlindSize = { Size = 2} },
  loc_vars = function(self, info_queue, card)
    return { vars = { card.ablity.BlindSize.Size } }
  end,
manic rune
#

:D i actually thought you meant spawning the blind for testing

#

i will see myself out

green mica
#

That's okay haha

worthy stirrup
#

is it the BlindSize

red flower
#

yes, use extra

worthy stirrup
#

should it be called Extra

zealous glen
#

BlindSize should be named extra so it's properly saved

worthy stirrup
#

okay

zealous glen
#

extra not Extra

green mica
worthy stirrup
#
  config = { extra = { BlindSize = 2 } },
  loc_vars = function(self, info_queue, card)
    return { vars = { card.ability.extra.BlindSize } }
  end,
green mica
#

I spent last night figuring out how to make stuff like jokers and blinds, but I don't really know how to just make functions that do stuff yet so

worthy stirrup
#

wait, can you change how much Ante's scaling amount mid game? with a joker too maybe

frosty dock
#

how so, do you want to just multiply the base blind size like plasma deck?

worthy stirrup
#

like how green stake makes the score amount higher per blind

frosty dock
#

you can change G.GAME.modifiers.scaling

worthy stirrup
#

thank you

#

is the plural version of ante Antes or anties, neither of them look right to me lol.

frosty dock
#

what for

#

but it is definetly not anties

worthy stirrup
#

Antes scale {}{X:mult,C:white}X#1#{} {C:dark_edition}faster

red flower
#

You can write it as "Each Ante scales" if you don't like it

worthy stirrup
#

thank you

frosty dock
#

It's more of a "Required score scales faster for each Ante"

#

if it's just a multiplier like plasma deck, that's X blind size

worthy stirrup
#

oh

little rivet
#

how do i add a joker that removes stone cards?

worthy stirrup
#

when running, is this needed every ante or just once?

#

G.GAME.modifiers.scaling

#

and also, i know in cryptid, the cube is always Eternal, how can i also do that

frosty dock
worthy stirrup
#

found it

#
if card.ability.name == "cry-Cube" then
        card:set_eternal(true)
    end
frosty dock
#

idr off the top of my head what it's called though

worthy stirrup
#

i know im asking a lot of questions but how are ablities defined and how are they diffrent from making the loc_vars

quartz ravine
#

Does anyone have an example of doing a 'Credits' tag in loc_vars? I have seen it done before but I forget where. I was trying to place it here

calm dock
#

I tried adding a custom consumable within the info_queue of a Joker.
It seems to recognize the Name of the consumable but the Text is empty.

General not possible or does it need some extra steps?

faint yacht
#

That's a popup via info_queue[#info_queue + 1] = ... bit.

frosty dock
worthy stirrup
#

I’ll check it out

#

Thanks

frosty dock
#

loc_vars then uses those ability values to pass variables to the description

little rivet
frosty dock
zealous glen
#

Can anyone else that understands Event timing help me here? I think the only missing piece is timing SMODS.calculate_effect

worthy stirrup
#

where would i put Card:set_ability, and i hate to ask, is there a wiki page for Card

little rivet
frosty dock
#

we can't document the entire base game haha

worthy stirrup
#

fair, i thought it was an Smods thing tbh

#

and tbh i forgot i can just look at the games code

frosty dock
little rivet
#

ohhhhHHHH

#

its not showing???

quartz ravine
#

Wow this is weird! I am calling 'card_eval_text' forone of my jokers and the animation plays under the score?

This is how I'm calling it

card_eval_status_text(context.blueprint_card or self, 'extra', nil, nil, nil, {message = localize('k_upgrade_ex')})

worthy stirrup
little rivet
#

the sprite isnt showing

( if you need the sprite itself here it is

worthy stirrup
#

im looking to make the abilty as i saw that cryptid needs the ablity name to set the card etenral

frosty dock
frosty dock
#

using names is discouraged

worthy stirrup
#

eternal, not negative, mb

quartz ravine
#

Why am I doing it this way? well...I am often asking myself that question 😄

#

Ermel, would you recommend I instead just do return{message="Upgrade} or something along those lines

wintry solar
#

Yes

frosty dock
#

you should use keys, like card.config.center.key == 'j_modprefix_key'

worthy stirrup
#

i always find my self somehow always doing the defunked way of doing it lol

wintry solar
#

Well, localize(“k_upgrade_ex”) is the localised upgrade message iirc

little rivet
#

WAIT OH MY GOD I THINK I KNOW WHY MY JOKER ISNT SHOWING

#

do you need the .png in the path?

frosty dock
#

yes

little rivet
#

oh

#

huh

tall wharf
#

OH MY GOD REAL KASANE TETO

#

OH MY GOD OH MY GOD

worthy stirrup
#

is the wiki for SMODs, i see set_ability, but when i put it into VSC with it hooked up with smod, it just doesnt see it as a thing

tall wharf
little rivet
little rivet
worthy stirrup
#

oh, its self.set_ability

little rivet
#

thank youuu

rugged star
#

Is there a list of currently owned vouchers that I can iterate through, or a list of every voucher?

little rivet
#

i tried to make the atlas all lower case and it gave me this when i went to the joker

quartz ravine
# wintry solar Well, `localize(“k_upgrade_ex”)` is the localised upgrade message iirc

Thanks for the advize, Eremel (fellow fox fan!)

I tried this code and am not getting a message sadly

 if is_palindrome then
      card.ability.needToReview = false
      if not context.blueprint_card then
          -- card_eval_status_text(context.blueprint_card or self, 'extra', nil, nil, nil, {message = localize('k_upgrade_ex')})
          card.ability.extra = card.ability.extra + card.ability.extraGrowthRate
          sendInfoMessage("Palindrome detected and original, upgrading! Earned extra now: " .. card.ability.extra, "TacoCatPalindromeJoker")
          return {
              message = localize('k_upgrade_ex'),
              card = card,
              colour = G.C.CHIPS
                        }


I do see the log message but don't see an Upgrade prompt appearing

little rivet
#

it works noww!!!

wintry solar
#

Are you using a jank ass smods build

worthy stirrup
#

Im getting a crash when i try to make it eternal, im not sure how to fix it


SMODS.Joker {
  key = 'Malformed',
  loc_txt = {
    name = '{C:dark_edition}Malformed{}',
    text = {
      "{C:dark_edition}A being of suffering. It shares its pain with you.{}",
      "{X:mult,C:white}X#1#{} {C:dark_edition}Blind Size{}",
      "{C:dark_edition}gains {}{X:mult,C:white}X#2#{}{C:dark_edition} mult per Boss Blind beaten{}",
      "{C:inactive}(Currently {X:mult,C:white}X#3#{C:inactive} Mult)"
    }
  },
  config = { extra = { BlindSize = 2, ScalingAmount = .5, AntesBeaten = 1} },
  loc_vars = function(self, info_queue, card)
    return { vars = { card.ability.extra.BlindSize, card.ability.extra.ScalingAmount, card.ability.extra.AntesBeaten } }
  end,
  rarity = 3,
  atlas = 'JokerSheet',
  pos = { x = 0, y = 1 },
  cost = 5,
  calculate = function(self, card, context)
  card.set_eternal(true)
  end
}
#

crash log ^

rugged star
little rivet
#

alright so it let me buy the joker, but when i went into a blind it crashed and gave me this

zealous glen
zealous glen
#

Something like that

#

If you just care about the data

rugged star
zealous glen
worthy stirrup
#

my game no longer crashes but it isnt set to eternal

nocturne garnet
# worthy stirrup

card.ability.extra.AlwaysEternal instead of card.ability.AlwaysEternal?

rugged star
zealous glen
rugged star
#

I do, i just need to call the function during that period

zealous glen
worthy stirrup
#

but now i want to see if im able to make it eternal in the collection

zealous glen
#

Whenever the card is created anywhere

worthy stirrup
#

how do i check if its created anywhere

zealous glen
#

You don’t need to check

worthy stirrup
#

so just remove if card.ability.extra.AlwaysEternal then

zealous glen
# rugged star Yeah

I’d look at how SMODS calculates Vouchers then see how to extend the end of round calculation to them

zealous glen
#

You have to use set_ability

#

Check the wiki

quartz ravine
worthy stirrup
#

like this?

  set_ablity = function(self, card)
    card:set_eternal(true)
  end
zealous glen
#

Probably yes

worthy stirrup
#

it doesnt work but it also doesnt crash

zealous glen
#

Check the wiki to see what’s the utility function for applying Stickers

tall wharf
#

am i supposed to use card instead

#

ah im stupid

#

vars = {}

worthy stirrup
#

yea, i honestly cant find anything

#

i could only find this in cryptid

        card:set_eternal(true)
    end```
little rivet
#

how do i make the text have colors?

#

trying to make orange

zealous glen
worthy stirrup
#

fixed it.. i mispelt ability

broken cliff
zealous glen
#

Attention

broken cliff
#

but what i am sure about is that the text in the area will be colored

wintry solar
shadow rapids
#

how do i get the current played hand and type

frosty dock
#

oh phuck i see what happened to the warning

#

i forgot that git commit -a doesn't stage new files

red flower
#

rip

little rivet
#

how do i check for how many stone cards in deck

wintry solar
unkempt thicket
frosty dock
wintry solar
#

I thought you could get a “latest release” link, isn’t that what the mod manager uses?

worthy stirrup
#

is this ran when ever a boss blind is beaten, i see that Campfire does it and i know campfire resets every ante

    if G.GAME.blind.boss then
      BossesBeaten = BossesBeaten + 1
    end
wintry solar
#

Where are you putting this code

worthy stirrup
#
  calculate = function(self, card, context)
    if context.joker_main then
      return{ 
        xmult = (BossesBeaten * card.ability.extra.ScalingAmount
      }
end
    if G.GAME.blind.boss then
      BossesBeaten = BossesBeaten + 1
    end
    end
  end,
#

im working on xmult rn so ignore that

wintry solar
#

That would increment your counter many times

#

You want it in end of round

worthy stirrup
#

end of a boss blind

#

so every new ante

shadow rapids
#

sorry for asking again, but is it possible to get the current specific hand type (as in not pair if 3oak was scored), and the current played had?

worthy stirrup
#

okay, ive gotten this"

  loc_vars = function(self, info_queue, card)
    return { vars = { card.ability.extra.BlindSize, card.ability.extra.ScalingAmount, card.ability.extra.BossesBeaten, card.ability.extra.AlwaysEternal } }
  end,
  rarity = 3,
  atlas = 'JokerSheet',
  pos = { x = 0, y = 1 },
  cost = 5,
  calculate = function(self, card, context)
    if context.joker_main then
      return{ 
        xmult = (card.ability.extra.BossesBeaten * card.ability.extra.ScalingAmount) 
      }
    end
    if G.GAME.blind.boss then
      card.ability.extra.BossesBeaten = card.ability.extra.BossesBeaten + 1
    end
#

im getting a crash log

#

im not sure how to make it so it applies an extra .5 xmult every ante

paper zealot
wintry solar
#

Oh for a download link

paper zealot
#

Or attach a .zip named "latest" or "smods" and use /releases/latest/download/asset-name.zip

brazen kite
#

^ probably the best solution

paper zealot
#

But not with source alone

#

You could build a custom GH Action to package the repo, strip out the .git files, zip and attach it to a release automatically

frosty dock
wintry solar
#

Oh goody more Saturn crash reports

shadow rapids
#

I am so sorry for being incessant, but I'm not sure how to get the entire played hand and which exact hand has been scored in the joker context

wintry solar
#

context.full_hand is the entire set of played cards, context.scoring_name is the played hand type

shadow rapids
#

ah, thanks!

#

would I do context.scoring_name == "High Card" to check if the hand is a HC?

frosty dock
#

yes

shadow rapids
#

ok thanks

#

how do you add an enhancement to a card

#

do i just copy from midas mask

quartz ravine
wintry solar
#

do card:set_ability('key of enhancement')

shadow rapids
#

is there any way to update the rank of a card?

#

strength tarot.

#

strength tarot looks really poorly implemented

#

there has to be a better way

frosty dock
#

steamodded changes its on-use code

shadow rapids
#

Yeah I realised once you @ed me

#

I was browsing og not patched

quartz ravine
#

I guys, I have an event that turns my jokers card.ability.ready value from false to true

When ready is true, I would like the card to jiggle so the player knows whats going to happen

Does anyone have a good idea of how to use the juice_until function?

red flower
#

the second argument to juice_card_until has to be a function that returns true as long as you want the card to animate

#

kinda counterintuitive with the name

paper zealot
tepid crow
#

yeah the function should probably be named juice_card_while

worthy stirrup
quartz ravine
#

Something like this?

@paper zealot

paper zealot
shadow rapids
#

no it is not

paper zealot
#

But i don't have the game code handy to double check

paper zealot
frosty dock
shadow rapids
#

oh i was looking at the lovely dump that time

feral belfry
#

It's literally John smods

shadow rapids
#

ah ok so its SMODS.change_base

paper zealot
#
function juice_card_until(card, eval_func, first, delay)
    G.E_MANAGER:add_event(Event({
        trigger = 'after',delay = delay or 0.1, blocking = false, blockable = false, timer = 'REAL',
        func = (function() if eval_func(card) then if not first or first then card:juice_up(0.1, 0.1) end;juice_card_until(card, eval_func, nil, 0.8) end return true end)
    }))
end
#

For reference

worthy stirrup
#

how could I make this apply an extra .5 xmult every new ante?

paper zealot
frosty dock
#

pretty sure that would be card

paper zealot
shadow rapids
#

somehow i managed to get a rendering error when hovering over an undiscovered item?

worthy stirrup
#

nah, its fine lol

#

I should be working on my paper anyways

normal crest
#

Is it possible to show the soul pos of a joker on the unlock popup when unlocked

frosty dock
#

the side popup? or the full overlay menu when you exit the run

normal crest
#

the side one

frosty dock
#

haven't looked at how those work tbh

#

oh i see, it's just a sprite

#

it should work if you make it a proper card

normal crest
#

i was just wondering if there was already a way to do it, not a big deal if not

chrome widget
#

So SMODS essentially reformats a lot of vanilla objects to work like the structure it gives to end users. Are the resulting calculate functions basically just the entirety of the vanilla Card:calculate_joker or are they somehow broken down?

frosty dock
#

this is not something steamodded does. the original Card:calculate_joker is still used, albeit patched a little

#

no one would want to maintain something like that

chrome widget
#

I'm basically just trying to work around how editions are calculated because it's giving me a headache

#

I point it out because I don't see calculate_edition in the base game code

zealous glen
#

I think it's added by Steamodded

#

I was looking at it just now

chrome widget
#

Card:get_edition() is the equivalent calculate function I suppose

#

Which is just a lot less robust and only supports the base 3 versus the way SMODS uses return tables for a bunch of stuff

quartz ravine
#

What I was trying to do is when the joker calculate runs and a condition is true, card.ability.ready becomes true. Then when my joker gets to the end of the round, this card.ability.ready value is turned back to false.

#

I wanted it to jiggle while it's ready to be use

zealous glen
#

like DNA

#

?

wintry solar
#

editions run entirely through smods now

zealous glen
#

@wintry solar I made a PR. Is there anything I can do to make the lives of people who're going to review it easier?

quartz ravine
paper zealot
wintry solar
#

your lovely patches look a bit jank but the premise of it seems to make sense

zealous glen
wintry solar
#

can they not be combined?

zealous glen
#

How do you mean?

#

Would a pattern patch handle all of them?

wintry solar
#

oh actually looking at it the self.debuff lines are always different

#

thanks thunk 🙃

zealous glen
#

Are they?

#

The function name is different

#

The next line seemed similar enough

#

There may be some false positives, if you don't want to match the whole line that is

chrome widget
#

yeye that's what I'm attempting to figure out. I'm looking to (somewhat hackily) create a simplified equivalent to the Quantum Enhancements thing for editions because I have a joker effect requested that does something similar, but I'm struggling to see where the values are actually scored

So this:

function Card:calculate_edition(context)
    if self.debuff then return end
    if self.edition then
        local edition = G.P_CENTERS[self.edition.key]
        if edition.calculate and type(edition.calculate) == 'function' then
            local o = edition:calculate(self, context)
            if o then
                if not o.card then o.card = self end    
                return o
            end
        end
    end
end```

is the equivalent to this:

```-- vanilla
function Card:get_edition()
    if self.debuff then return end
    if self.edition then
        local ret = {card = self}
        if self.edition.x_mult then 
            ret.x_mult_mod = self.edition.x_mult
        end
        if self.edition.mult then 
            ret.mult_mod = self.edition.mult
        end
        if self.edition.chips then 
            ret.chip_mod = self.edition.chips
        end
        return ret
    end
end```

The former calls a calculate function rather than just checking values directly on edition (that are set by Card:set_edition()), and I have no idea what that calculate function actually is. Since editions don't really do that in the vanilla game in the same way, I'm not sure what Holo, Foil, and Poly are using here to score their values
paper zealot
# quartz ravine Something like this? <@307135979297177620>

card has two separate definitions here and it might be causing issues. Try:

card.ability.handsTillReady = card.ability.handsTillReady - 1
if card.ability.handsTilReady <= 0 then
  card.ability.handsTillReady = 0
  card.ability.ready = true
  sendInfoMessage("Joker is now READY!", "ratOfDeath")

  local eval = function(arg_card)
    return arg_card.ability.ready and not G.RESET_JIGGLES
  end
  juice_card_until(card, eval, true)
else
wintry solar
#

they're in game_objcet.lua

zealous glen
#

objcet

chrome widget
#

yeah I see it now, thanks

#

Okay now I understand why this doesn't work lmaoooooo

#

Ill have to do the same thing quantum enhancements does and set the edition manually before they're calculated, because it takes values currently on card.edition to match up with vanilla, or just overwrite them to check where I've been storing the extra editions, which is on card.edition.others

zealous glen
#

There's always the gambiarra way to do it

chrome widget
#

Which is?

zealous glen
#

Create an invisible Joker that handles whatever effect you want to do

chrome widget
#

not a bad solution all things considered, I've seen weirder stuff

zealous glen
#

I'm doing that to add special effects to poker hands

little rivet
#

what are stone cards called?

#

like how do i use them

#

in a joker

zealous glen
#

what do you mean by use

#

what are you trying to do

paper zealot
# little rivet what are stone cards called?

The Steamodded way is to check SMODS.has_enhancement(card, 'm_stone')
The vanilla way is to check if card.ability.name == 'Stone Card'.
You should probably use the Steamodded function unless you have a good reason not to

little rivet
#

trying to make it so the amount of stone cards in deck is added to mult

#

isnt that already a thing?

little rivet
maiden phoenix
#

There's one that counts stone cards for chips

little rivet
#

ill have to just look at that in the source code

manic rune
#

the real kasane tato
looks inside
mario

paper zealot
# worthy stirrup how could I make this apply an extra .5 xmult every new ante?

Looked into this a bit more. You'll want to define x_mult as a member of card.ability, and rename your extra.BlindSize, extra.ScalingAmount variables with lower_snake_case for clarity - UpperPascalCase is usually reserved for global classes.

Then wherever you're defining your joker, it needs a calculate function containing:

calculate = function(self, card, context)
    if `context.end_of_round and G.GAME.blind.boss and not context.individual and not context.repetition and not context.blueprint then
        `card.ability.x_mult = card.ability.x_mult + card.ability.extra.scaling_amount`
...
end
quartz ravine
#

That worked great, thank you, @paper zealot

local eval = function(card) return (card.ability.ready == true) end
juice_card_until(card, eval, true)

paper zealot
worthy stirrup
paper zealot
novel violet
zealous glen
#

you mean one of the best character in all of fiction

novel violet
#

mario and teto are both cool as hell. teto is pretty and silly and mario is brave and heroic

#

i fuck with both of them

zealous glen
#

-# I'm continuing the joke of them being one person

manic rune
#

fr tho 🔥

novel violet
zealous glen
manic rune
#

sure why not

novel violet
#

let's see it

zealous glen
manic rune
#

is it a one-time thing

zealous glen
#

What do you think?
-# I prefer asking before answering to evaluate the text

manic rune
#

its cool actually, first time seeing that kind of mechanic

quartz ravine
#

Weird, I am getting crashes now on jokers that worked before, after upgrading lovely and steammodded

novel violet
#

that certainly is cool, would say that's balanced well enough for a common joker

zealous glen
#

||One Consumeable per hand per trigger, yes||

manic rune
#

mhm, agreed

zealous glen
#

I wonder if it's a bit too weak tho

#

Compared to Photograph the timing is better, but the condition is a bit harder

worthy stirrup
#

im getting Xnil

manic rune
#

its fine imo, the xmult is good

zealous glen
#

also this one was so hard to implement I had to write a SMODS PR for it

manic rune
worthy stirrup
#

oh wait

#

i think i see why

zealous glen
#

So it's tricky

#

Less tricky if you don't care about mod compatibility

#

I think SMODS also seems to handle it better now if a card ceases to exist compared to the past

manic rune
#

oh, i see

zealous glen
#

For this, I just updated the UI, but I can probably update the code too now

paper zealot
worthy stirrup
#

i just realised i need to edit the art as it will always have the eternal will cover it

zealous glen
manic rune
#

nice

paper zealot
manic rune
#

im surprised there hasn't been a cooking-related mod yet

#

considering how many mods that add food to balatro

worthy stirrup
manic rune
#

localization is where you store like, keys to call for text

zealous glen
worthy stirrup
#

ill send the whole code

paper zealot
worthy stirrup
#

its fine lol

turbid maple
#

Am I supposed to update dollar_buffer myself? I have this in an enhancement for now but this allows me go into debt

    calculate = function(self, card, context)
        if
            context.main_scoring
            and context.cardarea == G.play
            and (G.GAME.dollars + (G.GAME.dollar_buffer or 0)) - card.ability.extra.cost > G.GAME.bankrupt_at
        then
            ease_dollars(-card.ability.extra.cost)
            return {
                xmult = card.ability.extra.xmult,
                card = card,
            }
        end
    end,
manic rune
#

i dont think so

#

ease_dollars handle all of the dollars stuff

#

ease_dollars(a) gives you a more money

#

if its a negative number then it will reduce your money by that much

paper zealot
# worthy stirrup

To be clear, card.ability.Xmult is not card.ability.x_mult and card.ability.extra.ScalingAmount is not card.ability.extra.scaling_amount. Gotta clean up the mix of naming styles

manic rune
#

i dont think theres a need for dollar buffer

turbid maple
#

this works as expected when I play with a hand with zero dollars

manic rune
#

G.GAME.dollars should be how much money you have anyways

turbid maple
#

but if I play this I end up with $-3

#

when the expected behavior is spend the $2 only and stop triggering

manic rune
#

oh

#

hm

turbid maple
#

I haven't fully bothered to understand what all the different buffer things are but I assumed they exist to keep track of addition/removal of things in a single calculation step

turbid maple
manic rune
#

yeah uh, i dunno honestly, seems very weird that happens

wintry solar
#

you would need to use dollar buffer here, but you should also just return dollars = whatever instead of using ease_dollars

manic rune
#

oh, does that make a difference?

worthy stirrup
#

i genenuinely dont know where to go from here, i know yall are telling me but i just cant seem to grasp it.

turbid maple
#

mm okay I do need to manually update buffers

#

I see

manic rune
#

it should be card.ability.extra.x_mult, not card.ability.x_mult

worthy stirrup
#

is it still extra. i thought x_mult was a built in this

manic rune
manic rune
turbid maple
manic rune
#

uhhhh

#

smt smt, try put it to >= ❤️

turbid maple
#

ohh

wintry solar
#
calculate = function(self, card, context)
  if context.end_of_round and context.main_eval and G.GAME.blind.boss and not context.blueprint then
    card.ability.extra.x_mult = card.ability.extra.x_mult + card.ability.extra.ScalingAmount
    return {message = localize('k_upgrade_ex')}
  end
  if context.joker_main then
    return { xmult = card.ability.extra.x_mult } 
  end
end,

your calculate function should be like this

turbid maple
#

right

#

im silly

quartz ravine
#

Hi friendos, today I am seeing this fun error with a joker who worked previously

functions/common_events.lua:1241: attempt to call method 'juice_up' (a nil value).

It is happening when my joker proc's for a counted card and when we are getting ready to return our message and mult

wintry solar
#

show code

quartz ravine
#
                sendInfoMessage("Counted " .. tenCounted .. " tens, mult: " .. thisMult, self.key)

                return {
                    message = "MULT",
                    colour = G.C.RED,
                    mult_mod = thisMult,
                    chip_mod = card.ability.chips or 0,
                    card = card
                }
#

The log message appears and then it throws right after that

wintry solar
#

what context are you in?

quartz ravine
#

Oh good question, context.joker_main

wintry solar
#

also you should probably just return mult = X, chips = Y

worthy stirrup
turbid maple
#

uhhh dollar_buffer never gets reset to 0??

#

oh I have to do that myself too??

#

forgot to return true in an event again award

solid surge
#

how would i make a joker proc its ability by checking for an enhancement / edition?

quartz ravine
#

I gotchu man

#

@solid surge

 if context.cardarea == G.play and context.other_card and context.other_card.edition and context.other_card.edition.holo == true and not context.repetition then
                --other card was holo here
   end
worthy stirrup
gusty sequoia
#

For the get id thing when referring to specific ranks, what would the thing for Kings be?

primal shoal
#

king is 13

#

when get_id() is used

gusty sequoia
#

And the ace would be 14?

primal shoal
#

yep

gusty sequoia
#

Alrighty, thanks mate!

gusty sequoia
#

New question, how would I make it where each played king gives +3$?

green mica
#

Does anyone have a really basic template for blinds? Mine shows up fine in the collection but shows up blank when you play it so I'm trying to figure out where I went wrong

quartz ravine
gusty sequoia
#

May I see it?

gusty sequoia
#

:(

quartz ravine
#
if context.individual and context.cardarea == G.play then 
    local otherCard = context.other_card

    if othercard.base.id == 13 then
        ease_dollars(3)
    end
end
gusty sequoia
#

Thank you :D

wintry solar
#

Ease dollars has no message right?

worthy stirrup
#

how do legendaries have the floating heads again?

quartz ravine
primal shoal
#

soul_pos is the var
soul_pos = {x=1, y=2}
maybe i should check out the Cryptid mod

flat pier
#

Hey all, I've been on a huge break from work on my mod, and I have dumped all knowledge on the subject MenheraNervousEhehe
I am struggling to find how to destroy a card when it is scored (If it has a specific enhancement)

worthy stirrup
#

are you able to change the scale of the soul

primal shoal
#

soul uses the legendary cards code

green mica
#

well... that's weird

#

Maybe I broke the code when I was tinkering with it

primal shoal
quartz ravine
flat pier
#

Awesome, thank you. Just trying to get back into the swing of things.

green mica
#

Well I switched to an unmodified version of blindexpander and it's still wrong, so I have no idea what the problem is

quartz ravine
green mica
#

I'll have to come back to this later

flat pier
#

Hmm, where would I implement this. I don't want it tied to a joker, just the card itself (The card enhancement is marked as single-use)

#

Unless if I inject it into the card scoring section Thinks

gusty sequoia
primal shoal
#

almost done

gusty sequoia
quartz ravine
#

@gusty sequoia if you want to dm me your whole joker card I can debug it an about an hour or so

quartz ravine
green mica
#

Okay so

#

I changed the small blind so that it summons a blind after. Initially, just to see if it would work, I tried having it summon the big blind, which worked, but then when I tried with a custom blind it didn't work. And I checked that the custom blind does indeed work when it appears as the boss blind, so I'm not sure what's causing the issue unless there is some fundemental difference between boss and non-boss blinds that makes them not work with the summon thing from blindexpander

#

I mean if that's the issue I could just make it a non-boss blind, but I'm not really sure how to aside from just omitting the boss parameter, which I don't think makes it a non-boss blind

#

Cause I think they are boss blinds by default if I'm not mistaken

#

Okay nope, I tried swapping it with a regular boss blind like Ox and it worked so it's just a problem with how I made the custom blind I guess

#
    key = 'bl_test',
    loc_txt = {
        name = 'Test',
        text = {
            'Test'
        }
    },
    dollars = 3,
    mult = 1,
    boss = {min = 1, max = 10},
    boss_colour = HEX('FF0000'),
    atlas = 'TestBlind',
    pos = { x = 0, y = 0 },
    vars = {},
    config = {}
}```
#

Dunno what I'm missing here

raw geyser
#

What's the best way to increase the joker_rate?

solid surge
#

hooray to the polychrome (and newly added foil) jokers working! (just gotta figure out how to stop it from going after the total)

iron orchid
#

line 19

#

has the closing }

#

at least vscode says it does

#

amiblind lol

paper zealot
#

That's a dictionary key string, no spaces allowed

old bane
#

is there a way for stickers to have a random value upon generation?

paper zealot
#

Might be more clear if you format it like this:

return {
    ["descriptions"] = {
        ["Mod"] = {
            ["BossBlindsBeat"] = {
                name = "Boss Blinds Beat",
                text = {
                    "Adds completed boss blinds tab to run info screen.",
                    "Follow on {C:purple}twitch.tv/calexil{} to support!",  -- the "twitch.tv/calexil" is turned into a clickable link
                    " ",
                    " ",
                    " ",
                    " ",
                    "Programming and implementation by {C:calexil}Calexil{}.",
                }
            }
        }
    }
}
#

Make sure that matches your mod id defined in the .json file

turbid maple
#

nvm im a dumbass

paper zealot
iron orchid
#

I got it down to a single instance

#

@paper zealot not sure if it's easier for you or not but im live rn t.tv/calexil

primal shoal
#
    if string.match(key, "j_type") then
        return true
    else
        return false
    end
end
calculate = function(self, card, context)
        if context.other_joker then
            if is_type(context.other_joker.key) then
                return {
                    Xmult = card.ability.extra.Xmult
                }
            end
        end
    end`

am i doing this wrong?

old bane
#

in your return block, make Xmult become xmult (the first one, not the second one)

green mica
#

It works as a boss blind, and having a blind summon a base game blind works, but having it summon this custom blind doesn't work

#

and I can't for the life of me figure out why that is

primal shoal
wild escarp
#

What would I put in here for a high card poker hand, and what would I do for identifying if it's the first hand?
if context.before and next(context.poker_hands['']) and not context.blueprint then

primal shoal
#

"High Card"

wild escarp
#

Okay, thanks. Wasn't sure on the capitalization or if there was an underscore or something.

#

Now I just need to check for the first hand of the round.

Edit: Found it, G.GAME.current_round.hands_played == 0

flat pier
flat pier
#

I'm going to have to modify the scoring code with a toml I fear...

#

and I don't know where to begin

turbid maple
#

sesbian lex

tall tangle
#

SEBBIN LEGZ

granite turret
#

is this
AN ENTIRE BOOK
OF BLEUPRINT/BRAINSTORM YURI

#

AS A JOKER

#

...
i need

#

what are the game stats

primal shoal
#

whats the var for accessing the the joker pool?

tall wharf
turbid maple
tall wharf
#

WHY IS IT 6 AND 9 AGAIN

lucid owl
#

is there a way to count played cards as a different rank?

granite turret
forest ivy
turbid maple
tall wharf
#

if i had a nickel for every time someone made a joker involving number 6 and 9 i would have 3 nickel

#

(they all have different effect at least)

turbid maple
granite turret
#

why would it create a Death though?

turbid maple
#

it's some weeb gacha game reference don't mind it

granite turret
#

gotcha :3

tall wharf
#

BLUE ARCHIVE THEMED BALATRO MOD

turbid maple
#

real

tall wharf
#

is that why it's called contraband

turbid maple
tall wharf
#

need

#

yep

crisp coral
turbid maple
#

it's like shitty opposite of Smiley Face I can't think of anything funnier

tall wharf
#

😭

crisp coral
#

😭

#

i thought it was worse

chrome widget
#

finally managed to get quantum editions working 😔 this took a lot longer than I thought

tall wharf
#

inb4 gives X1.3 chips for every face card played

turbid maple
#

and some others

granite turret
#

empty

tall wharf
tall wharf
#

tragedeigh

turbid maple
#

problem seems to be that officially supporting quantum rank cards + current feature where ranks can have multiple successors is a massive pain in the ass because they also want it to support sick and twisted people trying to play a 52-long straight

lucid owl
crisp coral
#

are you sick and twisted

tall wharf
#

I'M THAT ONE PERSON

old bane
#

how to add negative edition to consumables when using SMODS.add_card(t)? no highways

lucid owl
#

52 card long straight is the stuff of nightmares

crisp coral
#
local _card = SMODS.add_card(table)
_card:set_edition('e_negative')
tall wharf
crisp coral
#

oh i remember this

#

😭

forest ivy
#

it isnt that serious bro 🙏

lucid owl
tall wharf
#

what's wrong

lucid owl
#

joking that the 52 card straight is horrifying

tall wharf
#

it's not 52 straight

#

it's 4 13 straight

chrome widget
tall wharf
#

the code for this was already removed a while ago

wintry arch
#

yeah straights dont loop, ace can be a 1 or a 14 but you cant make a straight like 3 2 A K Q. so max is a 13 strait

tall wharf
#

create mod just had an update 2 days ago

lyric wadi
#

hello chat

#

new interest in modding is there a documentation for this

wintry arch
#

actually if it's A 2 3 ... Q K A that's fourteen isn't it?

tall tangle
#

Who has the Read The Fucking Docs gif

wintry arch
#

so it's a quadruple fourteen straight

tall tangle
#

No

lyric wadi
#

i would love to read the docs

#

if i know where it is

tall tangle
#

For that you'd need eight aces

lyric wadi
#

actually

#

cuz it's not pinned

wintry arch
# tall wharf

goober. a straight with all cards in a suit is a straight of length 14 using 13 cards

tall tangle
lyric wadi
#

ah heck

wintry arch
#

because the ace would count as both the predecessor to 2 and the successor to king

tall tangle
#

It can't count as both at the same time

wintry arch
#

says who?

tall tangle
#

You'd need two aces for that

lyric wadi
#

i have some ideas but i have to learn to mod because im sure no one will ever take them as suggestions

tall tangle
#

You can't score a card as two things at once.

tall tangle
#

What's the idea

wintry arch
#

i see no precedent for that in the base game

lyric wadi
#

that is base game

lucid owl
#

how are jokers made with custom sizes?

tall tangle
#

It already does that

wintry arch
#

but if you play a flush and a straight?

#

what happens then

tall tangle
#

Straight flush

lyric wadi
#

yeah cuz straight flush exist

tall tangle
#

That's one hand

wintry arch
#

and if you play a flush and a five of a kind?

tall tangle
#

That's literally one thing

lyric wadi
#

but two pair flush doesnt

tall tangle
#

YOU'RE NOT HELPING YOUR CASE

old bane
#

wait how does bonus mult with smods work now

wintry arch
#

the ace simply fills in two gaps in the straight

tall tangle
#

Five-card hands can also be flushes.
Four-card hands can't (without four fingers).

old bane
#

cause i can't see it in the card's description but it's still adding mult to the card ;-;

lyric wadi
#

to be the exact opposite of Cryptid

wintry arch
#

otherwise isn't it ambiguous whether it's a royal 13 flush or a straight 13 flush?

tall tangle
lyric wadi
#

Cryptid adds busted overpowered cards

#

and i want Hanged Man to add questionable to outright bad cards

#

but you know, not like bad bad

tall tangle
#

Example: I want to be part of the making of a mod that adds the Super Smash Bros Ultimate Extended Roster as a new kind of Jokers along with a new set of items.

lyric wadi
#

still workable in a run bad

#

like Odd Todd kind of bad

#

not useful in most cases except for like seven reallty specific builds

tall tangle
#

YOU TAKE THAT BACK RIGHT THE FUCK NOW ODD TODD IS BABY

wintry arch
#

i had a fun run with odd todd recently

tall tangle
#

HE DIDN'T EVER DO ANYTHING TO YOU

wintry arch
#

i think i ditched him for scholar tho cuz it was an aces run

lyric wadi
#

also the funny

wintry arch
#

odd todd is alright

lyric wadi
#

Cryptid adds two card, so the exact opposite is Hanged Man

#

which removes tow cards

wintry arch
#

i think i like him better than even steven

lucid owl
# tall wharf

i gotta say word puzzles in balatro is such an insane concept but i kinda love it

lyric wadi
#

i thought it's a good name

lucid owl
#

the (seemingly) sideways 8 for infinite discards is smart lmao

tall wharf
#

just call it Hanger

lyric wadi
#

anyway the idea is i want the jokers to force you to do weird setups and otherwise unusual/bad plays

turbid maple
#

another 100 copies of loyalty card

potent swan
#

joker in hanged man mod: +1 chip

lyric wadi
#

example

lyric wadi
#

Glass House

Glass Cards give x4 mult if a Stone Card is scored in the same hand,
destroy all Glass Cards scored that hand

turbid maple
#

just discovered the sprite I was painstakingly working on was accidentally sized 142x190

tall tangle
# tall wharf

You should add ™️ after every "Balatro" in that card description.

lyric wadi
#

so it makes you build a Glass and Stone deck

crisp coral
#

is balatro trademarked

tall wharf
#

also is this too cruel

tall tangle
turbid maple
tall tangle
lyric wadi
#

another idea i had

tall tangle
tall wharf
tall tangle
#

Reroll and Retcon

tall wharf
#

😔

lyric wadi
#

Colour Change

When discarding a Wild Card with 1 other card,
change the rest of your hand to that suit

#

so this is really good for flush build

tall tangle
#

Plasma Deck still has Wall and VV

tall wharf
#

i think the back and the sleeve look ok now

lyric wadi
#

except you're discarding Wild Card in a flush build

#

which is a lil silly

tall wharf
#

i really need to up my game of being against big numbers

lyric wadi
#

Pay To Win

Rental Jokers each give x2 mult
Rental Jokers cost $3 more per round

turbid maple
lyric wadi
#

pog

tall wharf
#

keep cooking and nobody wins

lyric wadi
#

😭

#

no but like i like Glass House tho

#

a Glass/Stone deck run sounds so silly

tall tangle
#

Annoying Fly: +1 Mult, gains +1 Mult per card played or Discarded, -10 Joker Slots

#

Eternal.

tall wharf
lyric wadi
#

anyway yeah that's basivally the vibe im going for

#

and that is what i mean by i need to learn to mod myself

tall wharf
#

we are turning Balatro into Zachtronics Solitaire

lyric wadi
#

because no one would pick them up

tall tangle
#

Can't sell it, can't escape it, can't make it better by force, you just have to keep burning cards to make it good.

lyric wadi
#

so is there a docs

tall wharf
#

yes

lyric wadi
#

pog

#

where

turbid maple
#

wrong reply mb

tall wharf
lyric wadi
#

thank u :3

tall wharf
#

just because of that message I'm adding sliding puzzle to balatro

turbid maple
#

LOL

lyric wadi
#

The Secret
+9 mult
Gain +9 mult if all scored cards rank adds up to 45

turbid maple
#

Jokers cannot be moved. Whenever a card is scored, move this Joker to the right by its base chip value (wraps around). If this is the rightmost Joker, X5 Mult

lyric wadi
#

oo

#

modular arithmetics

#

my beloved

#

you could make it reference the Bell Ringer card from Inscryption

tall wharf
#

I'm adding Impostor cards

lyric wadi
#

that'd fit the mechanic

#

and also be a neat reference

#

(Bell Ringer deals damage equal to how close it is placed to the End Turn bell)

#

(so from left to right it goes 4, 3, 2, then 1 damage)

#

making it go x1 x2 x3 x4 x5 based on the slot would be a little more kind while still keeping the gimmick

#

also question

tall tangle
#

What

lyric wadi
#

do i need to have specifically steammodded or can i use like, r2modman

#

i already have it for modded webfishing and it can mod balatro

#

but i don't know if it will work for creating mod

tall tangle
#

Use Steamodded, the community will thank you.

crisp coral
#

r2modman also uses Lovely and Steamodded, but that version hasn't been updated for a long time

lyric wadi
#

true

#

got it

#

it will remain the funny gay fish launcher for now

crisp coral
#

😭

tall wharf
#

probably not