#making-mods-general
1 messages Β· Page 476 of 1
if you use <nexusId>000# then you will never need to worry about it
Depends on the asset, some have support for "FormerName"
for things like NPCs and locations there's a previous name field
Most of what I add is 90% fish, then like a few Basic objects u might catch up, and some quests
is there no universal migration system for CP? that seems like something that would be very very useful
migration is something CP does automatically in some cases
such as migrating 1.5 mods into 1.6
(as best it can)
I meant as in like migrating new UniqueIds to something more unique rather than 3 characters
ahh sorry , should've clarified, migration from one ID to a different ID rather than game version migration
game version migration is more of a rewrite operation in CP.
I know for 1.5 to 1.6 there is migration, one mod I use auto-migrates on runtime to it and works still
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
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.
The CP version migration is absolutely fantastic though, very pleased to have that
It's better for the mod author to do it so nothing gets missed.
Oh good point, I didn't think about maps
Is it possible to migrate my UniqueId in my manifest to anotehr name (like LucyTheDove.ASF rather than ASF) without my players losing all their data? My mod only uses Content Patcher to add fish, no furniture or anything added either
Not without issues to my knowledge
quests isnt in the mod yet either, its in 1.1, which isnt released yet
ahh
well its okay in the far future i can look into it
content patcher has an id migration trigger action
Oooo good to know
thank you
Here's the migrateIds page: https://github.com/Pathoschild/StardewMods/blob/stable/ContentPatcher/docs/author-guide/trigger-actions.md
I had to find it
thank you!
and Items are a supported type
that's super useful omg
this means i can fix all my previous event forks that didn't have my mod id
Would it be alright if you can check your DMs if it's okay? Nothing question related π
it is lol
:0
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
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
if you look at the unpacked data in Data/GarbageCans, the IDs added by the original game are there.
BeforeId in MoveEntries is the entry you want to put yours before.
How do I know for mods that add? Like SVE? Can I just patch export Data/GarbageCans to check it out rq?
yep
chu did that actually
awesome i'll try that
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)
You can also just use "ToPosition": "Top" instead of BeforeId if you just want to be first.
chu might've just forgotten the docs I assume
https://github.com/Pathoschild/StardewMods/pull/1148
That's probably better, since many mods can alter it. Now, what's the difference if its at the top or bottom? Does it change the %?
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)
Ohh it's a CP 2.8.0 feature, that may be why I struggled to find it previously as it was still somewhat new ty!
(im not ignoring this I'm just on mobile right now so I'll reply when I'm back at my desk)
For my case where I just want to add some extra items to garbage cans is it worth putting it at the top? Or just let it go in anywhere
since thats all im gonna do, if not needed then I'd assume I can just remove the "MoveEntries" entirely
you mean you don't memorize CP patch notes? Smh
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)
I memorize (to an extent) KDE Plasma patch notes and Proton patch notes (Linux desktop environment, and Linux .exe compatibility library, also known as Wine)
as long as you read them before submitting bug reports on my mods before realizing you have an outdated version
otherwise, my brain is a goldfish
if you don't need your new items to take priority and are good with them having an equal chance of spawning, then you probably don't need the MoveEntries part for this.
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.
Oh ye patch notes and changelogs are always read before submitting bug reports, and previous bugs reports are read too, mostly bc I am impatient and it's so much quicker to see it in them rather than waiting for someone to reply XD it's like a mutually beneficial situation
Have you already seen the Fashion Sense github and the example packs? They might help you a bit more with how the sprites should be oriented.
i used a template from it
If you used a template from it, and your JSON matches what was provided with the template for positions, you should probably be fine?
the overalls covered some of the top so idk if above the shirt is correct
what about files paths?
i got a error for my mod
- Squid Sisters tops 6.7.0 because its manifest declares ContentPackFor without its required UniqueID field.
Then your manifest.json file is missing something, put it in the JSON validator and share the link?
!json
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.
unique id is there twice
ContentPackFor is not meant for your Unique ID, it's Fashion Sense's uniqueID
oh
The manifest.json in there is the example you should be following
ContentPackFor is basically telling SMAPI what framework your mod is using to run. In your case, that's Fashion Sense. π
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
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.
The Fashion Sense wiki can probably help answer a lot of your questions: https://github.com/Floogen/FashionSense/wiki/Shirt-Model-Properties
(you can also try using SkinToneMasks for the "top" of your shirt if you want the neckline to show skin above it)
thanks
ill test that out now
do i add that to the json or the manifest
or is it an in game thing
Your manifest should never have anything more than what was shown in the example.
ok
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
"HideSleeves": true,
If you don't have that in your shirt entry, it assumes you want the sleeves visible.
@grand badge You leveled up to Cowpoke. You can now speak in our voice channels and share images in all channels!
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 }.
i fixed that just there
one problem is the sleeve is still there
and the arms are invisible from behind
Arms? Who needs arms
Someone wanting to eat chocolate
depends how much you want chocolate, diving headfirst into a chocolate bowl may not be the most graceful, but certainly is effective
New quote added by head_in_the_cl0uds as #6766 (https://discordapp.com/channels/137344473976799233/156109690059751424/1442301806758592624)
hey! does the specifc name for the ids of movie reactions matter?
highlighted the area to be specific
no, so long as its unique
gotcha! so, if I'm overriding krobus's movie reactions, the specific ID shouldn't matter?
gotcha, thank you so much :)
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
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.
i believe you also need to use your Id value as the key to that entry
i.e. "Entries": { "reaction_documentary": { ... } }
Hi, would anyone know the best place to share my mod on this discord?
unfortunately you're now trapped in a loop
most people share mods in #modded-stardew
i think the other person pointed you here thinking you needed help making it hahah
hmm still a little confused lol, could you please elaborate?
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: {)
hmmm okay
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
!reload ?
- 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 theConfigSchemaorDynamicTokensections if you use them). - Translation files: enter
reload_i18nin the SMAPI console window. If it's for a Content Patcher pack, also runpatch reloadafterwards. - C#: see the Visual Studio hot reload or Rider hot reload feature.
hm
oh i think there is!
if you type help in the console does it mention a fs_reload or somesuch command?
i remember someone mentioning that lol
CP sidesteps this issue when editing some data models with lists of object values by having you provide a key equal to the Id field in the value
There is indeed. I keep forgetting that command exists
I assume I need to use it with the modID
it'll be explained in the console 
hmmm okay, i think i got it, so just add a key (that has the same value as the ID) before the first set of curly brackets?
ty!!!
hm.. I guess it doesn't do sprites.. SMAPI said loading Data but nothing changed visually. Name and such did update though
my fs tech support ends here since i've never really used it πββοΈ
All good. I'm just gonna restart with a minimum modlist xD
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
yeah fs_reload is reloading all content packs you have
Didn't work for me 
heres the wiki page for it btw https://github.com/Floogen/FashionSense/wiki/SMAPI-Commands#reloading
But I specifically mentioned my pack 
did you not save over the sprite in your in-use mods folder
I did. Maybe I was just being dumb
theres no mention of being able to just reload one pack tho, did you use just that command or try with your id
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
I see, thanks!
Oh wait hang on I was wrong it does take unique IDs, my bad sorry!, fs_reload [manifest_unique_id]
inch resting
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
I did get some warning messages about another pack. So I guess I just did something wrong here.
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?
Random question.. Considering it's handled in the manifest.json..
Can you make another mod as a dependency for a FS pack?
I don't see why it wouldn't work because the dependancy loading is handled by SMAPI right?
sure, dependencies are handled by SMAPI and can be any mod ID other than the current or any mods depending on it
That's what I thought as well, thanks!
or you could make it not another mod and just some garbage and have your mod never load if you like
does it actually mean anything for a FS mod to be dependent on something else though
(this would be the place if you're editing the mod yaya)
Yep this is the best channel to ask, as long as it's for personal use and not uploaded unless you have both mod authors permissions
my confusion comes from not being sure what FS can reference from content
I don't think FS does reference anything from content? I know it exposes stuff to content patcher but that's different
i'm quite sure FS only uses local files from the content pack
unfortunately/infuriatingly
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
hm..
to make it seasonal I think the best way would be to add {{Season}} in the file name in the "FromFile" field and rename the png files to have Spring, Summer, Fall, and Winter where the {{Season}} token is
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)
could maybe do appearance data on him then
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
ok, now it does update the sprite.. weird
Does this make it automatically seasonal or manually seasonal?
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)
Gotcha! I'll try it right now, thank you!
Is that normal dialogue that's set in the dialogue asset?
no, it would usually be in strings/MovieReactions
probably not then?
Possibly not but easy to check, yes?
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?
Oooo I would love this! big fan of maximum customizability
yesss that sounds so cool
Yesss separate definitions
noted. thanks, everyone! 
Anychance anyone knows how to fix the invisible arms and hands when I walk from behind in fashion sense?
What are the limitations of BETAS Harmony Patching? cuz that's what I'm studying next
quick question: why
yeah, just a few lines of EditData
Imma try to intercept the StardewValley.Mobile.VirtualJoypad
And maybe do some postfix patch
If I did successfully intercepted it
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
i think learning C# is literally easier for what you wanna do
C# is pretty easy to understand, the hard part for me is all the boiler template, type you need to manage.
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
whatever codespace does you don't need it to develop C# mods
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#
imo c# is quite light on the boilerplate, there's a lot of modern conveniences in it these days
is there a page on how to use GMCM
content patcher
ty
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
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)
conditions meaning like if it's only available after owning a certain barn as an example?
like how Blue Chickens are only available after seeing Shane's 8 heart event
same fuck that drunk bitch
he aint gettin my help
weifhewifh I mean I just generally havent seen any content beyond like 1.2 fwefh
I never get far enough
btw you should add carrots to the game, it's a very staple crop that I feel like is what is missing from the game. maybe broccoli too
r we fr\
ok I'm still a modder though π Nice try tho haha
uh a fair few, khadija's recipe shop, artisanal soda makers, spanish revival buildings
cool
sak is ded
Poor Sak. Barely alive, and now she is a dead plush.
but was that not already her true form
undead plush aer typically not allowed in most places.
(okay, to be clear, the joke comes from here: https://www.youtube.com/watch?v=MTZ_fIKL0KM )
hey quick question if i reskinned pierre to trash would u download it?
hmm unlikely, I'm an aesthetic ocd player π
I use the Piper mod
which reminds me, I need to make that patch of like nine thousand other mods that assume it's still Pierre, lol
i ask this bcoz there is a subreddit called r/fuckpierre
oh pierre sucks
fr
I mean, to be fair, I'd be stressed and acting out too if my competition is Joja Supermarket
yeah but after u defeat joja he no change
"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
no, that's wiping the existing entry
ack ok
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
I figured I'd do an easy version first
!converter
(of all the json terminology, somehow drilling is the strangest of them all to me. more than nesting in a dictionary.)
!converters
These community tools help update mods to newer formats or frameworks:
- Convert to Content Patcher from Custom Furniture, Better Farm Animal Variety (BFAV), Custom Music, JSON Assets, More than Necessary (MTN), SAAT, Shop Tile Framework (STF), TMXLoader, or XNB.
- Convert to other frameworks:
- Other tools:
thanks
do you have something else you'd prefer to call it
spelunking makes as much sense as drilling and carries a far greater air of whimsy
oh i didn't know drilling was a json term
Breadcrumbing
i thought you were telling me to study fwehfioew
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
demolishing it is
ahhh thanks!
I had used the burgers analogy before, so I hereby propose drilling -> biting into the burger
i vehemently refuse the burger analogy
"what you're doing right now is eating the entire burger even though you only want to remove the pickles"
'drilling' as used for TargetField specifically:
https://github.com/Pathoschild/StardewMods/blob/develop/ContentPatcher/docs/author-guide/action-editdata.md#format
also blueberry consider this: if you rotate a giant json object 90 degrees clockwise onto its side, it makes the shape of a drill
I mean, diving is also a valid term, dealing with json often feel like you're drowning in different brackets
i veto diving in favour of delving
why is no one using russian dolls
that would imply identical copies of the outer structure found within
Oh delving is a good word
but they're not identical, they're smaller
and some russian dolls have different appearances too
every matryoshka doll ive seen has typically been an identical but smaller copy on the inside
you have seen some very boring ones in that case XD
I've seen a couple of cute ones with variation
I havent seen enough to say which is more accurate lol
but the child doll is still derived from its parent, whereas json objects aren't necessarily
i had one as a kid that went grandma>mom>baby etc through liike 5 generations
i also googled it just now and see most of them are identical copies. im doing modding research
fair
in light of new evidence i propose nosing and stickybeaking
also the nested json doesnt have the same structure as the outer json
stickybeaking made me snort
why dont we call it digging too greedily, and too deep
pardon you XD
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
its not removed, simply moved elsewhere
so too does drilling imply that the outer json is ground into a fine powder
im mortar and pestling my json into an herbal remedy
many have come to this channel confused, expecting the rest of pierre to be completely powderised
this is what drilling means is then? "TargetField": ["White Cow", "AlternatePurchaseTypes"],
yep
all that is left being a lone gift taste
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?)
my brain doesn't like this hdeifh
well that's just a fault of the presentation. you may as well ask why a binary tree doesn't always grow upwards
unfortunately unlike before, me calling it top level is not a joke but also the actual term used
Prospecting is also a quite valid term, that doesn't imply removal of material, and it implies search for something specific
i would ask this yes. but if we're okay with rotating 90 degrees then i go back to my drill shape comment
Do I just continue the Entry like normal after?
all the more support for delving and nosing
just now the entry key you use would be found inside AlternatePurchaseTypes, not outside in the rest of the outer animal data
question, by nosing do you mean "nosing around" as in searching, or nosing as in a rounded thing like the nosing of a rocket
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)
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
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)
(this is where I get on my soapbox about are you sure you want to do alt purchase)
Just add new
I am in favour of nosing in that case
"Entries": {
"{{ModId}}_MyAnimalSkin": { // <--- The Entry key
...
}
}
It's more clear to the player if it's a new cow imo
fortunately the > shape of an indented json file does also look like the nosing of a rocket
I'm practicing the method
Then sure i shall put the soap box away 
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
so does the general shape of a json, unless you exit out a block in which case it would be α¬ but mirrored
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

