#💻・modding-dev

1 messages · Page 71 of 1

rough furnace
#

Well most games don't handle mods the same, so it's hard to get a one size fits all

gaunt thistle
#

it's hard to make something that works across Unity and Minecraft

#

and, believe me, making something that works for a LOT of games is hard

tepid crow
#

that's the ideal solution for a balatro-specific mod manager yeah

gaunt thistle
#

yeah, go about it in-game

#

you still need to solve discoverability and hosting, but like I said: how it's done now is fine, we just need repo metadata and indexing

frosty dock
#

i wonder what exactly you're trying to achieve... neither of us can talk all mod devs into using it and we're already working on something for an in-game solution

#

we've been there, TS just didn't manage to stay relevant enough

gaunt thistle
#

yep, TS didn't stick

mild night
rough furnace
#

I mean I'd its hosted on github, basically forever

#

Also the manual way won't go away

frosty dock
#

I won't make such a predictment because it will be wrong either way

mild night
#

when will it be ready

frosty dock
gaunt thistle
#

no one knows

rough furnace
#

Oh

gaunt thistle
#

which is fine, that's software

rough furnace
#

Who knows

mild night
#

exactly, it's indefinite

gaunt thistle
#

but manual installation exists for now

rough furnace
#

Same with how long until most mods people want go to thunferstore

tepid crow
mild night
#

so why not work on a compromise which works towards a band-aid fix while the long term solution is being worked on

gaunt thistle
#

because you need to maintain bandaid features

#

imho it's better to do it right before it becomes adopted

rough furnace
#

Because our current compromise is fine and the other one has some doensodes wed have to adopt

mild night
frosty dock
#

steamodded does

rough furnace
#

Balatro updates don't break mods (mostly)

gaunt thistle
#

Balatro updated don't break mods anymore

rough furnace
#

Lovely Persits throifg updates

mild night
#

which is another reason why it's not really a problem to have a band-aid solution

rough furnace
#

We have a band aid solution called installing mods manually

frosty dock
#

again what do you even suggest we do

mild night
rough furnace
#

Sure it is

gaunt thistle
#

it's worked so far

rough furnace
#

It solves the problem of no mods

frosty dock
#

there is no world in which you can get all current mod devs to start uploading to TS out of nowhere

mild night
mild night
rough furnace
#

I doubt we can get most even

gaunt thistle
#

it's really hard to move an entrenched community over to something like TS

#

even if everyone agrees on it, which isn't the case at all

frosty dock
mild night
#

god this is just cyclical

rough furnace
#

Ease of Access except it doesn't work

mild night
frosty dock
#

ease of access doesn't matter if you still end up having to install mods manually

rough furnace
#

If everything is missing or outdated it's not easier

#

Cause then Jr just doesn't work

mild night
#

jesus christ you people are hopeless

#

good luck

rough furnace
#

Okay

gaunt thistle
#

:-/

#

It's not that big of a deal

frosty dock
gaunt thistle
#

what we've been doing is fine for now, where we go is sorta undefined

#

it's hard to direct authors in a way without stepping on toes

#

I've learned that lol

frosty dock
#

sure browsing a database of mods takes some UX considerations, but it's just a search menu in the end

gaunt thistle
#

I will say that package management is a bit more complex

frosty dock
#

version control and resolving dependencies can mostly be automatic

gaunt thistle
#

but things are much easier when you can focus on a single game

#

like I said: Balatro is a prime target for an in-game package manager

rough furnace
#

Steamodded also already has a working version checker and dependency system

#

So version resolving isn't that hard on top

gaunt thistle
#

I think at this point it's wayyyy too late to consider something like TS

#

it's gh or a self-managed community solution, but even the latter will have the same problems

frosty dock
#

maybe cases where mods require a specific version or earlier could be a bit more tricky if there isn't a backlog of versions to pull from

gaunt thistle
#

you either make something that works for it all - ts, gh, and whatever else

#

or we just sorta stick with gh - it's worked in the past and it will work agaain

#

this is moreso about tooling imho

#

I can theoretically integrate that tooling into lovely but it goes against the whole "game agnostic" promise

tepid crow
gaunt thistle
#

sometimes you just need to throw time and brains at a problem and it gets better

frosty dock
#

eh

gaunt thistle
#

the big problem here isn't feature complete-ness, it's about directing the community towards something other than gh

#

which, as we've seen in the past, isn't going to work

frosty dock
gaunt thistle
#

I can't think of a reason why it would need to be in lovely either

tepid crow
#

probably not a good fit with lovely's premise no

frosty dock
#

maybe steamodded could ship some external tooling that guides you through the install process and does whatever it can automatically

#

thinking of ease of access up to the point of having steamodded itself up and running

tepid crow
#

yeah that's also one of my points

#

getting steamodded itself is already a big barrier in some cases

gaunt thistle
#

it's a limit test for the user - if they can't install Steamodded then they're not going to have much luck with mods in general

frosty dock
#

it's more about lovely tbh

gaunt thistle
#

which isn't a good or bad thing, just the way it is

brisk rose
#

But it's because they don't read

#

Lol

gaunt thistle
#

people also struggle with installing r2mm itself

#

it's just treadmill work after a certain point

tepid crow
#

if it's not the antivirus, it's usually the location of steamodded/lovely in my experience

gaunt thistle
#

there's nothing wrong with creating an "smods installer" which also installs lovely

tepid crow
gaunt thistle
#

that's what I've learned yeah

#

it doesn't mean you don't try

#

but you can only do so much after a certain point

brisk rose
gaunt thistle
#

god the av problem has been a pain in the butt

brisk rose
#

But tbh the av is doing what it's designed to

tepid crow
gaunt thistle
#

of course, yeah, but TS's userbase doesn't allow for that unfortunately

#

with dev-oriented software absolutely though

#

anyways either way you guys have my support. I have 0 care if you guys pivot towards ts, nexus, or stick with gh

#

at the end of the day I mostly care about lovely working

#

which it isn't for most people lol

gaunt thistle
tepid crow
gaunt thistle
#

it's hard to say. the big problem with microsoft certs is that they're yes, expensive, and iirc only available to enterprise

#

you can self-sign but it doesn't make the problem go away

tepid crow
#

I don't know that much about them, but self-signing doesn't sound very useful yeah

#

The Request for Comments recommended that the last remaining unused bit, the "Reserved Bit" in the IPv4 packet header, be used to indicate whether a packet had been sent with malicious intent, thus making computer security engineering an easy problem – simply ignore any messages with the evil bit set and trust the rest.

gaunt thistle
#

I was hoping that reputation based trust would make av problems go away with time, but nope

tepid crow
gaunt thistle
#

an in-game package downloader would make steam deck users very happy

#

that's been the big reason why I don't use mods on my deck

rough furnace
#

