#making-mods-general

1 messages Β· Page 476 of 1

soft lance
#

sadly cant really or else every user loses their data id assume

uncut viper
#

if you use <nexusId>000# then you will never need to worry about it

latent mauve
#

Depends on the asset, some have support for "FormerName"

urban patrol
#

for things like NPCs and locations there's a previous name field

soft lance
obtuse wigeon
#

is there no universal migration system for CP? that seems like something that would be very very useful

soft lance
#

Sadly, im not good enough to know migration yet

#

it uses SMAPI + Content Patcher

urban patrol
#

migration is something CP does automatically in some cases

#

such as migrating 1.5 mods into 1.6

#

(as best it can)

soft lance
obtuse wigeon
#

ahh sorry , should've clarified, migration from one ID to a different ID rather than game version migration

latent mauve
#

game version migration is more of a rewrite operation in CP.

soft lance
obtuse wigeon
#

It's not really something that's thought to add until quite a bit later into a games development/mod loader development when it would need a decent re write to be effective

latent mauve
#

Can't easily do it for non-code, though, so things like TMX or TBIN map files would potentially be broken if location names and similar were automatically changed.

obtuse wigeon
#

The CP version migration is absolutely fantastic though, very pleased to have that

latent mauve
#

It's better for the mod author to do it so nothing gets missed.

obtuse wigeon
#

Oh good point, I didn't think about maps

soft lance
obtuse wigeon
#

Not without issues to my knowledge

soft lance
#

quests isnt in the mod yet either, its in 1.1, which isnt released yet

soft lance
#

well its okay in the far future i can look into it

uncut viper
#

content patcher has an id migration trigger action

obtuse wigeon
#

Oooo good to know

grand badge
#

thank you

latent mauve
#

I had to find it

latent mauve
#

and Items are a supported type

urban patrol
#

that's super useful omg

#

this means i can fix all my previous event forks that didn't have my mod id

soft lance
soft lance
soft lance
#

For GarbageCans, as hiliarious as it is to state, how do these MoveEntries work? This is for pre-existing cans, and I didnt want to overwrite data, however, how do we know what the BeforeId is? Just a little vague for me to understand, unless you know what it is

obtuse wigeon
#

Oh it supports Buildings too?? omg thats exactly what I need! I really didn't want to write C# to do it, Pathos is truly a blessing to the community

latent mauve
#

BeforeId in MoveEntries is the entry you want to put yours before.

soft lance
latent mauve
#

yep

soft lance
#

awesome i'll try that

obtuse wigeon
# uncut viper chu did that actually

In that case, Chu is also a blessing to the community! (I did look at gitblame but only saw pathos listed there, but that's for the docs itself)

latent mauve
uncut viper
soft lance
latent mauve
#

It matters for entries that check the top first for a match and then stop looking once it finds one (like the Appearances system, or MovieReactions)

obtuse wigeon
uncut viper
soft lance
#

since thats all im gonna do, if not needed then I'd assume I can just remove the "MoveEntries" entirely

uncut viper
obtuse wigeon
#

I don't, truly a detriment to all XD (I'm actually guilty of not looking at many patch notes at all until I notice issues)

soft lance
uncut viper
#

as long as you read them before submitting bug reports on my mods before realizing you have an outdated version

soft lance
#

otherwise, my brain is a goldfish

latent mauve
#

They'll already be in Items with the TargetField, so they will spawn at the same chance as the other Items unless you impose a Condition that changes that.

obtuse wigeon
grand badge
#

did i do the fashion sence sprites right?

#

any feedback?

latent mauve
grand badge
#

i used a template from it

latent mauve
#

If you used a template from it, and your JSON matches what was provided with the template for positions, you should probably be fine?

grand badge
#

the overalls covered some of the top so idk if above the shirt is correct

grand badge
#

i got a error for my mod
- Squid Sisters tops 6.7.0 because its manifest declares ContentPackFor without its required UniqueID field.

latent mauve
#

!json

ocean sailBOT
#

JSON is a standard format for machine-readable text files that's used by Stardew Valley mods.

If you need help with a JSON file, you can upload it to smapi.io/json to see automatic validation and share the link here.

When making mods, it's recommended to edit your files in a text editor with JSON support, such as VS Code, Notepad++, or Sublime Text. These programs will check for syntax errors.

grand badge
#

unique id is there twice

latent mauve
#

ContentPackFor is not meant for your Unique ID, it's Fashion Sense's uniqueID

latent mauve
#

The manifest.json in there is the example you should be following

grand badge
#

thank you

#

didnt know the 2nd one was needed

latent mauve
#

ContentPackFor is basically telling SMAPI what framework your mod is using to run. In your case, that's Fashion Sense. πŸ™‚

grand badge
#

anyway to make the sleves transparent

#

and well a good bit of it

#

so it shows skin

#

like i dont want the top to go past what i have colored in

latent mauve
#

I think you would need to remove the gray pixels where you wanted it to be transparent? As for sleeves, I believe you can add a HideSleeves field to the Shirt.

#

(you can also try using SkinToneMasks for the "top" of your shirt if you want the neckline to show skin above it)

grand badge
#

or is it an in game thing

latent mauve
#

Your manifest should never have anything more than what was shown in the example.

grand badge
#

ok

latent mauve
#

I haven't messed with Fashion Sense myself to make a pack, I only know what I've seen from the wiki and other folks putting them together.

#

So the wiki is a better resource in that regard

grand badge
#

thanks for the help

#

doesnt really say how to disable it

latent mauve
#

"HideSleeves": true,

#

If you don't have that in your shirt entry, it assumes you want the sleeves visible.

grand badge
#

thanks

ocean sailBOT
#

@grand badge You leveled up to Cowpoke. You can now speak in our voice channels and share images in all channels!

latent mauve
# grand badge

Put your JSON in the validator using the link from earlier, and see what line it has a problem with. Usually you've missed a comma somewhere, or didn't properly close something in the right spot with a }.

grand badge
#

one problem is the sleeve is still there

#

and the arms are invisible from behind

jaunty shuttle
#

Arms? Who needs arms

hallow prism
#

Someone wanting to eat chocolate

obtuse wigeon
#

depends how much you want chocolate, diving headfirst into a chocolate bowl may not be the most graceful, but certainly is effective

patent lanceBOT
autumn tide
#

hey! does the specifc name for the ids of movie reactions matter?

#

highlighted the area to be specific

uncut viper
#

no, so long as its unique

autumn tide
#

gotcha! so, if I'm overriding krobus's movie reactions, the specific ID shouldn't matter?

uncut viper
#

it shouldnt, no

#

unless some other mod out there is trying to edit it

autumn tide
autumn tide
#

okay- would this be the right way to edit Krobus's movie tastes? little lost here lol

#

OH and i can put the json

#

!json

ocean sailBOT
#

JSON is a standard format for machine-readable text files that's used by Stardew Valley mods.

If you need help with a JSON file, you can upload it to smapi.io/json to see automatic validation and share the link here.

When making mods, it's recommended to edit your files in a text editor with JSON support, such as VS Code, Notepad++, or Sublime Text. These programs will check for syntax errors.

brave fable
#

i believe you also need to use your Id value as the key to that entry

#

i.e. "Entries": { "reaction_documentary": { ... } }

loud sandal
#

Hi, would anyone know the best place to share my mod on this discord?

brave fable
#

unfortunately you're now trapped in a loop SDVpufferpensive most people share mods in #modded-stardew

#

i think the other person pointed you here thinking you needed help making it hahah

autumn tide
brave fable
#

usual server rules apply, no nsfw content, no ai-generated code or content, no stolen content, etc

#

Entries is a {} dictionary (aka. model, map) and so it expects key-value pairs (e.g. "key": "value", "key": { "field": "egg" }), hence the error that it's only found a value without a key (Invalid property identifier character: {)

cedar turtle
#

Does someone happen to know if there's a quick way to reload a FS pack in game? I don't want to restart because I adjusted a few pixels xD

brave fable
#

!reload ?