also don't forget that AlternatePurchaseTypes pick the first eligible entry, so once you add your entry you'll need to
- use
MoveEntriesto 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
do you have an understanding of what a dictionary is for that to have made sense
I feel like I might have... 5 years ago
or just drill into Default tbh
I'm not sure what you mean by default in this case
(I wasn't bothering with condition because I was using livestock bazaar)
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
I hadn't even considered it tbh
(to reduce confusion ignore me for now, I shall continue once you have some code I can give further feedback)
thanks selph 
Oh yeah I remember the string and value thing!
integer dictionary because it's a number value?
yup
usually called a "string to int" dictionary, of the form "<key type> to <value type>"
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
Do you know where I can see the code for type Farmer in Stardew Valley C#?
!decompile
If you want to make SMAPI mods with C#, one important resource is decompiling the game to read the game code. Here's how to do it: https://stardewvalleywiki.com/Modding:Modder_Guide/Get_Started#How_do_I_decompile_the_game_code.3F
Thank you! That made a lot of sense, my grep only returns binary matching.
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
i use vim, and my vscode is so slow, I couldnt use it.
So i just grep for everything.
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
some ppl also just search in ilspy
https://smapi.io/json/none/1dcc8240587a41818e64df5986ec7a70
I'm still not sure what the default thing is or if some of the usual entries are unnecessary but would that work for a basic addition?
no; that's not what an alt purchase entry looks like
no, because you're adding an entire new animal data inside the alternatepurchasetypes
derp sorry, I forgot to add it
(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)
selph is very very helpful <3
everyone here usually is 
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"
},
{
"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
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
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)
I tried to unpack my animal data and it wouldn't unpack for some reason
the images worked, but none of the data
well thats a much separate issue that is very critical to solve
are you using StardewXnbHack
you will not really go far without a proper unpack, at least not painlessly
I'm using xnbcli, which is what I used in ye olde times
lol
!unpack
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!
use the one listed on the wiki here
what does /lh mean
lighthearted
as in im not chastizing you or anything when saying "step 1: dont" just take it as a jovial jest
/jj
just joking?
no, jovial jest. it's not caught on yet
usually things like /s or /lh or /j are tone indicators, heres a list on common used ones if you're unfamiliar: https://toneindicators.carrd.co/#masterlist
you've got time while your files unpack 
like /jk
!unpack but yes pls use stardewxnbhack follow instructions here
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!
you correctly said earlier that we're only useful sometimes π
well i'm making it true whether u like it or not
lmao
Thank you! De-compiled the DLL work!
Curiosity question, should all items use qualified IDs in every field?
Like is that the new standard format
yes, except for when they shouldnt
depends; some very rare instances of game data still expects unqualified ids
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
if relevant it'll be documented that they expect unqualified
when in doubt check if the wiki tells you to use "qualified or unqualified ID" or just one or the other
and if its not documented it likely quickly will be after found out
Cool, I kind of figured that was the case
the game is nothing if not inconsistent π€
I feel that is the curse of forever games like Stardew and Minecraft, and other similar situations
"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
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
ahhhhhh that makes sense
does loading the date after that work the same way as it would for a modded animal?
data*
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
MoveEntriesto move it to the top so the game doesn't just pick theDefaultentry over yours - add a condition (like
RANDOM 0.33) so the game doesn't just always pick your entry over theDefaultentry
after the code block above the alt purchase fields look like this:
Default, either white or brown cow, no conditionsADStrawberryCow_StrawberryCow, strawberry cow, no conditions
you want it to be
ADStrawberryCow_StrawberryCow, strawberry cow, 1/3 chance or somethingDefault, either white or brown cow, no conditions
see here for documentation on moving entries
thanks selph!
this chat is never helpful, they keep bullying me and telling me to go back to preschool
Very random, but, was your display name in this server always glowing light blue and pink? like a gradient? Now ur the magical button π€£
that's the temporary role color given to the server's top yappers of the week
portable furnaces
does the farmer have a back of steel?
the 997 alien scarecrows didn't tip you off?
as long as it makes npcs do the trash reaction whenever they see you
what vanilla NPC do I start with?
for?
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
torii are pretty big
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?
I'm assuming I can convert it for personal use, yeah?
Yeah I'm gonna make em buildings
sure, you can do anything you want for personal use
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:
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!
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)
This has been fun, gonna take me a few more days to do, but Im half way through rewriting https://www.nexusmods.com/stardewvalley/mods/2677
Cut down from 2000 lines -> 900 lines.
Thank you!
I have to use a different unpacker bc I'm on android unfortunately
And winlator hates me
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
and from there you can follow the format on the wiki for technical info:
https://stardewvalleywiki.com/Modding:Buildings
I'm using the H&W foundation mod as an example rn
And yeah I've got the wiki up
And ghituo
GitHub
{
"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"
},
@brave fable sorry if it's not okay to tag you but does this look right so far?
no worries
it's close, but needs a few tweaks:
https://smapi.io/json/content-patcher/cd680efec12540089fe8b360d034fed9
- the loaded PNG texture
Targetand the dataTexturefield must match exactly - the
Entrieskey must use the unique item ID - there is no
IDfield in building data
you'll still need to fill in a few more fields, such as CollisionMap, FadeWhenBehind, DrawShadow, and so on as you like
you can also use the {{ModId}} token to have Content Patcher substitute in your unique ID automatically where appropriate:
https://smapi.io/json/content-patcher/e9a3ad5cc29946f9bf828e4f0bb93473
"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
looks good, but it won't work quite right -- try this:
https://smapi.io/json/content-patcher/3cd7b8112ccd41dda7f8f106d0742847
again, there's no ID field in building data, and the entry keys need to be globally unique (i.e. prefixed with your mod's unique ID)
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
Wait I need to change the sizes
Okay I'm sorry what do you mean by ID field
"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"
}
}
}
]
}```
looks good!
Name, Description, Texture, etc. are all fields of the building data; your earlier data also included an ID field on each, but the game doesn't expect there to be one
OH I see
Ty
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
Do- does it really take this long 
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
SHOW ME
I mean please
!json
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.
Can you elaborate on what "it didn't like it" means?
Why did I choose Seb first? I wanted to fix his hair
Your brackets are wrong. You're missing a closing }, before the //Lights line and you are also missing closing brackets for the Lights patch and the entire file (which might just be a copy and paste fail).
That error is because you don't have a comma after your SpriteIndex on line 20
OH
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 π
Please keep using the json website. It's difficult to read giant blocks of text here in discord :)
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 ^_^
I am, sorry! Didn't think about that part
@outer glacier halp

π these scam bots are everywhere i swear

They target popular game servers I think
I get PM requests from here and TMNT server semi often
I didn't know we could have multiple i18n jsons now
(that's from ESR)
oh yeah. i made the fun mistake of nesting my folders too deep
So basically we can have a Default folder and all the jsons inside act as the old default.json?
yep, basically
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)
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?
can someone look at my fashion sense json whenever i walk from behind i got no arms and the sleeves wont go away
https://smapi.io/json/content-patcher/ac62676c9147411a8ee1a2d3adcec8b9
I think it's lowercase default, but watch out for updating
default.json is preferred over default/ unfortunately
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)
Smapi logs says no error yet the "{{ModId}}AutoTonic" isnt working, can someone help
TrAction.json
https://smapi.io/json/none/f5d6a15073644938bea403e8ff4efdfe
content.json
https://smapi.io/json/content-patcher/4abe758c17e646779c789f45628c0929
make a fashion sense shirt but with no sleeves
so what's the issue? it uses the wrong colors?
like these characters
i made 2 but when i walk from behind it got no arms
what fashion sense defines as sleeves are the arms iirc
alsol these white things still there
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
how do i do that?
yea the white part is the shirt part on the sleeve texture
I can't remember on the fly... let me check
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
guh
yep that one- looks outdated though
its from fashion senses github
ah, yea, I see that now from the example pack
I think the only oudated frames are the slingshot and panhandle frames
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
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
Very very
Like 128px is quite small
Are you making hd portrait
And it's just gonna get crunched by the game itself too
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?
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
I'm going to pull it up in game rq
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
cries in all of that graphic design training is useless here
ok so I made DPi too high and now I have to restart 
like take this post on DDFC... theonly suggestion I had for them was to save it on a less HD size π€·
I don't know of dpi means anything for sdv
J th
I'm going to make it the DPI that the current file I have on hand for the vanilla portraits are
Phone is freezing help lmao
The standard portrait is a 64x64 texture drawb at 256x256
eat it
warm it up in the microwave
HD portrait mods can be at that size without "losing" resolution
and then eat it
Because you are reclaiming the pixels originally drawn as 4 pixels
Any bigger and you get sub pixel crunch like example above
I think Stardew just knows what pixels are and shows u pixels.
maybe theres a mod that removes sleeves i can link as a requirment
cause my thing didnt work
I don't have any examples I can share... but what was wrong with the example pack you showed earlier?
I am.. unsurprised
just checked there
didnt appear in game
time to cry and start over π’
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.
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
forgot pack name
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
the doc examples don't show the version
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
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
there we go
Making mods can be broadly divided into two categories:
- Content packs are formatted text files, and don't need any programming knowledge. They can add/edit NPCs, maps, new items, shops, and more. To get started, see the list of framework mods, the wiki tutorial for Content Patcher, and there might be relevant guides on the tutorial wiki.
- C# mods use programming code to change fundamental game mechanics. See getting started with C# modding.
Usually itβs easier to start with making content packs, since you don't need to learn programming.
You'll want to follow that guide to create a content patcher content pack
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?
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
awesome thank you so much c:
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? 
I assume it would be Extra Animal Configs that would be used to edit those fields?
okay
Is this part of NPC's dialogue?
Yes I have it in the dialogue for Emily
Would the smapi link help for the default.json + dialogue.json?
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
Ah okay, that's helpful to know...thank you chuβe 
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
Try having sve and vmv installed then do patch export Data/FarmAnimals
This is sorta like doing unpack but on the asset after all mod changes are applied
Okay I'll try that, thank you c:
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
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;
}
}
}
Can it happen that a NPC that is currently talking is in a location that is null or not active? Or is that exactly what you are asking? Sorry, not yet that experienced with SMAPI mods.
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 
I'm confused. Why would nPC and Game1.getCharacterFromName(nPC.Name) ever not be equal? Does that happen?
Let's wait for a person that is smart, unlike me.
Gosh, Star Wars was right.
I dunno why you'd do it here though
so when an event actor starts a dialogue but then stops being an event actor without updating the currentLocation? 
Can that happen tho I thought speaker is invariant during a single dialogue stack
Mod shenanigans aside
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
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!
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
whatever happened to MCN 
ive been slowly working on an expansion but there shouldnt really be any conflicts and it's nowhere near done anyway lmao
I'm probably being optimistic about my timeline too haha
but good to know! thank you!
yeah im working on npcs too, but i don't think you should worry about that XD i'll finish in 10 years maybe
I'm too working on an expansion too XD I haven't even made the map so there is PLENTY of time there XD
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

tbh im actually kinda procrastinating on mine
Once you figure it out, the possibilities open up
im playing The world's best game ever
I'm like, okay I'll make my three/four mini expansion one easy package... oh and maybe one more NPC... two more NPC...
scope creep!
Scope creep is real XD
Do you mean Magic Circle Network? Animal crossing and a pandemic.
Does Ray, doing the Horizons WIP ever swing by here? I guess that's the one I was thinking of for new expansions
I was really looking forward to it 
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.
I personally think it's nice that you have standalone NPCs right now
Usually the central element of expansion mod is new town where the NPCs can live together and not conflict with others though
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
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
lmao
I saw a few of them send out deprecate messages.
like in the log or?
in the SMAPI logs
ah ok i canβt do that without C#
actually BETAS might have that in the danger sectionβ¦
SMAPI updates out of date config.jsons, I'm pretty sure
oh excellent
well. less excellent in that i no longer have a theory for this personβs issue lol but still
What's the issue theyre having?
There's a number I know of that are in development, but none that have concrete release dates. I don't believe anyone's even said "Soonβ’οΈ" so I wouldn't worry if you're releasing in the next, eh, 3-6 months?
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
Oh? didn't you have that on a HasMod check? or was a config option also provided?
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
Ahh gotcha
I agree, but part of my original burnout was trying to figure out compat with 10000 different mods and other NPCs that I didn't playtest with. I understand now how much easier it is to just set aside another area where everyone is
I'm really inspired by the Downhill Project tbh, as a connected area for set aside NPCs
I think it's fine to just not be compatible with other things tbh, or encourage people to simply make compatibility patches
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
I learned a lot from publishing those mini-expansions, I'm def going to respond to the comments a little differently, and set up areas a little differently
map patches in the forest area... phew...
Just use Central Station and make your own area
It really opens the world up not having to worry about where something connects
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
VMV actually uses a minecart when central station isn't there
i forgot, was there a console command for reloading mod map tiles?
does patch reload not work?
i vaguely remember there being something separate for map tiles but im not sure. yeah it didnt work for some reason just now
Patch reload is the correct thing but sometimes u may need to exit and return
ty!
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 ?)
you can try target editing Data/FarmAnimals to add new skins or breeds referencing MM's spritesheets
this is assuming that MM's monster sheets are set up in a similar way to farm animal sheets however; if it isn't (which is likely) you'd need to do manual personal edits
and obviously you can't distribute it
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
yeah for npc mod authors i strongly suggest using Central Station (or at least some minecart system if CS looks really too much initially)
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
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
"mod dowsn't work" ?
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. <_<
Not an answer to your question exactly but bog monster mash has companion mod for adoption their dust sprites
Has anyone made a list of available menus in game? (and how to call them?)
Gonna second Central Station since you're doing a whole expansion - you'll have enough stuff on your own maps to entice people without being forgotten (like a single NPC might)
!decompile look under the Menus namespace
If you want to make SMAPI mods with C#, one important resource is decompiling the game to read the game code. Here's how to do it: https://stardewvalleywiki.com/Modding:Modder_Guide/Get_Started#How_do_I_decompile_the_game_code.3F
oh really ?? maybe i just missed it, lol
It's a different system than farm animals 
Me: I should configure my mods this play through (I nuked like.. 14 off)
Me: ooh new fish mods
im not seeing it in their mod list ? am confused lol
oh i thought it wasnt pets, whoops lol
I meant specific instances like Pierre's shopmenu
what do you mean how to call them then? really thatβs just a normal instance of ShopMenu
You would have to do personal edit on the jp mod's files basically
I don't know if it's pulling from vanilla or not there
So for example the Bookerseller shop is called using the shop ID "Bookseller" and Pierre's shop is "Seeds". ShopMenu uses StardewValley.Gamedata to find the shop data.
so are you looking for a list of shops?
yes
Data/Shops iirc
Thats it. Ty. Didnt bother checking the unpacked contents
thatβs the first place to go for things like this in the future
also [[Modding:Shops]] has a partial list of IDs at the bottom
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)
You gotta look inside DustSpirit.json
Include doesn't do change only brings in other changes
okay, im looking there rn
sorry i just finished uni homework so im scrambled a tad lol
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
hmm.. wonder why I keep getting 'festival spring2 is missing conditions data field'
time to trace down exports
.. it's an empty file..?
Can someone point me to a mod that can change time in game? Like jumping to a date?
CJB cheats mod
cjb cheats
Thank you!
.. 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
also the stock Console Commands mod with world_settime and stuff
@fervent horizon When you see this, you need to fix the restore hat mouse mod to use "(O)Moss" - it's case sensitive.
it is updated as of yesterday evening
1.0.1 should be the fixed version
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)
that and adding a top level folder were the only changes
forgot the top level folder on my first uploads zip
yeah, I should have checked, but I trusted the update checking mechanism on this would actually check, rip me
thank you!
hopefully it will now
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
hmmm is there a way to see which NPCs are able to randomly attend the movie theater?
and in what groups
...nvm 
why must i always find the answer AFTER asking
i've been searching for 10+ minutes and NOW i find it?
not possible to change them btw
Our brains do that to us to keep us humble π
(via CP)
gotcha! good to know lol
..cannot find this file in the unpacked game- ig I'll finally ask pathos for access to that GitHub repo thing with the game's code
oh?
you can just decompile it yourself
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
..still prob will ask for it eventually, but good to know!
public static string[][][][] possibleNPCGroups = new string[7][][][]
we're nesting arrays that has never been nested before
yeah its quite a mess
....uhhh is this relating to the movie theather stuff or is it about another topic?
sorry I'm a little lost atm lol
take a look at the documentation for content patcher, particularly https://github.com/Pathoschild/StardewMods/blob/stable/ContentPatcher/docs/author-guide/action-editimage.md
this is what you're going to see if you look in the decompile to see the NPC groups
ty! i didnt know this resource exists
OH
okay
the variable that holds the possible NPC groups is a list of lists of lists of lists of names
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
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
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?
friends, after working on some implementation, it is looking doubtful that i can deliver separate color sets for the different spritefont sizes, and i will likely have to make them shared
unacceptable, but im willing to accept it /lh
i know you did your best
that's alr! font smasher on its own is still really cool :)
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
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
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
@autumn tide Is this the right github avatar? Just double checking since I see no repos
Yup!
I have one private one lol
And its a mess-
@autumn tide Oh, it's your profile picture here too
Anyways you should have an invite now
Yup!
Operator '/' cannot be applied to operands of type 'Color' and 'Color' 
for XNA color, color * float multiplies each RBGA value by the float, but that's its only operator besides == !=
and system.drawing.color only has == !=
Opening the channel on mobile just to see a very eyes wide open cat was so very amusing XD
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
no answer means no upload, sorry to say
I know that but i want to make it functional for myself at least
sure, personal use is fine
so, how do the seasonal mods work?
probably game state queries\
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
!startmodding Asking someone to walk you through the entirety of how to make a mod is a really big ask. We can point you to resources though.
Making mods can be broadly divided into two categories:
- Content packs are formatted text files, and don't need any programming knowledge. They can add/edit NPCs, maps, new items, shops, and more. To get started, see the list of framework mods, the wiki tutorial for Content Patcher, and there might be relevant guides on the tutorial wiki.
- C# mods use programming code to change fundamental game mechanics. See getting started with C# modding.
Usually itβs easier to start with making content packs, since you don't need to learn programming.
okay thank you!
Are Gwen's buildings seasonal?
yes
as you told me you can mostly ask for smaller individual things if you are confused in this channel
ohhh okay mb mb
its completely fine we all learn, i got the same message typed to me
(in the case of buildings you also have the option of using SeasonOffset too)
Then you should just be able to copy what is already in there but apply it to the new buildings you want to affect
I'm doing a redraw and everything for it
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
!chatgptcode the first thing to do is stop asking chatgpt to do it
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.
sorry about that. that was a bit short of me. welcome aboard!
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
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
usually content patcher
Please don't contribute to the world being a worse place by actively using gen AI :(
it would be a completely private experiment, although i dont think teach would like it cuz yk he used to work in entertainment and we know how they feel about ai
basically start with an idea and then research how to do that wwith content patcher, this channel can help
!startmodding We just use text editors like Notepad++ or Visual Studio Code to write JSON. We use Tiled to make maps. Other than Tiled, there's no one specific program we use.
Making mods can be broadly divided into two categories:
- Content packs are formatted text files, and don't need any programming knowledge. They can add/edit NPCs, maps, new items, shops, and more. To get started, see the list of framework mods, the wiki tutorial for Content Patcher, and there might be relevant guides on the tutorial wiki.
- C# mods use programming code to change fundamental game mechanics. See getting started with C# modding.
Usually itβs easier to start with making content packs, since you don't need to learn programming.
i love vs code but i havent met too many users
What does the grey text mean and is it mandatory?
comments
they describe the code
if it has a // before it is a comment and usually a different color
I'd say somewhere between half to probably most of us here use VSC (or VSCodium, in my case, because poop to Microsoft).
tf is codium never seen or heard of it, is it discount vs code?
Thank you so much guys for the information. I will check and learn what you explain so far. And ask more laterπ
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
It's a fork of VSC with the telemetry removed.
so microsoft cant see
glhf
YO IM SO PISSED OFF RN
MY PC CRASHED BEFORE I SAVED WORK
IT SAVED YESSS
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
I don't know why it's different with the two cases, but can you try warp Marnie -1000 -1000 true?
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?
Requirements is a list so you should be able to just add another entry
cooking (finally!) (pictured: lavender dreams ui)
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
looking at the code, it can only check for one mail flag
hmmm.
gorgeous fonts πͺ»
The troublesome code block in question: https://smapi.io/json/content-patcher/342adb690b8240e485a066770022f1d0
I'll probably just have to give up on making it a tiered/multi-stage renovation
Is the issue because you're omitting inactiveMap?
ill try it thank you!
They should both have inactive maps set? The problem is that, depending on the order of the renovations in the map property, it either ignores the active or the inactive map of the second renovation.
The goal was Empty -> Bathroom -> Expanded Bathroom, but I keep ending up with either Bathroom -> Expanded or Empty -> Bathroom -> Bathroom depending on the ordering.
Didnt seem like I can click on screen using SMAPI? I want to advance through a cut scene basically.
I think you might be in the wrong place? This channel is for making mods. nevermind, I was lacking context
they are making a headless server mod