I mean the steam deck does have git so just git clone all the things

gaunt thistle
#

the annoyance is switching back and forth between desktop mode tbh

brisk rose
#

Set up a modpack so all you have to do to update is "git submodule update --recurse --remote --merge"

gaunt thistle
#

that's actually very valid

#

I would need to drop my addiction for 2 minutes to do that though

#

and that is just not an option

brisk rose
#

Lmao

rough furnace
still jacinth
#

are there any templates or actual guides for creating a balatro mod? ive looked at a couple but cant figure out how to get anything to work.

brisk rose
#

The best thing is the wiki pages and looking at other mods

#

Do you have any experience coding?

primal robin
#

What agrument I should use to disable default console?

rough furnace
#

--disable-console

rough furnace
#

do people have tools to help with making atlases or is it just a photo editor?

limpid flint
brisk rose
#

you could also use something like imagemagick

#

though not terribly applicable for Windows I admit

#

Not that it probably isn't also for windows, but Dim's thing would do the same thing as a purpose built tool

rough furnace
#

I'm just using gimp as of now

opal spade
crisp elbow
#

Aseprite can make atlases p easy

limpid wing
#

Epic Brazillian Miku 🇧🇷

nimble sequoia
#

oh my god, i thought the talk about "TS" was about typescript

#

lmfao

zealous glen
#

I’m so happy people enjoyed my take on Brazilian Miku 😭

mellow sable
split jungle
#

I still have no idea how to work with this

#

where do I start

#

I was done with joker data but this is just confusing

nimble sequoia
#

this doesn't look like 1.0.0 code lol

opal spade
#

yea thats 0.9.8

split jungle
#

danm

nimble sequoia
#

better drink the 1.0.0 juice otherwise your code will get outdated, if people are even still playing on 0.9.8

split jungle
#

okkk what are 1.0.0 mods then

#

I just got here for a week

opal spade
#

most (if not all) mods being made right now are for 1.0.0

split jungle
#

ok then lads

#

thanks

opal spade
languid mirage
#

is that a mod to fuse any joker with any joker?

#

cool idea

opal spade
#

proof of concept that needs a lot of work to function properly in actual gameplay but the idea is simple - have a joker that acts as two jokers

#

what it does is basically for any action a joker can do it temporarily becomes the joker its made of

languid mirage
#

so if both jokers trigger with same context you'd need to combine outputs
thats def going to take some work

opal spade
opal spade
languid mirage
#

ah so you patch card_eval for that?

opal spade
#

nope, infinifusion doesnt return anything as itself and rather acts as a proxy to trigger calcs on the jokers its made of

#

although it seems like i need to figure out how to save the fusion properly bcos atm it seems like it always breaks due to the fact its constantly changing its center

split jungle
#

what a trippy

#

i cannot distinguish between version code

#

like

#

is Blizzow themed jokers version 1.0.0

#

i cannot

opal spade
# languid mirage ah so you patch card_eval for that?

the basic principle for most of the functionality here is ```pull card.ability into a local 'data'
replace card.ability with data.extra.j1_ability
replace card.config.center with G.P_CENTERS[data.extra.j1_key]
run card:<function>(<arguments>)
save card.ability into data.extra.j1_ability
<repeat the same but replace j1 with j2>

replace card.ability with data
replace card.config.center with infinifusion center```

#

the most annoying will be making info_queue to see the fused jokers bcos vanilla jokers dont come with a loc_vars

maiden phoenix
#

@shell timber Think I overtuned your template 😅

shell timber
#

oh not bad

opal spade
split jungle
#

Oh cool

#

Ok

#

Also some mods have upscale.py or some 5hing like config file

#

Is that mandatory if I want tp wdd jokers?

maiden phoenix
#

Not really

#

upscale.py is just a quick script to change spritesheet size instead of manually doing it.

#

Config is if you want your mod to enable/disable/modify some properties in itself

opal spade
split jungle
#

Thanks lads

gaunt thistle
#

mobile is out

maiden phoenix
crisp elbow
#

can't buy balatro on google play

#

why won't it just let me give them 10 dollars man

frosty dock
#

game discussion can't stop talking about piracy lmao

gaunt thistle
#

loooooooooooooooooooool

crisp elbow
#

I just wanna buy the game legitimately

#

balatro broke the google play store

gaunt thistle
#

can we get a commemorative joker in cryptid?

crisp elbow
#

the crash of 24

gaunt thistle
#

[OR-FGEMF-20] jimbo

maiden phoenix
#

Damnit was about to say that lol

crisp elbow
#

It has to be code joker related

#

or well

#

code card related

#

maybe it makes Code Cards and packs free like Cartomancer

gaunt thistle
#

blocks purchases for two antes

#

^2 mult

crisp elbow
#

blocks purchases for 2 antes but gives you a pointer afterwards

#

each time you purchase you get a popup like nope saying [OR-FGEMF-20]

languid mirage
#

kinda funny that brainstorm's texture is bleeding into the perkeo due to pixel smoothing

crisp coral
#

what the fuck does [OR-FGEMF-20] mean 😭

opal spade
#

i just realized that the way my infinifusion is setup is kinda stupid because it's hardcoded into being restricted to 2 jokers when if I were to put all of the current code in loops it would allow for theoretically infinite fusions

#

like I just repeat the same chunk of code twice with different variable names

bleak cargo
#

Can we talk about mobile modding here

gaunt thistle
#

ok hello

hardy viper
#

@languid mirage ik you asked a mod whether mobile modding discussion was allowed, did you ever get a response on that?

languid mirage
#

yes

#

egg said that rules will get updated if mobile modding will be allowed

bleak cargo
#

Who gives final say if it is allowed

limpid flint
#

By thunk?

languid mirage
#

yea

languid mirage
#

but they wont give any notice otherwise

#

so we won't know for sure for about a week, probably

bleak cargo
#

He will never speak on it

#

Ask him on Twitter

hardy viper
#

i imagine the discussion about porting saves from desktop to mobile is fine though that's not really modding

limpid flint
#

Yeah

languid mirage
#

porting saves? I think so

bleak cargo
#

Hopefully

rough furnace
#

save editor stocks on the rise

languid mirage
bleak cargo
#

I’m sure you can inject mods with save data tho

rough furnace
#

not well

gaunt thistle
#

hah

hardy viper
languid mirage
#

you can actually

hardy viper
languid mirage
#

cuz save files run eval

#

lmao

bleak cargo
#

They do it for GameCube games lol

#

Oh ok

hardy viper
languid mirage
#

save file is an encoded lua file that returns lua table

rough furnace
#

I may or may not have injected 0.9.8 with the settings file

languid mirage
#

so it's not impossible to just decode the file, edit it to load stuff, and encode back

#

it's rather sad that save files can be an attack vector tbh

hardy viper
#