ocean sailBOT
#
How do I reload my changes while I'm still in game?
  • Content Patcher pack: enter patch reload <your_mod_id> in the SMAPI console window. This will reload and reapply all your patches (but won't recalculate the ConfigSchema or DynamicToken sections if you use them).
  • Translation files: enter reload_i18n in the SMAPI console window. If it's for a Content Patcher pack, also run patch reload afterwards.
  • C#: see the Visual Studio hot reload or Rider hot reload feature.
brave fable
#

hm

brave fable
#

if you type help in the console does it mention a fs_reload or somesuch command?

autumn tide
brave fable
cedar turtle
#

I assume I need to use it with the modID

brave fable
#

it'll be explained in the console SDVpufferthumbsup

autumn tide
cedar turtle
#

hm.. I guess it doesn't do sprites.. SMAPI said loading Data but nothing changed visually. Name and such did update though

brave fable
#

my fs tech support ends here since i've never really used it πŸ™‚β€β†•οΈ

cedar turtle
#

All good. I'm just gonna restart with a minimum modlist xD

obtuse wigeon
#

fs_reload should reload sprites too? I've used it when making my own fs pack before and I don't remember needing to restart every time, you may need to reapply it with the mirror but I'm not 100% certain

ornate trellis
#

yeah fs_reload is reloading all content packs you have

cedar turtle
#

Didn't work for me Think

ornate trellis
cedar turtle
#

But I specifically mentioned my pack think_eyes

brave fable
#

SDVemoteperchance did you not save over the sprite in your in-use mods folder

cedar turtle
#

I did. Maybe I was just being dumb

ornate trellis
#

theres no mention of being able to just reload one pack tho, did you use just that command or try with your id

cedar turtle
#

fs_reload modID

#

Maybe that was the mistake

obtuse wigeon
#

Ye it looks like it takes no args

#

there is also fs_reload_continuous which reloads packs every 2 seconds, you can use the command again to stop the reloading

cedar turtle
#

I see, thanks!

obtuse wigeon
#

Oh wait hang on I was wrong it does take unique IDs, my bad sorry!, fs_reload [manifest_unique_id]

ornate trellis
#

inch resting

brave fable
#

either way i doubt it would fail if you did provide args to a method that didn't expect any args, since it wouldn't be trying/failing to parse anything

#

it'd simply do everything or nothing

cedar turtle
#

I did get some warning messages about another pack. So I guess I just did something wrong here.

full trellis
#

Hi! I have never modded Stardew ever and I'm trying to edit the "Morris Redeemed (NPC Expansion)" for personal use so I can use the " Seasonal Cute Characters SVE" seasonal portraits and sprites with it. Is this the best channel to ask for help with this? If not, where do I ask for help?

cedar turtle
#

Random question.. Considering it's handled in the manifest.json..
Can you make another mod as a dependency for a FS pack?

obtuse wigeon
#

I don't see why it wouldn't work because the dependancy loading is handled by SMAPI right?

brave fable
#

sure, dependencies are handled by SMAPI and can be any mod ID other than the current or any mods depending on it

cedar turtle
#

That's what I thought as well, thanks!

brave fable
#

or you could make it not another mod and just some garbage and have your mod never load if you like

lucid iron
#

does it actually mean anything for a FS mod to be dependent on something else though

uncut viper
obtuse wigeon
lucid iron
#

my confusion comes from not being sure what FS can reference from content

obtuse wigeon
#

I don't think FS does reference anything from content? I know it exposes stuff to content patcher but that's different

brave fable
#

i'm quite sure FS only uses local files from the content pack

#

unfortunately/infuriatingly

full trellis
#

Cool! It’s 100% for personal use. I know how to replace the portrait and sprite pictures that’s easy enough. I have no idea how to make it seasonal or where to add the code in the content.json file

cedar turtle
#

hm..

obtuse wigeon
lucid iron
#

is the morris from morris redeemed a NPC?

#

separate from the original morris stub

obtuse wigeon
#

I think so, he is marriagable in the mod, unless you go the joja route so I would assume hes a seperate NPC from vanilla Morris (just checking to be sure)

#

Yes, different NPC to vanilla (Si_MR_Morris)

lucid iron
#

could maybe do appearance data on him then

autumn tide
#

back again lol, does the $query thing work in movie response dialog? as in the stuff that shows while you are in the theater with the character

cedar turtle
#

ok, now it does update the sprite.. weird

full trellis
obtuse wigeon
#

if the token is used, it would be automatic, Content Patcher automatically replaces {{Season}} with the actual season (you may have to check the capitalisation because I'm not sure if I got it right, always assume capitalisation matters)

full trellis
#

Gotcha! I'll try it right now, thank you!

vernal crest
autumn tide
#

probably not then?

vernal crest
#

Possibly not but easy to check, yes?

autumn tide
#

fair enough!

#

I'll do that... eventually

tiny zealot
#

hey friends, i'm looking for input on my pending update to Font Smasher.
i'm adding the ability to set colors for the sprite fonts (see picture: sprite fonts not matching the interface) because the vanilla colors are hardcoded. the question is: is it worthwhile to allow different color sets for the two sizes of spritefont?
allowing them to be defined separately is strictly more flexible, which makes me want to do it, but i'm not sure it's useful, and if it's not useful then it makes slightly more work for modders. would anyone ever use this feature, or should i just make them global and shared?

obtuse wigeon
#

Oooo I would love this! big fan of maximum customizability

vernal crest
#

Yesss separate definitions

tiny zealot
#

noted. thanks, everyone! SDVpufferheart

uncut viper
#

also putting my vote towards separate definitions

#

wow i saw that /lh

grand badge
heavy pewter
#

What are the limitations of BETAS Harmony Patching? cuz that's what I'm studying next

uncut viper
#

quick question: why

lucid iron
#

Please dont :)

#

Ichor for font smasher can UI mods tell you what colors?

tiny zealot
#

yeah, just a few lines of EditData

heavy pewter
#

And maybe do some postfix patch

#

If I did successfully intercepted it

uncut viper
#

you wont be able to detect what button was pressed

#

BETAS harmony wont let you act differently depending on the result of a function

#

nor can it stop a function from running like a regular C# mod can with a skipping prefix

lucid iron
#

i think learning C# is literally easier for what you wanna do

digital herald
#

C# is pretty easy to understand, the hard part for me is all the boiler template, type you need to manage.

heavy pewter
#

That's sad, my actual goal is to be able to hold the virtual button when planting seeds or putting items in machine in android. I successfully located which DLL holds the virtual buttons in android, but when Im about to make the dream mod, my GitHub CodeSpace free hours was already used lmao, so I can't access my CodeSpace until Nov 29, that's why I'm in the CP packs for now

brittle pasture
#

whatever codespace does you don't need it to develop C# mods

obtuse wigeon
#

I'm pretty sure there will be alternative online editors if you're using it bc coding on a mobile device that can build C#

brave fable
#

imo c# is quite light on the boilerplate, there's a lot of modern conveniences in it these days

narrow owl
#

is there a page on how to use GMCM

brittle pasture
#

are you making a content pack or a C# mod?
this page for adding configs to content packs (which will work with GMCM), or this page for the C# API

sleek igloo
#

I've asked about adding alternate purchase types for custom animals and also skins, but I'm not sure how to go about adding a new alternate purchase type for an existing animal with vanilla variations-

#

specifically, I'm trying to figure out how to add a new cow with it's own milk type to the cows

brittle pasture
#

targetfield is your friend

#

in this case the White Cow is the 'parent' entry

#

you can either add it to the Default entry's AnimalIds field, or make a new entry if it has conditions associated with it (in which case you'll also need MoveEntries to move the entry up so it gets checked before the unconditional Default entry)

sleek igloo
#

conditions meaning like if it's only available after owning a certain barn as an example?

brittle pasture
#

like how Blue Chickens are only available after seeing Shane's 8 heart event

sleek igloo
#

ahhh right

#

I have never actually unlocked blue chickens afshiqwefh

narrow owl
#

he aint gettin my help

sleek igloo
#

weifhewifh I mean I just generally havent seen any content beyond like 1.2 fwefh

#

I never get far enough

brittle pasture
sleek igloo
#

ok I'm still a modder though πŸ˜‚ Nice try tho haha

narrow owl
#

llmao

#

what mods u make?

sleek igloo
#

uh a fair few, khadija's recipe shop, artisanal soda makers, spanish revival buildings

narrow owl
#

cool

tight rivet
#

Clearly we should make the ultimate mod - the final mod. Sekiha-runs

#

runs faster

sleek igloo
#

sak is ded

tight rivet
#

Poor Sak. Barely alive, and now she is a dead plush.

sleek igloo
#

but was that not already her true form

tight rivet
#

undead plush aer typically not allowed in most places.

narrow owl
#

hey quick question if i reskinned pierre to trash would u download it?

sleek igloo
#

hmm unlikely, I'm an aesthetic ocd player πŸ˜…

tight rivet
#

I use the Piper mod

sleek igloo
#

I also dont really talk to the npcs

#

hence no blue chickens LOL

tight rivet
#

which reminds me, I need to make that patch of like nine thousand other mods that assume it's still Pierre, lol

narrow owl
#

i ask this bcoz there is a subreddit called r/fuckpierre

patent lanceBOT
sleek igloo
#

oh pierre sucks

narrow owl
#

fr

sleek igloo
#

but I just ignore him lol

#

he's just the seed man to me

tight rivet
#

I mean, to be fair, I'd be stressed and acting out too if my competition is Joja Supermarket

narrow owl
tight rivet
#

I mean, no.

#

i didn't say he was perfect, but

