#making-mods-general
1 messages · Page 318 of 1
json syntax is the same no matter what you are writing in it, cant change the syntax if docs tell you otherwise even if you think you need to write smth different
gotchya, does that mean i can put both add and remove under entries then or do i still need seperate actions
if youre doing the same target, yea
safe bet probably just have two seperate actions though right
if its the same target the best thing to do is in the same patch if possible
I'd say it's not necessary, but you can start with separate to debug stuff
eyyyyy no errors found for now
now to test it in game lmao but once the second upgrade is all done, ive already got the first upgrade done so i just get to play with it after :3
if anyone needs inspiration: I just learned coding and made farmhouse maps for both upgrades and renos in 42 hours out of pure spite, you can do whatever that thing is you think you cant do
Except put two json keys in a row
shhhhhhhhhhhhhhhhhhhhhhhh
im a pessimist trying to be postive take it with a grain of salt lol
Is there a reason that context tags would default to one specific item as opposed to the category i was trying to define in spacecore?
Aaaa time skipping wasn't the problem. She's still getting stuck at the side of the bridge :c
Is it a pathfinding issue?
Last time this happened to someone, it was at the BusStop, and it was because the warp was blocked by a tile on the Buildings layer.
Is she getting stuck on a custom map or a vanilla one?
I WAS ONTO SOMETHING??? NICE
(Yep, if anyone ever says their NPCs stopped moving at the BusStop, easiest thing to check is that the tile below the NPC warp in the bus door isn't blocked)
It's happening on a custom map.
For some reason, she's refusing to cross the bridge lol
how is your bridge set on the map?
And by that, I mean, what layer are your bridge floor tiles on
the sides are on the buildings layer and the stone walkable part is on the back layer
I remember hearing about NPCs having trouble with bridges
No there isn't. She's heading to another open area
That's why the Sunberry entrance is a land bridge
Usually the bridge issue has to do with the Buildings layer and Passable though, I think?
I had a similar issue, changed the goto location to another tile and it somehow worked
(And part of why sve likes those bigger 2-3 tilr wide bridges(
I'm hoping this is at least a 2-tile wide bridge walking space, based on the screenshot. So that shouldn't be the issue, LOL
Buildings layer and Back layer
Mind taking another screenshot with the Back layer visibility off, for Buildings?
It's a little hard to tell what I'm looking at.
thanks, the dark spots on the path were messing with me
no tiledata anywhere on that bridge, correct?
Nope, none at all
and she's supposed to stop somewhere else further north on that same map?
Yep. I even changed the schedule point just to test and she's still getting stuck in the same place
and you've slept or reloaded save after changing, yes?
It's not something silly like you made a map change and didn't sleep?
(I've done this)
I haven't edited this map for a while so no. I've been doing lots of schedule changes though
Every time you change the schedule, you need to sleep or load a new save
because pathfinding is determined before the new day starts
Ahh ok! I will try sleeping
what pixel art software do you guys use? Ive only used anime sketch softwares lol if i wanna make my own stardew clone i should probably have some pixel art software reccommendations
I use Krita with some custom configurations for pixel brushes, but a lot of people here swear by Asesprite
krita has pixelart? I thiink i did their trial and was like "meh"
krita is free tho, there is no trial 🤔
There's a charge if you get it off the Steam or app stores maybe, rather than directly from the website?
I got mine from the website, so, free
asepriite looks nice and 20 isnt too bad is what i would say if i had an income
not compared to modern digital art softwares ive come across
you can technically get that one for free too if you compile it yourself
I just use GIMP. I'm not known for my visual artistry, but I know that some authors who are also use it.
Nope, sleeping hasn't made a difference. She is still getting stuck there :c
wait im a dummy i want to make animated talk sprites like you see in homestuck so i was like i gotta make my own game well why dont i just make stardew valley portraits but theyre animated sprites instead of a whole a** game
duhhhhh
liike that
ill just make stardew versions and make it a mod
i dont need to make a whole game lmao
Log Info: SMAPI 4.2.1 with SDV 1.6.15 build 24356 on Microsoft Windows 10 Home, with 27 C# mods and 13 content packs.
Suggested fixes: One or more mods are out of date, consider updating them
Ignored Lots Of Recipes > Include data/fishshop.json > EditData Data/Shops: one of Entries, Fields, MoveEntries, or TextOperations must be specified for an 'EditData' change.
!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.
its what it says on the tin though. you dont have an entires, fields, moveentries, or textoperations field
you didnt put your shop stuff inside an Entries block
It is literally the same as the one for the saloon but the saloon one works
(oh right sorry my yapping is taking up chat space my bad sweeties)
you must put it inside an Entries block as that is how CP works
Whoever helps me fix this will be my new favourite person 
I need to go find dinner, since it's 9pm and I've not eaten yet, but if nobody else has got it figured out, I'm happy to try to look at the TMX directly later.
just in case it's invisible tile shenanigans
Could the problem be with a schedule string? That's the only other thing I'm thinking
It could be, but that would likely show in the error log?
Ahh okay
wouldn't hurt to post it just in case
"Sun": "610 8BitAlien.Lilybrook_JagHouse 12 13 0/1200 8BitAlien.Lilybrook_Lilybrook 13 49 2/1400 8BitAlien.Lilybrook_JemmaHouse 13 22 1 \"Strings\\schedules\\AnyaLilybrook:JemmaHouseAnya\"/2000 8BitAlien.Lilybrook_JagHouse 3 7 2 anyalilybrook_sleep",
oh I am dumb
there is no tiny mistake. put it inside an Entries block
one time i had my npc stuck because i didnt add the animation i used into the actual game but that didnt happen mid-walking like yours did
I swear just posting here makes things obvious
do her other schedules work, btw?
Yep, her other ones are fine
also isn't Willy's shop called FishShop? I might be tweaking on that but i really thought it was
regardless, hopefully the entries block fixes stuff for ya
It is
ah nice, memory like an elephant 
Hopefully it works
Because if not the Saloon is going to have so many recipes
I wish the Gus's Recipe Book mod still worked
Not sure if this is a coding problem or what, but I have no idea how to remove this shadow
Problem is, it's a skin and not a building itself. I don't want to remove the shadows for all skins, just this one...
or at least move it up under the trailer
It kinda looks like the trailer is flying
yeah...
i dont like it in the least
i might also add a bit of wood flooring in front of it because i dont like the ghost wood sound that i cant figure out how to get rid of
that removes the shadow for all the skins
that would affect all variants, no?
not just the one
ah missed that part sorry
If I'm testing schedules that have a When condition requiring the player to have seen an event, will using smapi console commands to view it count? Or do I have to start the event in game organically
this is how I learned there is a spring_Shadows tilesheet. I feel like all I ever do is scroll thru that folder and I'd never noticed that file before lol
well looks like a thing for mmap
watching it via debug ebi works yes
until mmap or smth adds a thing for it i would just move the trailer to the bottom of the skin png so its next to the shadow and add some manual shadow to it so at least theres not a harsh edge
cant. this is a farmhouse skin
Ty!!
you cant draw the shadow into the trailer skin .png you are loading?
it has to stay where it is so the door consistant with the others
if all else fails, draw a fence in front of the trailer?
removed the string just to test and she's still getting stuck
i might need to
if its the farmhouse itself, id honestly just disable the shadow for all variants then bc who is gonna change it that often or even notice in the first place
The plot thickens. One of my other NPCs has just walked across the same bridge with no issues. I'm losing my mind here 
okay, I'm back from dinner
I might just change the schedule so she doesn't need to cross the bridge lol
I just wanna know what the problem is
so the other NPC crossed the bridge fine?
Yep, but he came from the other side
I will test that out brb
I really wanna test your TMX for invisible tiles, LOL
but it's weird that it'd be a one-way failure
this looks a little better. i dont love it but it's better than it was
posting here because i posted the "before" pic here. the rest will go into the art channel
also yes im ocd
Just tested another npc going both ways across the bridge and it works... Oh well lol
Must just be a problem with Anya 
poor anya
Then the next step is changing her schedule strings to inch her closer to the spot where she gets stuck
and also checking that her animations all exist in animationDescriptions, like someone mentioned earlier
I've changed her schedule to force her to cross the other bridge so she can get to the place that way lol
I just think it's a very strange and specific issue
npc pathing is complete sorcery
Update no one asked for — it’s because spacecore didn’t override the recipe 🫠
I will fix thatttt not right now
isnt ther a mod that lets you craft furniture and like make recipes for you mod?
🤔 im debating if i should make some of my machine processing stuff interchangeable (wrong word but idk what to call it)...
like i have "recipes" for a product
you can put it in machine 1 to turn it into a different item, and then put it into machine 2 to make it a different color
but i wondered if i should allow putting it into machine 2 first, to dye it, then machine 1 to process it
you can make craftable furniture with recipes
how?
use the full qualified ID in the output
it's a thing since 1.6.9
there is the bug where the game's vanilla crafting menu doesn't handle big items properly (it will overlap other items), however it's not a problem in Better Crafting
if you're willing to scope creep yourself further you can make a custom crafting station with BC...
{
"LogName": "Craft table from another table",
"Action": "EditData",
"Target": "Data/CraftingRecipes",
"Entries": {
"CHAIR": "(F)0 1 388 10/Home/(F)3 1 815 1/false/default/",
"TALBE": "(F)1120 1 388 10/Home/(F)1122/false/default/",
"SORD": "(W)4 1/Home/(W)62/false/default/",
"TALBE2": "(F)1120 1 388 10/Home/(F)TABLEMACHINE/false/default/",
}
},
example code from my test mod lmao
Sord
talbe
sord....
the part im dreading abt my mod the most is the BC portion bc
i have so many items
ive got one last issue i cant seem to solve before my entire journey has been worth it and completed
I don't think the null commands are correct in the json cause....
its still trying to load the extended corner
any ideas>
?
the little strip of wall in the center implies its also trying to load the smaller version of the corner room too even though the json has it being replaced with mine
You need to also null the remove entry, most likely
i did
Ah
lemme try running an unmodded version rq
cause i even tried replacing the vanilla files
That definitely looks like the remove version isn't properly set, because you shouldn't have black tiles on the layer otherwise, I think
nope no changes
ill check it again but its written the same as the add version
Post your JSON?
I'm not at my computer anymore to look at the source code but I will see if anything looks off to start with
I'm replying 5 years too late, because I only just now got back into Stardew Valley. So, hope you don't mind me doing so. But uh, hi. I'm the guy who ported Flo to Content Patcher for 1.3 and I do not believe he even had a Spring schedule in his original mod. I probably should have sorted that out in retrospect when porting him. But I more or less did a straight port from the original, very ancient mod framework he used to Content Patcher.
I've been interested in giving him a proper update for years now and I think I'm finally able to do that. I found this because I went digging to see if the link to my original upload was anywhere, lol.
I think I still have the original mod archived somewhere on a drive of mine even though it's long gone. Could probably check and see if I was just an idiot lol.
well i half fixed it?
idk where the front layer went lmao
why did the front layer not register lmao
Did you accidentally turn it off in Tiled when you last saved it?
Hmm
That can happen if you have the wrong patch mode, but I don't think you would have had any reason to switch that from the default by putting an entry in for it
For only one room? all the others, edited and not, have their front layer
its just this one
For that specific patch
idk anything about patches 🤷♀️ im just gonna try reording the layers so front is the very top and try loading it in
But again, I don't see any reason why your patch mode would have been set to something different
its still doing it
🤔
Somebody help I cant fix it T_T

Its literally the very last thing before this entire shtshow is complete
How do LocalizedStrings work exactly?
For example if I edit in something into the default Strings/NPCNames, but player has a non-english language for the game, would it just use the English name?
If the Load Action of CP is used to edit NPCNames or other files, it will indeed affect different languages. (I used machine translation. I'm not sure if I expressed it clearly. Sorry!)
Yeah.. I meant EditData, definitely not Load 
Although now that I think about it... it probably will default to English name, since I believe it's like that with all the other data 
It should be like this. Just now I tried to modify NPCNames using EditData, but the result failed... So I might not be able to help you. Sorry.
just targeting Strings/NPCNames will edit the asset no matter what the language is unless you specifically tell it to only target it in English
you can put a When condition on it though
(or use the TargetLocale field on the action i suppose)
Ah, so that's how it works, good to know
(I probably want it to edit all anyway)
Can I TargetField something like this..?
(Worth a try anyway)
So I
Hello! Is this a valid way to use the dynamic token for ModID?
"LogName": "{{ModID}}WillyWeatherDiaLoad"
I thought having the ModID be auto-attached to the start of my LogNames would make troubleshooting easier if any bugs came up when playing with other mods and the person troubleshooting wasn't myself. (Or my ADHD brain forgot what my LogNames were which would also make sense)
oops... So I'm looking through the code on a recolour, and I notice it uses OnTimeChange as well as OnLocationChange for all it's patches. Is there any reason a recolour would need OnTimeChange?
That is the correct token for ModID, but I don't think LogName uses tokens
I remember having similar problems some time ago with Season token
This is good to know. I'll avoid using it just incase. Better to avoid the potential complication
Thank you!
the log already displays the mod name if something goes wrong. LogName doesnt support tokens as far as i know
Uhh... don't think so... mayyybe for some specific time of day light changes? But definitely not everything
time of day based grass and whatnot, i guess
Hmm, is that a thing in vanilla? Because I don't think this adds any mechanisms
nothing that content patcher does regarding patch updates is vanilla
ALso maybe buff icons would need it I suppose
the point is that if you make a patch update ontimechange and have a token in it that changes based on time, then thats you making it a thing
Yeah I don't thinkt here are tokens that change it based on time is what I mean
or i guess more broadly, the overall point of why a recolour would need it, is "it depends"
I know some mods have windows that change based on time more granularly than vanilla's day/night tile system, but not in a recolor
Sorry, I don't know why I keep hitting return by mistake, I guess my fingers are cold.
oh no it's the perfect spot to accidentally send messages when apostrophe, I do that all the time
Also, even I don't think buff icons would need it, because if the sheet with all the icons is loaded on location change... it's not like the icon changes when the buff runs out, it just applies it or not, right?
Yeah. My only suspect would be window-related
It's coder brain. Gotta newline after closing! 
if it's not that, maybe the modder just didn't understand the performance toll or how things work well enough
But also, why would OnLocationChange be needed, if the assets are all loaded on day start?
when a patch updates CP invalidates any relevant assets and they get reloaded
otherwise there would be no updaterate concept at all
High chance, there's unfortunately quite a bit of mods like that
I feel like you might have a case of "I don't quite understand how this works so I'm going to use all the updates just to be sure"
sure
CP does at least smarly NOT actually do any invalidation or updating if nothing did actually change, iirc
that is good
but if you use like, a Time token, thats always gonna be changed every timechange, obviously
Only if you have updaterate set to something
well, yes, that is the context of this conversation
I put something like this: "TargetField": ["Lance", "Reactions", 0, "SpecialResponses", "DuringMovie"],
I just wasn't sure if it'd work with automatic indexes (0, 1, etc), but why shouldn't it 😅
Well I'm not sure I understand the implications of what you're saying Button... like whether that means the patches need OnLocationChange or not...
(VSC sure is a lifesaver at times like this)
What's the recolor? at least, what's it recoloring?
"#0" not 0
whether a patch needs a faster updaterate is entirely dependent on what the patch does and what tokens it uses. there is no one answer
like is it just outdoors, indoors, UI, what are we dealing with here
It's the Kitsch Blue Grass recolour, ummmm outdoors and some interface I think
if a patch is loading spring_outdoors_{{Time}}.png for example, if you do not change the updaterate, that will be checked once at day start only. i.e. it will load spring_outdoors_0600.png and stay that way the rest of the day
Button, so if there are no tokens, would it not need it?
if you change the updaterate to ontimechange, it will re-evaluate the patch every time the clock changes, so it will change to, for example, spring_outdoors_0610.png when it becomes 6:10am
There are multiple phases
- Tokens update, and remember what tokens change
- Based on the update condition (all / timechange / locationchange) it will get the list of patches that meet that update condition and have changed tokens
- will re-evaluate the patches contents to check if the outcome is actually different
- If a patch wants to change its content or if it runs at all, then that asset is added to the list of what gets invalidated
- When the vanilla asset gets invalidated, smapi+vanilla will load it again
- which ContentPatcher will then apply the Load and/or edits
and will update everything as necessary
or more technically will invalidate as necessary*
I did not know that... very good to know 
there is still overhead in actually checking, even if its less, so still dont do it if you dont need to
I want to know if it's safe to remove OnLocationChange if the patch has no location-specific tokens
Are all the maps loaded on day start or only when you enter the area?
its probably safe, but it also probably wont really affect your performance too too much
though, to clarify
it doesnt need to be a location specific token
it just would need to be a token that changes during the course of the day, or potentially changes
At a glance at the files, nah, the time bit at least is definitely overkill. Seems like they just replaced the defaults, nothing fancy that would require weird time stuff
the {{Time}} token will change but it wont do anything until you change locations, but it will still change even though its a time-based token
{
"When": {
"Time": "{{Range:610,650}}"
},
"Update": "OnTimeChange"
}
would on daystart not be running, and so not invalidate the asset onday started
at 610, it will re-evaluate and this conditions now true, and will invalidate
at 620,630,640 and 650, the condition will re-evaluate but still be true, and the contents didn't use the token in some capacity, so not invalidated
at 700, condition re-evaluates but to false, assets invalidated
at 710+ its evaluated to false, same outcome, not invalidated
Some of it's even drag and drop for mod compatibility stuff
If you used {{Time}} in the middle of your Entries/Fields etc or the FromFile/etc, then it would invalidate on the 620-650 as well
the update rate just tells content patcher when to recalculate what the tokens should be. has nothing to do with the contents of the tokens themselves, so dont confuse timechange with only mattering for {{Time}} and such
(I looked at that, wondering if it was something they did for some other mod's problems)
honestly, a flatout EditImage replacement seems like it'd do them without needing an "update". Think that's how Earthy does it and it works fine
Sounds like.... probably can remove both Time and Location, but removing OnTimeChange would be the once most likely to have a performance benefit
Ohh yeah I'll check out Earthy, since it's popular I'm sure its optimised
Yeah Earthy has no update at all in any of the entries
I have a folder of recolors on hand since I was doing recolor compatibility
I mean I haven't run it and found it laggy (yet), but I was looking in there and noticed all the updates and thought it was odd
Not all recolours are made equally.
and for EditImage, there is a big cost on actually applying the edit, but just takes 1 misbehaving patch to cause everyone to run the edit
It may not be laggy on its own, but the problem is when you dump out a big ol folder of mods on top of it
Scarlett prior to some of my optimisations was spending 1-3 seconds applying (a lot of) EditImages to Cursors
and someone decided it would be smart to do a OnLocationChange edit to it
Tbh I once tried removing all on time updates from the 300 mods I had.. and the performance difference wasn't even that huge (noticeable in profiler, but not really in game)
It's probably nice if you're having active problems anyway
for large modlists the cost of maintaining the tokens themselves starts to be the performance hit
Hmm, interesting, I just don't trust my laptop...
There was this mod that had windows that change with the time and man that one wrecked my performance
Nice in theory, not worth tripping every few steps
Yah
but content patcher can only do peformance hitches either in the warp black screen or on the timechange intervals, got bad frame pacing out of that and its not content patcher (and the fleet of content packs) fault
the core of the problem here anyway is that it is uniquely pointless when it functions the same way without any update.
Can anyone help me making mod for custom farmhouse?
I made farmhouse layout with tiled but I don't now how to put tile properties.
is it possible to have an event be locked to whether you have an item in your inventory? like an event will only trigger if i have a rabbits foot in my inventory?
There is. The Last Smolunanu does it for an early event
Pretty sure the vanilla "definitely not cheating on my boyfriend/girlfriend" event triggers when you have a rabbits foot... Otherwise they all yell at you
The HasItem <item ID> precondition does this
your memory is faster than my searching
thank you all! ❤️
follow up, with sam’s job being between jojamart or the museum, is there a way to track which place he’s working at?
By chance does anyone here know how config sliders work? I am trying to do one where instead of 1,2,3 I can change what it shows for a specific value? I looked around the wiki and cp docs and gmcm docs, but cannot find it mentioned so idk if its even possible with CP alone. 
I imagine you can just track the circumstances he changes jobs, right? So Jojamart if it's open, museum if it's not
Afaik sliders only work for numbers... but maybe you can use i18n to swap display to something else per value?
No idea if it'll work tho
I tried using i18n and it didn't work sadly, although that would be so useful XD. I think you're right that it only works for numbers, numbers with decimals aren't working for me either.
I would say that using a slider for most non-number values is usually bad UX (except for maybe low/medium/high but even then tbh), most text values are better served via dropdown
(Unless you're on Steam Deck...)
I wasn't aware you could mod steam deck wHaT
It's just a PC!
How am I just now finding this out
probably because of the wall between Windows users and the rest of the OS universe
that's funny actually, a wall with no windows separating windows from not windows
should i avoid these type of characte for json translation?
I don't see why that would be a problem JSON wise, but I don't know on the smapi/cp front
Steamdeck is somewhat awkward for modding due to how the smapi console is very inconvenient to interact with
I just upload my log to see it
This might be an awkwardly phrased question as I'm a complete newbie to maps, but I understand that using ontimechange update is not a good choice, performance wise - so for a map change would it be more performance friendly to use daytiles/nighttiles over ontimechange map patch? (it's to support a visual change in a warp that becomes active "after dark" so following the game day cycle would be perfect)
You're good, don't worry
Generally yes. And should be simpler too, considering the night time in Summer is different compared to Winter.
Brilliant, thanks so much for the confirmation!
Depends on the tile property, you can either:
- Apply it through tileset editor - click the wrench icon on the lower right of Tiled's tileset pane, click on the tile you want to put tile properties on, then input the tile property using the format shown here
- Put the tile property using a TileData object on the object (pink icon) layers. For this, I suggest copying an existing TileData object from an existing map and editing it instead of creating a TileData object from scratch to prevent mishaps. The format is the same as linked above.
The first method is usually for convenience and if you want a specific tile to consistently have a specific tile property (e.g. Type Wood on ALL wood tiles you have), the latter if you want to put a tile property on a specific tile/on a tile in a specific situation (e.g. Action Warp on ladder tiles).
Hmmmmm it might be time to explore LocalTokens
Someone made tiktoks about my Levi mod. Am so happy 
Congrats!
I’m not sure if I’m allowed to post links to videos here
Noooo DaysInPhase don't do this to me 
Curses. So close to being able to use LocalTokens but foiled by DaysInPhase.
I worked around it by putting a set value in the Include and then doing a separate EditData patch to add the correct DaysInPhase for each crop afterwards but I do not like that.
I‘m not entirely sure what you’re doing, but couldn’t you use more local tokens?
The issue is that local tokens are always considered dynamic text so they can't be used in data model fields that only allow numbers (or bools). DaysInPhase is a list of integers (I think) so it didn't like the local token.
[Content Patcher] Can't apply data patch "(CP) Korea Blossom > Add Adonis Amurensis > data/add_object.json > Add crops > entry #1" to Data/Crops: failed converting entry to the expected type 'StardewValley.GameData.Crops.CropData': Could not convert string to integer: 1, 2. Path 'DaysInPhase[0]'..
Hmm, by splitting each entry into its own token I can get it to accept it, but I wonder what happens when there's a different number of items in the list 
...huh, this seems to be working
Setting the value of the later DaysInPhase list items to 0 seems to make them ignored
I don't know if that's what you were intending when you suggested more local tokens, but thank you!!!!! 
That’s more or less what I meant, yeah. Good to hear you got it to work! 
hi! i need help fixing a mod, but i'm not the creator of the mod which is actually removed from nexus... 👉🏻 👈🏻
anyways i need help fixing because of that reason, and i didn't really wanna bother the creator for a mod that they removed for a reason, its called bairan's jewelry entourage but its actually a replacement for trinkets/companions like fairies and parrots
the mod itself have these errors since i first got it but i didn't get to find a way to fix it
https://smapi.io/log/a7091e18f7a1427e920af84e8b6e1294
This mod failed in the GameLoop.GameLaunched event. Technical details:
Newtonsoft.Json.JsonReaderException: Can't parse JSON file at D:\SteamLibrary\steamapps\common\Stardew Valley\Mods\Bairan's jewelry entourage\content.json. This doesn't seem to be valid JSON.
Technical details: After parsing a value an unexpected character was encountered: ". Path 'ConfigSchema', line 12, position 4.
at StardewModdingAPI.Toolkit.Serialization.JsonHelper.ReadJsonFileIfExists[TModel](String fullPath, TModel& result) in SMAPI.Toolkit\Serialization\JsonHelper.cs:line 86
at StardewModdingAPI.Framework.ContentPack.ReadJsonFile[TModel](String path) in SMAPI\Framework\ContentPack.cs:line 76
at EventRepeater.ModEntry.OnLaunched(Object sender, GameLaunchedEventArgs e) in E:\Stardew Valley Mods\Event Repeater\ModEntry.cs:line 123
at StardewModdingAPI.Framework.Events.ManagedEvent`1.Raise(TEventArgs args) in SMAPI\Framework\Events\ManagedEvent.cs:line 101
Error preloading content pack 'Bairan's jewelry entourage'. Technical details:
Newtonsoft.Json.JsonReaderException: Can't parse JSON file at D:\SteamLibrary\steamapps\common\Stardew Valley\Mods\Bairan's jewelry entourage\content.json. This doesn't seem to be valid JSON.
Technical details: After parsing a value an unexpected character was encountered: ". Path 'ConfigSchema', line 12, position 4.
at StardewModdingAPI.Toolkit.Serialization.JsonHelper.ReadJsonFileIfExists[TModel](String fullPath, TModel& result) in E:\source_Stardew\SMAPI\src\SMAPI.Toolkit\Serialization\JsonHelper.cs:line 86
at StardewModdingAPI.Framework.ContentPack.ReadJsonFile[TModel](String path) in E:\source_Stardew\SMAPI\src\SMAPI\Framework\ContentPack.cs:line 76
at ContentPatcher.Framework.RawContentPack.TryReloadContent(String& error) in E:\source_Stardew\Mods.Pathoschild\ContentPatcher\Framework\RawContentPack.cs:line 80
at ContentPatcher.ModEntry.GetContentPacks()+MoveNext() in E:\source_Stardew\Mods.Pathoschild\ContentPatcher\ModEntry.cs:line 453
This mod failed in the GameLoop.UpdateTicked event. Technical details:
Newtonsoft.Json.JsonReaderException: Can't parse JSON file at D:\SteamLibrary\steamapps\common\Stardew Valley\Mods\Bairan's jewelry entourage\content.json. This doesn't seem to be valid JSON.
Technical details: After parsing a value an unexpected character was encountered: ". Path 'ConfigSchema', line 12, position 4.
at StardewModdingAPI.Toolkit.Serialization.JsonHelper.ReadJsonFileIfExists[TModel](String fullPath, TModel& result) in SMAPI.Toolkit\Serialization\JsonHelper.cs:line 86
at StardewModdingAPI.Framework.ContentPack.ReadJsonFile[TModel](String path) in SMAPI\Framework\ContentPack.cs:line 76
at ContentPatcherAnimations.Mod.CollectPatches() in C:\Programming\StardewValley\ModSource\ContentPatcherAnimations\Mod.cs:line 216
at ContentPatcherAnimations.Mod.InitializeIfNeeded() in C:\Programming\StardewValley\ModSource\ContentPatcherAnimations\Mod.cs:line 146
at ContentPatcherAnimations.Mod.OnUpdateTicked(Object sender, UpdateTickedEventArgs e) in C:\Programming\StardewValley\ModSource\ContentPatcherAnimations\Mod.cs:line 127
at StardewModdingAPI.Framework.Events.ManagedEvent`1.Raise(TEventArgs args) in SMAPI\Framework\Events\ManagedEvent.cs:line 101
here is the manifest.json file from the mod btw
https://smapi.io/json/content-patcher/7a9bbe484af340dda727a0154f28b814
Oops, couldn't parse that file. Make sure you share a valid SMAPI log.
You're missing a comma on line 10 after the closing curly brace.
Hello I have drafted a PR for it (missing the GMCM related part only): https://github.com/Pathoschild/StardewMods/pull/1117
yeah the most difficult part is how to iter chest ids (for config showing)
there is no
// Data/Machines
foreach (string rawItemId in DataLoader.Machines(Game1.content).Keys)
for chests :&a...
Hello !
I'm currently working to make a French dub mod of Stardew Valley, and I found another mod that could make this possible (Voice Over Framework Mod).
I first did a test with a single voiceline to see if it would work, but although the voice pack was detected, the audio file wasn't (and nothing was played, even the console doesn't show any logs).
Do you know where this issue could come from?
!json Can you use this website to upload your json file please?
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.
(The first link in Governor's message)
Sure! The content.json file I assume?
It doesn't look like VoiceOverFramework uses content.json files. Did you use the command from the mod page to generate a json template for the character you wanted to dub for?
It doesn't? :o
Guess the problem comes from there, I should've payed more attention haha
I'll go try again
And thank you!
Have a look at the existing packs for how to format yours
Yes they are.
(My Android senses are tingling!
)
Oh ok good👍, i have question about your mod ExtraMachineConfig
can i ask in here or should i ask on SMAPI Android discord?
Here's fine assuming it's about a potential change to the mod! Just whatever Selph's most comfortable with.
Sure you can ask here
Ok good, i'm try to fix bug for android
- Failed patching in extra tooltip/buff icons
code: https://github.com/zombifier/My_Stardew_Mods/blob/26bbcff4fde17021400e336fbe295968458551d6/ExtraMachineConfig/TooltipPatcher.cs#L61C65-L61C79
my question is what this function?
- IClickableMenu_drawHoverText_Transpiler
I mean, what is it trying to draw?
it's to draw the missing 1.6.9 buff icons (attack modifiers, knockback, immunity, etc.)
#making-mods-general message
Though, isn't EMC straight up unusable on Android currently because it's exploding machine code?
if you're fixing EMC for Android the buff transpiler is like the least important part lol
so, if i disable this Transplier, Is should works?
yes
Oh ok, is not important?
it's only a visual bug fix
and to clarify, by "should work" I mean disabling this transpiler wouldnt change the fact that EMC still isnt usable on Android
right now if you try to load a machine it throws a "invalid IL" error somewhere in the GetOutputItem postfix, which I have no idea how or why
Log Info: SMAPI v4.2.1.1 - 1747817855 with SDV 1.6.15 build 24354 on Android Unix 35.0.0.0, with 7 C# mods and 4 content packs.
no error
just try to smelt some copper ore
Ah shit, yes i got error
- An error occurred in the base update loop: InvalidProgramException: Invalid IL code in Selph.StardewMods.ExtraMachineConfig.MachineHarmonyPatcher:MachineDataUtility_GetOutputItem_postfix
It seems like we've been talking for a long time. Aren't we bothering others in the chat?
Nope
My experience is this is usually due to android changing the type of smth
Like, concrete class to interface
Or the other way around
Or struct to class
maybe you can try rebuilding the mod against the Android binary
Reading this is breaking up the monotony of data entry for me lol
if that's a thing
wow that'd be like my last guess lol
thanks for the work!
@vernal crest Hi again! I used the command from the mod page and my voice pack is now detected by the game, but the test voiceline still doesn't play despite me double-checking everything :(
What format is your audio file in? Have you double checked it works in another program?
The audio file is in .wav, i also tried with .ogg but none of them worked
And the audio file is playing if you open it in media player or some other program?
Yes
Hmm ok I don't know anything about the voiceover framework mod and I'm not at my computer anymore so I can't really look at anything myself, but I'd recommend downloading one of the existing voice packs if you didn't already and try testing that one as-is in game. If that works, replace one of the audio files in that mod with yours and rename yours so it has the same name as the one it replaced. Then test the pack again and see if it plays your file.
Got it, thanks again!
If it doesn't, try going the other way: replace your audio file in your mod with one of the working ones from the other mod and see if that works.
I'll keep you updated
Alrighty, I am going in circles -- I cannot get spacecore to override this cooking recipe and I don't understand why. Would anyone be willing to look at the code and try to tell me the (probably obvious) mistake I am making?
I can't offer a great deal of help because of being on my phone but if you share a link to your json I'll try. And if I can't help, having your json already present will make it easier for others to help.
Listen I appreciate the willingness to assist either way 
this is the spacecore-interacting json
And then this is the overall content.json
(Also yes i probably need to change texture path, but i would hope that's not what's causing the issue because I haven't seen any errors relating to it in smapi logs)
Can I see the json where you define the cooking recipe for elderberry cordial? And also its data/objects entry?
they're both in the same json, because my code is a mess that i will probably fix eventually
....unless I am misunderstanding what you are asking, which is also possible
From spacecore docs: "the key being the ID of the corresponding recipe".
You are trying to override the elderberry cordial recipe but you're not using the key of the recipe as the entry key for your override.
I'm not sure why your recipe doesn't have the {{ModID}} prefix but it should do so.
I thought it did, that's so strange
Alright well thank you! That's why I wanted a second pair of eyes :D
ohhhh i see what i did
wow I never would have caught that mistake otherwise. this was very helpful, thank you again!
You're welcome :) the rest of it looks okay to me
I'm used to looking very closely at recipe IDs because of shop shenanigans lol
tinkering with an idea I had for a harmony helper instead of doing something productive
IT WORKS FINALLY, HOORAYYYY
Laughing at my own dialogue. Sometimes I forget what I have written
|| "fall_Tue6": "Willy won’t play Poker with me anymore.#$b#You know what also starts with W? Wuss.$1", ||
@vernal crest IT FINALLY WORKED QDWOJDQWDQWIOQ I'VE BEEN WORKING ON THIS FOR 6 HOURS 😭
I'm so relieved, thanks again for your help!
I feel like I want a sourcegwn attributes thing
sourcegen is cool but also the documentation sucks ass
so im wanting to make a crafting recipes for a chair right? I have the method written out but i dont really understand it very well, could someone help me learn?
I need to see if there's a good way to get attributes in the syntax tree but have them omitted from the compile. I know there's a Conditional attribute you can use to disable/enable them based on build properties, but I'm not sure at what stage they're removed, and if it's possible to just do an always-false condition without things breaking
I was given this last night, but what does it really mean? I know the id is just the idea but the numbers after thats the actual recipe? home is the location for its for right? but whats those numbers afterward
you need spacecore to have craftable furniture, vanilla doesn't support it. I know non-object recipes have been talked about here before, let me see what I can find
seems like it has a separate data asset
I actually do not understand this documentation at all
uhh hmm is there a mod that does this? like with spacecore already that i can peak at?
That's vanilla code, I tested it myself
Have you made a recipe before?
huh? crafting recipes support non-objects now?
I have made recipes before but becaise the context is different my brain is confused
I wonder if the tooltips are still fucked
ill give a shot and let you know wren
wiki page still says only unqualified object ids for ingredients and only craftables/objects for outputs. is that out-of-date?
the recipe data is identical, it's just that you can now add (F) to the ingredients or product to denote that you want furniture ids instead of objects/craftables
that's definitely a mod doing that, because I'm looking at the decompile for CraftingRecipe and it is still very much hardcoded to objects
better crafting? whats that?
which line? because 1.6.9 explicitly no longer force appends (O) to the output
it's an utility mod that makes the crafting page nicer
it also has framework features but those are not important
explicitly using unqualified ids
the comment is outdated, those IDs just get passed as is to ItemRegistry.Create
it used to not be the case and (O) would get prepended, but pathos removed it in 1.6.9 per request
I think atra requested that even
I've got a situation.
Some context: I want one of my Scavengers to gift items depending on which animals the farmer has. So I want to check, if a farmer has chickens that laid eggs, and tell the Scavenger to start offering eggs as gifts.
I want to check for this by using "PLAYER_STAT" and "ANY" for the <player> part.
The only thing that worries me is this warning here...
If I use "ANY", this theoretically shouldn't matter, right?
Do chicken eggs have a stat
yeah
It's listed as one of the options.
Though, I likely couldn't use this method for modded farm animals, now that I think about it.
you could have a trigger action that has the host check the stat and then send a mail item to all players
Okay maybe I don't need to check for stats like that and just allow them as gifts behind a certain pet friendship threshhold.
Hmm, I should note that down.
Could be useful for later down the line.
I guess in your case you care about the individual farmer having chickens though not the host
or is it all the same? I don't play multiplayer
I'd be satisfied if either the farmer or one of the farmhands has a chicken.
But I guess I'll hold off on that idea.
Since I'm already here, I also wanna ask if it's possible to check if the farmer has a specific pet.
I know that there's this, but I think this means any pet.
I don't think so? My only idea would be that you could edit data/pets to have a certain pet give a certain gift specific to your mod, and then you can check to see if they've shipped that item or if it's in their backpack. But that would only happen at high hearts with the pet and that's very round about. I'm sure someone more experienced has a better idea.
Does PLAYER_STAT have Any
That particular stat is fussy enough as is because it only works correctly for host
Uh, I guess since there's <player>, it could accept "ANY".
Oh, okay
But I'm currently more concerned about the 'detecting if either farmer or farmhands has a specific pet' thing.
Since I could use this for future plans.
So here's my unrelated question of the morning: is it possible to have two different events, with the same name, in different locations? or would that break something?
actually nevermind I'll just use different names - the problem I was grappling with was having an event take place in a random location and then having to overwrite or delete it from all the potential locations and have an alternate event somewhere else. but I'll just stop it from triggering with conditions instead of trying to locate and remove it.
Hello people! I'm hoping anyone can help me. I've have tried to merge two blocks of code together with different propositional logic and I can't get it to work, so ideally it works as an if else statement. Currently if someone has SVE installed, they of course get a yellow warning in smapi that the first patch can't be implemented.
{
"LogName": "AdventureGuild hours changed",
"Action": "EditMap",
"Target": "Maps/Mountain",
"MapTiles": [
{
"Position": {
"X": 76,
"Y": 8
},
"Layer": "Buildings",
"SetProperties": {
"Action": "LockedDoorWarp 6 19 AdventureGuild 600 2600"
}
}
]
},
{
"LogName": "AdventureGuild hours changed for SVE",
"Action": "EditMap",
"Target": "Maps/Custom_AdventurerSummit",
"When": {
"HasMod": "FlashShifter.StardewValleyExpandedCP"
},
"MapTiles": [
{
"Position": {
"X": 32,
"Y": 21
},
"Layer": "Buildings",
"SetProperties": {
"Action": "LockedDoorWarp 6 19 AdventureGuild 600 2600"
}
}
]
},
You want a
"When": {
"HasMod |contains=FlashShifter.StardewValleyExpandedCP": false
}
on the first one, and then it will only be applied when SVE is not loaded. 🙂
Thank you! 🙏
I kept trying with stuff like this
"When": {
"HasMod": "!FlashShifter.StardewValleyExpandedCP"
Yeah, it's a bit unintuitive the formatting that you've gotta use.
Btw, if you want to do multi-line code in discord, you can do uhh:
```
code
```
🙂
and it'll make it a block, and if you do uhh, ```json
for the first ``` it'll even do pretty syntax highlighting. 🙂
Nice, I was just highlighting the text and clicking the <> button
if you don't mind a dependency, BETAS has a GSQ for this
Ooh! I'll check that out later then!
(If it helps, the strange syntax is because tokens are just sets. So that condition doesn't mean "Is HasMod equal (or not equal) to X", it means "does the set of values named HasMod contain (or not contain) one of these values".)
Hey guys I need help, I did an npc and she is a marriage candidate. I made an editdata in the utily string of the wedding but at the time of the wedding something strange is it that I did something wrong?
Lewis doesn't say that part of now it's husband and wife or wife and wife he just jumps to the kiss
In Smapi there are no errors
Hi! That's a bug in the base game (which affects the vanilla marriage event too); it's fixed in the upcoming Stardew Valley 1.6.16.
Oooh thanks so.... For now I don't make her be married?
you can work around it by implementing your own custom wedding script
I think it's fine to make her marriageable; her marriage event will work the same way as marrying a default NPC.
(Implementing a custom wedding event just to fix one dialogue line that's missing for all NPCs seems a bit overkill, but it's an option.)
(pathos, if you can say, what was the bug? was it in code or is it a script error?)
It's just missing argument escapes. Specifically, this command in 1.6.15 (newlines added for readability):
speak Lewis "[GenderedText
[SpouseGenderedText
[EscapedText [LocalizedText Strings\StringsFromCSFiles:Utility.cs.5371]]
[EscapedText [LocalizedText Strings\StringsFromCSFiles:Utility.cs.5373]]
]
[SpouseGenderedText
[EscapedText [LocalizedText Strings\StringsFromCSFiles:Utility.cs.5377]]
[EscapedText [LocalizedText Strings\StringsFromCSFiles:Utility.cs.5375]]
]
]"
Should be (with added EscapedText):
speak Lewis "[GenderedText
[EscapedText [SpouseGenderedText
[EscapedText [LocalizedText Strings\StringsFromCSFiles:Utility.cs.5371]]
[EscapedText [LocalizedText Strings\StringsFromCSFiles:Utility.cs.5373]]
]]
[EscapedText [SpouseGenderedText
[EscapedText [LocalizedText Strings\StringsFromCSFiles:Utility.cs.5377]]
[EscapedText [LocalizedText Strings\StringsFromCSFiles:Utility.cs.5375]]
]]
]"
(Tokenizable strings are a fun syntax to work with sometimes.)
lisps have a way of being so
How could I do it?
It sounds like you already did? So you're able to marry her correctly in-game, it's just that Lewis skips one dialogue line?
Yes
That's it then. Lewis will skip the dialogue line when you marry any NPC (including default ones like Abigail), it's not something specific to your NPC.
I didn't know... Thank you Pathos
- @gaunt orbit Be careful, since that comment isn't outdated. Qualified IDs are partly supported, but they'll still cause issues in some places (e.g.
TrashBearexplicitly appends(O)to recipe output IDs).
Hi Pathos I have submitted a draft for the per-chest config feature of Automate we talked about yesterday: https://github.com/Pathoschild/StardewMods/pull/1117
(btw there is another PR for Tractor maybe need a look: https://github.com/Pathoschild/StardewMods/pull/1116)
who's there?
your worst nightmare ❤️
My worst nightmare, who?
Your worst nightmare, not knowing what's wrong with the mod your creating
oh cmon now why is smapi crashing
frick sake
Are we sure Matt's worst nightmare isn't just more chest mutex bugs
Chest mutex is not real and can't hurt you
global inventories was supposed to be my solution workaround, but it turns out it's just more bugs
bugs all the way down
I assure you chest mutex is real and can hurt you
But it's also only really a problem for people who want to let players access chests on other maps in multiplayer
Thanks! I'll take a look soon.
You know, I used to feign ignorance
mutexes weren't real until you made them real for me
-# Clearly I need to make Better Mutexes /s
-# make worse mutexes instead
(thanks for the reminder i still need to do a bit more chest mutex handling)
May Joba have mercy on your soul
who the heck is joba
Excuse me the correct name is Yoda
[looks at smudged writing on hand]
Steve Joba, president and CEO of Joba Corporation
I somehow Brangelina Joja and Yoba
on a scale from 1-10 how dumb of an idea is it to use a Tuple as a dictionary key in an asset I want to be user-editable via CP
Is that something CP could even handle? I thought it really only worked with simple string keys
not by default, though the warning i got from newtonsoft implies i can create a custom TypeConverter to handle it
That sounds cursed. Do it! 
I think it'll work but like y tho
Why not dict dict
When it comes to Content Patcher data models, I try to conform to SDV's existing design language to make those models more accessible to those who would be using it, but that's just me
i wanted a Dict<string, string> to determien what messages to show for a lost book but i only want the first n messages to care about where n is the number of lost books you've found, so id need to iterate over the dictionary until i reach n lost books, but i dont want to rely on dictionary insertion order as i need it to be consistent
because the map action i was going to have people place in the museum was going to be like "Action ShowLostBook <lost book key from that dict>"
what if someone else edits their museum to add to it, though, and messes up the order
or just wants to add al ost book to the end of their list
Yeah I see the problem, you kind of want the behaviors of both arrays and dictionaries
Some SDV data models use an unenforceable Id attribute, not that I think it's a good solution
i thought about that too, but it seemed like it'd be really annoying to have to do a whole { id: blabla, string: text here } object for every individual book message
though i guess thinking about it, i suppose putting the index in the tuple doesnt really change anything as people cant change that for existing entries
But that's what moventries is for
moveentries in a list of strings sucks though
I think if it's a string u just use that as the id
having someone write the full dialogue string repeated twice in the json and in the tmx feels bad, and its also harder to localize
and more annoying to conditionally edit if desired
Yeah ig the only way to do it sane is enforce use of a translation key
which still wou ldnt even solve the problem of duplicating it twice in the json and tmx, but if i just look at the tmx and dont make em put it in the json, i have no way to determine what order the lost books should be unlocked in
Why is it in the tmx too 
moveentries can do that?
If u wanted to move entry a list of string i think that's the way to do it
Perhaps double check in case im hallucinating
but also consider this: you are editing my museum to add a lost book. unbeknownst to you, another mod out there is also doing that, and neither of you are aware of each other. you both try to move your entry to the top of the list, and then both use index 0 in your map action bc you expect to be first. one of you will be wrong
The point of having it be a list in the back is just bc that's ultimately the shape you prefer for actually making it work
Vs making it nice to edit by content patcher
maybe i should just go back to my original idea of "fuck lost books no one wants to add those anyway"—
why lumina
Lumina seems like she knows what a book is
(i picked first modder that came to mind ok)
i am just gonna go the { id: blabla, text: blabla } route i think
so a list of that
its annoying but also the most reliable i think unfortunately
and prooobably better than my weird tuple idea. maybe
I feel like if base game was doing this
Yeah I know
It probably would have gone for translation keys
are you meant to be in a vc text channel Joja4life
But that is just arbitrary vibes here 
base game has its own fancy custom Notes map action that cares not for your extensibility desires
and int IDs naturally
Aren't translation keys mostly for when instances of objects hold the translated value?
theyre used for a lot of map actions
and things like special orders
basically anywhere where the text needs to be both grabbed on the fly at any arbitrary time and also needs to be localized, i think
Yeah it is just wherever u would use i18n normally
With exception of dialogue and events (but events is getting refactored away from this)
"[Content Patcher] Can't apply image patch "Connors Sam Sprite > EditImage Characters/Sam" to Characters/Sam: target area (X:0, Y:0, Width:128, Height:384) extends past the right edge of the image (Width:64), which isn't allowed. Patches can only extend the tilesheet downwards."
I'm trying to mod Sam with new portraits (same style as his vanilla portraits) and i used the mod that turns all the stardew xnb files to pngs and edited sam's portraits directly, and it turns out the file it spat out was 128x384, and content patcher won't accept my sprites. is there any way to scale it down without losing resolution? photoshop makes it rly blurry when i try
you cant delete pixels without losing pixels. the scale is the resolution
its not originally 64 wide, but content patcher wants it to be 64 wide
which is weird bc ive modded sprites before (player character sprite) and the mod is fully functional, idk whats up with portraits
youre a lifesaver ty!!!
lol just imagine sam's overworld sprite being a floating head
so for tracking sam's job, i know you'd have to determine whether the community center has been complete, but other than CommunityCenterOrWarehouseDone [which tracks both] how do i check if the cc only has been complete?
or does the warehouse mean the abandoned jojamart when the cc is complete?
bless! thank you sm!
Anyone has a dumbed down guide on how to add custom paths to the game? Like add instead of replacing existing ones. I wanted to update mine with an option of a separate craftable path 🫠
[[Modding:Floors_and_Paths]]
The page is really bare bones but at least it has the data format you need
ya I checked this one but I was wondering if there's a way just to add 1 path time instead of a big sheet, wasn't sure what would change with the code. I'm code dumb haha
thanks I will check the link
Thank you it seems this link will help me a ton!
Guess I will play with some custom paths while I wait some mods to update 🎉
Quick question. I'm working on making some custom TriggerActions, most of the fields are pretty understandable via the wiki and context itself, but what do these fields mean/do?
"Actions": null,
"CustomFields": null,
The "Action" field seems to be where the vanilla game puts the actions to be executed if the condition is met when the trigger goes off, so I'm not sure what the Actions field is. Do you use that if you're doing multiple Actions instead of a singular?
No I appreciate it, my eyes just totally glazed over that I think. Hazards of working on my mod at 5AM when I should be sleeping. Also having like 12 tabs open. Thank you!
Hey all, this is an open call for any mod authors who want their machines/ingredients/recipes/blueprints added to KRS random stock. I'm unfamiliar with the popular ones apart from cornucopia/wildflour and those generally already avoid vanilla clutter
unless you count 5000000000000 seeds but that's pierre's problem
(For those unfamiliar, this is KRS: https://www.nexusmods.com/stardewvalley/mods/5245)
Generally the purpose is to declutter vanilla shops, such as Gus' saloon, where most mods dump all their recipes without conditions/randomness so it's a little scary to find a) what you want or b) an interesting bargain that isn't just a deluge of unknown recipes
seeds i generally don't do, since the traveling merchant can randomize those already, but already grown crops used as ingredients such as herbs/veggies or spices/culinary goods work too
I also do random machine drops, random crafting blueprints, and custom weaponry. The inventory changes every time so you don't feel too cheaty when a really good item comes up
if you're interested in being included, ping me please 
KrS is returning!
I hope 😅
I'm having a heated discussion about how to do it atm
@ivory plume hnnng sorry I keep pinging you about this but everyone I talk to seems unsure how STF could tell content patcher items apart from vanilla, does the "RemovePackRecipesFromVanilla": function not work with non-JA items?
once an item is in the content pipeline theres no reliable way of determining which mod added what, aside from hacky inefficient workarounds (or if you're the mod adding them in the first place obv)
Whoah, KRS brings me back. One of my first mods was listed as part of that.
Does KRS need to be concerned with what items are added to its shop? It should be on the mod authors to add their items to the shop's id, or for a compat pack to be created. I suppose you can come setup with compat for some mods.
But really, it could just be the store front that any mod is able to add their items to.
is there a way for a c# mod to dynamically load a content pack after the game's already running? (e.g. during the middle of the day)
Yes
is it your content pack?
Sure but at that point I think you should go through the content pathway
or is your C# mod trying to load a CP pack
wdym?
a content pack is not just a CP thing
then, no
Only the Content Patcher mod can load Content Patcher packs
CP will load it with the rest
Couldn't you do it with just CP and update on time/location with time range?
As a C# mod you can invalidate the asset path, and then get a fresh copy of the data
let's say i want to make a c# mod that downloads a content patcher pack from some server (if it's able to) and loads it
not doable
unfortunate 😔
In that case definitely no. SMAPI only sees what's there when you start the game.
A mod manager could do something like that, before the game launches
oh no i unleashed the coders
you'd be looking at a crapton of patching both SMAPI and Content Patcher to get that even remotely close to working
chu was telling me I should just leave the shop empty and let other people target me instead?
id agree with chu
I was suggesting this as well
Sure was xD
😢
"hey everyone this mod depends on a fork of content patcher. why? just because"
In the world of SDV 1.6 cross-mod compatibilities like that are easier to do, and encouraged in fact
It's a bit hard for me to get my head around as a content modder tbh, mostly because when I made KRS, part of the mess I was cleaning up in vanilla shops was PPJA of which I was a part, so it really was just me trying to clean up our mess 😂
a fork of content patcher i feel would be miles easier to get people to download than a fork of SMAPI 
Think of it as you providing the shop owner, shop/location, and maybe some built in integrations, but ideally you partner with others like Cornucopia so that they can add stock when they detect your mod is installed
Right, that's what chu was saying
also you'd be looking at rewriting most of content patcher anyway. at that point, probably easier to write your own from scratch
its just not at all built with that mid-save loading in mind
also hiya matt, long time no see
Howdy 
🤝
I could see some integration on the KRS side as far as pulling specific shop stock by context tag, maybe, if there was a specific tag to include, but otherwise, yeah, it might be easier to let the mods that want to participate add themselves to your shop entry.
this is giving me group project anxiety tho ngl
feels wrong to sit on my hands (figuratively anyway)
(consider this my completely unrelated plea to have some sort of trend for context tag sanity to support things like this in the future)
aha
i vote for that
the only reason STF even did something like this was because I asked Cher if she could include it 😅
It did not exist then either
do you mean shop adds anything with X context tag, and mods that want to opt-in just tag their items?
Exactly that.
Sounds simple enough, as long as the conventions don't result in unintended overlapping tags
but the biggest problem was that mountain of recipes in gus' menu
I still shudder going in there
KRS could look for any item that has the context tag kadijas_recipe_shop or something like, and add recipes for any item with that tag
Yeah, a shared context tag seems the most sane
we can find out
yeah can you even tag a recipe 
I don't think so, but you can tag the items they create
but if I only want to sell the recipe and not the item?
Oh does that pose a challenge to implementing KRS in Content Patcher
whether a shop entry is a recipe or not is in the stock data, not on the item itself. i dont think it'll matter
I honestly have no idea
I'm still thinking with my C# brain how it could be done
No it was crafting too
{
"ItemId": "ALL_ITEMS",
"PerItemCondition": "ITEM_CONTEXT_TAG whatever",
"IsRecipe": true
}
so KRS has two vendors, a twin that handles food stuff and one that handles crafting/weaponry
I think Button's right in that it's only defined in the shop stock as a recipe.
ive no reason to believe this wouldnt work. im not guaranteeing it will
I mean, whether it works or not is probably not too big of a deal because we have framework mods galore that do everything under the sun
this would be on my end?
assuming you go with the context tag opt in route, yes
Yeah, that's how the Content Patcher data model works for shop inventory
You need to read up on game state queries if you haven't
would the context tag route be easier than the specific shop route? or should I plan for both?
(and Item Queries, which are a separate thing)
the words "game state queries" give me allergies, it looks scary
you're making a shop either way
There's no way to stop spouses killing house slimes without c# im guessing? I dont think Tori would kill them
WHATS A HOUSE SLIME
I'd poll the content pack creators who would possibly want to have their inventory be added, you already have feedback from a couple here
you make a shop and by default itll sell anything with that context tag. people can then optionally add other things to the shop if they want on their end
true
When u hatch a slime in your house
Spouses kill slimes... how did I not know this
wait, I misread
my slime hutch is the only place i ever die
Because you have the slime ring and they make xute pets
Yeah, they have specific lines for them being in the house too
But yes, I vote context tags personally
(Also, imagine if you had a series of travelling shops like food trucks and could then separate them FURTHER by types of food in context tags. The dream.)
Yeh i like context tag idea
I could just set them both up ig, for whoever wants to finetune stuff with hasmod conditions or whatever
Context tags makes less work for mod authors making the items
It's less code than adding a shop entry
I dream of shopping centers that auto-sort items in rotating shops by context tag in Stardew, LOL.
yeah but wouldn't they still technically add the item to a vanilla vendor if my mod isnt there
One day maybe, if a unified list ever begins to emerge
Not if they have conditional logic
Content Patcher "HasMod" can allow them to add it or not
^
the dream
ngl i still don't know how to use hasmod
i retired right when that was becoming a thing it broke my brain
I didn't know you coyld add shop data with cntext tags
Yep, I tried it with a few assorted food mods so I could easily see what mods added similar tags. I still have the WIP mod somewhere, but it worked fine.
(to be clear here, doing the context tag idea still includes people being able to target your shop specifically. like. the context tag thing is extra work, not different work)
(oh btw hi lemur! sorry, I got distracted_
No worries, i went shopping
this was what I figured yeh
There is a relative difference between the work though
(Groceries nothing exciting)
im only making sure Hadi still knows that its doing both options so its not like choosing context tags prevents the other, is all
i imagine there's fancy stuff you could do if you set it up as a separate shop
idk cp is a whole new world for me lol
any shop you make someone would be able to specifically target to add their own things to
Anyway, there is nothing that prevents authors from adding stock to your shop by id, in addition to you adding stock by context tags
ok so then my problem now is making templates ig 
all the context tag thing is is just adding some default stock to your shop, but the shop still has to exist first
and if it exists they will come™
I have a meat/recipes mod I can update (i hope), and I can use it as an example (theoretically)
You can almost just clone an existing shop and tweak it to suit your needs
I did the bad thing in my mod for testing and used the Saloon, but this is basically what I had:
"Target":"Data/Shops",
"TargetField": ["Saloon", "Items"],
"Entries": {
"FRL_AllContextTagFoods": {
"Price": 0,
"AvoidRepeat": true,
"Id": "FRL_AllContextTagFoods",
"ItemId": "ALL_ITEMS (O)",
"PerItemCondition": "ITEM_CONTEXT_TAG Target {{shopcontext_tag}}"
},
},
"Priority":"Late"
}```
And the {{shopcontext_tag}} in my case was a dynamic token but yours wouldn't be.
out of curiosity, why the priority late
what is a dynamic token AHHHHHHHHH
just to put it last?
Yeah, Button
makes sense!
I was tired and didn't want to risk fighting with a mod that loaded their objects after my mod was loaded
It just means that {{shopcontext_tag}} gets replaced with something else like `"my_context_tag"
ok im gonna do this like i'm a kindergartener building a tower
I only used a dynamic token so that I could put a custom context tag in via my Config options for testing purposes
to see what populated in the list when I used a tag
that... somehow made it worse 
Content Patcher let's you define tokens when you want to reuse/change the value
token = placeholder
OH that i get
content patcher replaces it when its ready
Anytime you see {{something}} it means that it's a placeholder for a value
dynamic token = placeholder you define the rules for
So, for example, I had a drop down list in my config that let me pick a context tag. And when I picked an option, that was what I had my dynamic token set to use as its value.

it was likely not the best way to do it, but it worked at the time. LOL
i learn better by doing i think... i hope
you also wont need to use a dynamic token anyway so you dont need to worry about it
^ Yep
the only token you'll probably use is {{ModId}}
(and by probably i mean You Should Use It)
It was convenient in my use case, you can safely avoid dynamic tokens entirely
"you won't need any" > "you'll probably usethis"
i need a paramedic
{{ModId}} is not a dynamic token. Just a normal placeholder token.
my brain melted
Dynamic tokens change based on conditions, so they aren't static. {{ModId}} is a static token that gets set once based on your mod's unique ID in the manifest and just spits that out so you don't have to type it out everytime.
Could someone take a look at my schedule changes for Haley and see what I'm doing wrong? I did go to sleep before testing since I recall someone saying schedule changes are finicky and won't take effect until after a day, but it's still not working.
Log Info: SMAPI 4.1.10 with SDV 1.6.15 build 24356 on Unix 6.5.0.23, with 3 C# mods and 1 content packs.
Suggested fixes: One or more mods are out of date, consider updating them, SMAPI is out of date, consider updating it
(I'm not trying to be obtuse, I feel terrible that I don't understand when you guys are trying so hard to help
)
❤️
I think I just need to do one thing at a time, if i think on all the other possibilities/options I'll get stuck
I'm gonna try to update the meat mod first
can you specify exactly what isn't working?
yes sure, sorry. I changed Haley's home location and that did successfully change, but I also tried to change her regular schedule (like the schedule called 'spring') and that didn't take effect. She continued taking her normal 'spring' schedule
Pathfinding is set the night before, so if you are looking for your schedules after the Haley and Shane event, for instance, it might not fire until the next day after that event.
ahh
oops
I had slept a day after the event played, I should clarify
but I will change that and retry!
ah. Well, the target is indeed likely to be the only issue here, but more context is helpful. ❤️
(hi Pathos!)
Hi! RemovePackRecipesFromVanilla is specifically for Json Assets items. Per the field docs:
Takes a list of Unique IDs of Json Asset packs. Will remove all recipes from these packs from vanilla shops. Warning: This includes any items from these packs added to vanilla shops using this mod!
All it does is get a list of item IDs added by those content packs from the Json Assets API, and remove any matching items from shops. So it won't work with items added another way like Content Patcher.
Schedule (and dialogue 😅) changes are now working! Thank you!
You already mentioned cornucopia but you're welcome to sell any cornucopia items that you like, all of our items are tagged with rarity tags and season so it's really easy to write a custom shop entry that randomly pulls an item from any valid cornucopia item within the specified parameters
6480, is there a master list of context tags used by Cornucopia anywhere? Out of curiosity.
Thanks! i'll definitely do that for ingredient stuff, not sure how I'm handling recipes yet (buyable food ones, not the craftables you already have mail/quests for)
Uhhh my brain 
Theres so many context tags in cornucopia that realistically nobody would EVER need to use
So just a tag dump wouldnt be helpful
for a specific task you can just look at object data
Recipes are done the same as items, its just a seperate field to tell the shop if its a recipe or not
So in CP its exactly the same as selling from a list/pool of cooked items
Theres a list of the most useful ingredient and cooking related tags I cane up with down at the bottom of this page https://stardewmodding.wiki.gg/wiki/Context_Tags
Context tags are words/labels assigned to an item. These tags can then be used by the game or mods. Some uses of context tags are listed on the following table.
There is no known limit on numbers of context tag an item can have. Context tags do not have significant impact on performance.
Some context...
Trying to see about the impossible task of a unifying context tags list, for food in particular, it's a mess.
It will almost certainly go nowhere
Theres no point because everyone has their own purposes
yeah
I can do my best to suggest people tag their cheese_items or whatever but I wouldnt be able to predict lumina needing an edible_flower_item tag for example
Thats why that wiki page has the table of useful and common tags I know of
I mean, even things that seem like they should be predictable end up getting separate tags anyway
Its already intended to be a more central form of tags that multiple mod authors would find useful
For instance, food_sweet is the vanilla tag used for desserts, but food_dessert is still used in a lot of mods instead
I would link the xkcd comic about 15 competing standards
it's been linked plenty, I think we can skip it. 😉
It doesnt matter what people tag their food. It only matters when theres third party mod who needs to be reading those tags for a specific purpose. When theres a usecase then those two authors can communicate with each other
vanilla uses food_pasta for italian food
cornucopia uses it for pasta
Yeah, so I think it's just gonna be a case of "if you make a mod that uses context tags to populate a list for a shop or similar, tell mod authors directly to use that tag to be added in"
exactly
Which is unfortunate for old/abandoned mods that add items, but what can you do.
😅 i should probably come up with a set of context tags I'll use across my mods... To stay consistent
Those mods would probably have never followed a central list of tags regardless
true
what about a third party mod to keep a (probably community maintained) list of context tags found in different mods that it decides are equivalent (e.g. it considers "food_sweet" and "food_dessert" and "food_afterdinnertastymeal" to all be equivalent)
and then patch the relevant functions that the game uses to check context tags so that if you ask for e.g. food_dessert, it'll also check for food_sweet and food_afterdinnertastymeal and return items with those tags too (or just return true if you were asking if they had that tag)
wouldnt count for mods that check Item._contextTags directly, but they shouldnt be doing that anyway
then a mod author can just add the checks for tags they know about and leave any stragglers to this hypothetical mod who might have it in its database, as an optional dependency
I would be a little annoyed at the potential for a mod like that to cause more unexpected conflicts with my stuff than any small upsides tbh
any mod can already add the same unexpected conflicts by just adding items with the same context tags you check for but for a different use, tbf
Its more like, it could literally change how my own mod reads the tags from my own items lmao
i can see the wariness in having items you may not have accounted for show up in things, but my personal take (emphasis on personal take) is that if you want strict control over your context tag based stuff, dont use a generic context tag, use something you control
I don't feel like this is prevalent enough to justify a C# mod when a CP mod to add said tags to the offending item will suffice
its not like this third party mod would be doing some weird parsing or somehow reading the tags to decide whats equal. there'd be a human deciding that "food_eggs" and "food_egg" should be the same thing
Yeah if anyone wants to be anal about context tags then I do think the thing that would have a much greater positive benefit would be tagging untagged third party items
I'm sure there wouldnt really be any problems, but I spend about 80% of my bugfixing time identifying conflicts caused by other mods doing something incorrectly and having knock-on effects to my stuff that I'm jaded by the potential for it to cause problems lol
spooky action at a distance for c# mods
i figured part of the problem of wanting a "unifying context tag list" like was the premise for the convo would be to help account for mods or modders that do not know about the list in the first place, which manually adding tags to specific mods would not be able to account for
i dont do content mods and dont have any need for anything to do with context tags, so i have no plans on thinking about this idea any further than 5 minutes from now and was just spitballing based on lily's messages 
even though 5min is already more distraction away from Custom Museum Framework than i should be allowing myself rn
My whole thought process initially (before the rotating shop dream) was "it'd be neat if I could at least try to make any of my future mods follow a pre-existing standard even if vanilla doesn't have the appropriate tag", which the list linked on the modding wiki does help with, at least!
you're welcome to add more to it if you think theres a custom tag that would be broadly useful
ok speaking of poopy things, why is my mod suddenly not loading extra layers in my tmx. half the walls are gone for some reason
or a tag you need to get people to try and use
I feel like this is the exact issue @umbral plume suddenly had with their custom renovation last night before I went to sleep
And I don't think they got a fix either
Bottom-most walls were just gone
i may have found the issue but ill test and see if this is true
this was the last image of maeniia's issue that I saw before passing out
if the uhh if the squares that set "floorid" go over the walls, itll do that
their Front layer was gone
because it draws over whatever is on front
oooh
That does make sense as to why it wouldn't have been an issue before
mmhm
Because typically you wouldn't have a wall on that tile
Even in vanilla, the 'back' layer there tends to be a black tile with no ID under the wall because the top edge of the wall is the top of the tile
with the exception of the angle piece, which I think is on AlwaysFront in vanilla
Harmony question: If I'm patching a method that has out parameters in its signature, and I need to affect those in my patch, do I still just do ref Type <parameter> like i normally would and ignore the out part?
ref works yeah
Minecraft called that the Forge Lexiccon
the Minecraft modding community and what it does for equivalent items is exactly what I was trying to think about when thinking about the stardew equivalent
Hi there! I want to add an object to a custom event. I'm trying to use
addObject <x> <y> <sprite index> [layer]
But, I'm unsure of how to add a cave carrot to Marnie's ranch since they aren't on the same sheet
stardew gets a bit more tricky as you wouldn't want to convert copper to iridium despite both being ore.
hard to tell what context tags are categories vs types
toggle crops and artisan goods 
well hopefully a mod checking for the context tag "ore_item" wouldnt care about the difference, else id say they should be doing not that
addObject <x> <y> <item ID> [layer] is the correct format, not sure where you got sprite index from
wiki's docs I think still refer to it as sprite index
(the lack of being able to automatically determine things like that is why i went the "community maintained sets" approach)
Well, I'm on the wiki and that's where I got my copy/paste from. 🙂
I copied the command from someone else in the discord - was trying to search for my answer in case someone else had asked similar
thank you!
use the qualified Item ID instead of the sprite index (sprite index used to be the same as the Item ID, but now that we can have string IDs, that terminology doesn't always work)
I appreciate it! It, and sound effects, are the last thing I need for an event I made for Marnie and Marlon.
wait this is just my toggle mod
maaaaaybe the mod can take a step further and automagically rewrite every machine recipe to accept equivalent items instead of just toggling
the problem is that there's still roughly 82542 places in SDV that checks item ids exactly, cooking being one of them
and of course, the phantom issues that could arise as 6480 mentioned
you can always patch string.Compare
i mean i think having a universal way to tag items would be nice to be established, because i am also of the ilk who goes in and retags mods i dl that arent tagged right
i just like having things consistent
if mod authors developed a tag compendium, that'd be nice, i think
not a mod or anything, but a resource for how to tag your items
closest we have is that list 6480 linked
which I did not know about before it got linked
Context tags are words/labels assigned to an item. These tags can then be used by the game or mods. Some uses of context tags are listed on the following table.
There is no known limit on numbers of context tag an item can have. Context tags do not have significant impact on performance.
Some context...
honestly, slap this on an excel sheet, make it a command, people will use it
!contexttags
Welp
i mean its up to people to promote it
i normally bring it up when people talk about making their own item mods
bring it up randomly. bring it up when theres not even food talk. bring it up at the dinner table. all advertising is good advertising.
Can I talk to you about our lord and savior ||dollar cost averaging||
||I hope the joke is obvious||
what about content patcher
That too hahaha
does anyone know if there is a list connecting the soundtrack titles to their in-game ids?
there's this? https://stardewvalleywiki.com/Modding:Audio#Track_list
I think they want to match the song titles from the OST to those IDs
Trying to remember if there was more description elsewhere
there's the great ID spreadsheet
that is exactly it
Is there a tutorial or docs of some kind for creating custom crops through Content Patcher? Closest thing I could find is this page, but it's with JSON Assets:
https://stardewmodding.wiki.gg/wiki/Tutorial:_Making_a_New_Crop
PLEASE NOTE: JSON Assets is obsolete in 1.6 in favor of Content Patcher. Backwards compatibility is maintained, but for new crops CP should be used.
Making a new crop is easy with Json Assets (JA), but involves a few more steps than some other beginner mods. However, don't be intimidated by the length of this tutorial! It's only long so as to e...
A bit confusing, since it says at the very top that Content Patcher shoould be used instead.
that should be the event modding resource spreadsheet
Music Bank IDs tab has youtube links to the tracks
as well as the track names
i didn't see the tabs on the bottom, so i didn't know there was diffrent pages, and only went to 285
that's likely because it's an out of date tutorial, so the note is there to let people know it's outdated and to not use it
damnit
Crops aren't actually too hard, so we can probably help you through it-- there are also some existing CP packs that add mods that you could use as reference
Yeah, I thought about using another crop mod as refernce, if all else fails.
Need to find one first...
I think 6480's Giant Crops mod is updated to 1.6 without the JA dependency
which is linked on that page, actually
yep, confirmed, that one's converted to CP
you can do that, yes
[[Modding:Crop_data]]
you'd add the seed and the harvest item to Data/Objects, and the crop data to Data/Crops
I appreciate that the modding wiki uses the crop template as the example on the "How to use templates" page. LOL
So you've got a template with a bunch of colored squares on it. Now what?
Templates are easiest to use in a program that uses layers. This explanation will for now assume you understand how layers in an image editing program work.
Layers in Photoshop
Layers in Gimp
Layers in Aseprite
Let's say you made a crop (or, in this case, literally just c...
This will come in handy too!
is there any reason to use json assets(beside mods that require it) or has Content Patcher completely replaced all it's functionality?
not really since 1.6
JSON Assets is primarily just being maintained for older mods, so I'd avoid it unless there's some niche feature you need that didn't make it over to CP
the few edge cases where JA did something got mostly solved by spacecore functionality and other mods augmenting vanilla
That never used JA and doesnt have the same format as a crop mod in either case (casey had made me a special framework just for giant crops, which is really nice of her)
(definitely my one claim to fame)
So the current challenge I'm dealing with is I have an event in an area where FTM loads monsters. and they are loaded and frozen when the event plays. Any way to have them hidden during the event or not really?
I could copy the location to a temporary map but ideally I'd still like the other FTM elements (mining nodes) present
I have a mod called mouse-ear cress thats intended to be a single crop template for people who are new to modding, but since you have CP experience (?) you should be able to do it with any example? 
I like your pfp
Thank you!
I'm also temporarily enjoying the ability to have a cornucopia as my profile banner before this week of free nitro runs out
How did y’all get so dang good at pixel art? I always feel like everything I make looks too sharp xD