is there an actual reason for it being that instead of something reasonable like a json file

languid mirage
#

dont think so

rough furnace
#

lua doesn't come with a json lib

#

also possibly performance reasons

hardy viper
languid mirage
#

I mean... the only performance you're saving is on load

#

which I don't think matters?

rough furnace
#

maybe

#

I think if anything it was a quick hack that never got updated

languid mirage
#

yep

#

think so too

rough furnace
#

balatro is (was?) a one man team

#

and the save file works so it doesn't really make a lot of sense to focus on it instead of one of a bunch of other issues

#

espescally with the potential issues that may come up

kindred knot
#

okay so I can confirm that when opening balatro

#

the cloud save loading into the game

#

will overwrite the library folder containing your game save

rough furnace
#

if you pull the cloud save, close the game, replace the save, i think it should be fine

#

or just replace it with the game running

#

but before it saves itself

kindred knot
#

i don't know how to do any of that

#

especially with the game running no?>

languid mirage
#

what if you turn off the internet, update save and start the game

#

then turn on the internet

rough furnace
#

or just switch steam to offline mode

kindred knot
#

attempt number 2 incoming

#

didn't work

#

even with wifi off

#

so i'm wondering if there's a different save spot

bleak cargo
#

Yeah probably on device or in the app somewhere

#

Might have to clean out the app entirely of all cache and save data

#

Because remember you can’t just add data you also have to remove the old save

kindred knot
#

but it is also overwriting that folder that i'm importing stuff into

bleak cargo
#

Maybe the iPhone caches stuff on its own system

#

Well I asked thunk through dm maybe they’ll help us

#

Is thunk a dude

hardy viper
#

yeah

bleak cargo
#

Ok

kindred knot
#

yeah if I can figure out where the saves ACTUALLY are, because that's not it

#

then we can go from there

bleak cargo
#

Where did you put the saves into the official version @kindred knot

kindred knot
#

into the library folder

#

like the "1" folder

#

within library

#

as if it was the pc version

#

but it deletes the saves from there

bleak cargo
#

There’s a library folder in the official ipa?

#

@kindred knot there’s a ton of save data stored in .plist files

#

Device identifiers and whatnot

kindred knot
bleak cargo
#

Oh

#

Is .jkr a joker file ☠️☠️☠️

#

It is omg

hardy viper
#

i don't think it holds any significance other than just being called jkr

#

as in it's not a file format that's just the extension

nocturne garnet
#

and i love that

tepid crow
#

it's just a deflate compression format

#

but the .jkr file extension meaning joker also took me a long time to get 🤣

nocturne garnet
#

me too

#

does anyone know how to change a joker's sprite and loc_txt when they arent unlocked?

#

and also a deck's loc_txt

rough furnace
#

like the version.jkr in the game directory

#

and demo unlocks used a list of keys

tepid eagle
#

is there a way of reading a joker as it's being sold?

hardy viper
#

huh

#

elaborate maybe

rough furnace
#

have peopel figrued out how to injkect save files into mobile yet?

#

if so I want to make a payload to collect some info if someone is down

bleak cargo
#

I call not doing it. Someone with more experience should.

maiden phoenix
rough furnace
#

does anyone have a jailbroken device?

#

or one with trollstore?

bleak cargo
#

I was thinking it would be nice if we had one

#

Maybe go on jailbreak discord

rough furnace
#

well good luck finding someione who owns balatero there

bleak cargo
#

Pretty rare for people to have jailbroken devices in 2024 tbh

rough furnace
#

I have one but not balatro

bleak cargo
#

Just buy it for them

#

“It’s 10 buckaroos to help the community”

tepid crow
#

I mean, the main reason I bought it was so that I could always have the latest version

bleak cargo
#

I just asked the creator of the github conversion tool to come help us out

solid salmon
#

Where can I find xchips code

crisp elbow
#

ligma code

solid salmon
mellow sable
solid salmon
#

Thx

ebon blade
#

hi, does anyone know how shortcut works? i wanna make a similar card but cant seem to find the lines in source code specifiying how ti works

frosty dock
#

shortcut logic is included with the function that finds straights (get_straight)

#

you'd have to patch the relevant hand evaluation

ebon blade
#

im sorta new to modding on lua, so idk how to do that. im using the balaui.dev website to make my stuff, how does this translate into a variable?

frosty dock
#

oh haha

#

it doesn't

ebon blade
#

oh uhh... the steammodded page doesnt really explain well then...

frosty dock
#

basically you have to change the code for an existing function

#

for that you need to be able to write code and understand what existing code is doing

#

in other words it has nothing to do with steamodded

ebon blade
#

you misunderstood me, i mentioned steam modded since it has example jokers

#

which is where im trying to learn from since there isnt a guide

frosty dock
#

yeah i get you

#

I'm just saying steamodded guides don't cover it because it's just Balatro's source code

ebon blade
#

and i have access to the source stuff its just i cant find the thing im looking for

#

i looked through everything

frosty dock
#

like i said the function is called get_straight

ebon blade
#

yeah im looking through the code again

frosty dock
#

though for steamodded the vanilla function sees no use whatsoever because i fully rewrote it to support custom ranks

ebon blade
#

what im trying to do is basically a wraparound thing, so shortcut + it can go like 10 Q K 2 4 (if my math is correct)

frosty dock
#

yeah you'd have to think about what that's gonna mean for the algorithm for detecting straights. the way it works rn both in vanilla and steamodded would have a hard time accounting for wraparounds because it needs a rank to start searching on as well as a rank where it knows it's done searching

regal wolf
#

i just love when i spend an hour trying to figure out why sometihng isnt working, only to realise its because in one place i put . instead of : 😭

frosty dock
#

if you know what that means and can adapt the algorithm to support wraparounds, you can do that

ebon blade
#

it seems a slight bit challenging, ill try but lua might be harder then i thought

#

i do know that wraparound is a thing for normal straights but only for A 2 3 4 5

#

so i might need to find where that happens

frosty dock
#

when working with existing code, it's extra important to be able to figure out what it's doing

regal wolf
#

I'm all for helping people start modding, I do it all the time. But I never understand why people don't read the docs first. It's so much harder to help someone who doesn't understand the basic lua syntax etc.

frosty dock
regal wolf
frosty dock
ebon blade
frosty dock
tepid crow
#

btw @frosty dock, there's an issue with tooltip titles for booster packs
(seems like name_override fails because of _c.generate_ui in the if-else tower of generate_card_ui())

#

I do have a lovely fix but I feel like there should be a better way lol

regal wolf
frosty dock
#

hm

tepid crow
#

this is what I have but it kinda sucks