sleek igloo
# brittle pasture you can either add it to the `Default` entry's `AnimalIds` field, or make a new ...
            "LogName": "Edit Vanilla Cows",
            "Action": "EditData",
            "Target": "Data/FarmAnimals",
            "TargetField": ["White Cow"],
            "Entries": {
                "AlternatePurchaseTypes": [
                      {
                        "Condition": null,
                        "AnimalIds": [
                          "Strawberry Cow"
                        ]
                      }
                    ],
            }
        },
        {
            "LogName": "Add Strawberry Cows",
            "Action": "EditData",
            "Target": "Data/FarmAnimals",
                "Strawberry Cow": {
                    "DisplayName": "Strawberry Cow",
                    "House": "Barn",
                    "Gender": "Female",
                    "PurchasePrice": -1,``` would this work for a basic patch? I'm using the strawberry cow mod to test the method
brittle pasture
#

no, that's wiping the existing entry

sleek igloo
#

ack ok

brittle pasture
#

drill into AlternatePurchaseTypes as well

#

and since it doesn't look like you have conditions, feel free to drill deeper into into the Default entry > AnimalIds field

sleek igloo
#

I figured I'd do an easy version first

raw oxide
#

!converter

brave fable
#

(of all the json terminology, somehow drilling is the strangest of them all to me. more than nesting in a dictionary.)

#

!converters

raw oxide
#

thanks

uncut viper
brave fable
#

spelunking makes as much sense as drilling and carries a far greater air of whimsy

sleek igloo
#

oh i didn't know drilling was a json term

lucid iron
#

Breadcrumbing

sleek igloo
#

i thought you were telling me to study fwehfioew

uncut viper
#

i would argue the deeper structure of the json is inaccessible until you crack the walls down, and thus you cannot spelunk without first drilling

#

drilling = drilling down = going deeper into the nested json via targetfield so you dont overwrite things

brave fable
#

demolishing it is

sleek igloo
#

ahhh thanks!

brittle pasture
#

I had used the burgers analogy before, so I hereby propose drilling -> biting into the burger

uncut viper
#

i vehemently refuse the burger analogy

brittle pasture
#

"what you're doing right now is eating the entire burger even though you only want to remove the pickles"

uncut viper
#

also blueberry consider this: if you rotate a giant json object 90 degrees clockwise onto its side, it makes the shape of a drill

obtuse wigeon
#

I mean, diving is also a valid term, dealing with json often feel like you're drowning in different brackets

brave fable
#

i veto diving in favour of delving

sleek igloo
#

why is no one using russian dolls

uncut viper
#

that would imply identical copies of the outer structure found within

obtuse wigeon
#

Oh delving is a good word

sleek igloo
#

but they're not identical, they're smaller

#

and some russian dolls have different appearances too

uncut viper
#

every matryoshka doll ive seen has typically been an identical but smaller copy on the inside

obtuse wigeon
#

you have seen some very boring ones in that case XD

sleek igloo
#

I've seen a couple of cute ones with variation

#

I havent seen enough to say which is more accurate lol

brave fable
#

but the child doll is still derived from its parent, whereas json objects aren't necessarily

urban patrol
#

i had one as a kid that went grandma>mom>baby etc through liike 5 generations

uncut viper
#

i also googled it just now and see most of them are identical copies. im doing modding research

sleek igloo
#

fair

brave fable
#

in light of new evidence i propose nosing and stickybeaking

uncut viper
#

also the nested json doesnt have the same structure as the outer json

sleek igloo
#

stickybeaking made me snort

uncut viper
#

why dont we call it digging too greedily, and too deep

obtuse wigeon
#

I mean, digging implies the removal of material, which you really don't want to do with json lest you get a very angry console

uncut viper
#

its not removed, simply moved elsewhere

brave fable
#

so too does drilling imply that the outer json is ground into a fine powder

uncut viper
#

im mortar and pestling my json into an herbal remedy

brave fable
#

many have come to this channel confused, expecting the rest of pierre to be completely powderised

sleek igloo
#

this is what drilling means is then? "TargetField": ["White Cow", "AlternatePurchaseTypes"],

uncut viper
#

yep

brave fable
#

all that is left being a lone gift taste

uncut viper
#

you are drilling down into the AlternatePurchaseTypes level of indentation

#

which has now become top-level as a result

#

or rathere verything in it is now top level

#

(if you wanna question terminology, why is it called top level when its clearly on the far left?)

sleek igloo
#

my brain doesn't like this hdeifh

brave fable
#

well that's just a fault of the presentation. you may as well ask why a binary tree doesn't always grow upwards

uncut viper
#

unfortunately unlike before, me calling it top level is not a joke but also the actual term used

obtuse wigeon
#

Prospecting is also a quite valid term, that doesn't imply removal of material, and it implies search for something specific

uncut viper
sleek igloo
#

Do I just continue the Entry like normal after?

uncut viper
#

you do!

#

or Fields, as appropriate

brave fable
#

all the more support for delving and nosing

uncut viper
#

just now the entry key you use would be found inside AlternatePurchaseTypes, not outside in the rest of the outer animal data

obtuse wigeon
#

question, by nosing do you mean "nosing around" as in searching, or nosing as in a rounded thing like the nosing of a rocket

uncut viper
#

and since AlternatePurchaseTypes is a list of objects, you'd use the Id as the entry key, same as you would for adding a new item to Data/Objects

#

(or editing an existing item)

sleek igloo
#

what do you mean by entry key? Sorry I'm not very familiar with this newfangled CP stuff, it doesn't mesh well with my way of thinking

brave fable
#

nosing in the context of a pig searching for truffles (truffling is apparently not a verb but rightly should be to avoid situations like this)

lucid iron
#

(this is where I get on my soapbox about are you sure you want to do alt purchase)

sleek igloo
#

yes because i want a different milk type

#

otherwise I'd do a skin

lucid iron
#

Just add new

obtuse wigeon
uncut viper
#
"Entries": {
  "{{ModId}}_MyAnimalSkin": { // <--- The Entry key
    ...
  }
}
lucid iron
#

It's more clear to the player if it's a new cow imo

sleek igloo
#

But I want the cows to be all listed together

#

this is just a personal edit though

brave fable
#

fortunately the > shape of an indented json file does also look like the nosing of a rocket

sleek igloo
#

I'm practicing the method

lucid iron
#

Then sure i shall put the soap box away sleep

sleek igloo
#

the actual "mod" I'm doing is just a set of templates

#

that's why I keep asking for specific use cases πŸ˜…

#

you're right though chu, it is easier to understand as a separate entry

#

I just wanna know how to do it

obtuse wigeon
uncut viper
#

to more accurately describe what an entry key is:
despite AlternatePurchaseTypes being a List of objects, in order to edit it with CP you must still treat it as a Dictionary, where strings are the keys and the data you're creating is the value. Thus, your "Entry key" is what string you are using for your dictionary key under your "Entries" line, and it should correspond to the "Id" field found within your data trhat you're adding/editing

sleek igloo
brittle pasture
#

also don't forget that AlternatePurchaseTypes pick the first eligible entry, so once you add your entry you'll need to

  • use MoveEntries to move it to the top so the game doesn't just pick the default entry over yours
  • add a condition (like RANDOM 0.33) so the game doesn't just always pick your entry over the default
uncut viper
#

do you have an understanding of what a dictionary is for that to have made sense

sleek igloo
#

I feel like I might have... 5 years ago

brittle pasture
#

or just drill into Default tbh

sleek igloo
#

I'm not sure what you mean by default in this case

#

(I wasn't bothering with condition because I was using livestock bazaar)

uncut viper
#

byway of example, here is a string to integer dictionary:

"String1": 15,
"secondstring": 19,
"aaaa": 0

each string (the key, which must be unique) corresponds to a value (in this case, a number)
in your case, the value just happens to be another chunk of stuff between two { } instead of a number

sleek igloo
#

I hadn't even considered it tbh

brittle pasture
#

(to reduce confusion ignore me for now, I shall continue once you have some code I can give further feedback)

sleek igloo
#

thanks selph SDVpufferheart

sleek igloo
#

integer dictionary because it's a number value?

uncut viper
#

yup

#

usually called a "string to int" dictionary, of the form "<key type> to <value type>"

sleek igloo
#

I think you lost me again sadhehf

#

why the < >

uncut viper
#

theyre placeholders

#

its called "string to int" because the key type is strings and the value type is numbers (integers specifically)

#

if the key type was strings but the value was true/false then it'd be a "string to bool" dictionary (bool -> boolean -> true/false)

#

just letting you know the way people usually call dictionaries bc theyre not always going to be strings or numbers

sleek igloo
#

I kind of get it

#

that helped, thanks!

digital herald
#

Do you know where I can see the code for type Farmer in Stardew Valley C#?

urban patrol
#

!decompile

ocean sailBOT
digital herald
#

Thank you! That made a lot of sense, my grep only returns binary matching.

brave fable
#

after decompiling and exporting, you can quickly navigate through the solution in VS with Ctrl+T, the top search bar, or the solution explorer

#

you can also use the unlabeled cross-arrows icon in the solution explorer to highlight your current file, which occasionally comes in handy

digital herald
#

i use vim, and my vscode is so slow, I couldnt use it.

#

So i just grep for everything.

brave fable
#

that aside, i suppose you could also use vscode, but with ctrl+P instead of/in addition to ctrl+T for roughly the same effect

lucid iron
#

some ppl also just search in ilspy

sleek igloo
brittle pasture
#

no; that's not what an alt purchase entry looks like

uncut viper
#

no, because you're adding an entire new animal data inside the alternatepurchasetypes

sleek igloo
#

derp sorry, I forgot to add it

uncut viper
#

(also i can only really verify syntax here, i dont know animal data functionally speaking)

#

(selph is part animal though and knows things like the back of their hand i hear)

sleek igloo
#

selph is very very helpful <3

#

everyone here usually is SDVpufferheart

#

like this? ```
"LogName": "Load data for Strawberry Cow (Strawberry Cow)",
"Action": "EditData",
"Target": "Data/FarmAnimals",
"TargetField": ["White Cow", "AlternatePurchaseTypes"],
"Entries": {
"ADStrawberryCow_Strawberry Cow": "Strawberry Cow"
},

uncut viper
#
{
  "Id": "BlueChicken",
  "Condition": "RANDOM 0.25, PLAYER_HAS_SEEN_EVENT Current 3900074",
  "AnimalIds": [
    "Blue Chicken"
  ]
}

this is what one bit of AlternatePurchaseType data looks like, so this is what you need to be adding

brittle pasture
#

still no
if you look at the unpacked files/wiki this is what a typical entry directly under AlternatePurchaseTypes looks lik- see Button's post

uncut viper
#

but with an entry key in front of it ofc

#

(and obv change whatewver else to match what you want, i doubt you're adding a blue chicken)

sleek igloo
#

I tried to unpack my animal data and it wouldn't unpack for some reason

#

the images worked, but none of the data

uncut viper
#

well thats a much separate issue that is very critical to solve

brittle pasture
#

are you using StardewXnbHack

uncut viper
#

you will not really go far without a proper unpack, at least not painlessly

sleek igloo
#

I'm using xnbcli, which is what I used in ye olde times

uncut viper
#

step 1: dont

#

(/lh)

sleek igloo
#

lol

uncut viper
#

!unpack

ocean sailBOT
#

Follow this guide to unpack the game's content files in order to see and explore how the game data is structured.
It's helpful when making your own mods, or just to learn about how the game works!

uncut viper
#

use the one listed on the wiki here

sleek igloo
#

what does /lh mean

uncut viper
#

lighthearted

sleek igloo
#

I'm completely off social media

#

huh thats new

#

to me lol

uncut viper
#

as in im not chastizing you or anything when saying "step 1: dont" just take it as a jovial jest

brave fable
#

/jj

sleek igloo
#

just joking?

brave fable
#

no, jovial jest. it's not caught on yet

obtuse wigeon
sleek igloo
#

guys stop distracting me I will never finish this otherwise πŸ˜‚

#

I know what / is

uncut viper
#

you've got time while your files unpack SDVdemetriums

sleek igloo
#

like /jk

brittle pasture
#

!unpack but yes pls use stardewxnbhack follow instructions here

ocean sailBOT
#

Follow this guide to unpack the game's content files in order to see and explore how the game data is structured.
It's helpful when making your own mods, or just to learn about how the game works!

brave fable
#

you correctly said earlier that we're only useful sometimes 😌

sleek igloo
#

not what I said lol

#

also not not what I said

brave fable
#

well i'm making it true whether u like it or not

sleek igloo
#

lmao

digital herald
#

Thank you! De-compiled the DLL work!

fervent horizon
#

Curiosity question, should all items use qualified IDs in every field?

#

Like is that the new standard format

uncut viper
#

yes, except for when they shouldnt

brittle pasture
#

depends; some very rare instances of game data still expects unqualified ids

brave fable
#

not necessarily, all things are handled in different places and in different ways, and the game has legacy/unmodernised code going back a long way

uncut viper
#

if relevant it'll be documented that they expect unqualified

brittle pasture
#

when in doubt check if the wiki tells you to use "qualified or unqualified ID" or just one or the other

uncut viper
#

and if its not documented it likely quickly will be after found out

fervent horizon
#

Cool, I kind of figured that was the case

brave fable
#

the game is nothing if not inconsistent 🀝

fervent horizon
#

I feel that is the curse of forever games like Stardew and Minecraft, and other similar situations

sleek igloo
#
            "LogName": "Add Strawberry Cow to Vanilla Cows",
            "Action": "EditData",
            "Target": "Data/FarmAnimals",
            "TargetField": ["White Cow", "AlternatePurchaseTypes"],
            "Entries": {
                "Id": "ADStrawberryCow_StrawberryCow",
                "AnimalIds": [
                  "Strawberry Cow"
                ]
              },
            },``` I copied the blue chicken example but I'm not sure it's right
brittle pasture
#

Entries expect a dictionary of key to values which will be dropped into the drilled in field; right now you don't have an object wrapping your loose fields so you're just dropping them directly into the AlternatePurchaseTypes field

#
{
            "LogName": "Add Strawberry Cow to Vanilla Cows",
            "Action": "EditData",
            "Target": "Data/FarmAnimals",
            "TargetField": ["White Cow", "AlternatePurchaseTypes"],
            "Entries": {
                "ADStrawberryCow_StrawberryCow": {
                  "Id": "ADStrawberryCow_StrawberryCow",
                  "AnimalIds": [
                    "Strawberry Cow"
                  ]
              },
            },
},
#

should be like this

sleek igloo
#

ahhhhhh that makes sense

#

does loading the date after that work the same way as it would for a modded animal?

#

data*

brittle pasture
#

if you mean editing the alt purchase type for a modded animal that's not your own, then sure

#

anyway I think it's a good time to bring back the two caveats I mentioned:

AlternatePurchaseTypes pick the first eligible entry, so once you add your entry you'll need to

  • use MoveEntries to move it to the top so the game doesn't just pick the Default entry over yours
  • add a condition (like RANDOM 0.33) so the game doesn't just always pick your entry over the Default entry
#

after the code block above the alt purchase fields look like this:

  • Default, either white or brown cow, no conditions
  • ADStrawberryCow_StrawberryCow, strawberry cow, no conditions
#

you want it to be

  • ADStrawberryCow_StrawberryCow, strawberry cow, 1/3 chance or something
  • Default, either white or brown cow, no conditions
#

see here for documentation on moving entries

sleek igloo
#

thanks selph!

drowsy pewter
#

this chat is never helpful, they keep bullying me and telling me to go back to preschool

soft lance
brittle pasture
#

that's the temporary role color given to the server's top yappers of the week

inland rain
#

portable furnaces

drowsy pewter
#

does the farmer have a back of steel?

inland rain
#

the 997 alien scarecrows didn't tip you off?

brittle pasture
#

need portable manure composter

#

hmm pungent aromas

drowsy pewter
#

as long as it makes npcs do the trash reaction whenever they see you

dreamy owl
#

what vanilla NPC do I start with?

drowsy pewter
#

for?

dreamy owl
#

portrait mod

#

can't decide

wet elm
#

Guys I'm converting a mod

#

So I can have torii gates

#

Into content patcher

#

Might need help idk

#

Thinking of making it a big craftable

brave fable
#

torii are pretty big SDVpufferthinkblob you'll either need to use Bigger Craftables (if it still works) or make them buildings instead

#

or furniture, though you'd likely need Furniture Framework for that

#

what's the original mod you're converting?

wet elm
#

I'm assuming I can convert it for personal use, yeah?

wet elm
brave fable
#

sure, you can do anything you want for personal use SDVpufferthumbsup obviously nobody can stop you from doing what you like on your own pc, it's just publishing/sharing that can be a problem

#

!unpack the game content if you haven't already done so:

ocean sailBOT
#

Follow this guide to unpack the game's content files in order to see and explore how the game data is structured.
It's helpful when making your own mods, or just to learn about how the game works!

brave fable
#

you'll need to do so in order to see how building data is formatted, the stable might be a good point of reference since it has a collision map (a tic-tac-toe grid that determines whether you can walk through tiles)

digital herald
wet elm
#

And winlator hates me

brave fable
#

ah. i don't have any help for that unfortunately, i've only used windows

#

in that case you could try downloading some Content Patcher building mods from the nexus as examples

wet elm
#

And yeah I've got the wiki up

#

And ghituo

#

GitHub

wet elm
#
{
    "Format": "2.8.0",
    "Changes": [
        {
           "Action": "Load",
            "Target": "Mods/lanterncat.largetorii",
            "FromFile": "assets/largetorii.png"
      },

        {
            "LogName": "Large Torii Gate",
            "Action": "EditData",
            "Target": "Data/Buildings",
            "Entries": {
                  "Large Torii Gate": {
                      "ID": "lanterncat.largetorii",
                      "Name": "Large Torii Gate",
                      "Description": "A large torii gate to place on your farm.",
                      "Texture": "Mods/lanterncat.largetorii/largetorii"
                  },
wet elm
brave fable
#

you'll still need to fill in a few more fields, such as CollisionMap, FadeWhenBehind, DrawShadow, and so on as you like

wet elm
# brave fable you'll still need to fill in a few more fields, such as `CollisionMap`, `FadeWhe...
    "Format": "2.8.0",
    "Changes": [
        {
           "Action": "Load",
            "Target": "Mods/lanterncat.toriigates/largetorii, Mods/lanterncat.toriigates/smalltorii",
            "FromFile": "assets/{{TargetWithoutPath}}.png"
      },

        {
            "LogName": "Large Torii Gate",
            "Action": "EditData",
            "Target": "Data/Buildings",
            "Entries": {
                  "Large Torii Gate": {
                      "ID": "lanterncat.largetorii",
                      "Name": "Large Torii Gate",
                      "Description": "A large torii gate to place on your farm.",
                      "Texture": "Mods/lanterncat.toriigates/largetorii",
                      "DrawShadow": "true",
                      "AllowsFlooringUnderneath": "true",
                      "Builder": "Robin",
                      "MagicalConstruction": "true",
                      "Size": {
                        "X": 2,
                        "Y": 4
                      },
                      "FadeWhenBehind": "false",
                      "CollisionMap": "XOOX\nXOOX",
                  },
                  "Small Torii Gate": {
                      "ID": "lanterncat.smalltorii",
                      "Name": "Small Torii Gate",
                      "Description": "A small torii gate to place on your farm.",
                      "Texture": "Mods/lanterncat.toriigates/smalltorii",
                      "DrawShadow": "true",
                      "AllowsFlooringUnderneath": "true",
                      "Builder": "Robin",
                      "MagicalConstruction": "true",
                      "Size": {
                        "X": 2,
                        "Y": 4
                      },
                      "FadeWhenBehind": "false",
                      "CollisionMap": "XOOX\nXOOX"
                      }
            }
        }
        
    ]
}```
#

I think I did it

brave fable
#

i'd guess that your large and small torii have different sizes as well, so you'll want to update both the Size and CollisionMap for one or the other, depending

wet elm
#

Wait I need to change the sizes

wet elm
wet elm
#
  "Format": "2.8.0",
  "Changes": [
    {
      "Action": "Load",
      "Target": "Mods/{{ModId}}/largetorii, Mods/{{ModId}}/smalltorii",
      "FromFile": "assets/{{TargetWithoutPath}}.png"
    },
    {
      "LogName": "Torii Gates: Data",
      "Action": "EditData",
      "Target": "Data/Buildings",
      "Entries": {
        "{{ModId}}_largetorii": {
          "Name": "Large Torii Gate",
          "Description": "A large torii gate to place on your farm.",
          "Texture": "Mods/{{ModId}}/largetorii",
          "DrawShadow": "true",
          "AllowsFlooringUnderneath": "true",
          "Builder": "Robin",
          "MagicalConstruction": "true",
          "Size": {
            "X": 4,
            "Y": 4
          },
          "FadeWhenBehind": "false",
          "CollisionMap":  "XOOX\nXOOX\nXOOX\nXOOX",
        },
        "{{ModId}}_smalltorii": {
          "Name": "Small Torii Gate",
          "Description": "A small torii gate to place on your farm.",
          "Texture": "Mods/{{ModId}}/smalltorii",
          "DrawShadow": "true",
          "AllowsFlooringUnderneath": "true",
          "Builder": "Robin",
          "MagicalConstruction": "true",
          "Size": {
            "X": 3,
            "Y": 3
          },
          "FadeWhenBehind": "false",
          "CollisionMap": "XOX\nXOX\nXOX"
        }
      }
    }
  ]
}```
brave fable
#

looks good!

brave fable
wet elm
#

I need help with making the context tags work

  "Format": "2.3.0",
  "Changes": [
    //Craftables 
    {
      "LogName": "Japanese Lanterns - Craftables",
      "Action": "EditData",
      "Target": "Data/BigCraftables",
      "Entries": {
        "{{ModId}}_largetorii": {
           "Name": "{{ModId}}_stonelantern",
           "DisplayName": "Yukimi-Gata Stone Lantern",
           "Description": "A yukimi-gata style Japanese lantern.",
           "Price": 500,
           "Fragility": 0,
           "CanBePlacedOutdoors": true,
           "CanBePlacedIndoors": true,
           "IsLamp": true,
           "Texture": "Mods/{{ModId}}/lanterns",
           "SpriteIndex": 0
           "ContextTags": [
            "torch_item", 
            "light_source"
          ]
        },
        "{{ModId}}_largebamboolantern": {
           "Name": "{{ModId}}_largebamboolantern",
           "DisplayName": "Large Andon Bamboo Lantern",
           "Description": "A large andon style Japanese lantern.",
           "Price": 500,
           "Fragility": 0,
           "CanBePlacedOutdoors": true,
           "CanBePlacedIndoors": true,
           "IsLamp": true,
           "Texture": "Mods/{{ModId}}/lanterns",
           "SpriteIndex": 1,
           "ContextTags": [
            "torch_item", 
            "light_source"
          ]
        },
        "{{ModId}}_smallbamboolantern": {
           "Name": "{{ModId}}_smallbamboolantern",
           "DisplayName": "Small Andon Bamboo Lantern",
           "Description": "A small andon style Japanese lantern.",
           "Price": 500,
           "Fragility": 0,
           "CanBePlacedOutdoors": true,
           "CanBePlacedIndoors": true,
           "IsLamp": true,
           "Texture": "Mods/{{ModId}}/lanterns",
           "SpriteIndex": 2,
           "ContextTags": [
            "torch_item", 
            "light_source"
          ]
        }
    //Lights 
    {
      "LogName": "Japanesee Lanterns - Lights",
      "Action": "EditImage",
      "Target": "Mods/{{ModId}}/lanterns",
      "FromFile": "assets/lanterns_night.png",
      "When": {
        "Time": "{{Range: 1600, 2600}}"
      },
      "Update": "OnLocationChange"
    ```
#

I even copied from another json that smapi didn't have an issue with, but when I ran this one, it didn't like it

dreamy owl
#

Do- does it really take this long SDVpufferwaaah

dreamy owl
#

Bashing my head into a wall. It's been since 9pm and I haven't even finished coloring of my Seb portrait

#

And I'm productive

#

Anyways time for more chicken nuggets I'm hungry and sobbing

dreamy owl
#

The lines at least

ocean sailBOT
#

JSON is a standard format for machine-readable text files that's used by Stardew Valley mods.

If you need help with a JSON file, you can upload it to smapi.io/json to see automatic validation and share the link here.

When making mods, it's recommended to edit your files in a text editor with JSON support, such as VS Code, Notepad++, or Sublime Text. These programs will check for syntax errors.

vernal crest
dreamy owl
#

Why did I choose Seb first? I wanted to fix his hair

vernal crest
vernal crest
wet elm
#

Fixed it I think

  "Format": "2.8.0",
  "Changes": [
    //Craftables 
    {
      "LogName": "Japanese Lanterns - Craftables",
      "Action": "EditData",
      "Target": "Data/BigCraftables",
      "Entries": {
        "{{ModId}}_largetorii": {
           "Name": "{{ModId}}_stonelantern",
           "DisplayName": "Yukimi-Gata Stone Lantern",
           "Description": "A yukimi-gata style Japanese lantern.",
           "Price": 500,
           "Fragility": 0,
           "CanBePlacedOutdoors": true,
           "CanBePlacedIndoors": true,
           "IsLamp": true,
           "Texture": "Mods/{{ModId}}/lanterns",
           "SpriteIndex": 0,
           "ContextTags": [
            "torch_item", 
            "light_source"
          ]
        },
        "{{ModId}}_largebamboolantern": {
           "Name": "{{ModId}}_largebamboolantern",
           "DisplayName": "Large Andon Bamboo Lantern",
           "Description": "A large andon style Japanese lantern.",
           "Price": 500,
           "Fragility": 0,
           "CanBePlacedOutdoors": true,
           "CanBePlacedIndoors": true,
           "IsLamp": true,
           "Texture": "Mods/{{ModId}}/lanterns",
           "SpriteIndex": 1,
           "ContextTags": [
            "torch_item", 
            "light_source"
          ]
        },
        "{{ModId}}_smallbamboolantern": {
           "Name": "{{ModId}}_smallbamboolantern",
           "DisplayName": "Small Andon Bamboo Lantern",
           "Description": "A small andon style Japanese lantern.",
           "Price": 500,
           "Fragility": 0,
           "CanBePlacedOutdoors": true,
           "CanBePlacedIndoors": true,
           "IsLamp": true,
           "Texture": "Mods/{{ModId}}/lanterns",
           "SpriteIndex": 2,
           "ContextTags": [
            "torch_item", 
            "light_source"
          ]
        }
      }
    },
    //Lights 
    {
      "LogName": "Japanesee Lanterns - Lights",
      "Action": "EditImage",
      "Target": "Mods/{{ModId}}/lanterns",
      "FromFile": "assets/lanterns_night.png",
      "When": {
        "Time": "{{Range: 1600, 2600}}"
      },
      "Update": "OnLocationChange"
    }
  ]
}```
#

I also screwed up 2.3.0 and 2.8.0

#

Dyslexia πŸ™„

vernal crest
#

Plus, the json website shows you which brackets are paired which makes it much easier to see if they're all present and in the right place ^_^

wet elm
hard fern
#

@outer glacier halp

eternal snow
hard fern
#

πŸ˜” these scam bots are everywhere i swear

eternal snow
shut edge
#

They target popular game servers I think

#

I get PM requests from here and TMNT server semi often

whole raptor
#

I didn't know we could have multiple i18n jsons now SDVpuffereyes (that's from ESR)

hard fern
whole raptor
#

So basically we can have a Default folder and all the jsons inside act as the old default.json?

hard fern
#

but you have to pick either the folders or all in one files

#

so not default folder and also a default.json outside the folder

#

(i think thats how it works anyways)

whole raptor
#

Yeah, figured

#

I'm guessing it's the same with other languages then? So if I have a default folder, Zh must also be a folder and not just a zh.json?

grand badge
lucid iron
#

default.json is preferred over default/ unfortunately

whole raptor
#

I'm not really planning on changing the structure in my published mods, but it'd be neat to use if I ever want to release something new

#

(extremely low chance of that happening tho)

heavy pewter
grand badge
#

is this a code error or a sprite error?

dusk terrace
#

hard to tell what's going on there

#

what are you trying to do?

grand badge
#

make a fashion sense shirt but with no sleeves

dusk terrace
#

so what's the issue? it uses the wrong colors?

grand badge
#

like these characters

grand badge
dusk terrace
#

what fashion sense defines as sleeves are the arms iirc

grand badge
#

alsol these white things still there

dusk terrace
#

if you don't want the actual sleeve part of the shirt, you'll have to tell it to draw regular arms without the sleeves part on them

grand badge
#

how do i do that?

dusk terrace
#

yea the white part is the shirt part on the sleeve texture

#

I can't remember on the fly... let me check

grand badge
#

thanks

#

been looking for a fix since last night

dusk terrace
#

I can't remember if FS has a default sleeve texture without shirt- or a way to ignore it

#

but either way, you can easily make your own sleeve texture without it

#

if you look at farmer texture, it essentially has 3 columns- the 2 columns to the right are the sleeves so just crop out the first column

grand badge
dusk terrace
#

yep that one- looks outdated though

grand badge
#

its from fashion senses github

dusk terrace
#

ah, yea, I see that now from the example pack

#

I think the only oudated frames are the slingshot and panhandle frames

grand badge
#

i actually had a tool for that

dusk terrace
#

You can get the current texture from Characters/Farmer if you have them unpacked

#

should look like this

#

then you just need to crop out the body, remove the color palette from the top-right, and recolor the sleeve bits to be skin-colored

#

or other way around and update your sleeve texture to update the slingshot and pan handling but I'm not sure if anything else was changed

dreamy owl
#

I am in confusion

#

I'm actually gonna crash out

#

anyways

#

How high do I have to turn up DPI to make my portrait not look pixelated at 128px

hard fern
#

Like 128px is quite small

lucid iron
#

Are you making hd portrait

hard fern
#

And it's just gonna get crunched by the game itself too

dreamy owl
#

sort of?

#

one second lemme grab my file

hard fern
#

Cuz i think there's a soft limit for how HD you can make HD portraits before there's no "enhancement" in pixels anymore

#

Which i think might be 256x256?

dreamy owl
#

I can compress

#

cause. Life, accidentally made it 3"x3"

#

DPI is 300 rn

hard fern
#

Well if you're making hd portraits you don't need to make it smaller, im just saying there's but so much you can do to it before there's no visual difference in-game

dreamy owl
#

I'm going to pull it up in game rq

dusk terrace
#

also another factor to account for is if you make your file too hd and the lines are too thin, it might look weird when downsized to fit

#

because stardew doesn't do the neat anti-aliasing smoothing picture editing softwares do

dreamy owl
#

cries in all of that graphic design training is useless here

#

ok so I made DPi too high and now I have to restart SDVpufferwaaah

dusk terrace
#

like take this post on DDFC... theonly suggestion I had for them was to save it on a less HD size 🀷

lucid iron
#

I don't know of dpi means anything for sdv

dreamy owl
#

it might

#

cause of the lines

hard fern
#

J th

lucid iron
#

It a printing thing

#

But anyways i was gonna elaborate

dreamy owl
#

I'm going to make it the DPI that the current file I have on hand for the vanilla portraits are

hard fern
#

Phone is freezing help lmao

lucid iron
#

The standard portrait is a 64x64 texture drawb at 256x256

dreamy owl
#

eat it

dusk terrace
lucid iron
#

HD portrait mods can be at that size without "losing" resolution

dreamy owl
#

and then eat it

lucid iron
#

Because you are reclaiming the pixels originally drawn as 4 pixels

#

Any bigger and you get sub pixel crunch like example above

hard fern
#

I think Stardew just knows what pixels are and shows u pixels.

lucid iron
#

Hence i really don't think dpi means anything

#

It's not a printed medium

grand badge
#

maybe theres a mod that removes sleeves i can link as a requirment

#

cause my thing didnt work

dreamy owl
#

uhm

#

I fear

#

I fear it looks like the average android photo

dusk terrace
hard fern
grand badge
#

just checked there

#

didnt appear in game

dreamy owl
#

time to cry and start over 😒

dusk terrace
#

what does your sleeves.json look like in that folder?

#

!json you can upload here

ocean sailBOT
#

JSON is a standard format for machine-readable text files that's used by Stardew Valley mods.

If you need help with a JSON file, you can upload it to smapi.io/json to see automatic validation and share the link here.

When making mods, it's recommended to edit your files in a text editor with JSON support, such as VS Code, Notepad++, or Sublime Text. These programs will check for syntax errors.

grand badge
#

used the one on fashion sense

dusk terrace
#

and did you put it in a sub-folder as your mod's name or directly in the folder?

#

e.g. you mod structure should look like:

ModFoldername
  > Shirts
    > PackName
      > shirts.json
  > Sleeves
    > PackName
      > sleeves.json
grand badge
#

forgot pack name

dusk terrace
#

also from your file I see you're using an oudated version (5.4.2) which you might have to change to 7.0.0 if you want all the updated features

#

or remove the line entirely SDVpufferthinkblob the doc examples don't show the version

grand badge
#

ok

#

dang my idea just makes the hands transparent instead of skin toned

#

kinda cool tho

#

wait a minute

#

i didnt update the sprite

#

wrong folder i put it in

#

weird cause i thought i did

#

stull got them 4 dots but better

#

ok found a mod for no sleeves

toxic hornet
#

Hello! Does anyone know if it's possible to mod a mod? I'd like to apply some animal retextures to the new SVE animals and the dwarven expansion animals and such but I'm not sure how to go about it

Follow-up: is it possible to edit what the animal is labeled as/drops? SVE has a goose but VMV also has a goose and I'd like to change one to be a swan or something just so there arent repeats

grand badge
#

there we go

gaunt orbit
#

Yes, it is possible. You can mod mods the same way you mod the game

#

!startmodding

ocean sailBOT
#

Making mods can be broadly divided into two categories:

Usually it’s easier to start with making content packs, since you don't need to learn programming.

gaunt orbit
#

You'll want to follow that guide to create a content patcher content pack

toxic hornet
#

Thank you!

That answers the reskin part of my question but do you know if changing the name of the animal/its dropped item is possible too by any chance?

gaunt orbit
#

Yes, that's all in the animal data

#

You can edit that with cp the same way sve does, just make sure to add sve as a dependency so your patches are applied after sve

toxic hornet
#

awesome thank you so much c:

tranquil olive
#

Would it be possible to make the generic text box for dialogue smaller with json/content patcher somehow, or is that only possible for events? SDVpufferthinkblob

toxic hornet
brittle pasture
#

no, EAC is not relevant for now

#

for now just learn the guide for content packs

toxic hornet
#

okay

tranquil olive
lucid iron
#

Short answer is you cannot

#

Long answer is you might be able to do it through some convoluted $action things using the message action from BETAS

tranquil olive
#

Ah okay, that's helpful to know...thank you chu√e SDVkrobushappy

toxic hornet
# toxic hornet okay

I know it's supposed to be EditImage for the reskin but changing the animal's name (and the product's name) is where i'm struggling to find a tutorial

lucid iron
#

This is sorta like doing unpack but on the asset after all mod changes are applied

toxic hornet
dusk terrace
#

noticed this code in DialogueBox.drawPortrait some time ago and patched it into DDFC but just now noticed I implemented it in a way that it wasn't used at all SDVpuffersquee yet nobody has every reported related issues so now I'm wondering is this scenario ever happens?

NPC nPC = characterDialogue.speaker;
if (!Game1.IsMasterGame && !nPC.EventActor)
{
    GameLocation currentLocation = nPC.currentLocation;
    if (!currentLocation?.IsActiveLocation())
    {
        NPC characterFromName = Game1.getCharacterFromName(nPC.Name);
        if (characterFromName?.currentLocation.IsActiveLocation())
        {
            nPC = characterFromName;
        }
    }
}
stray hemlock
dusk terrace
#

that's what I'm wondering

#

actually it looks like it might just be a check to make sure the NPC has a valid currentLocation
if it doesn't (for whatver odd reason) try reloading the NPC data, or something

#

but only for farmhands, and never during events SDVpufferthink

stray hemlock
#

I'm confused. Why would nPC and Game1.getCharacterFromName(nPC.Name) ever not be equal? Does that happen?

dusk terrace
#

I guess that's the root of my question

stray hemlock
#

Let's wait for a person that is smart, unlike me.

lucid iron
#

It's possible for event actors

#

They are all clones

stray hemlock
#

Gosh, Star Wars was right.

lucid iron
#

I dunno why you'd do it here though

dusk terrace
#

so when an event actor starts a dialogue but then stops being an event actor without updating the currentLocation? SDVpufferthink

lucid iron
#

Can that happen tho I thought speaker is invariant during a single dialogue stack

#

Mod shenanigans aside

dusk terrace
#

maybe it's for mod shenanigans

#

I can't remember if that bit of code was added with 1.6 or if I only noticed it then
but it could be a sketchy way of making sure it doesn't crash when checking for location when getting the proper portrait

odd ginkgo
#

hello! long time no see, last time I visited the SDV modding discord, I was looking for people to take over my mods, now im officially back to do the work updating/fixing them myself!

#

here's a question - are there any big upcoming expansion mods, maybe in development over the last year?

#

I'm thinking of combining my NPC/expansion mods into one, polishing them up, and re-releasing as a package

#

but I'd die if they immediately conflicted with someone else's big release

#

anyway hello!

obtuse wigeon
#

I know the creator of Ridgeside Village has come back temporarily to make a big update, no timeline of release that I know of, East Scarp just had a major update release recently, other than those two expansions, I'm not sure of any other ones

dusk terrace
#

whatever happened to MCN SDVpuffercry

humble timber
odd ginkgo
#

I'm probably being optimistic about my timeline too haha

#

but good to know! thank you!

hard fern
#

yeah im working on npcs too, but i don't think you should worry about that XD i'll finish in 10 years maybe

obtuse wigeon
#

I'm too working on an expansion too XD I haven't even made the map so there is PLENTY of time there XD

humble timber
#

me: yeah i just wanna bring pokemon characters to sdv
me like 6 months later: now has like 8 more npcs planned than initially for like at least 18 if not 22 npcs

hard fern
#

tbh im actually kinda procrastinating on mine

odd ginkgo
hard fern
#

im playing The world's best game ever

odd ginkgo
#

I'm like, okay I'll make my three/four mini expansion one easy package... oh and maybe one more NPC... two more NPC...

humble timber
#

scope creep!

obtuse wigeon
#

Scope creep is real XD

gray bear
inner harbor
odd ginkgo
#

Does Ray, doing the Horizons WIP ever swing by here? I guess that's the one I was thinking of for new expansions

dusk terrace
digital herald
#

I got the AlwaysOnServer mod to compile again. Is there a way to write test for SMAPI mods? I wonder if I can automate a few tasks using tests.

lucid iron
#

Usually the central element of expansion mod is new town where the NPCs can live together and not conflict with others though

urban patrol
#

in general do people try to save their config files between updates to mods? can this cause issues if i’ve changed config options significantly?

#

i know you’re not supposed to pack your config file but

obtuse wigeon
#

I don't but I don't think I've noticed when major config changes occur, so either Stardrop handles them automatically, or I just play on defaults without relising XD

urban patrol
#

lmao

digital herald
#

I saw a few of them send out deprecate messages.

urban patrol
#

like in the log or?

digital herald
#

in the SMAPI logs

urban patrol
#

ah ok i can’t do that without C#

#

actually BETAS might have that in the danger section…

brittle ledge
urban patrol
#

oh excellent

#

well. less excellent in that i no longer have a theory for this person’s issue lol but still

obtuse wigeon
#

What's the issue theyre having?

brittle ledge
urban patrol
#

it didn’t auto detect that they had stardew druid installed and so the docks were in the wrong place

#

2 people had it

#

i haven’t dived deep into my code yet though

obtuse wigeon
#

Oh? didn't you have that on a HasMod check? or was a config option also provided?

urban patrol
#

and i noticed a weird issue last night where, with SVE installed, monty’s house exterior didn’t exist until i swapped the config and back again

#

yes and yes

#

auto detect or you can manually choose

obtuse wigeon
#

Ahh gotcha

odd ginkgo
#

I'm really inspired by the Downhill Project tbh, as a connected area for set aside NPCs

lucid iron
#

You can make this easier for ppl by isolating the map patches on vanilla locations to a single json, so that ppl can just go in and change x y

odd ginkgo
#

map patches in the forest area... phew...

fervent horizon
#

Just use Central Station and make your own area

#

It really opens the world up not having to worry about where something connects

obtuse wigeon
#

Seconding the Central Station thing, Visit Mount Vapius uses it and is an expansion, I think it's honestly the easiest way, especially given it can replace the more bus stop mod and train stations mod

lucid iron
#

VMV actually uses a minecart when central station isn't there

twin wadi
#

i forgot, was there a console command for reloading mod map tiles?

urban patrol
twin wadi
#

i vaguely remember there being something separate for map tiles but im not sure. yeah it didnt work for some reason just now

lucid iron
#

Patch reload is the correct thing but sometimes u may need to exit and return

twin wadi
#

ty!

upbeat zephyr
#

hello, im editing some mods and wanted to know if there was a way to do this... im using JP's monster pets, but i want to have the sprites from Bog's monster bash, specifically the dust sprite ones - but how can i edit it to make it so you could adopt any of the types of dust sprites when you click on it ? (Like when you go to buy chickens/cows and it randomly gives you white or brown ?)

hard fern
#

i always leave the map im patch reloading before doing it

#

and then just come back

brittle pasture
#

and obviously you can't distribute it

upbeat zephyr
#

yeah no distributing

#

from what im seeing in the mod listing, they are mostly the same ? but im not mod savvy so im unsure what to look for lol

hallow prism
#

being out of the main place is a bit of work in making the place interesting to visit but :

  • it's not an issue if the npc itself visit Pelican Town regularly
  • it's so much more freeing in term of finding a spot
#

i see some people that have basically every working npc mods they can and the forest is full of patches and compat thing

tight rivet
#

today, in random bug reports to Nexus:

#

"if a stardew valley mod has no folder, please extract it to a folder matching the zip name"

#

no prizes for guessing what happened :V

hard fern
#

"mod dowsn't work" ?

tight rivet
#

it extracted to the /Mods folder, yeah

#

which.. i mean, that's at least a fixable thing on a mod manager

#

"if the archive contains no folder, make one"

#

since even mods that patch other mods need a folder. <_<

lucid iron
uncut oriole
#

Has anyone made a list of available menus in game? (and how to call them?)

brittle ledge
brittle pasture
ocean sailBOT
upbeat zephyr
lucid iron
#

It's a different system than farm animals Dokkan

tight rivet
#

Me: I should configure my mods this play through (I nuked like.. 14 off)

#

Me: ooh new fish mods

upbeat zephyr
lucid iron
upbeat zephyr
#

oh i thought it wasnt pets, whoops lol

gentle rose
#

it isn’t pets

#

it’s a sanctuary using monster hutch framework

uncut oriole
upbeat zephyr
#

oh uh

#

then how would i make the pet thing work in my og question ? /genq

gentle rose
lucid iron
#

I don't know if it's pulling from vanilla or not there

upbeat zephyr
#

yeahh but how lol

#

i just wanna add the random chance stuff

#

lol

uncut oriole
gentle rose
uncut oriole
#

yes

gentle rose
#

Data/Shops iirc

uncut oriole
#

Thats it. Ty. Didnt bother checking the unpacked contents

gentle rose
#

that’s the first place to go for things like this in the future

gentle rose
upbeat zephyr
#

this is what it says for dust sprites,,,, how would i add the random chance ?

#

would i do something like this ?

#

(snippet taken from another pet mod)

lucid iron
#

Include doesn't do change only brings in other changes

upbeat zephyr
#

okay, im looking there rn

#

sorry i just finished uni homework so im scrambled a tad lol

lucid iron
#

If you want to replace the texture though, you need to see if they are the same shape (unlikely if one is monster one is pet)

#

If they r not matching then you gotta do image edits too

upbeat zephyr
#

that part is easy i can do that

#

its just about adding the varieties

tight rivet
#

hmm.. wonder why I keep getting 'festival spring2 is missing conditions data field'

#

time to trace down exports

#

.. it's an empty file..?

digital herald
#

Can someone point me to a mod that can change time in game? Like jumping to a date?

obtuse wigeon
#

CJB cheats mod

gentle rose
#

cjb cheats

digital herald
#

Thank you!

tight rivet
#

.. I am debating if this is worth less spam in my console.

#

..yeah it's not, I'm just going to delete some stuff out of this FTM pack

#

and get back to this mod idea

lucid mulch
#

also the stock Console Commands mod with world_settime and stuff

tight rivet
#

@fervent horizon When you see this, you need to fix the restore hat mouse mod to use "(O)Moss" - it's case sensitive.

fervent horizon
tight rivet
#

.. weird.

#

i'm not seeing - hm. That's just my end maybe then?

fervent horizon
#

1.0.1 should be the fixed version

tight rivet
#

becuase I had to do a manual edit just now and verify it

#

checks what I have installed

#

oh, apologies then. I somehow .. didn't see the update and it wasn't listed as one

#

i'll just.. patch it @.@

#

(by downloading the new verison)

fervent horizon
#

that and adding a top level folder were the only changes

#

forgot the top level folder on my first uploads zip

tight rivet
#

yeah, I should have checked, but I trusted the update checking mechanism on this would actually check, rip me

#

thank you!

tight rivet
#

eh.. it could have been the mod manager

#

it is unreliable sometimes about checking for updates

#

which is deeply annoyng because I have not figured it out yet

autumn tide
#

hmmm is there a way to see which NPCs are able to randomly attend the movie theater?

#

and in what groups

#

...nvm SDVpufferfush

#

why must i always find the answer AFTER asking

#

i've been searching for 10+ minutes and NOW i find it?

uncut viper
#

not possible to change them btw

vernal crest
#

Our brains do that to us to keep us humble 😌

uncut viper
#

(via CP)

autumn tide
autumn tide
uncut viper
#

its not in the unpack

#

you dont need the repo for the decompile

autumn tide
#

oh?

uncut viper
#

you can just decompile it yourself

brittle ether
#

is it possible for someone to point me in the direction of how retexture mods work? i want to make an obelisk retexture mod for the base game obelisks, plus the east scarp and ridgeside obelisks, but i have no idea where to start other than looking at other mod's content json files and hoping they'll help and trying to find a good app/website where i can actually make the sprites to fit in stardew

autumn tide
brittle pasture
#

public static string[][][][] possibleNPCGroups = new string[7][][][]
we're nesting arrays that has never been nested before

uncut viper
#

yeah its quite a mess

autumn tide
#

sorry I'm a little lost atm lol

uncut viper
brittle ether
uncut viper
#

the variable that holds the possible NPC groups is a list of lists of lists of lists of names

autumn tide
#

oh my

#

um

#

.....ig i'll just scour all the info i can find about who specifically is able to attend randomly

#

oh wait

#

i don't think i have to

uncut viper
#

i mean you'll still be able to see the names

#

its just heavily nested

#

and fguring out how the names are exactly used is trickier bc of all the nesting

autumn tide
#

can the Whitelist thing in movie preferences include multiple NPCs?

#

like, if any of the multiple NPCs are there then the reaction will apply?

#

..or would it be all?

uncut viper
#

it is a list of names used as an OR

#

so, any

autumn tide
#

okay perfect

#

tysm @uncut viper :)

tiny zealot
uncut viper
#

unacceptable, but im willing to accept it /lh
i know you did your best

autumn tide
tiny zealot
#

the issue is that in order to identify which font is being drawn, i have to be "inside" (prefix) the DrawString functions, where the spritefont reference is already set. but at that point, so is the draw color, and the codebase is replete with
DrawString(font, whatever, whatever, Game1.textColor * 0.8f)

#

and a bunch of other constants that are not that one

#

and i am not keen to attempt to inflict a wide-ranging transpiler that attempts to work around this, because 1. it's insane and 2. it won't account for any mod that calls DrawString on its own, and i expect there are Some Of Those

#

so it seems saner to just reassign Game1.textColor and friends

lucid iron
#

what happens if u color / Game1.textColor

#

i have no idea how color maffs work

tiny zealot
#

well, (unless anyone has any tips) once i get into the method and i know what font i'm using, i don't know whether i got a color as-is or multiplied by a constant

uncut viper
#

im sure theres nothing wrong with using those functions that get the previous stackframe to see which method called this particular DrawString to inspect its IL to see if there is any constant multiplier applied

#

doing that in a draw method that runs every frame is probably perfectly performant

#

though, maybe it would be if you cached the result

next plaza
#

@autumn tide Is this the right github avatar? Just double checking since I see no repos

autumn tide
#

Yup!

autumn tide
#

And its a mess-

next plaza
#

@autumn tide Oh, it's your profile picture here too

#

Anyways you should have an invite now

autumn tide
#

Yup!

royal stump
obtuse wigeon
fluid night
#

I'm making a mod that adds onto Gwen's Medieval Buildings and adds the premium coop and barn as well as the winery, and I was wondering how to make things seasonal to match everything. (I'm like BRAND NEW to making mods, and this is technically my first content mod. Can someone walk me through all the .json stuff?)

#

and yes i did ask permission but gwens on hiatus so i'm not sure about uploading it without an answer

tiny zealot
#

no answer means no upload, sorry to say

fluid night
#

I know that but i want to make it functional for myself at least

tiny zealot
#

sure, personal use is fine

fluid night
#

so, how do the seasonal mods work?

narrow owl
tiny zealot
#

It Dependsβ„’. if they're editing something that the base game supports seasonal changes on, then often it is game state queries. if it's something else and using content patcher, typically they use the Season token

vernal crest
ocean sailBOT
#

Making mods can be broadly divided into two categories:

Usually it’s easier to start with making content packs, since you don't need to learn programming.

fluid night
#

okay thank you!

vernal crest
#

Are Gwen's buildings seasonal?

fluid night
#

yes

narrow owl
fluid night
#

ohhh okay mb mb

narrow owl
uncut viper
#

(in the case of buildings you also have the option of using SeasonOffset too)

vernal crest
# fluid night yes

Then you should just be able to copy what is already in there but apply it to the new buildings you want to affect

fluid night
#

I'm doing a redraw and everything for it

cinder zodiac
#

Hello I'm a new member of stardew valley discord. I'm a fans of game pixel like stardew valley and roller coaster tycoon classic. I saw many mod for stardew valley. To be honest, i have a dream to create a mod game that could combine those 2 my favorite games. I imagine my character can go to a map that content amusement park. i have asked chat gpt. But it cannot give me downloadable result. And i don't know how and where to put the coding result. Can you kindly please help to make or teach how to make this stardew mod? Thanks

tiny zealot
#

!chatgptcode the first thing to do is stop asking chatgpt to do it

ocean sailBOT
#

We don't recommend using generative AI (such as ChatGPT, Copilot, Claude, Grok, etc.) to write mods for Stardew Valley. There are a few reasons.

  • AI-generated content is not allowed to be posted in the server. If you need help with your code, you won't be able to post it.
  • Large Language Models aren't trained on enough Stardew-specific information to give reliable, accurate output. They also have no concept of what they don't know, and so cannot tell if they're incorrect. In short, they don't know if they're hallucinating a solution that simply feels like it makes sense or not.

This holds true for both SMAPI/C# mods, and mods for frameworks such as Content Patcher.

There's no shame in being new to Stardew modding, and you won't be talked down to for not knowing what you're doing. We strongly recommend consulting with other mod authors in the appropriate channels as a first step if you're completely stuck at step one.

tiny zealot
#

sorry about that. that was a bit short of me. welcome aboard!

narrow owl
#

OOH FOR MY FINAL PROJECT IN DIGITAL MEDIA NEXT YEAR I SHOULD TRAIN GPT OSS ON STARDEW WITH CONTENT PATCHER DOCS (obvi no posting in this server but that would be hella funny)

#

or ill jus dev an actual mod

cinder zodiac
#

I don't have coding knowledge and so on. In roller coaster tycoon classic, there is a toolkit for creating new map, track and so on. i saw active players posting new map and track too in rctgo.com. Meanwhile in stardew valley also have great active players that provide many mods too. Is there a specific app to create a new mod for stardew? I wanna learn it too

vernal crest
narrow owl
narrow owl
vernal crest
ocean sailBOT
#

Making mods can be broadly divided into two categories:

Usually it’s easier to start with making content packs, since you don't need to learn programming.

narrow owl
fluid night
#

What does the grey text mean and is it mandatory?

narrow owl
#

they describe the code

#

if it has a // before it is a comment and usually a different color

vernal crest
#

I'd say somewhere between half to probably most of us here use VSC (or VSCodium, in my case, because poop to Microsoft).

narrow owl
cinder zodiac
#

Thank you so much guys for the information. I will check and learn what you explain so far. And ask more later😊

lucid iron
#

Vs code is open source so the one called just vs code is microsoft's build

#

Vs codium is the open source no microsoft things build

vernal crest
#

It's a fork of VSC with the telemetry removed.

narrow owl
narrow owl
#

YO IM SO PISSED OFF RN

#

MY PC CRASHED BEFORE I SAVED WORK

#

IT SAVED YESSS

twin wadi
#

theres the smallest "choppiness" while the event does this (switching out marnie to a temporary character to change to a different pose without directly editing marnie's sprites) and does anything know how to remove that or is that just something inevitable when doing this?

#

weird, i dont experience the minor delay here

devout otter
#

I don't know why it's different with the two cases, but can you try warp Marnie -1000 -1000 true?

latent mauve
#

Okay, I remember why I got stalled on the bathroom renovation mod now-- when I tried to add the 'expand bathroom' option, I have run into issues with the map patch not showing the correct "empty" patch, because the small and expanded bathrooms take the same space.

#

So, depending on the order of the AdditionalRenovations, the farmhouse either shows the small bathroom without it being purchased (instead of the black empty patch), OR never shows the expanded bathroom patch, even when purchasing it.

#

Is there a way to make the AdditionalRenovations field look for two mailflags instead of one, or do I need to try When argument shenanigans in addition?

brittle pasture
#

Requirements is a list so you should be able to just add another entry

tiny zealot
#

cooking (finally!) (pictured: lavender dreams ui)

latent mauve
#

It does not appear to be a list in the AdditionalRenovations map property, but it is in Data/HomeRenovations.

#

My issue is with the map property

uncut viper
#

looking at the code, it can only check for one mail flag

latent mauve
#

hmmm.

brave fable
#

gorgeous fonts πŸͺ»

latent mauve
latent mauve
#

I'll probably just have to give up on making it a tiered/multi-stage renovation

loud sandal
latent mauve
#

The goal was Empty -> Bathroom -> Expanded Bathroom, but I keep ending up with either Bathroom -> Expanded or Empty -> Bathroom -> Bathroom depending on the ordering.

digital herald
#

Didnt seem like I can click on screen using SMAPI? I want to advance through a cut scene basically.

latent mauve
uncut viper
#

they are making a headless server mod