#making-mods-general
1 messages · Page 504 of 1
Any videos I can watch on this anywhere?
No, there are no videos up to date for 1.6 that I know of
yeah, the more I look at this, the more it seems like people were moved in the SVE map patches and that didn't come across in the positions on the site. I thought they'd moved it later, but maybe position changes just weren't caught since they were in maps.
hrmmm okay, how do i go about making something on a map interactible? is it something i do in the programming phase or is it something i can do in tiled?
What type of interaction do you want
like, going up to a sofa and remarking that it looks comfy, or identifying a person in a photo hanging on a wall
my tiled project, while not impressive wasn't as scuffed as i remembered!
The sofa one might be odd because sittableness is part of objects you can sit on
ahhh that's very true, i might not add the sofa one then
i definitely want to keep the one with the photos though!
But otherwise, that'd be a touch action. You can do that in Tiled, let me see
Change the sofa for a table or a workbench maybe?
sorry, not a touch action, the name of that one always confuses me. An action
https://stardewvalleywiki.com/Modding:Maps#Action Action Message may be what you want
Lots of mods use those to pop up flavor text when you use a spot
You just put the text into strings
I'm working on the json.file for the SMPAI mod and Content Pack and it's asking for a description. It's not set in stone, is it? Like, if I decide to add something to it, it won't destroy anything if I change it, will it?
That's correct
a dll file is (very very simply put) kind of like the content.json for SMAPI mods. it has all the information for the mod to work in it
if the mod you want to make doesn't need C# then you don't have to worry about it
Right, okay. Thank you. So, how do I know if I need a C#? I've been reading the wiki pages, but I still don't understand that. Sorry
🤔 im not anywhere near an expert on C# but from what i've heard, you need C# if the mod you want to make will require changing the game's logic
Right, since that doesn't sound like something I'll be doing, can I just pass it by and ignore it?
i mean yeah if you don't think you need it you don't have to look at any of the C# articles
No, sorry, I should've been more clear, my fault. I was talking about the D11 File.
you mean DLL right?
Is that what it is? Sorry, my brain doesn't work well sometimes. It kinda looks like two 1
in tiled, which objects in the path layer mean there's a monster?
yeah, you only need that if you're making a C# mod
Thank you
(a SMAPI mod)
When you say ignore it, what do you mean? Do you have a file in your mod that's a .dll?
i dont think theres a paths object to spawn enemies
No, I'm kind of going by the wikipedia page
I thought that was just kind of teaching me the outline
Was I wrong?
Ah yeah it can be confusing that the manifest info is in the C# modding section. You're fine to keep using this page, just ignore the parts that mention being for a SMAPI mod.
They're how your users know that there's an update. If you release on Nexus, the key for that is the number of your mod page.
Thank you
Is it okay if I copy and paste my manifest.json here to see if it is what it needs to be?
!codeblock Sure, but please use a codeblock
You can embed code in Discord using a series of three ` :
```
Your code can go here
Even if not a haiku
Just an example
```
For syntax highlighting, add the language code on the same line as the first
``` (with no space, like ```json).
The usual codes are cs (C#) and json.
''' {
"Name": "DemonSlayerPitiable",
"Author": "MySafeLittleCorner",
"Version": "1.6.15",
"UniqueID": "MySafeLittleCorner.DemonSlayerPitiable",
"UpdateKeys": [40724],
"ContentPackFor": {
"UniqueID": "MySafeLittleCorner.ContentPatcher",
"MinimumVersion": "1.6.15"
}
}
Right?
You want backticks, not apostrophes
I'm going to be honest and say I don't know the difference. Sorry
Backticks are usually on the same key as the tilde ~
{
"Name": "DemonSlayerPitiable",
"Author": "MySafeLittleCorner",
"Version": "1.6.15",
"UniqueID": "MySafeLittleCorner.DemonSlayerPitiable",
"UpdateKeys": [40724],
"ContentPackFor": {
"UniqueID": "MySafeLittleCorner.ContentPatcher",
"MinimumVersion": "1.6.15"
}
}
There we go!
Thank you
Two parts are wrong:
- UpdateKeys, you need quote marks around it and you need the word
Nexus:in front of it like this"UpdateKeys": [ "Nexus:2400" ] - Your mod is a content pack for Content Patcher so you need to use CP's unique ID instead of
MySafeLittleCorner.ContentPatcher
@silk basalt Are you wanting to add a vanilla tilesheet to your map or one from a tilesheet mod?
Oh, you're also missing the Description field and your version should be 1.0.0 because it's the version of your mod, not the game version
Knew I was missing something. Thank you
happy new year y'all!!
🎆 Happy New Year! 🎆
I’m welcoming the new year the best way I know how:
releasing a new version of the mod to fix a bug 😄
Version 0.0.9 is now out, bringing a small but important fix.
If anyone is around and willing to help, I’d really appreciate it if someone could post this update on the mod’s showcase — that would help a lot.
Thanks to everyone for the support, feedback, and patience. I'm glad to be part of this community. All of you are very special
May your crops grow fast, your saves stay safe, and your mods never break ✨
Happy New Year
Do I need to put ContentPatcher and SMAPI both in the mod file I'm working on, or do they just go into the all-around mod file?
you dont include dependencies in your mod's files
I actually have no idea
Right. Okay, thank you
and you cant load the content pack without content patcher and smapi so they dont need to go into the dependencies section
Yeah sorry to deliver bad news. But I think the vanilla NPCs moved in map patches for SVE instead of by text are not updated right. I went through the fair maps first and that seemed to be the case. When the sky isn't exploding, I can try to figure out how to do a PR to fix that? And maybe the icon for Andy being Sandy.
I was going through the maps but then the fireworks started up again and I can't hear myself damn think
How do I find CP's unique ID?
Thank you
"Name": "DemonSlayerPitiable",
"Author": "MySafeLittleCorner",
"Version": "1.6.15",
"Description": "After helping the child you found unconscious near the bust stop, you never expected to be drawn into the mystery that surrounds the Demon Slayers. Now you need to help them figure out exactly how they got there in the first place, and just what they're going to do in a world wihtout demons to slay."
"UniqueID": "MySafeLittleCorner.DemonSlayerPitiable",
"UpdateKeys": ["Nexus:40724"],
"ContentPackFor": {
"UniqueID": "Pathoschild.ContentPatcher",
"MinimumVersion": "1.6.15"
}
}```
Better?
I feel like I could do better the with Description the farther along I get with the game, but that was the best I can do right now.
minimumversion is the framework's version
not the game
same for your mod version, not being the game version
right, okay
So, should they be found in the manifest?
Right, dumb question. Should've thought a little more before asking, truthfully.
Does anyone know if it's possible to retexture mod-added craftables using Alternative Textures? If so, how would one go about doing so, is there a guide to doing so that I can check out? Asking because I got a request from a mod user of one of my AT packs.
Yes, you just use the normal AT documentation and use the craftable's id in the name or item id field (not at computer so I can't remember what defines which field to use).
how do i add properties to a tile in tiled, then? :0
like, touchaction or regular actions?
Aweome, thank you for the information, it's much appreciated! 
so to confirm, i put the property type down, then in the string put in the data for it...? like i put TouchAction ConditionalDoor in the property, then in the string put in a friendship level like the wiki shows?
i just wanna make sure i don't make it completely explode lmao
like, i'm trying to make it so you have to be a certain friendship level to enter his room, this is the right way to do it yes?;;
or should i use the door action instead?;;; sorry, it's overwhelming a bit again
Yes, but if you want it to be on a door rather than just a doorway, you should use the Action instead of TouchAction.
i think i have it, thank you
will i need to make an entry in one of the .json files to have the text pop up when interacting with an object? or is there a simple, like, show text command i missed?;;; sorry
You should, yes. There are ways to do it without json but then you can't use i18n and it means anyone translating your mod would have to share a copy of your entire map. It's not considered good practice.
To do it the best practice way, you'll want to use Action Message or Action Letter in the map, with a key like <ModId>.string.bookcase (it can be whatever you want and written however you like, mine is just an example - but do put your mod id in it so it's unique).
In your json you write a EditData patch with the Target Strings\StringsFromMaps. The entry keys will be the keys that you put in the map. The value will be an i18n token, and then in your default.json you write the actual text for the player to see.
Let me know if you need an example.
an example would be great, actually, if you don't mind;;
i THINK i know what to do but after my war with the commas last night i'd like to have something to start from lmao
Ok give me a minute
!tilesheetinator @silk basalt By the way, are you using the Tilesheetinator?
You can use the Tilesheetinator tiled extension to create Stardew Valley maps that work in-game without having to copy vanilla and modded tilesheets back-and-forth, rename files with a . in front of their name, edit maps only in the unpacked content folder or make symlink workarounds.
See the mod page for full installation and use instructions.
Screenshot shows the map, then below we've got the strings and the i18n. You can do even the map part in json if you want to, by using an EditMap patch with the MapTiles field.
{
// content.json
"LogName": "Add map strings",
"Action": "EditData",
"Target": "Strings/StringsFromMaps",
"Entries": {
"{{ModID}}_LongDrop": "{{i18n: map.long-drop}}",
"{{ModID}}_Track1": "{{i18n: map.track.1}}",
"{{ModID}}_Track2": "{{i18n: map.track.2}}",
"{{ModID}}_RoadSign": "{{i18n: map.road-sign}}",
"{{ModID}}_PicnicSign": "{{i18n: map.picnic-sign}}",
}
},
// default.json
{
"map.long-drop": "It's a long drop. You realise that maybe you don't want to go in there.",
"map.track.1": "The track continues for a way before turning right and disappearing. Maybe one day you will take a walk down there. Not today, though.",
"map.track.2": "You see a small wooden bridge over the river and then the track disappears into the gloom under the trees. This must be the return point for Star Trail.",
"map.road-sign": "Zuzu Highway, 3 miles. This must be how Hiria got her RV into the park. The gate is closed for now.",
"map.picnic-sign": "Cindersap Forest picnic area. Dispose of litter thoughtfully."
}
thank you!!
I strongly recommend starting to use the tilesheetinator if you're not already. It makes mapmaking much less error prone.
where can i find that? 
oh there it is never mind
thank you!! sorry for the trouble
you may have to walk me through getting i18n set up as well, sorry, i couldn't really sus it out myself last night;;;
so uh, let me see if i understand...? i'm going to be putting all of the dialogue and map text into the i18n folder instead under a default title, then using that as a key to inject the data into the files in the assets folder...?
sorry, i understand the basic stuff, but i get intimidated when i see all the. other stuff
like, with this example from the github page, i know what's going on until we get to the double brackets, and then i start worrying i'm not getting it anymore;;;
sorry for being difficult about this, i'm just. trying to make sure i get it
I'm not quite sure what you mean by a default title, but you're roughly correct about the rest. It doesn't get injected into the files though, CP swaps the data from the EditData (etc) patches in your content.json with the text that is in the default.json before it passes it to the game.
oh the default title i meant is. er. default.json like you said yeah
i wasn't sure too should i call that english instead? or keep it as default?
You're not being difficult at all, don't worry. It can be tricky to follow at first. And that example you've shared is quite complex, so don't worry about trying to understand that one just yet.
Ah yes the default.json. It has to stay as default.json, because the en.json doesn't actually work lol
When you say the double brackets, do you mean just things like {{TargetWithoutPath}} or {{i18n: blabla}}?
i figured!! thank you for clarifying lol
the first one is significantly scarier than the second one, but to make sure i've got it again-- the second is how to tell it to check the i18n file for that particular key, similar to how the game checks the dialogue files normally, right? (like, it's just one more layer of redirect?)
like, you give the npc a gift they like, so the game checks the dialogue file, and the dialogue file says to check the default.json in the i18n folder. right...? or am i super off alskdjf
You're correct ^_^
And the purpose of doing that is that translators can just copy the default.json file and make a file named whatever their language is, then change all the values to be in their language. They never have to touch any of the actual "code" of the mod at all. It makes it safer because they're less likely to accidentally translate something that's intended as instructions to the game instead of player-visible dialogue. And it also means that your hard work stays just inside your own mod, because all a translator has to give players to download is the zh.json (for example) instead of all your maps, dialogue files, etc.
The double curly brackets indicate something called a token. They're used to tell Content Patcher to put the right value where the token is. A non-i18n example is the {{Season}} token. You might sometimes see a texture mod with a FromFile field with {{Season}} in it, like "FromFile": "assets/Sebastian_{{Season}}.png". When CP goes to find the file to replace Sebastian's portrait in game, it checks what season the current save is in and replaces the {{Season}} with that word. So in fall, CP will grab the Sebastian_fall.png file, for example, so you get to see Seb wearing a sweater in game.
(The game itself has tokens, but they're indicated with square brackets, like [LocalizedText <asset:key>] - same principle, different syntax.)
so, uh, one more time. i can take all of the dialogue i have written out and copy and paste it into the default.json, then i just need to tell it to check the i18n file with the same key? right?
@silk basalt You leveled up to Cowpoke. You can now speak in our voice channels and share images in all channels!
i can do the same for the gift taste stuff, yes?
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:
The first bullet point under "Other tools". It should let you easily convert your existing dialogue and gift taste stuff to i18n.
Are you loading a blank.json?
Okay that's good, because you can't use tokens inside a file you're Loading.
That's the purpose of Loading the blank. You Load a blank file, then use an EditData patch to put the actual data in there.
If you tried to Load your dialogue directly and had tokens inside it, you'd see those tokens as plain text instead of the thing that's supposed to be there.
ooo okay
so let me. try to get it
in the content.json:
"Action": "EditData",
"Target": "assets/blank.json",
"Entries": (the dialogue?)
er, the .json?
Nope, not quite
You never edit actual files with mods
You edit the assets in game
So your Target should never be a real file path
Can you show me your blank.json Load patch?
Okay, you'll need to add the dialogue asset to the Target
"Target": "Characters/schedules/{{ModId}}.Hugo, Characters/Dialogue/{{ModId}}.Hugo" - also, you're missing the s at the end of Characters there.
thank you!
so it needs to load both, then?
ah, do i need to have it load a blank on the marriage dialogue too then?
i don't have that one done yet but
Yes, you will need the marriage dialogue asset in there too if you're doing marriage
okay, so just add it in the same way?
Yup, just at the end
then just replace the dialogue.json with the indicated text in the converter? if that's it then i'll go test it out 
Since you weren't already loading a blank for the dialogue after all, you'll need to change your dialogue.json first
Right now does it look like this? In terms of the brackets, and it not having any "Action", "Entries", "Target", etc fields in it?
{
"Introduction": "bla bla",
"Mon": "bla bla",
"spring_Tue": "bla bla"
// etc
}
i swapped it to the i18n tokens, but before it did yes
did i skip a step 
sorry, i got hyped lol
Yes, so you need to adjust it so that it's got an EditData patch
soo lemme try again then!!
er, sorry, an edit in the dialogue.json?
or one in the content
In the dialogue.json.
So instead of it looking like this (using one of my NPCs as an example):
{
"Introduction": "{{i18n: Louisa.intro}}",
"MovieInvitation": "{{i18n: Louisa.MovieInvitation}}",
"breakUp": "{{i18n: Louisa.breakUp}}",
"divorced": "{{i18n: Louisa.divorced}}",
"WipedMemory": "{{i18n: Louisa.WipedMemory}}",
"DumpsterDiveComment": "{{i18n: Louisa.DumpsterDiveComment}}",
"HitBySlingshot": "{{i18n: Louisa.HitBySlingshot}}",
}
It looks like this:
{
"Changes": [
{
"LogName": "Louisa Dialogue",
"Action": "EditData",
"Target": "Characters/Dialogue/{{ModID}}_Louisa",
"Entries": {
"Introduction": "{{i18n: Louisa.intro}}",
"MovieInvitation": "{{i18n: Louisa.MovieInvitation}}",
"breakUp": "{{i18n: Louisa.breakUp}}",
"divorced": "{{i18n: Louisa.divorced}}",
"WipedMemory": "{{i18n: Louisa.WipedMemory}}",
"DumpsterDiveComment": "{{i18n: Louisa.DumpsterDiveComment}}",
"HitBySlingshot": "{{i18n: Louisa.HitBySlingshot}}",
}
},
]
}
so this should be good to test out then?;;
thank you so much again for being so patient with me lol
I see a red squiggly underneath that opening bracket above Changes, so you've got a problem somewhere in the file
So what you're showing me looks right, but something that's outside the screenshot is wrong
it says property expected?
There shouldn't be anything in the file before that curly bracket. Is there?
OH there was a rogue bracket yes
i think we're good, it's just mad about commas
Trailing commas?
yeah
After we get your dialogue sorted I can teach you how to make it stop complaining about them
Okay, now you need to make sure you change your content.json as well.
Where before you had (maybe still have) a patch like this:
{
"LogName": "Load Louisa's Dialogue",
"Action": "Load",
"Target": "Characters/Dialogue/{{ModID}}_Louisa",
"FromFile": "data/louisa_dialogue.json"
},
You need to remove that (not the blank.json Load, but one that's Loading your dialogue.json file if it's still there) and replace it with this:
{
"LogName": "Include Louisa's Dialogue",
"Action": "Include",
"FromFile": "data/louisa_dialogue.json"
},
like these?
Yes, did you already have those?
i just replaced the ones from before with the text you gave, below the one from before that loaded the schedule and dialogues into the blank.json
er, should i upload it again?
!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.
Sounds like you got it right, but if you want to be sure I am happy to check
Ah, your marriage dialogue target is not quite correct
How did you decide upon that as a target?
that was what i named the json before, do i need to pick a different name?
Also, it looks like at some point you switched his internal name from {{ModId}}.Hugo to {{ModId}}_Hugo, so make sure you're not still using {{ModId}}.Hugo anywhere (like you are with your blank load).
It's not about picking a name, it's about the fact that you have to target the right thing or the game won't see his marriage dialogue at all because you will have put it in the right place. Targets have very little - usually nothing - to do with file names.
Marriage dialogue has to have a Target of Characters/Dialogue/MarriageDialogue<NPCInternalName>
OH okay thank you
You will also need to do the same switch with your schedule later than we're doing with the dialogue, but you can test your dialogue once you've fixed the targets in the blank load patch.
so this?
Close, but the marriage dialogue one is wrong. Can you identify why?
do i still need to have the mod id at the end?
Do you understand the difference between an NPC's internal name and their display name?
(This is relevant to your question, I'm not just ignoring it)
i thought i did, but i apparently do not as well as i thought i did alksjdf
i assume that the internal name is so it's something unique, and then you can have the display name as whatever, right?
Yes that's right
Their internal name is the ID we use to refer to them in the data and code
so the {{ModId}}_Hugo is how to make it check for the internal name, right?
er, that. is the internal name i mean
Yep, that's right
So the only time you ever want to use just Hugo is in player-visible text, like in an event where someone else is talking about him or in his introduction dialogue where he says "Hello, I'm Hugo" (for example). Everywhere else, it's always internal name.
Are there any errors in your log?
The red one is just to do with schedule so you can ignore it for now
Can you figure out what the yellow ones mean is wrong?
mismatch between fromfile and the actual file location/name 🤔
Thank you Forsy but I was trying to encourage el to learn how to read it lol
i was going to ask if it was because i had the load command in the same thing but aslkdjf yeah that was my other guess
Oh- lol
thank you for the help though alksdjf
er would it be better if i dmed about all of this? i don't want anyone else needing help to feel like they need to wait
Nope, if there's anyone else around they will hopefully just jump in and ask
We're used to having multiple conversations going at once
so do i need to just check the files it's looking for then?;;
Well, have a look at the FromFile lines
And then have a look at your file structure
What folder is it looking for?
OH DATA NOT ASSETS
it already does, but some FF features require a specific layout of the tilesheet that vanilla content doesn't have
bruh i was going to ask why only one of his unique gift accept dialogues wasn't working but i realized it's because. i didn't add it yet. yeah that one's on me laksjdf
i'm going to have to do more troubleshooting tomorrow, i'm getting tired lmao
happy new year and thank you for all the help!!
Happy new year!
Happy new year
Hii! Do you need to restart a new game for slight dialogue/schedule changes or is just reloading the game enough. It's for playtesting 🙂
Also happy new year! 
if it's Content Patcher stuff, you can use patch reload iirc
due to the nature of schedules, changes to these only apply on the next day after loading a save file
Okay, thank you!
For schedules I believe you might have to sleep a day
patch reload docs (also contains other useful troubleshooting commands): https://github.com/Pathoschild/StardewMods/blob/develop/ContentPatcher/docs/author-guide/troubleshooting.md#reload
Pet Coats, lets you define custom coats for specific pets, either swapping specific colors, tinting the entire texture, or replacing the texture outright (this one swaps the bandana colors for neutral colors and tints the entire texture grey). Here's the Content Patcher code:
{
"Format": "2.7.0",
"Changes": [
{
"Action": "EditData",
"Target": "aedenthorn.PetCoats/dict",
"Entries":
{
"{{ModId}}.BorderCollie":
{
"PetType":"Dog",
"PetBreed":"3",
"Tint":{
"R":155,
"G":155,
"B":155
},
"Swap":{
"180,67,58":"255,255,255",
"147,51,72":"200,200,200",
"87,39,55":"155,155,155"
}
}
}
}
]
}
does any1 know if the "introduction" dialogue works? i can't get it to trigger the dialogue for the life of me. It just defaults to the NPC's monday dialogue . those are the only 2 dialogues in the code atm. The save im testing it on shows the NPC's name as ??? still so it should be triggering the introduction 1 but i can't figure out why it wont.
Are you testing the introduction on a new save and does your NPC have gift tastes?
It's not a new save, but its a save without the NPC existing before. And no i havn't set up their gift preferences yet.
You need both, because the introduction CT only lasts for 6 days after save creation so any NPCs who are installed after that won't be able to say their Introduction line. And no CTs will work without gift tastes - you can just copy a vanilla NPC's tastes for now and adjust them later if needed.
Oh ok, so the "introduction" only works on the first week of playing?
Yes
That complicates things cuz the npc only spawns 1 day a week till an event is done. Guess I should do an event as an intro instead of just the dialogue.
You can create your own CT and use that as their introduction dialogue line instead
Any suggestions on what to tie the CT trigger to for an introduction?
You could just set it for much longer than the vanilla one so it starts as soon as your NPC is installed but will still be present if the player doesn't meet them for a while.
And if it would be possible for the event to play before the player meets them and weird for the introduction dialogue to happen after the event, you could remove the CT right after the event so the player doesn't get the dialogue if they met them for the first time during the event.
I guess what i'm asking is, what causes the CT to load? Will it just auto load if there's no trigger to load it?
You create it using a trigger action. If you have no condition on the trigger action, it'd just run the first time it could, which would be the first day your mod is installed or the first day of the save if a player started with the mod.
But if you wanted a condition, you could control it - we have quite a lot of control over trigger actions.
so i just leave "conditions" blank and the trigger on "DayEnding" and it'll trigger after the first day. Do i need to do something to make it only fire once, or is it gonna repeat the trigger every time a day ends.
That's right, but no you don't have to do anything to make it only fire once. That's the default for trigger actions.
Ok i think i have everything figured out to make this work. ty for the help.
Im stealing this idea to make my mod a little more friendly to people who add the mod on an existing save
If I override Shane's bedroom and want to add TileData, I do it on the Objects layer the same name as the layer the thing is on, Name it TileData, add Action and then Message "ShanesNewRoom.1" or do I put it on the Animal Shop Map?
"Name": "DemonSlayerPitiable",
"Author": "MySafeLittleCorner",
"Version": "4.3.2",
"Description": "After helping the child you found unconscious near the bust stop, you never expected to be drawn into the mystery that surrounds the Demon Slayers. Now you need to help them figure out exactly how they got there in the first place, and just what they're going to do in a world wihtout demons to slay.",
"UniqueID": "MySafeLittleCorner.DemonSlayerPitiable",
"UpdateKeys": ["Nexus:40724"],
"ContentPackFor": {
"UniqueID": "Pathoschild.ContentPatcher",
"MinimumVersion": "2.8.1"
}
}```
Is that correct?
Also Happy 2026
Happy 2026 :3 looks good to me
Great! Thank you!
Your version looks very incorrect
Unless you've already released at least 8 versions of this mod already
I have not. I'm sorry, can you tell me where I went wrong?
Where would you be doing it if not on the map?
Your Version should be your mod's version. Usually, people start with version 1.
I see. Thank you. so it's just "version" and not "minimumversion"?
You're looking at the wrong line. I am referring to the third line down, not the one under the Content Patcher unique ID.
that's what made sense to me, but I wasn't sure. I'll keep tinkering then
Thank you for your patience and help. So, I just put a 1?
No what I mean is I don't understand how your question was an OR. You have to do objects on maps, so where would you be doing it if not in a map?
The usual convention for versioning is major.minor.revision, where major version is for updates that break compatibility, minor is updates that don't break compatibility but have significant changes from the previous version, and revision is for anything smaller.
As Wren said, though some content modders just go "big change, little change, bugfix".
"Version": "1.0.0",
That makes sense. Thank you.
You can place the TileData on your custom TMX for Shane's room and as long as you are adding TileData objects and not Map Properties, they will carry over to the AnimalShop map in that section when you patch your TMX in with EditMap
Oh, honestly because maps are where I feel less comfy so I’m more likely to overthink and make things more complicated than they are.
Truthfully, I always wondered why they were written for that
Okay. Hmm. That’s where I have them, and it’s on the object layer but they aren’t showing up
Do your objects have TileData in the Name field?
Yes
Patch export Maps/AnimalShop and check if your objects are present
And you have an actual tile below it on the coordinating tile layer?
It has to be Buildings, too
Can it be “Buildings2?”
No
Layer names with numbers are for drawing visuals only
(extra layers are purely decorative and do not have logic)
The non numbered layers are the only ones that have collision or related tile properties such as data objects
I’ll find somewhere else to tuck then notes then - ty!
Updated my personal notes sheet too
You can still use Buildings for your message even if you have the notes visually on Buildings2 (because another tile is usually on Buildings if you are using Buildings2, so it still has a tile in those coordinates to attach the property to)
Now, do I go onto Content Pack Frameworks since I finished my manifest?
Are you referring to the wiki?
Yes, I had one open and now that's turned into 12 open somehow, so I'm just a bit confused.
You can jump straight to this one since the other frameworks won't be relevant for you just yet: https://stardewvalleywiki.com/Modding:Content_Patcher
Thank you
Dumb question, but does smapi and contentpack go into the mod folder or does it stay in Stardew Valley game folder?
SMAPI is installed via the installer script
All mods, including content patcher and what you are making, go into <gamefolder>/Mods
Thank you
Oh, I messed up again. The same error is popping up, so I'm going to fix that then come back.
Thanks for your help everyone!
CP doesn't go into your mod folder though
Maybe this would be easier if I take a class considering how I learn. Does anyone have an online class that they would recommend?
@summer spoke You leveled up to Cowpoke. You can now speak in our voice channels and share images in all channels!
Ah yeah im referring to the folder called Mods
You want to end up like
Mods/
ContentPatcher/...
YourMod/(manifest.json etc)
Unfortunately I don't think there's a class that would help you, as this is mostly specific to Stardew
That makes sense. Maybe a video game making course then? Get the basics of programming if nothing else
And it's not programming, so although programming knowledge definitely helps, you can't directly apply it exactly as you'd learn in a class but instead have to use the concepts
Right
Take it slowly at own pace 
And learning programming just to make a json mod is like learning how to drive a truck so you can ride a bicycle lol
I'll figure something out. I'm really do want to make this mod. Thank you for all the help. Sorry I messed it up
You don't have to apologise and you're very welcome to keep asking questions here
Welp, just got a comment from a user informing me that another NPC mod placed their entrance blocking the Pelican Valley Loft apartments
There's certainly nothing wrong with looking into free game dev courses, but it might overwhelm you due to how much additional work game dev needs compared to this kind of modmaking
The mountains have such limited space, so I can't really move it again or make yet another alternate entrance xD
User didn't bother telling the NPC author about the issue though??
Also, it's important to understand that making mistakes is just a normal, expected part of making mods. None of us make mods without mistakes and nobody learns without mistakes either. It's not a sign of failure, it's a sign of trying.
That's a bit rude of them to just make it your problem
Yeah, it's not great
Give up and central station it 
Maybe I can make a sort of list that I can follow? Either way, gotta fix this mistake first.
I mean, Central Stationing it does not fix the NPCs having to path back in, chu
it's easier to add npcs warp to area now
VMV has one in the town hidden behind a building and it works well so far for the limited use i make for it
That's a good idea. You can also always ask if there are concepts that you're running into that you're not quite grasping, because people are often happy to explain the how and why things work.
I am going to make it CS compatible for players at some point but there is not a good way to handle the NPC path in just yet, unless the proposed NPC specific warp property finally got implemented
Oh i think we did get addnpcwarp
In EditMap
You still have the issue of overlapping npc warp tiles though gotta be careful on that one
Chu, specifically it was suggested that we get an additional parameter for NPC Warps that allowed a warp to be ignored if it wasn't valid for a specific NPC
That's the one I was referring to, not AddNPCWarps, which just behaves like AddWarps by allowing new NPC Warp map properties to be added without overwriting preexisting ones 🙂
Ah yes 1.6.16 then 
Schedule changes
NPCs will no longer be affected by warps they touch while following their schedule if those warps are not the one they intend to go to.
Hot take: tell users that mod is incompatible (assuming they released after you put the entrance there)
@sly gull !startmodding
It's not additional param tho hrm
Damn it what's the command
It’s such a problem to find space for stuff that like…maybe not everything can fit with everything
I forgot everything today
!startmodding
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.
Oh I guess I have to put the ping on the end
you're not having command luck today
Bot only look at ! at the start o message right
yeah
yep, that's gonna be the ultimate result, it's mostly just frustrating that the user decided it was my problem when I released months before the other mod, and the entire purpose of my mod is to create living spaces for NPCs so that we run into the issue of limited space less often.
Just kind of bold for a user to suggest that the earlier-existing mod creating 70+ available NPC living spaces is the one that should move for a mod that creates one, and their mod will also run into further compat issues with Baldur's Village and Crazy Ed's Crazy Fruit Trees (both of which I made alternate paths for).
I only wrote an alternate path for Crazy Ed's compat because it released before my mod and I overlooked it when choosing my spot, which is on me.
Yeah, at that point in your shoes I would just tell the user that you checked mods when you released, by etiquette it’s on the other mod, and they can learn to make personal edits if the other author won’t/can’t add compat
i think it's better to write down what you want to do in your mod, have a list of the things you want to do; so people will have an idea of what you want to do;
After you have an idea of what you want to do, you can try to figure out ways on how to do it. Or ask people here, and they can tell you how you can get around to doing it. Like breaking it down into steps
it's not going to be easier if you did learn how to code because it's the same formula, but hopefully this strategy helps you feel less lost and overwhelmed
although it would be helpful to know the fundamentals such as events/functions/tokens given what you want to do
Actually, considering that one of the alternate entrances I made was for SVE and they didn't create their own alternate, I think that NPC's mod author has bigger issues to be worried about for compat than mine.
SVE is a mess to build compat for with location entrances.
is it because of the map changes from vanilla? Just curious / I'm p new
Yes
That’s the reason
It edits a whole bunch of maps (not inherently bad! But makes compat hard) and has a lot of users with stupid complaints about compatibility (because it has a lot of users and a small fraction of them do inexplicably stupid things)
You get a whole new level of "is this location taken" with SVE maps, because of the changes
it was also not the best about compat in the past, which explains a bit of the fatigue around it from mod authors
althought progresses were made on that regard
Some mod authors don't even bother trying for SVE compat anymore because sometimes free vanilla locations are hard enough to find
There’s a somewhat asymmetric dynamic because users disproportionately complain to other, less popular mods’ authors
Oh hahah! Sorry
I was just using pillow's festival coordinate tool, and was like "wow there's almost no available space" for my npc hahah
(it is frustrating, but users don't know all the etiquette we have. So it's ok to say to them that its not something you'll consider, with or without explanation)
Questions about making mods are fine for here, questions about playing with mods less so, mainly because there's a valid running joke that mod authors don't actually play the game anymore xD
Once in a blue moon…
I had restart my save after changing the internal name of my npc
FormerName is wonderful, but problematic when the FormerName was not prepended by a {{ModID}} and someone else also used it for their NPC. xD
(I love seeing these stats every month
)
I've been wondering about this for a few months now, but I'm surprised to see a 1.4 format in the top five with the 1.6 formats, and all the 1.5 formats dropping out. Curious as to what you think the reason might be? Like, is it because most 1.4 mods were never updated to 1.5 or 1.6 while a lot of 1.5 mods were updated, or were the 1.5 mods more splintered across different CP versions?
yeah, plus the mod id made it easier, since his name was only 1 character 
I’m thinking about making something myself to track seasons, plants, etc. — I’ve built bots and mods/cogs before, so it could be a fun little project. It’s such a cute game.
Is there one already for this.. hmm, there is so much that can be made!
Depends on what you mean by tracking, I've seen a number of mods that might fit 
There’s a few websites that break down profitability and there’s the Stardew checkup website, if you’re curious about external sorts of tools
you can definitely two cakes it though
@pale river right. Thank you
Okay good to know, to be honest I didn't really look to much into it, I like just making things haha.. it's a problem
if you want to make a thing, make a thing
I was just trying to answer your question about if there was one already 
!twocakes
If you discover that someone has made or is making a mod with a similar concept to yours, don't stress! Our community promotes the idea of "two cakes", where two versions of the same idea can peacefully co-exist. Your mod will have your own unique stamp on it that makes it special.
We do love our multiple cakes here
!startmodding your project sounds like it may need C#—are you familiar?
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.
!decompile to see the game code also
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
Can someone assist? I have the portraits, and I used the mod by Zeroxpatch to create the content and manifest. However, I need to edit this so that the NPC changes clothes whether he is indoors or not. Similar to how Shane doesn't wear his winter coat while working at Joja. I'm confused about where to add the basic Appearances code block.
for starters don't use their mods because they are all AI generated and thus a) not suitable for this server per the rules and b) broken more often than not
you don't need their stuff to make a content or manifest anyway
https://stardewvalleywiki.com/Modding:NPC_data
this wiki page describes what the NPC data looks like and on there it describes appearances as well
have you already unpacked your files? You can also look at the vanilla NPCs for examples
I regret not watching it sooner 
I'm referring to this: https://stardewmodding.wiki.gg/wiki/Tutorial:_Adding_Seasonal_Outfits_via_Appearances
Last edited by AirynS on 2025-10-23 07:04:19
If you want to add seasonal outfits for your NPC, there's two ways you can do this: the token way or the Appearances way. Appearances is a new code structure added in SDV 1.6, so if you're looking at an older NPC's code for reference, they'll most likely be using the token way. The main difference bet...
I have a content and manifest right now.
that's a tutorial that tells you how to use the data on the wiki page I linked you
Lmao when i reached the :3 scene, i was like wait dats button 
following that tutorial should get you to do whatever it is you want to do too, though it may help to understand what the underlying data is and what is doing
it's the best face of the season clearly
I'm aware of that. Do I need to copy and paste that over what is in my content file currently
I see why it won anime of the year awards, the storytelling is superb 
New season is in a few weeks 
i mean, I don't know what this content file is already intending to do, so I can't tell you if you need to overwrite it or not. I'm not sure what winter_Anthony is or why you're editing tilesheets/objects in the first place
if you intend to edit that asset, then obviously don't overwrite it. If you don't, then replace it
This came from the program they uploaded once I inserted the images.
I got a template you can use!
well that code has absolutely nothing to do with NPCs
and the format number is out of date
is this a good channel to ask how to install mods? or is there another one
!mh
For help with modding issues, please ask in #1272025932932055121! When asking for assistance there, sharing an error log will help others identify your issue (see https://smapi.io/log for instructions).
Don't use their program, not in the least because if you intend to keep using it, we literally can't help here
!gs you can start here tho
If you would like a guide to setting up mods for Stardew Valley, check out the getting started guide! https://stardewvalleywiki.com/Modding:Player_Guide
Follow the tutorial that you said you were referring to in order to write your json and scrap what the program gave you. That will give you the json you need to have an indoor vs outdoor outfit for your npc
are you okay with it if i DM you about it?
hey there, looks like the base you were using was incorrect. I do have a template if you're interested! https://www.nexusmods.com/stardewvalley/mods/39706?tab=description
Nope sorry, i’m actually about to rest too
feel free to make a thread at #1272025932932055121 tho. A volunteer will be able to assist you more thoroughly
oh ok! thanks so much for the help
does this actually include Appearances though? Or just editing portrait image assets?
ohh it's just basic seasonal
Hi pathos happy new year 
that doesn't tell me anything
basic seasonal stuff can and should still use the Appearances system, which is what they wanted to use
it enables a singular variant for all seasons using CP tokens
I'm disappointed in you/lh
If we look at the format versions over time and the attached charts:
game | SMAPI | Content Patcher | dates
---- | ----- | ------------------------- | -----------------------------------------
1.2 | | 1.0 – 1.3 (4 versions) | 2018-02-25 through 2018-09-26 (30 weeks)
1.3 | 2.6+ | 1.4 – 1.9 (6 versions) | 2018-08-26 through 2019-11-26 (65 weeks)
1.4 | 3.0+ | 1.10 – 1.19 (10 versions) | 2019-11-26 through 2020-12-05 (53 weeks)
1.5 | 3.8+ | 1.20 – 1.30 (11 versions) | 2020-12-05 through 2024-03-19 (171 weeks)
1.6 | 4.0+ | 2.0 – 2.8 (9 versions) | 2024-03-19— (93 weeks)
There are three possible factors that stand out:
- Stardew Valley 1.5 lasted 323% longer and had 133% more format versions than 1.4, so content packs were likely split across more versions as you thought.
- Content Patcher 1.19 was for both Stardew Valley 1.4 (1.19.0) and 1.5 (1.19.1+), and Android was stuck on Stardew Valley 1.4 for a long time. Many content packs likely targeted 1.19 to support Android players. You can see that in the chart — even though 1.19.0 released in December 2020 and was only the latest version for nine weeks, it kept climbing until 2024 (when Content Patcher 2.0 took over as the baseline version).
- With a few exceptions (like 1.29), most format versions have a long tail of content packs which never update. So often it's not so much that a format version dropped out of the top five, as a newer version became more popular (since the rate at which Content Patcher packs are created has increased over time).
then that template won't help them with indoor vs outdoor appearances
Did the modding wiki guide get linked already
yes, by them
ohhh, i figured they just wanted a simple version
I think it's worth updating your template to actually use appearances
yeahhh, I'm just still learning how I might make an appearances version that makes total sense to complete beginners
I try really hard to make sure my templates make sense and the apprearances system makes that more complex
not using appearances however is bad practice when there is no reason not to use them, so I'd say it's worse to recommend the token version over them in the first place
I would probably make it LocalTokens because i am LocalTokens enthusiast
and if the appearance system on its very own is complex, then there will never be a template that somehow makes it less complex than itself, so you may as well just make the template
But it really depends on the goal here, do you want people to just put in 3-5 values and it go brr
ig, again I'm decently new myself and I wanna make stuff simpler
Or do you want to actually show the whole structure without added complexity
yeah, my template is more for complete and total beginners who've never modded before
That doesn't answer the question though
Thank you! I'd quite forgotten about Android modding being on 1.19 for the longest time (even though I think I had a couple of packs I deliberately left on that format for compatibility, heh). The history that prompts some of these stats is fascinating.
3-5 values go brr™
you cant make the Appearances system simpler, is my point. you have to have at minimum, yknow, the fields that go into the Appearance system. if the existence of those fields themselves is whats making it confusing, then there is no way around that besides explaining what they do
you cannot make it simpler by removing the fields because then it is not the Appearance system
Because you can approach it such that the actual local token include is "it goes brr do not touch" to the consumer of the template
ig, again I do plan on doing apprearances eventually, I just thought this might be helpful since there are no other templates
The other template is vanilla game, winter outfits 
or the wiki guide, which is basically a template
I get where you're coming from, but I do agree it's better to get people on the best practices at the ground floor
when I do my "simple" NPC for people to use as an example/template, I'm still going to i18n it even though I do think that's an extra layer of complexity, because it's something people should do.
yeah, that is fair, and I do plan on making an appearances one eventually when I get better at modding
I'm just tired rn LOL
(also I downloaded your seasonal template and:
- the seasonal tokens are not even being used at all? it's only loading the base variants
- you're Loading and EditImage-ing the same asset in two separate blocks, with no explanation of the difference between the two)
fuckkk okay lemme see
(I'm going to have to learn Appearances when I do this since my 'simple' NPC has seasonals
)
(I appreciate the efforts you're putting in to make modding more accessible, but I do feel you should be more knowledgeable with the basics before teaching said basics to others)
i do think chu has a point where you could use tokens to allow users to plug in values like “do you have summer portraits?: yes” to enable/disable things as needed
..gonna disappear a little while i emotionally recover byeee
"hey tia, why don't you write a tutorial about X" welllllll 
it is also possible to be too knowledgable and write documentation that's utterly incomprehensible to all but other code divers
Just to be clear we aren't trying to be demeaning here, it's more a discussion on how things could be better or how I'd approach the same problems
stares at Extra Animal Config
yeah i dont think anyone thinks you fucked up or anything
oh ik, I just have the self-esteem of a dead rat 
This is hard cus when i spaget I think in terms of modules like
it’s very nice of you to want to make more modding resources! we’re all a pack of optimization-loving problem solvers lol
I hook <this thing> to <other thing> and it can be used for A B C
i like to think im pretty good at tutorials and docs personally
When it comes to docs people want linear story telling and it harder 
Confidence and self-esteem are built by accomplishments. And I don't mean accomplishments like "published a mod", I mean that you did the thing you set out to do and it worked
Don't rush ahead, just take it slow and steady and build your knowledge through reading and doing.
I hear good things about people that use your JSON tutorial 
Or they ask hey how do I do à not knowing that it's just A with 1 extra step
oh yeah it's great!
i swear to god if you know exactly how animals choose and save their produce under the hold it all makes sense, eventually, maybe
Yeah I do think your docs are good with much example, but even then I do end up telling experienced modders what BETAS things to string together too
Hi, how are you all doing? I hope you had a lovely end of the year and a great New Year!
By any chance, do you know if it’s possible for a mail to have more than one condition to be delivered? For example, reaching a certain skill level and having a specific friendship level with an NPC?
Assembling the pieces is part of the process
yep! in the trigger action you send the mail with, simply list multiple GSQs separated by commas
tbf if i wasnt limited to the way tractions must be written and had my own system i feel like itd be better but alas. limited by vanilla
Thanks 😁 👍
i think people also arent used to nesting things very deeply which doesnt help with some BETAS stuff
i wouldn’t expect it from docs, but i do appreciate when there are notes and hints like “by the way, you can combine this with X to do Y” when it’s something creative i might not have thought of
Yeah at some point you approach problem that this traction stuff is nearly a DSL
idk what a DSL is
clearly we need lua scripts for trigger actions
(Yay, stats!!)
at one point i had plans for an actual custom scripting language for BETAS
i still do a little bit
Buttonscript
"selph.CustomTapperFramework_TransformCrop Cornucopia_MintSeeds 1 false \"selph.CustomTapperFramework_NEARBY_CROPS 1 \\\"ITEM_ID Input Cornucopia_MintSeeds\\\" 3 true, RANDOM 0.8\"" example of real code from real coders (me)
lisp then
What about COBOL
Tcl
whats the most natural language sounding scripting language
Snek
the thing is to me this makes perfect sense 
though ill admit even though i understand when things must be nested, figuring out how many slashes is still something i struggle with sometimes bc of not being able to remember how many layers of quote-saving and quote-escaping and quote-removing something might go through lol
Vibr
It doesnt exist.
Oh no
dont forget to add an extra escape if you're testing it on your IDE console, too
unrelated but i just wanna ramble that dwarf fortress is adding lua support for generating object data; it's literally "the content modder yearns for foreach" manifested
so what you're saying is we need to PR in Lua scripting to content patcher?
Tutorial | Rockstar https://share.google/X40WqchUup6Q6Q4NU
yes 
it's escapes all the way down
fucked up escaping nightmares was like 33% of the reason i added tokenizable string support and trnalsation key support to the relevant BETAS features that could use it
the other 67% was i was using a fucked up custom format for things like offset numbers bc i forgot tokenizable strings existed at the time
right now i have like [CharacterCoordinate Haley X] which turns into haley's current X coordinate, which is nice
before it was something weird like Coordinate:NPC:Haley:X or some shit that i then parsed myself
bc i needed some way to differentiate someone trying to grab a coord likew that vs manually writing a number
this is why BETAS went to 2.0.0 so quickly bc changing that was a breaking change even though i think i had 0 users at the time
and now all that work to add tkstring support to tractions and GSQs will be all for naught since vanilla is going to have that anyway in 1.7 
you can plant your flag on that rock and say “but i did it before it was cool” 
that would be more of a consolation if it didnt coem with the fact that ill likely have to redo all my stuff again just to make sure my stuff still actually works with the vanilla system
I think i am still doing weird custom thing all of the time
Unfortunately I didn't forsee how often I'd need a texture + sourcerect in a space delim string
not too late to add tkstring support yourself
but also you dont limit yourself to just strings anyway dont you, you could just add a data model
space delim string?? fear.jpg
you've already been using those
Yeah I do just give up and data model eventually but not always
oh yeah some BETAS stuff has it i remember
So there's a lot of inconsistencies 
vanilla has it
everywhere
gift tastes are slash delimited strings of space delimited strings
A space deliminated string is just like
"thing thing foo bar"
this sentence is a space delimited string
New quote added by atravita as #6893 (https://discordapp.com/channels/137344473976799233/156109690059751424/1456380622451769386)
actually i just remembered. spacecore spawning has a space delim string of slash delim strings of comma delim strings for the Action
final boss of strings
yeah that woulda made a good data model probably
if I try to load a foreign model dictionary asset as an IReadOnlyDictionary<string, object> do you think that will make things explode?
or do I have to do horrible things with code generation again
maybe if I just load it as IEnumerable...
why do you need it to be readonly
if u use Helper.GameContent it might be fine
im reading "foreign model dictionary" as another mod's asset
okayyy I added more detail about how the game works to the basic portrait replacement, uhhh would appreictae feedback to make sure i got everything right/phrased it all correctly
yeah, I'm trying to read another mod's data without hard-referencing it, but I don't need to keep it around, just process it when it gets invalidated
the worry is just about contaminating their thing with wrong types yes 
(You can't)
but Helper.GameContent is own cache so it's ok
however idk about the ireadonlydict stuff
Unlike the list variant it's not covariant
sort of. I want to avoid exploding c# editors that assume a specific type
I'm not aware of any useful way to do that, at least; the content pipeline always errors about casting if I don't know the actual k/v types
I have used horrible codegen stuff before, I'm just hoping there's an easier way
Sorry, I meant the other message on IReadOnlyDictionary
That one isnt covariant
IReadOnlyList is
okay, admittedly that was a dumb question and not actually what I meant to ask
what I meant was, why is it not covariant if you can't insert entries
No idea, ask Microsoft lol
fair enough
yeah this is a good start, though the "why" instead of the "what" is also needed
if your template is aimed at portrait replacers of other NPCs I think EditImage is preferred
hmm, could you elaborate?
(alas I'm going to leave in a moments)
ohhh it's okay dw!
maybe I should just say fuck it and ignore c# mods that don't do type matching
what is the actual usecase here 
oh, I'm surprised it puts up with this
Monitor.Log($"Testing some content load type nonsense...", LogLevel.Alert);
dynamic asset = Helper.GameContent.Load<dynamic>("Data/Objects");
foreach (dynamic entry in asset)
Monitor.Log(entry.Key, LogLevel.Alert);```
i have been doing basically this bc it seems strange that pure C# mods want to use my content facing frameworks
oh nice! didn't think it would let you load as dynamic.
yeah, it never liked object, but ig dynamic resolves whether your uses are valid at runtine
(and doesn't make the content loader die, more importantly)
i load Secret Note Framework's asset as I think a Dictionary<string, object> and just use newtonsoft to use it after, it works fine
though it's possible someone who knows better will say this corrupts the cache or something 
yeah, newtonsoft tricks probably help too, I'm only familiar with doing that on my own assets
oh wait no i just load it as a straight up object not even a dictionary
i dont think i would do that again if i made that mod today lol (not in the least bc SNF has an API now)
i also use Game1.content for it and not my helper
ig u basically cloned the thing once u pass it through newtonsoft right
original instance unchanged
yeah it creates a new JObject
from the object
wow this code is awful
maybe i shouldnt have linked it 
(in my defense this was like month 1.5 of me learning C#)
I think what I'm going to do is use reflection to get the type, bind it to GameContent.Load, then cast to dynamic after calling and manipulate it directly
okayyy tinkering more with the basic portrait mod template, uhh lemme know if my explanations make sense!
whats the correct way to remove a vanilla trigger action? just edit it with
{
"Id": "<ID_OF_VANILLA_TRIGGER_ACTION",
},```
?
same way you'd remove anything else with content patcher, null it out with the ID as the entry key
thanks!
Pillow festival site PR step 1: filling in a bunch of missing sprites...
Now step 2, SVE nudging, send me an energy bomb or something, I'm gonna need it
thank you for the reminder that i still need to PR my characters
oh man where's that link
This is both going to help and give a headache to people who did SVE positioning, I know it
but a headache now is less headaches later
yeah i already had a bug report about one of my characters colliding with SVE positions despite using the tool, because a third unrelated mod moved them lol
To the site itself? https://festivals.pillow.rocks
Well Nic, I got bad news LOL
nah to PR
aha! thanks
My bad news is that the site seems to use vanilla positions for vanilla NPCs
on SVE maps
which is what I am currently going to try to fix
so it may not even be anythin moving them other than SVE
yeah that's what i was referring to! although i didn't think it was vanilla positions
i see
Also adding NPCs that show up later in SVE, like Lance, so you won't be jumpscared Y3 by Morgan standing on you or something
helpful!
I hope so, because this is gonna take some time holds breath, dives into files
i want to PR src/lib/positions right?
I love when a random player tells me that my NPC collides with Bertholomew the Third and im like who.. tf is that, especially when they dont link to the custom NPC (speaking of positions and collissions)
yeah after updating my character positions on the site, i'm fully prepared to say "nope i've moved positions 397573 times, learn to do a personal edit or deal with overlap"
festival positions are my least favorite thing ever
ur npc is a hermit
me finding reasons for why my NPCs don't attend so I don't have to do it
never goes to festivals
Yeah, its boring and tedious, you cannot force me to redo it cus NPC XYZ is also there. Same with schedules honestly
actually imagine if u just park them in front of bus stop on fest day and be like "these ppl r loud im raising a complaint"
"Every once in a bluemoon, your NPC collides with this other custom NPC" aight, well they're having a little chat but forgot about personal boundaries for a second, it happens
Im making it a cannon hangout event for them rn actually
"They have no sense of personal space" that's why
Truly
Honestly I never report stuff like that mostly cuz it makes me giggle so hard
Shane walks through a bush in an event if you have SVE installed and I haven't fixed it because I think it's funny (and no one's opened a bug report about it)
(idk github PR stuff--do i have to/should i be PRing every file i change separately, or is there a good way to do it in bulk? is it annoying to receive several PRs?)
so first you wanna go make a fork
after that, commit all changes to the fork
this can be 1 commit or several
oh i did that! i'm here
okay and i do the last step each time?
you should just do all your changes in 1 PR
unless pillow has other opinions
u may change many files and do many commit
okay so i back out and go edit a different file then at the end big green button
makes sense thank you
yee
pillow was fine with me doing all in one at least
tho there was some mention of me doing soemthing wrong that needed to be fixed, but idk waht exactly it was
Looked like a formatting thing
They did another update to fix that, I saw it when I was forking
Dudes just built different
yeah tho not too sure what exactly i did wrong since i copy pasted the entries and changed only my npc name and position to fit hmm
Looked like a missing } situation
Accursed tiny punctuation that is easily missed
progress: the only person who moves in SVE Jellies Y1 is Haley by two tiles, adding the people who show up late now...
I think I'm just gonna get a list of everyone moved/new first and then actually do the code stuff once I have all the details.
I pressed something accidentally in VSC and now it highlight the nearest letter instead of just a line where i'm typing
Im not actually VSC savy, wtf did i even presssss
No? I dont think so, i was just trying to fix an error with VSC not recognising a } as a closer or smth
definitely sounds like Insert to me though
maybe look for an "overtype" setting
its default hotkey is Insert but idk maybe it got changed in your install at some point
hold on gotta google what hotkey insert even is
It's Insert
I'm not sure a ton of people use it
fixed it lololol
I only know it because of accidentally hitting it and having to hit it again to stop it
just a little silly goober moment
I hate accidentally pressing insert 😭😭
Hey everyone, can someone help me please 
I am trying to make it possible to add a question BEFORE a channel plays in my Channel Framework. But no matter what I do, it never works. I have tried everything I could think of, and every time the question plays, but the channel doesn't run. When I check the log, it seems that the callback never works, and it never really knows when the player has answered, and because I tried too many things, it most likely is because of a core game logic running. Anyway, I don't know what to do, I could be doing something stupid, or that might not be possible, and I was wasting my time (doubt it).
I have already asked this before, but I had to go and couldn't work on my mod anytime since. So, can someone please help 
https://github.com/Astraios-911/Temp
The things you will want to look at are ChannelPlayer.cs, ModEntry.cs, and TVPatches.cs .
Hm can you describe the desired flow?
I understand it as some like
- Player uses TV
- <Pre channel action?>
- The channel is rendered
- <Post channel action?>
And you are having issues getting 2 to work
anyone know off hand what function I should target with Harmony prefix to stop the sword block animation before it starts? I'm looking in ILSpy but can't find the function under Farmer.
Yes
Post channel actions work normally
Ok let me actually go look at the spaget now
"ah, most of these aren't too bad, just a person or two off-" gets to the ice festival which has a whole different shaped map in SVE ohno
this was the one i had an issue with lol
lost in the woods
I think some of the people in the center won't need moving, but everyone else is gonna
do you patch TV.selectChannel at any point
No
when you test, do you ever reach the [SelectCustomChannel] Channel has BQuestions, showing question dialog branch?
[23:46:09 DEBUG More TV Channels] [SelectCustomChannel] Called with answer: Astraios.CP_Test_TestingChannel
[23:46:09 DEBUG More TV Channels] [SelectCustomChannel] Found custom channel: Astraios.CP_Test_TestingChannel
[23:46:09 DEBUG More TV Channels] [SelectCustomChannel] Channel has BQuestions, showing question dialog
[23:46:09 DEBUG More TV Channels] [ShowBQuestions] Starting for channel: Astraios.CP_Test_TestingChannel
[23:46:09 DEBUG More TV Channels] [ShowBQuestions] Question: What do you want to watch?
[23:46:09 DEBUG More TV Channels] [ShowBQuestions] Answer count: 3
[23:46:09 DEBUG More TV Channels] [ShowBQuestions] Created 3 response options
[23:46:09 DEBUG More TV Channels] [ShowBQuestions] Question dialog created
The console stops here.
Here is an example CP if you want to test it https://pastebin.com/GLJqMqNb
there are six vanilla NPCs in the right spot on this map, I am moving ALL THE OTHERS. rolls up sleeves
ah so i think you may have bumped into a problem where the previous question dialogue is not bonked yet, it's very jank
That's what I think too.
right now once u reach [ShowBQuestions] Question dialog created im guessing it just stop and you don't get anything right
can the player move?
btw please ping me every time in the conversations because I am doing something while texting rn so I might not see your messages otherwise.
Oh ya.
sorry, real quick-- when using the i18n generator, do i put the entire gift taste section from the content.json into the field? or do i just put the dialogue into the field?
sorry the i18nifier
i was thinking like doofenshmirz lmao
And if I select a channel again. It plays the rest of the log and writes in the console as if the channel played then starts the questions again and then stops at the same place.
it's very wierd
oh u still have the menu after [ShowBQuestions] Question dialog created?
No
OH of course the tutorial has. multiple tabs. sorry for the dumb question lol, thank you
That is if I interact with the tv again.
no worries lol i wasn't sure if you were aware of the instructions
hm ok 
what i'd probably consider doing is move away from the .afterQuestion and just prefix TV.selectChannel
I tried that already. But I will try it again just in case I did something stupid.
I do that a lot 
its possible that you didn't skip prefix
which you'd have to cus you want your custom channels to get priority
Maybe
oh actually another possibililty is
bc u are making a question dialogue in the afterquestionbehavior
We will see now in another episode of am I stupid or not! 
the afterquestionbehavior of the new question dialogue is being lost
from public virtual bool answerDialogue(Response answer)
afterQuestion(Game1.player, answer.responseKey);
afterQuestion = null;
Game1.objectDialoguePortraitPerson = null;
return true;
That is what I thought most likely to be the problem.
so there's a few thing u can try here
one is to hold the new question for 1 tick, and make it next tick
easy way to do it is DelayedAction.functionAfterDelay
use 0 for timeout
Tried that already even for more than 1 tick to try to give it some time but here we are 🥹
the way i did it in mmap is a postfix on answerDialogue
so im holding the afterquestion elsewhere first and the slapping that on there
this i know to work bc i wanted ability to nest answer dialogues
We are getting ahead of ourselves though. Let's try to prefix TV.selectChannel first.
no i was dumb earlier
it is this particular problem 
Ok, so I was not dumb when doing this, hurray!
so yea you gotta somehow restore the afterquestion you want after answerDialogue
if you want to try delayaction for this make sure to wrap all of Game1.currentLocation.createQuestionDialogue( inside 
ok
Hi, how is y'all?
Also, I am tryin to make a mod for the first time and am following a tutorial, but kinda can't find the json file type thing on Visual Studio. I just wanna make a full NPC and a couple of new crops.
visual studio 22 is a bit overkill for making a content pack. if you want something simpler, you can try visual studio code or notepad++ (which is what i use)
you can of course still use VS22 if you want
Wait, I can use a content patch for making a whole new NPC? I thought it could only be used to change existing NPCs.
!npc nope! you can find a tutorial to making a new NPC here:
Keep in mind that making NPCs is a complex process that requires learning many different aspects of Stardew modding.
Here are a few links that can help get you started on all that you need to know:
-
Tiakall has a great tutorial on making a custom NPC for 1.6.
-
NPCs no longer use dispositions, check the wiki page for the new NPC data.
-
Feel free to jump into the https://discord.com/channels/137344473976799233/1277457201077813280 thread for more interactive feedback and help!
-
Fireredlily has a WIP NPC Builder Please do report any errors you get with it into the NPC thread!
it's basically the same as editing existing ones, except you have to load blank.jsons for assets that don't already exist and you have to target your NPC's internal name
Am I able to use a content patch to make a new area too? Sorry if I am askin too many questions.
Yep
you are! and no worries this channel is for questions
You can make a whole lot in content patcher
there's a tutorial for a new area, let me link it
I think Lewis and Pam are the only people positioned right in Y2's setup, ohno^2
a good rule of thumb is that as long as you don't want to edit game mechanics, you can use CP
If u r a C# enjoyer though don't let us stop you 
Mk. So, I could make an area ya travel to like Ginger Island with just a content patch?
It's just not as nice tho lots of ppl who do C# mod choose to also use CP on the side cus it's just less boilerplate
Yeah
if you wanted it to be "fix up this boat" it's a tiny bit more complicated but yeah still possible for sure
Thanks, I am gonna go look at the tutorial stuff and hopefully get some of the stuff started.
It's ok sometimes all u need is for a
to
your stuff
I could have saved myself 2 weeks of crying if I had gotten it right the first time 
To confirm that u r right all along
Well, thank you so much Chu. I was about to give up on the whole question thing, but now I don't have to.

Final changes for the ice festival are about eight times as long as the others 
hey there, im new to this chat
does anyone know how to get the expanded mod of stardew
hi! this is more a question for #modded-stardew
but searching for expanded on nexus should be a pretty solid way to find it
thank you, i really appreciate it
to confirm rq-- in tiled, if i want to add a message to a specific location when the player interacts with it, i need to have:
"Action Message (Name of message)"
Then put into the content.json to load the default.json string using that same name, yes?
By default.json you’re referring to the i18n, right?
If you don't have Stardrop as a Mod Manager, I recommend getting that. Works well with Nexus
yes! thank you
(I made a custom chart for that answer and later realized I didn't actually post it. So here it is belatedly.
)
-# (sorry I suck at maps and I don’t trust myself to help I was just double-checking what you meant
)
OH that's valid alksdjf
how do i indicate on a map that something can be sat on like a chair or a bench? 
If you use vanilla tilesets, it just works
Some modded tilesets also just work
if you want to make a new tileset object sittable, that is a different thing that I do know how to do, but I'm gonna make sure you need it before I launch into that LOL
ah, well, i'm using a copy of the secret woods map that i've edited, and i wanted to be able to have characters sit on one of the fallen pillars... i might just remove it and add a bench there though if you think that would be better salkdfj
That's doable, though I believe you'd need to make a custom tilesheet and apply the chair data to it, which isn't super recolor compatible
It depends on how much you want to do to make that happen
i'll just add a bench for now, i just want to be able to test the map to start lol
https://stardewvalleywiki.com/Modding:Maps#Sitting_on_non-furniture_chairs Here's the tutorial/wiki section, and if you want to see examples in action, I made some rotated couches sittable in this mod https://www.nexusmods.com/stardewvalley/mods/32021
thank you!!
also, uh, can you explain like i'm five how the npc warp and warp touchactions work in tiled?
i have had a stroke of genius and decided to have my npc's home location be entered from the backwoods, so i need to have him pop out at the bus stop to avoid the headache that is. backwoods pathing
It's one of those "a line of info separated by slashes" kinds of deals. Since it's just a pillar, you shouldn't need chair tiles, I don't think (those are for things like the arm of a couch that will show in front of your character when you sit on it)
touch action warp (aka a normal warp): when player or NPC walk on the tile, they get warped to the endpoint
npc warp: same thing but only NPCs can use it
er, i meant. what the code means on the wiki page? sorry i should have been more specific lol
but. thank you alskdfj is there one for JUST the player, so i don't have the game explode when he tries to leave?
what i thought you were doing was
- making a custom map that connects to backwoods
- editing backwoods to add warps to your custom map
- adding NPC warps to your custom map that shortcut straight to mountain/town/wherever
yes, that is the plan
OH could i maybe put the npc warp one tile ahead of the regular one?
the pathfinder will automatically calculate that the shortest route is to use the NPC warp, not the warp to the backwoods
but yes you should not overlap them
so like, to the left of these two
yeah, i figured i'd put an npcwarp off to the side of the bus stop he could pathfind to
yep cool. just make sure that that warp endpoint is to the left of the "leaving the map" npc warp startpoint
this is easier to explain with visuals lol
thank you alskdfj
also looking at that picture are you sure those tile data don't need to be moved down one?
do you mind explaining what all of these parts mean, too? i THINK i know what i'm looking at, but i'd rather know if possible
"NPCWarp [<int fromX> <int fromY> <string toArea> <int toX> <int toY>]+"
int means integer, which is a whole number (1 2 3, not 1.5 2.0 3.75)
from X and from Y are the coordinates on the map that you stand on to warp
to X and to Y are the coordinates on the other map where the warp dumps you
stringtoarea being the map name it wants to take me to right?
ayy okay, i can work with that for sure lol thank you
wait acutally clarification: it wants the location name, not the map name
do you understand maps vs locations?
also for illustration purposes: red is an NPC warp to BusStop or wherever. blue is where the warp you add to BusStop will dump them
can you explain please?;;;
and thank youuu that makes sense
also, how do i make tiled display the. y'know. tiles as the x and y coordinates here instead of pixels?;;
map: a tmx or tbin that gets loaded to Maps/MapName. contains data about the physical map, like warps, music, lighting, where the player can walk, etc
location: an abstract thing tied to a map, generated on load. contains data about fish, forage, and is what's used for things like schedules and warps
when you hover over a tile, do you see a pair of numbers followed by a number in parantheses at the bottom left?
like 5, 7 (298)
OH i do thank you
yep that's the coords
the (298) is the tile index, which is helpful for things like day and night tiles
do i need to keep the coordinates and the location string in the <>s?
no, <> indicates that something is a required field
so this looks right? "NPCWarp [56 16 BusStop 18 11 ]+"
a warp should look like 2 8 BusStop 16 30
no [ ] either, and no +
[ ] on the wiki (usually) means these fields are allowed but not required, and + means you can add multiple of the same thing after that
so a list of warps on the map would look like 2 8 BusStop 16 30 2 9 BusStop 16 31 etc etc
and does this look okay for the player's exit warp?
also, when you get to editing the bus stop map, let me know. map properties are different for when you're EditMapping vs Loading
yeah assuming your coords are correct
honestly the maps part is somehow significantly scarier than the rest of it,,, since there's so many little intricacies lol
once you have a handle on the most important things, it gets easier i promise
my first map was soooooo fucked up, i had no idea that the layers did different things, so i was just slapping things willy nilly on the buildings layer and creating new layers like Layer9
i think the maps are done for now,,, it's just a matter of figuring out how to get the game to load them in and get the i18n to cooperate too
oh, right, is this the correct way to get this text to display...?
-# looks around awkwardly in Front12

try it and see! (i say because i've used message like twice ever)

if you followed the wiki format then you're probably good
i was given an example last night that looks like this
so that makes me worry i'm doing the wrong string for it
i'm absolutely not admonishing you, but you'll save yourself a lot of time if you test things and then come in here if they don't work, rather than waiting for approval on everything you do
i'd wanna do the one that's on the left there, right?;;
er, like, for the items in question though, not that
that being said i don't see map.blockingshelf anywhere in there
ah, that's just the text i copied and pasted in, i still need to edit it
and you wouldn't want to use the i18n key, you would want to use the key in Strings/StringsFromMaps
okay, i'm gonna just. try it and see 
i always get worried i'm going to break things beyond repair lmao
sorry if i'm taking over chat;;; not trying to i promise
this isn't possible in CP unless you have a habit of testing and saving on your beloved year 5 save and then also deleting save backups
in 10 months of modding the worst i've done was had the game crash on entering the new save menu, which was harmless overall
and don't worry if other people had questions we would be getting interrupted
why is Elliott on the vanilla map twice for the egg festival main event? In the actual map in the vanilla game?
???
you likely have both main and setup on
Me: oh that's odd, this lists him twice, let's see where he is on the map- BWEH?
I have it on in that image, but he's actually lower in the setup. I turned it off and that is still what you see
No I mean
Ingame
I am in the files
well i see emily twice in your image too
Setup Elliott is neither of those, he's over here
is this y1?
my best guess is that the whole list gets parsed but the second one (the lower left one) wins and overwrites the first
If I run the festival ingame, it appears that the higher one wins since he isn't here
welp then never mind lol
Actually... LOL he appears to be facing the way of the lower left one but positioned like the upper one
confused elliott
as confused as me lol
unless there's a faceDirection command in the event script somewhere
If I talk to him, it fixes him and he faces left
you can talk to them during main event?
Re unpack your game
i never knew you could lol too busy egg hunting
It still looks like that
I think it's just like that...
Maybe it's fixed in the alpha? I'm not running that
do pets have like 3 layers of appearancy things now
this happens if you position an NPC twice. the second one moves them to the new position but does not change their facing, which remains in the direction from their first position.
so it seems like yes, elliott is simply there twice and the second one moves him
this adds a third level... I think the game just has type and breed
type also affects the sound it makes I guess
yea i meant [with this mod]
I also learned by accident that you can have a pet turtle, though idk how that happens
when is the last time you played game 
I TRIED YESTERDAY but then I wanted a black dog, so here I am smh
I'm only safe playing games I can't mod
you can buy the turtle from Marnie after getting max friendship with the starter pet
Is it possible to make a different map and put some new community boxes there?
hmm, do you mean like the junimo bundles?
Yes. I don't know if I want to use the sprite of a junimo like the community center, but that's exactly what I mean
But them again, the junimo are really cute and I won't be against using them
Unlockable bundles is a mod, in case you're not already familiar with it
Great. I was given the advice of writing it down first, but I don't want to accidently write in something that I won't be able to do if that makes sense.
Thank you
4 festivals down, 4 to go (including the Ice Festival and Spirit's Eve, so it's not exactly halfway done...)
you've got this
Got permission to post my portrait mod for Jade! I felt like her high detail portraits were a little out of place so did some light tweaking. Might have just been me but if anyone is interested it's here https://www.nexusmods.com/stardewvalley/mods/40752
Would you like this post showcased?
That would be great thank you 🙂
@upper rune You leveled up to Cowpoke. You can now speak in our voice channels and share images in all channels!
I have conquered the ice festival
ooh?
Two of these have few changes, but then I have to fight the Three Variants of Spirit's Eve spooky oooOOooOo
that's the final boss battle
godspeed voyager 🫡
Might need more changes than I know how to do for Y3...
do other mod authors bother to do y3?
wait I think I see the change I need.
I dunno, I did.
and since I'm putting moved vanilla characters up there, I've got their locations too
most dont because doing y3 will break NPCs that dont have a y3, as i recall
same with y4, y5,etc
Is it possible to use the heart level to determine a character's schedule? Specifically I'm imagining editing the wizard's schedule to be completely different once you hit a certain heart level, and when I tried it, it didn't work but I also could have made a mistake somewhere