# generate_card_ui
[[patches]]
[patches.pattern]
target = "functions/common_events.lua"
pattern = """desc_nodes.name = localize{type = 'name_text', key = name_override or _c.key, set = name_override and 'Other' or _c.set}"""
position = 'before'
match_indent = true
payload = """name_override = name_override or (_c.set == 'Booster' and _c.key:find('_%d$')) and _c.key:gsub('_%d$', '') or nil"""

basically inserting a name_override by assuming that any Booster key ending with _[digit] should have that part removed

frosty dock
#

yeah that's not pretty

#

if anything this is an oversight and should be moved into _c.generate_ui

#

vanilla packs already get the right key in their loc_vars, apparently it was just never considered by me that names are put elsewhere for infoboxes

tepid crow
#

oh, yeah, pack_loc_vars

#

wait so... why doesn't it work 🤔

frosty dock
#

because generate_ui only ever considered putting the name as full_UI_table.name and not desc_nodes.name

#

so I'll need to add this to generate_ui functions and patch the condition in generate_card_ui so it doesn't override pre-existing desc_nodes.name

tepid crow
#

right

#

I think I get what you're talking about

#

let me know if you have something that works, I'd be interested in your implementation

frosty dock
#

probably not tonight, might go to sleep soon

#

I'll probably just push it to main steamodded once i have something that works

tepid crow
#

yeah of course, no rush

#

just give tag me once you've pushed it

bleak cargo
#

Or the creator or whatever

#

Are you the creator ? I saw you say something about the creator in mentions so I added you

vapid vessel
#

Dawg my GitHub has (sadly) literally never touched balatro

#

Nor is it named after my gamertag

#

I also don’t know what the conversion tool is

bleak cargo
#

Anyways… do you know the creator of the mod

#

Are they in this discord

vapid vessel
#

No

#

What mod

bleak cargo
#

Ok fail

#

The tool

#

For conversion

tepid crow
vapid vessel
#

Conversion of what

bleak cargo
#

Ok thank you

tepid crow
#

wow thanks for that discord

bleak cargo
#

Never mind dawg it’s all set I got extremely confused earlier by the context of the conversation I was hopped up on caffeine and took shots in the dark

#

You mentioned the creator of the conversion tool so I added you

vapid vessel
#

The balatro port? I think I linked a balatro PC to something else port like a year ago, but I was told it was unofficial and technically piracy. So I deleted that message

#

But that was literally a year ago.

bleak cargo
#

Oh lol

vapid vessel
#

Yeah my last message in this server was 4 months ago

#

And I came here to ping you because it was our only server in common

#

Tragically I can’t help you. Good luck though

bleak cargo
#

@pliant sapphire can you help us try to get our saves from sideloaded ipa into official app?

regal wolf
#

very much doubt it

#

also not allowed to discuss any unofficial apps in here

#

:c

brisk rose
pliant sapphire
#

I was warned not to mention it here. Sorry folks

bleak cargo
#

Talking with various sources it seems it is not possible

#

Apologies for discussing a forbidden topic

still jacinth
#

im really annoyed because i cant get this joker to work. im trying to make it work like Turtle Bean (or other food jokers) where it goes away after a certain amount of rounds, but it just gives me errors.

#

it shouldnt even be triggering that part, but the game crashes when i end the round

still jacinth
tepid crow
#

you really should include more about the error in the screenshot

still jacinth
#

idk what else to include, but i fixed it

loud citrus
#

why dose this crash my game?

still jacinth
#

for me changing context.end_of_round to context.end_of_round and not (context.individual or context.repetition) worked

loud citrus
#

oh my gosh thank you so much!

#

i have no idea why it fixes the problem but i'm very pleased

still jacinth
#

now im having the same error but for some reason in a different spot!?

loud citrus
#

💀

narrow pollen
#

can someone here help me figure out where i need to download from to get the SMODS.create_card{} function?

pliant sapphire
#

Eh Mods just tell me if this kind of thing is not allowed... But it may be possible to disassemble the Android APK, then reassemble it with the "debug" flag enabled-- Which would allow us to modify the contents of the save folder. I'll play around and let you all know if I come up with anything.

hallow forge
#

#📜・modding-rules "Only PC Modding discussion is permitted - discussion of modding Balatro on other platforms will not be tolerated." You are on thin ice discussing this.

pliant sapphire
#

Yeah apparently I was on thin ice when they put a strike on my YouTube channel for something that's completely legally protected. Whatever, sorry for helping people modify a game they own.
Try to take down my GitHub if you want 🤷‍♀️

brisk rose
#

As much as I don't agree with the rule, you're only gonna cause yourselves problems flouting it. Also they don't care about yoru github only what you talk about here

pliant sapphire
#

They cared about what I posted on my YouTube channel.

brisk rose
#

unfortunate if true

pliant sapphire
#

And those strikes never go away. So yeah, I'm a little salty.

crisp coral
#

they copyright struck you????

pliant sapphire
#

Worse, community guideline strike. Circumventing Technology Measures.

#

Or something along those lines, I forget the exact wording

crisp coral
#

sheeesh

opal spade
#

so it seems like the rule shall remain

#

sadge

narrow pollen
pliant sapphire
#

I was able to enable the debug flag for the Android app. That's what allows us to transfer files into the saves folder. Should have something together soon for transferring saves to Android.
As for iPhone users: I got no clue 🤷‍♀️

crisp coral
narrow pollen
crisp coral
#

main branch

#

it's in core/utils.lua

loud citrus
#

is there a good mod i can look at for how to make a config?

nimble sequoia
#

config for a joker?

loud citrus
#

making a config for my mod

#

sorry that i wasn't clear

nimble sequoia
#

you can check out this one

#

my config is within the src folder

loud citrus
#

so is all of your config expect for the settings themselves handled within the config?

brisk rose
nimble sequoia
#

what

brisk rose
#

It doesn;t show up in the ui for me

nimble sequoia
#

did i misunderstand

#

ohhhhh

#

i misunderstood

#

sorry

loud citrus
#

it's okay

#

thank you anyways

brisk rose
brisk rose
loud citrus
spiral orbit
#

is there a way to make a mod that contains a bunch of texture packs that can be toggled on and off at will?

#

actually ig texture packs dont make you restart do they

brisk rose
spiral orbit
#

lol

#

when are 1x and 2x used?

brisk rose
#

I think it's the pixel art smoothing option, in any case that's what I meant that sscrews up without restart

spiral orbit
#

i see

spiral orbit
#

is there any document that has like, all of the stuff you can use while coding jokers?

maiden phoenix
#

Steamodded's github has a wiki section with a chapter about jokers

spiral orbit
#

ty

spiral orbit
maiden phoenix
spiral orbit
#

ah ty

#

how do you check if a scoring card is an enhanced card?

#

like how theres context.other_card:is_face() to see if a scoring card is a face card, how can you see if its enhanced in general?

maiden phoenix
#

You have to check if the card.ability.effect is different from "Base"

spiral orbit
#

what would that look like in code?

frosty dock
spiral orbit
wintry solar
tepid crow
frosty dock
#

I swear this isn't the first time I messed these up 💀

limpid wing
#

How i can create a mod for change the text in game like joker names and descriptions?

languid mirage
#

make the name variable and update it in loc_vars

#

variable as in #1#

frosty dock
brisk rose
frosty dock
#

that's not lua

languid mirage
#

how is that a Lua thing lol

brisk rose
#

oh sorry

frosty dock
#

that's just balatro's text parser

brisk rose
#

I'm an idiot

#

pfft

#

I thought that when I sent it

languid mirage
#

It's just a placeholder

brisk rose
#

but wasn't sure

languid mirage
#

for formatting variable values into localization

brisk rose
#

yeah it makes sense

#

I should have realized it was a balatro thing

tepid crow
languid mirage
#

I mean, # is fine

#

it doesn't matter too much

brisk rose
languid mirage
#

alternatives are like {} %%

brisk rose
#

idek how else you'd do it

brisk rose
#

[] is kinda what I think automatically when I think placeholder, but idk if it's reserved in the syntax for something specific

languid mirage
#

in lua strings % is reserved as an escape character

#

which is so confusing when you don't know it

brisk rose
#

though yeah it's a string so square brakets would be fine i guess

limpid wing
tepid crow
languid mirage
#

yeah...

#

that was me and I was so confused

#

why it didn't work

tepid crow
#

Yeah same

languid mirage
#

Maybe there's misprint code

#

nvm

tepid crow
languid mirage
#

cryptid has variable description for ERROR joker

#

It's in epicjokers file

#

hmm nevermind

tepid crow
brisk rose
#

a variable as in a loc variable with #1#

tepid crow
#

Well it was Yamper's question, I'm not sure what exactly he's looking for

brisk rose
#

yeah I get'cha

crisp coral
#

the question was fairly ambiguous

limpid wing
#

sorry, im new on this code things

crisp coral
#

it's okay

#

did you want to change the descriptions of existing jokers?

tepid crow
#

That's fine, we just need you to clarify what you're planning to do when you say "change the text"

crisp coral
#

or ones that you added

limpid wing
opal spade
#

lua is a language alright

languid mirage
#

🗿

frosty dock
#

only in lua patterns though? it's still interpreted as a regular character in strings normally

languid mirage
#

I think so yea

#

otherwise more people would have noticed

tepid crow
frosty dock
#

if 1993 is old for a programming language, sure

tepid crow
#

Pretty sure that's older than most people here 💀

frosty dock
#

but yeah there's not much C-style influence in its origin

tepid crow
#

Yeah exactly

brisk rose
#

probably why it feels... off to me when I've only coded in pyton and c++ (and only then in college classes years ago)

bold sigil
#

is lua procedural, oop, or functional?

frosty dock
#

technically it's multi-paradigm

brisk rose
bold sigil
bold sigil
#

like haskell has to be functional

tepid crow
frosty dock
#

I wouldn't say it's inherently object-oriented because it doesn't really have classes, but there's implementations of OOP that support it

tepid crow
frosty dock
#

I'd agree it's more procedural/imperative than functional, though it could certainly be used that way

bold sigil
#

thats good news for me

#

i dont particularly enjoy oop

#

it doesntmesh with my brain well

frosty dock
#

both Balatro itself and steamodded do use an OOP-derived system to emulate classes, though it's actually just prototypes and metatables

floral elk
bold sigil
#

still to this day i dont udnerstand what on earth a monad is

frosty dock
#

Haskell has to be functional because functional is actually a restriction, not a featureset

floral elk
#

a container you can join together

frosty dock
#

it's functional for the purpose of being functional

floral elk
#

or run a function through

floral elk
bold sigil
#

my lecturer spent 4 lectures trying to explain monads

#

and nobody got it

floral elk
#

yeah a monad is anything that satisfies the contract (i.e. interface in OOP) of a monad

#

which is to have an empty value ('identity')
be joinable ('concat')
be mappable ('flatmap')
be wrap/unwrappable ('return', 'bind')

#

so... a container you can join together, like... a list

#

in fact, there is a concept called the 'free monad' which is the most general monad that all other monads can be considered a specialisation of

#

which is... the type List

#

so...

#

a monad is just a List type where some of the Lists are equal

bold sigil
#

out of curiosity

#

assuming you know haskell,

#

where did you learn it?

floral elk
#

university ('declarative programming' undergrad subject) + bartosz milewski's 'category theory for programmers' on youtube

bold sigil
#

fair enough

floral elk
#

former for actually using haskell, latter for understanding the abstract significance

bold sigil
#

i learned most of my haskell from a phenomenal book

#

"learn you a haskell for great good" by Miran Lipovaca

floral elk
#

formally, that means there's a 'forgetful' functor from List to Maybe

bold sigil
#

this is the most understandings of monads ive ever had

floral elk
#

which makes Maybe an instance of List in a way

floral elk
bold sigil
#

trying to figure out Maybe when i was speedrunning learning haskell for my assessment made me cry

#

idk why maybe confused me

bold sigil
#

its phenomenal

floral elk
#

the most common distinction is between choosing to specify the kleisli arrow (>=>) vs the bind operation (>>=) (AKA 'the fish')

bold sigil
#

we basically stopped after monads

floral elk
#

the difference is the kelisli arrow is like function composition, keeping the monad 'lifted' whereas the bind operation puts a map 'under' the monad

#

bind takes a monad, applies a function to it, and gives you back a monad

bold sigil
#

you should change your username to magic monads

floral elk
#

already taken

bold sigil
#

thats a shame

floral elk
#

but this is wasteful cus when you're programming you want to 'construct' the object from minimal parts

floral elk
# bold sigil is that seriously all a monad is?

one caveat, it's a container in the sense that it 'promises' to hold things, not that it necessarily currently does, like the IO and Reader monads don't exactly hold anything at the time, they build up (join/bind) to something that when the main function recieves gets passed input and passes output (the Writer monad 'holds' the value it's trying to write/consume, like when you partially apply a function)

#

with anything functional you gotta tack 'lazy evaluation' all over it

#

otherwise you can't have any control flow at all

#

the benefit is that if everything is functional, you can make every expression lazy

#

anyway back to balatro lua or whatever

bold sigil
#

that was a fun and informative side convo haha

opal spade
#

update on infinifusion: rewrote it to use an recursive system, meaning the code is much cleaner and it can technically have infinite jokers within a fusion

#

also fixed the saved fusions breaking

crisp elbow
#

What is infinifusion again

opal spade
#

tl;dw: ability to fuse literally any jokers together

maiden phoenix
#

Does it include modded jokers too?

opal spade
#

i need to write a bit for loc_vars to show the fused jokers as info_queues + add a way to naturally fuse jokers and then it'll be presentable as release

opal spade
opal spade
#

i'm thinking of making a system like pokemon infinite fusion (where combos can have unique sprites) which would turn this into a fun community project but i think there should be a base system to show the fused jokers proceduraly

#

although im not sure how i'd even do that

opal spade
#

i have a special function that automatically goes through the list of jokers in the fusion, turns infinifusion into that joker and then run whatever function i need, then turn back into infinifusion

#

so like calculate runs card:calculate_joker(context)

crisp elbow
#

The only thing I would wanna see (if possible) is the ability to define custom images and/or localization for fusions but atm it's just proof of concept so that isn't like a necessity

opal spade
#

custom images are definitely one of the things on the todo list because i definitely want it to follow pokemon infinite fusions in that regard

#

although unlike pokemon, mechanically infinifusion can be literally any set of jokers

#

so you could technically have all sinful jokers fused into a single joker

opal spade
#

what im thinking i could do for custom sprites/localizations is turn it into an api module where you basically define what the fusion is made of and what sprites/localization to use

crisp elbow
opal spade
crisp elbow
#

Has this been tested with econ Jokers yet? I know that's kinda weird to do for end of round calculations

opal spade
#

i have not but what it would do if i did is run the econ separately

#

so the rocket + the rocket would end up with 2 lines of rocket money

#

everything infinifusion does is done through turning into the joker its made of

#

except for passive jokers like splash

crisp elbow
#

I see

#

very modular I like it 👍

#

Lemme know if you like need a second playtester for it I'd love to try and test modded jokers out

opal spade
#

i'll release it for testing when i add a natural way to fuse jokers (atm i just have it so you can spawn infinifusion and it comes prefused with 2 placeholder jokers) and the proper info_queue to track the jokers within the fusion (the hard part for this would be restoring vanilla jokers because they dont have a proper loc_vars)

crisp elbow
#

bet

stiff locust
opal spade
crisp elbow
#

I could try

opal spade
#

i also need to hook find joker too but yeah

stiff locust
#

what if the fusion art cut the jokers you fused down the middle and put the halves together

opal spade
#

would be neat but would require me to figure it out

#

for now my plan is to just make it look like undiscovered joker

stiff locust
#

you could do it the "long way" by individually cutting every joker in half and putting them on sprite sheets

tepid crow
#

wouldn't really work for modded jokers

stiff locust
#

yeah

opal spade
#

the point is that literally any jokers could be fused

#

even fusions

stiff locust
#

that seems a little

#

i don't know how to put it but

#

doesn't that invalidate the existance of joker slots

tepid crow
#

there'd be special rules for fusion I'd assume

stiff locust
#

if it just triggers both jokers separately and they take up 2 joker slots there's no point in fusing

#

but if they take up 1 joker slot there's no point not fusing

opal spade
wintry swallow
#

Now that balatro is on mobile are there any mods for it?

opal spade
#

mobile modding has not been legalized unfortunately

wintry swallow
#

Hope it gets legalized in the future

tepid crow
#

lmao saying it that way makes it sound like it's waiting for government approval

wintry swallow
#

Well technically you can with bluestacks

crisp elbow
#

@opal spade wip

#

main inspiration rn is a saw because I'm really getting like mycologist vibes from infinifusion rn and idk why

primal robin
#

I have Lua moment question.
We have initial code which works:

for k, v in pairs(self.P_CARDS) do
  -- stuff
end

BUT if I do:

local iterator = pairs(self.P_CARDS)
for k, v in iterator do
  -- stuff
end

Game crashes with error

bad argument #1 to '(for generator)' (table expected, got nil)

Did I don't understand smth?

frosty dock
tepid crow
frosty dock
#

basically pairs returns more than one value, and for expects to be given all of them

#

when you assign to a local variable, the return value gets automatically adjusted to one value

#

the others get tossed

primal robin
#

In JS it was much easier lumaangry

#

Anyway, thanks

tepid crow
#

why are you trying to assign an iterator to a variable?

primal robin
#

Because I need to use different iterator depends on boolean

#
local _iterator, _iterator_table = pairs(self.P_CARDS)
if args.challenge and args.challenge.deck and args.challenge.deck.cards and G.challenge_setup_use_override and G.challenge_setup_order == 2 then
  _iterator = iterate_challenge_deck(args.challenge.deck.cards)
end
for k, v, _ch_card in _iterator, _iterator_table do
  -- game setup stuff
end
tepid crow
#

just guessing here, but wouldn't

iterator = condition and self.P_CARDS or other_cards
for k, v in pairs(iterator) do
    ...
end

work?

primal robin
#

No it isn't

frosty dock
#
local next = next
if args.challenge and args.challenge.deck and args.challenge.deck.cards and G.challenge_setup_use_override and G.challenge_setup_order == 2 then
   next = iterate_challenge_deck(args.challenge.deck.cards)
end
for k, v, _ch_card in next, self.P_CARDS do
  -- game setup stuff
end
#

assuming iterate_challenge_deck returns an iterator that behaves the correct way

primal robin
#

Sure

function iterate_challenge_deck(t)
  local index = 0
  return function()
    index = index + 1
    if t[index] then
      local _card = t[index]
      local key = _card.s .. "_" .. _card.r
      return key, G.P_CARDS[key], _card
    end
    return nil
  end
end
frosty dock
#

should be fair game then

primal robin
#

Now it works, finally

tepid crow
#

oh they are completely different types, I see

primal robin
#

Yea, and I need include in iterator card crom challenge declaration, that's why I need custom iterator

local keep, _e, _d, _g = true, _ch_card and _ch_card.e or nil, _ch_card and _ch_card.d or nil, _ch_card and _ch_card.g or nil
nocturne garnet
opal spade
#

i got it to work

#

now i just need to finish writing the the function that gives loc_vars for vanilla jokers

nocturne garnet
#

that is overpowered goddamn

nocturne garnet
#

thats what i did when making Rescribere for cryptid

maiden phoenix
opal spade
opal spade
maiden phoenix
#

I guess it's more complicated for joker effect that are done outside of calculation

nocturne garnet
rough furnace
opal spade
#

oh then im doing so fine

#

still need to hook find_joker though 😔

maiden phoenix
#

What about jokers like Splash, Shortcut or Four Fingers?

frosty dock
#

are there any cases of find_joker being used in vanilla code that aren't patched by steamodded?

#

if so they should be replaced

maiden phoenix
#

Yea you could use find_card

opal spade
maiden phoenix
#

Is this from source or lovely dump?

opal spade
opal spade
opal spade
opal spade
rough furnace
frosty dock
#

you should be using SMODS.find_card

rough furnace
#

Oh

#

I have not been

opal spade
#

ok so i have almost everything working

#

just adding/removing to deck isnt working rn

hearty mesa
#

FUCK

#

i just accidentally deleted all the art for all of my jokers

#

luckily there only was like ten but still

#

o7

opal spade
#

except for sixth sense's card destruction apparently???

#

hmmm

#

strange

#

everything is working but there are some strange interactions

nocturne garnet
#

awesome

nocturne garnet
royal ridge
#

i assume seeded runs don't check for unlocks

ornate mist
wintry solar
#

Oh that’s probably the case, yeah

nocturne garnet
opal spade
#

@crisp elbow infinite fusion available for testing

crisp elbow
#

poggg

#

is it on a github link

nocturne garnet
#

And another one!

#

i completely forgot that the C key with debugplus also counts as copying 💀

nocturne garnet
opal spade
nocturne garnet
humble path
frosty dock
#

with the mobile maker tool it's possible to use modified files as a starting point for compilation, but lovely itself hasn't been figured out

#

it's possible to use save files as an entry point, iirc this has even been used to inject steamodded 0.9.8

#

it's worth a try but most mods will at least require a manual process to work without directly using lovely

primal robin
#

How I can define multiple settings tabs for mod?

brisk rose
#

If so Ceres does that

frosty dock
#

define SMODS.current_mod.extra_tabs and return a table of tabs, or the above for multiple tabs inside your tab

primal robin
#

Like SMODS.current_mod.settings_tab but more than 1

#

Cool

frosty dock
#

each tab should have a label string and a tab_definition_function that corresponds directly to a possible config_tab function

primal robin
brisk rose
spiral orbit
#

new to this whole lua stuff, trying to make a joker that copies the first scoring cards enhancement and then applies it to all other scoring cards, seems to crash at the local enhancement line though

#

anyone got any help?

frosty dock
#

yeah that's not valid lua syntax

spiral orbit
#

yeah figured

#

how would it go then?

tepid crow
#

don't have local within a table

frosty dock
#

not exactly sure what you're trying to achieve, but for a start you can't have local inside a table constructor

#

second you're trying to use that variable somewhere completely different

#

so even if it would be valid to declare there, it would be out of scope

spiral orbit
#

so because its not being used in the place where its defined, it doesnt mean anything?

frosty dock
spiral orbit
#

alright

regal wolf
#

anyone know how to draw a UI element beneath something? Like the UI buy buttons?

frosty dock
#

in terms of calculation, I'd argue you're not using the right contexts and this should remotely work in a similar manner to midas mask

primal robin
#

I'm definitely fine when w and minw does not work at all. I'm definitely fine JangSchna

spiral orbit
frosty dock
# spiral orbit i was able to figure out how to make an effect activate when a card is enhanced,...

for your consideration. try to read your way through this and understand what it's doing

calculate = function(self, card, context)
  if context.cardarea == G.jokers and context.before and not context.blueprint then -- activates before the main scoring phase, so the enhancements actually apply
    local first_card = context.scoring_hand[1]
    if first_card.ability.effect ~= 'Base' then -- first scoring card has an enhancement
      for _, _card in ipairs(context.scoring_hand) do -- iterate over each card in scoring hand
        local center = first_card.config.center -- this has info on the card's enhancement
        _card:set_ability(center, nil, true) -- apply that enhancement to current card
        -- optionally add the below to make the cards wiggle
        G.E_MANAGER:add_event(Event({
          func = function()
            _card:juice_up()
            return true
          end
        })) 
      end
      return { -- display a message
        message = 'Enhanced!',
        colour = G.C.MONEY, -- replace me
        card = card
      }
    end
  end
end
spiral orbit
#

oooo ty

regal wolf
regal wolf
#

oh wait

#

i remember how to do it

frosty dock
#

it's nearing 2am so my time is probably better spent just going to sleep at this point

spiral orbit
#

how do you get the last card in the scoring hand? i know context.scoring_hand[1] gets you the first, but how do you get the last? (i doubt just putting 5 would work, as then it would only work for 5 length hands)

royal ether
#

# before a list will give the length of the list

#

so you use context.scoring_hand[#context.scoring_hand]

spiral orbit
#

ty

still jacinth
#

im so confused at whats wrong

edgy reef
#

Maybe you didn't exclude context.repetition?

still jacinth
#
            G.GAME.current_round.free_rerolls = G.GAME.current_round.free_rerolls + card.ability.extra.rerolls
            calculate_reroll_cost(true)
            card.ability.extra.rerolls = card.ability.extra.rerolls - 1
            card_eval_status_text(card, 'extra', nil, nil, nil, {message = '-1 Reroll', colour = G.C.GREEN})
        end
        if card.ability.extra.rerolls == 0 then
            G.E_MANAGER:add_event(Event({
                func = function()
                    play_sound('tarot1')
                    self.T.r = -0.2
                    self:juice_up(0.3, 0.4)
                    self.states.drag.is = true
                    self.children.center.pinch.x = true
                    G.E_MANAGER:add_event(Event({trigger = 'after', delay = 0.3, blockable = false,
                        func = function()
                                G.jokers:remove_card(self)
                                self:remove()
                                self = nil
                            return true; end})) 
                    return true
                end
            })) 
            return {
                message = localize('k_melted_ex'),
                colour = G.C.CHIPS
            }
        end```

is the code for the calculation
edgy reef
#

2nd block would run regardless of context which includes context.repetition.
Should be if context.after and card.ability.extra.rerolls == 0

#

Assuming this is after scoring

#

If it's meant to be within the top block then the issue is it's not included

still jacinth
#

well the 2nd block would only run if rerolls is 0, which would happen only if it had just gotten -1 which can only happen right after the block above it

#

damn i just tested

#

i really dont understand why that works but ok

tepid crow
#

but it doesn't adjust .rerolls so it will activate again next time the func is called

still jacinth
#

oh but the joker didnt delete itself

edgy reef
#

That means that this block isn't even running

#

Cause all these uses of self would crash

still jacinth
#

should i change them to card?

edgy reef
#

yea

still jacinth
#

it works tysm

nova mortar
#

In theory, how would you make a joker that allows for straight looping ( As in, making 3 2 A K Q a valid straight and everything to that nature )

nocturne garnet
opal spade
#

wouldn't it be just G.GAME[] =

nocturne garnet
#

tried

#

let me just try again rq

narrow pollen
#

so uh... do we have to use multi-joker sprite sheets again? or is there a way to make per-joker SMODS.Sprite coding work with SMODS.Atlas coding?

brisk rose
#

(and I do mean on 1.0)

narrow pollen
#

ye, been trying to update my code to the latest version

brisk rose
#

you just use each sprite as an atlas

#

and the position is 0,0

narrow pollen
#

i see... but i'm actually talking about declaring the atlases themselves...

#

do i need to do that anymore?

brisk rose
#

oh lemme look

narrow pollen
#

wait a minute... how did i fuck up the debug server--

#

ugh... guess i have to just...

#

change my mods folder to "Mods_Defunct" and start from scratch until i figure this shit out

narrow pollen
#

well, i can't ignore it because it seems to suppress my ability to send debug messages

#

so i guess i just send info messages for now instead?

zealous glen
#

Print levels are set in-game… for some reason

zealous glen
# brisk rose

Also as they said, you can set up individual sprites by pretty much just changing the object name to Atlas (well there might be some slight tweaks but still)

nocturne garnet
#

how tf do people shade shit????

#

whenever i see Unjust Dagger's sprite i am just

#

amazed

#

i mean like HOW??

brisk rose
#

I think in some cases they may draw it at a normal art resolution and then trace it with pixel art

#

but I'm just guessing

nocturne garnet
#

i cant draw!!!

#

i just like modding!!

brisk rose
#

I can't either, so nw

#

and your jokers look fine, not many base balatro jokers are that fancy

nocturne garnet
#

almost all of my joker art is just a copy and paste of an image scaled down

#

or just a placeholder

#

ubiquity is literally just a filter i accidentally used

brisk rose
#

well it probably says something that I didn't really notice, lol

zealous glen
#

I’ve gotten some advice before

#

IIRC balatro usually uses two highlight colors and a shading color

brisk rose
nocturne garnet
#

smeared joker typa shit

zealous glen
#

I try to pick colors from existing Jokers so I don’t follow that particular guideline

#

Also, things facing the light source are brighter, while facing away are darker. In the middle, there’s a region that can be grey or it can have a stark shift from light to dark depending on the geometry

#

There’s also reflected ambient lighting you can include

#

And you can do dithering to keep the number of colors low

zealous glen
#

@nocturne garnet maybe later I can share some in-progress pics of Brazilian Miku since I asked actual artists for help. I was struggling but in the end I quite like how some elements like the hair turned out

#

I might also have some WIPs of a different Joker, though that one was more closely traced from a music video

brisk rose
#

Tangentially, the great thing about playing with so many modded jokers is that any onconsistency just wraps around to everything going together again

zealous glen
#

Just say it’s a special edition artwork like MTG or it’s a kitchen sink setting like YGO

brisk rose
#

that's why as long as there is some form of identity to jokers, in any form tbh the specific quality/nature art doesn't matter too much for player experience

zealous glen
#

People actually liked my placeholder artworks for my first mod

#

I should release that mod lol

#

Here’s an example of the placeholder artworks

#

Those are at least drawings and not text

nocturne garnet
#

this is peak

brisk rose
nocturne garnet
#

i love him

#

i love the dragon

brisk rose
#

oooh I like too

zealous glen
#

The Dragon is where I got that shading advice for

opal spade
#

the way i draw jokers is by making/finding an hd image to use as a reference, layering it over the pixel canvas, tracing it and then touching it up look better

primal robin
#

Is there any mod with runes (like from Isaac)?

brisk rose
zealous glen
nocturne garnet
#

guys should i reroll

opal spade
nocturne garnet
zealous glen
zealous glen
opal spade
nocturne garnet
#

do yall know how to get the current blind name

zealous glen
#

Yes

#

I can’t check right now but the Steamodded wiki explains how to write Custom Blinds. This is only relevant because they explain how to access the current Blind there

#

The current blind can provide you a key which you can use to access the Blind pool to retrieve all of the Blind’s data

#

Or if you’re currently in a Blind you can probably try to access it there

#

It depends on the timing

narrow pollen
#

there's one good hack i found for making decent shading look better than it actually is.
you do something that makes sense lighting-wise...

#

then... gaussian blur.

opal spade
#

eh

zealous glen
#

I think the original looks good, and the handle needs more shading to match the blade

#

Also the bottom ring maybe could use some

opal spade
#

i love blurry shading but it doesn't look good in pixelart unless its subtle

narrow pollen
#

maybe adding some noise before the gaussian blur helps...?

zealous glen
#

I don’t think this particularly should have noise

#

I’d expect the blade to be smooth not blunt

narrow pollen
#

iunno, i was just giving @nocturne garnet some pointers with their idea

#

forgot to reply to em

zealous glen
#

Yeah I’m not saying these are bad suggestions

#

I’m just talking about this specific artwork

brisk rose
narrow pollen
#

yeah, that's fair. i do think i see what y'all mean about it looking blunt

#

i think i solved that with a very slight tweak.

brisk rose
#

I think the brown lines in the middle are a bit stark and out of place

#

they're just supposed to show the shape of it right?

#

not sure they should have any hue to to them if so

#

unless i'm parsing it wrong

narrow pollen
#

yeah, i think making them a color more in line with the rest of it works

#

slimmed the top of it down just a tad to make it feel a little more sharp

zealous glen
#

Next shade the handle ;P

nocturne garnet
#

for some reason, G.GAME.no_shop is string???

#

it keeps crashing

#

and saying no_shop is string

narrow pollen
zealous glen
#

I think it would look better with fewer colors

narrow pollen
#

something like this, maybe?

tepid crow
nocturne garnet
#

its not supposed to be a string 😭

#

the modifier should be a table

#

nvm i think one of my mods also has a No Shop modifier

zealous glen
#

That’s why you always name things like

nocturne garnet
#

yeah

zealous glen
#

key_name

nocturne garnet
#

changed it to jimb_no_shops

nocturne garnet
#

shiit

#

cant find a way to get the blind type when cashing out

zealous glen
#

what type

nocturne garnet
#

like Small, Big, Boss

zealous glen
#

Do you want the name or the type

nocturne garnet
#

type

zealous glen
#

The types are Boss or not

#

Anyways, I imagine the current blind doesn’t exist during cashing out, so you need to retrieve it earlier

#

Unless it’s a Joker, then you can try to do it on the Rocket timing

#

If it’s a Joker but with a different timing, just have it save the current blind info earlier

#

Preferably as late as possible IMO

wintry solar
#

pretty sure you can do G.GAME.blind:get_type()

zealous glen
#

But I think at that timing the Blind wouldn’t be the same anymore

narrow pollen
#

so "Small -> Boss, Big -> Small, Boss -> Big"

nocturne garnet
#

it doesnt work for me

shell timber
wintry solar
nocturne garnet
wintry solar
#

try last_blind

nocturne garnet
wintry solar
nocturne garnet
#

yea

tepid crow
wintry solar
#

last blind should always have something in it

tepid crow
#

more like my game crashes if I try to get the blind type during cash out

nocturne garnet
tepid crow
#

I think G.FUNCS.cash_out is just too late?

nocturne garnet
#

im also trying to get the last blind in new_round

#

and also G.GAME.blind

#

alright, found a way to get G.GAME.blind