#making-mods-general
1 messages · Page 478 of 1
np
Okay thanks. Have not played much 1.6 so wasnt really sure how the two new festivals worked
These are what willy's look like
Penny may just do normal things those days if she doesn't attend
Yeah looking at Penny's schedules, I don't think she attends those, just does what her schedule normally does
some npcs simply don't attend passive festivals
Your conditions are not correctly written, no. Separate to what Nic already pointed out about how your config tokens should be written, your syntax is wrong.
They should look like this:
"Condition": "SEASON Winter, {{KrobusWinterBlue}}"
I'm assuming that you want it to randomly pick between blue and pink if they are both true?
Thank you guys for the explanation. I guess that would mean that Penny doesn't need a festival outfit for those events as she doesn't do anything with them
Oh, thanks! I'll change that
Yeah, a small number of NPCs actually attend those, basically just fishermen
Hmm, it doesn't seem to be working, but strangely, I think I only see a million errors for my custom npc now. Double confusing
oh. nvm
There are still errors for my portraits
Wait, there may be a mismatch somewhere, I'll see if I can work that out
just my two cents before sleep takes me, make sure your file spelling/naming is consistent, I once chased an issue for like 30min or an hour because I couldn't spell...
Okay... I have no idea why my npc is apparently error ridden now, but keeping the focus on my krobus portraits, I'm not sure what to do https://smapi.io/log/98846ee9d08f483e865c115de690cffe
Log Info: SMAPI 4.2.1 with SDV 1.6.15 build 24356 on macOS Unix 15.6.1, with 12 C# mods and 5 content packs.
Suggested fixes: One or more mods are out of date, consider updating them, SMAPI is out of date, consider updating it
This is also the content json: https://smapi.io/json/content-patcher/50a930028d2f458f96cebb68eba21401
It looks clean here, except for the version number being out of date
It can't find the portrait Krobus_Winter_blue because you haven't Loaded it. You need to Load the blue and pink portrait images (and you should switch to unique asset names, so your Load Target would be "Target": "Portraits/{{ModId}}_Krobus_Winter_blue" etc and then that's what you'd use in your Portrait field for the Appearance entry.)
Ohh, I'll go over that. Thanks!
Just realized I'm not sure what to do with the assets file path if I have all the targets in one field (I was looking seasonal cute characters for reference). Do I make a separate target for each one, or put a bunch of paths in the from file at once?```{
"LogName": "Load Krobus Clothes",
"Action": "load",
"Priority": "High",
"Target": "Portraits/{{ModId}}_Krobus_Winter_Pink, Portraits/{{ModId}}_Krobus_Winter_blue, Characters/{{ModId}}_Krobus_Winter_Sprites_Pink, Characters/{{ModId}}_Krobus_Winter_Sprites_blue",
"FromFile": "assets/"
},
You can only use one from file path, but if your files' names match, you could just use something like assets/{TargetWithoutPath}}.png and it cycles through each target
If my file names match? Like using the same naming convention among all of them?
I did do that
Yeah, you just need to make sure that all the paths would line up at the end
For example:
Your files would need to be called <modid>_Krobus_Winter_Pink.png, where you replace <modid> with your actual unique ID written out in full.
I don't think I've actually seen mod id being used in in actual asset names 
Yeah, I'm confused which files, because I've never seen any with the mod id on the png
A lot of people don't bother making sure things like portraits are unique.
I'm not saying it wouldn't work... I feel like it'd just be annoying to do 😅
Ehh... It kinda is? But only if you have a lot of assets
Can I ask about assets/{{TargetPathOnly}}/{{TargetWithoutPath}}.png? Do i use both?
Depends on what your path is
It is, but so is having a mod incompatibility because you named your asset the same thing as someone else. Though to be fair, the likelihood of two mods that are trying to edit the same NPC in a way that isn't inherently incompatible and yet also manage to accidentally have identical asset names is really low.
It's basically a mix & match. On the example of your first target they just turn into:
{{Target}} -> Portraits/{{ModId}}_Krobus_Winter_Pink
{{TargetWithoutPath}} -> {{ModId}}_Krobus_Winter_Pink
{{TargetPathOnly}} -> Portraits
You use them when you need to make it match
I think ive at least like tried to include my mod id (not exactly, just the latter half of it) in the name of my assets even if I don't write it out fully
I'm sorry, but reading through this, I don't think I really get what making them match means. I don't see a "characters/" either, so I don't get what the use of the other two is. Something just isn't clicking with that.
Yeah, I suck at explaining 😅
Oh good, I though it was mostly me 😅
There's a lot of things u can do with the target and stuff
I'm just going to be honest now, I'm probably going to continue to mess up my mod id's too, because I just don't intuitively get where to place all of them
TargetWithoutPath only returns the value of your Target field after the final forward slash. So the TargetWithoutPath in your case would be {{ModId}}_Krobus_Winter_Pink because the full Target (right now) is Portraits/{{ModId}}_Krobus_Winter_Pink.
Target returns the entire value: Portraits/{{ModId}}_Krobus_Winter_Pink
TargetPathOnly returns only the part before the final forward slash: Portraits
Aba was faster than me XD
When you use any of those tokens in your FromFile, Content Patcher will replace the token with the value that it finds in your Target field.
So if you do: "FromFile": assets/{{TargetWithoutPath}}.png" it would look for assets/ParcySnippet.Krobus_Krobus_Winter_Pink.png
Ok, so it looks like to me I only need the assets/{{TargetWithoutPath}}.png
Oh ho ho ho. I just tested and confirmed that it's possible to have this in the Appearance data: "Portrait": "Portraits/{{ModId}}/Sam_Test",
Meaning it's possible to have a mod id in a portrait asset without needing to have it in the file name.
Oh, ok. So I should try to use the mod id then?
TBH, no. I don't know enough about how the game works to be sure that it wouldn't break in some circumstances so I don't want to recommend it without having tested it fully myself.
If you want increased likelihood of uniqueness without having to put your fully mod ID into your file names, you could use initials like PK_Krobus_Winter_Pink.png (Parcy's Krobus) or something.
I don't think you need the prefix either in Appearance
but you need a stock Portraits/{npcid} and Characters/{npcid} when appearance doesn't happen
are you sure? they need to be unique globally for each npc afaik so a prefix seems smart
{npcid}? What is that short for? I haven't seen that anywhere
That's not a token, it was just SinZ indicating that you'd replace it with the NPC's actual internal name.
Ok
And since a custom NPC's internal name should ideally be prefixed with a mod ID anyway, the default portrait and character would have the mod ID in them. (Not relevant for your Krobus though Parcy)
Well I think a portrait appearance can just be Mods/{{modid}}/AbigailPortraitSummer
its mainly places where the game is injecting stuff in front of a name or id where mods are forced to play ball with vanilla naming conventions
the stock portrait and sprite follow that rule, but appearance fields dont
portrait appearances still have IDs though, they’re a model of ID: appearance
unless I’m misunderstanding what you guys are saying
oh wait I am, you just meant you can make it unique without necessarily doing a prefix
yes
Portraits/{{ModId}}/Sam_Test and Mods/{{modid}}/AbigailPortraitSummer are equally valid
yup, makes sense now
I have a bone to pick with those two
the bone being Mister Qi shaped. or MrQi shaped, the game can’t decide 
hmm, you can use the CharacterData.TextureName field to force the stock stuff to route to something deeper
you can except for I think mr qi may be hardcoded? I didn’t check in detail but he was being a nuisance in a way ParrotBoy wasn’t
my npc realm had to have special code for mr qi and the bear
and at least the bear makes sense
more that you can use TextureName to make {{ModId}}_MyNpc to have their non-appearance textures to be Portraits/{{ModId}}/MyNpc by setting TextureName to {{ModId}}/MyNpc
which would make non-appearance portrait/sprite play nice with TargetWithoutPath and avoid filenames with modid
runs into the other problem with targetwithoutpath that its annoying to pack it in one giant load and still have the portrait and sprite point to different files
oh right I had optimisation questions for you sinz but I didn’t manage to refine them past “howwww”
I like optimisations
so my mod needs to essentially just load a Lot Of Big Textures. which will obviously always carry a cost
but I want to optimise it as best I can. so far I’ve run into weird unload behaviour and potentially some multithreaded loading? which is bizarre
outside of speedysolutions messing with audio, nothing should be multithreaded as far as the content pipeline is concerned.
it can be nested, but not concurrent
Alright, would anyone willing to check this over and see if it's right now? Am I using mod id's corrctly? Do I even need them where they are? Please forgive the mess of the /notes I have made... https://smapi.io/json/content-patcher/46296af0362448b39f8bdf0ef2a61359
How can I delete this warp?
the portrait/sprite fields in Appearance need to be fully specified (Portraits/{{ModId}}_Krobus_Winter_Pink not Krobus_Winter_Pink)
that’s what I thought, and yet it was behaving weirdly
basically I have a prefix and a postfix on a method that for our purposes will be
static int prev game time
prefix: log time since prev game time in ms, update prev game time
postfix: load some stuff, log time since prev game time in ms, update game time
bizarrely, a delay that’s DEFINITELY caused by the loads is being logged by the prefix logger not the postfix logger
they share prev game time and the logging is done after the loads are
if at any point the stacktrace has the method earlier on, and later on that will break
stack trace?
Ok, thanks
it’s a draw method that should be called in a pretty predictable loop
and not call itself or anything that calls itself
Which draw method
it’s dialogue box drawPortrait iirc?
because some draw methods call other draw methods which call super
for the postfix - prefix time, putting the stopwatch in the harmony state makes your life considerably saner
for previous postfix to current prefix, less of an option
yeah, exactly
but actually regardless, I’d expect a call to the same method to result in out of order postfix and prefix logs
transpilers and skipping prefixes can also mess with it
Smapi error... krobus is repeating, but not in the content json [02:28:36 ERROR Content Patcher] Patch error: Parcy's Krobus Portraits > Load Krobus Clothes (Portraits/{{ModId}}_Krobus_Winter_Pink) has a FromFile which matches non-existent file 'assets/ParcySnippet.Krobus_Krobus_Winter_Pink.png'. [02:28:36 ERROR Content Patcher] Patch error: Parcy's Krobus Portraits > Load Krobus Clothes (Portraits/{{ModId}}_Krobus_Winter_Blue) has a FromFile which matches non-existent file 'assets/ParcySnippet.Krobus_Krobus_Winter_Blue.png'. [02:28:36 ERROR Content Patcher] Patch error: Parcy's Krobus Portraits > Load Krobus Clothes (Characters/{{ModId}}_Krobus_Winter_Sprites_Pink) has a FromFile which matches non-existent file 'assets/ParcySnippet.Krobus_Krobus_Winter_Sprites_Pink.png'. [02:28:36 ERROR Content Patcher] Patch error: Parcy's Krobus Portraits > Load Krobus Clothes (Characters/{{ModId}}_Krobus_Winter_Sprites_blue) has a FromFile which matches non-existent file 'assets/ParcySnippet.Krobus_Krobus_Winter_Sprites_blue.png'.
I've for sure messed up the mod ids,
or something
I'm assuming your modid is ParcySnippet.Krobus and so ParcySnippet.Krobus appended with _Krobus_Winter_Pink makes ParcySnippet.Krobus_Krobus_Winter_Pink
Oh, maybe. That would make sense
I think I did do that
Definitely not necessary
I wonder if it would work I just nuked all the mod ids
I’m testing on a minimal setup where I’m definitely the only one patching that method though 
I'm going to try it out....
later, I think. Thanks for all the help guys. I appreciate it.
I'll fix the rest of this mess later
Guys How can I change MapProperties in content.json. I wanna delete a warp.
Yea I know but how to delete a warp from map? I just tried
{
"Action": "EditMap",
"Target": "Maps/FarmHouse",
"TextOperations": [
{
"Operation": "Append",
"Target": [
"MapProperties",
"NPCWarp"
],
"Value": "3 12 Farm 64 15",
"Delimiter": " "
}
]
}
Well, Append is to add things. If you want to delete you need to look at RemoveDelimited.
I write my code like;
{
"Format": "2.8.0",
"Changes": [
{
"Action": "EditMap",
"Target": "Maps/FarmHouse",
"FromFile": "assets/Otel_Lobi.tmx",
"AddWarps": [
"23 49 Farm 64 16",
"24 49 Farm 64 16",
"25 49 Farm 64 16"
]
},
{
"Action": "EditMap",
"Target": "Maps/Farm",
"AddWarps": [
"65 15 FarmHouse 24 48",
"63 15 FarmHouse 24 48",
"65 16 FarmHouse 24 48",
"63 16 FarmHouse 24 48"
]
},
{
"Action": "EditMap",
"Target": "Maps/FarmHouse",
"TextOperations": [
{
"Operation": "RemoveDelimited",
"Target": [
"MapProperties",
"NPCWarp"
],
"Search": "3 12 Farm 64 15",
"Value": "24 48 Farm 64 15",
"Delimiter": " "
}
]
}
]
}
But I got an error; https://smapi.io/log/3ca1a36b2e5246eebe918f090f9321ef
Log Info: SMAPI 4.3.2 with SDV 1.6.15 build 24356 on Microsoft Windows NT 10.0.19045.0, with 4 C# mods and 1 content packs.
I can't work out what the error message means other than I think it's a reference to warps. Do you get the error only when you add the TextOperations patch?
Yes. When I add TextOperations patch, got this error.
why do you have a "Value" in your RemoveDelimited patch?
I'm not sure why it's happening because that patch shouldn't even be doing anything because you have your delimiter inside your search value. It shouldn't be removing anything (and you've incorrectly used the fields for ReplaceDelimited instead of RemoveDelimited).
patch export Maps/FarmHouse map to work out what happened to the map after the patch
as something bad happened to the map property to cause that to explode
patch export Maps/FarmHouse map
[14:47:15 TRACE SMAPI] Content Patcher edited Maps/FarmHouse (for the 'StardewValleyMultiWorld' content pack).
[14:47:15 ERROR Content Patcher] Mod failed handling that command:
NullReferenceException: Object reference not set to an instance of an object.
at xTile.ObjectModel.PropertyValue.ToString() in D:\GitlabRunner\builds\Gq5qA5P4\0\ConcernedApe\stardewvalley\Farmer\xTileSource\xTile\ObjectModel\PropertyValue.cs:line 179
at TMXTile.TMXFormat.Store(Map map)
at ContentPatcher.Framework.Commands.Commands.ExportCommand.ExportMap(Map rawMap, String path) in E:\source\_Stardew\Mods.Pathoschild\ContentPatcher\Framework\Commands\Commands\ExportCommand.cs:line 199
at ContentPatcher.Framework.Commands.Commands.ExportCommand.TryExportRaw(Object asset, String& path, String& error) in E:\source\_Stardew\Mods.Pathoschild\ContentPatcher\Framework\Commands\Commands\ExportCommand.cs:line 171
at ContentPatcher.Framework.Commands.Commands.ExportCommand.Handle(String[] args) in E:\source\_Stardew\Mods.Pathoschild\ContentPatcher\Framework\Commands\Commands\ExportCommand.cs:line 145
at Pathoschild.Stardew.Common.Commands.GenericCommandHandler.Handle(String[] args) in E:\source\_Stardew\Mods.Pathoschild\Common\Commands\GenericCommandHandler.cs:line 60
at Pathoschild.Stardew.Common.Commands.GenericCommandHandler.<RegisterWith>b__10_0(String _, String[] args) in E:\source\_Stardew\Mods.Pathoschild\Common\Commands\GenericCommandHandler.cs:line 74
at StardewModdingAPI.Framework.SCore.OnPlayerInstanceUpdating(SGame instance, GameTime gameTime, Action runUpdate) in SMAPI\Framework\SCore.cs:line 668
oh fun, it explodes enough to also not be valid to export
Ahahah
I just make that...
uh oh
Are you sure the original warp is an NPCWarp and not Warp?
There are no NPCWarps in the vanilla farmhouse.
Yes I just now realise that and delete it...
only way I can feasibily see this exploding is if you tried to remove from a property that didn't already exist causing it to be created with a null value
And also I use RemoveDelimited but I give a Value. I really need drink a coffee
interestingly enough I've seen null map properties before and its... fine in other places
but guess the warp logic doesn't use the wrappers like what lightss use
as its null map properties that makes Speedysolutions error out when trying to make tbins
raised it https://github.com/Pathoschild/StardewMods/issues/1157 and might fix it myself later, but if not pathos might beat me to it
When I try this code now, I see that it doesn't work. There's still a Warp there.
{
"Format": "2.8.0",
"Changes": [
{
"Action": "EditMap",
"Target": "Maps/FarmHouse",
"FromFile": "assets/Otel_Lobi.tmx",
"AddWarps": [
"23 49 Farm 64 16",
"24 49 Farm 64 16",
"25 49 Farm 64 16"
],
"TextOperations": [
{
"Operation": "ReplaceDelimited",
"Target": [
"MapProperties",
"WarpPoints"
],
"Search": "3 11 Farm 64 15",
"Value": "24 48 Farm 64 15",
"Delimiter": " "
}
]
},
{
"Action": "EditMap",
"Target": "Maps/Farm",
"AddWarps": [
"65 15 FarmHouse 24 48",
"63 15 FarmHouse 24 48",
"65 16 FarmHouse 24 48",
"63 16 FarmHouse 24 48"
]
}
]
}
There's no WarpPoints map property. It's just Warp
Yes I try that too. But it doesnt work
tbh I wouldn't fully trust warp edits to a building interior let alone farmhouse due to how it has to update the warps to reflect the current position of the exterior building
Because your delimiter is a space, there is no value 3 11 Farm 64 15 in that map property as far as Content Patcher is concerned. It's seeing 3, 11, Farm, 64, and 15 all as separate values. In order to actually find it, you'd need one TextOperations search for each value separately.
What?? Really
there is hardcoded logic that any building interior that has warps to Farm will be corrected to be aimed at the buildings human door anyway
So I just replace 3 and 11 to 24 and 48 is enough? Right?
As long as they are the only 3 and 11 in the Warp map property, yes.
But have you been paying attention to what SinZ is saying? They are saying that even once your syntax is correct your change may not work.
Can I ask why u want to delete the warp
I change the farmhouse map which is bigger, so I need to change warp.
And also thats not enough because I have to change Warp in Farm entryway to FarmHouse
But I didnt find it. I know coordinates but even if I change it doesnt work
While you do need to override the inside coordinates you don't need to change the outside coordinates
Farmhouse is a building so warp out is based on human door instead of what the warp target says
So which I should change? Farmhouse warp or Farm warp?
Farmhouse
Sorry if I'm interrupting anything, but given that I'm literally JUST starting, this shouldn't take too long.
So, baby's first CP mod.
How should I be writing my content file when I want to replace not one, but multiple (in my case, two) assets?
This changes one, how 'bout another?
two assets with different fromfiles?
you'd just add a second copy of the { } section inside changes, with a , between
Just copy paste that to the space right below it
You mean you want to edit 2 different things right
so ```
"Changes":[
{"Action": "Load", ... },
{"Action": "Load", ... },
]
Like so?
you’re loading abigail’s portrait twice?
gotcha
just in case, you really shouldn’t be Loading something like a vanilla npc’s portrait asset at all, that should be an editimage
I disagree. Vanilla NPC portraits can be Loaded - it's not like you need compatibility with other mods trying to completely replace the same asset.
But they're changing emotes anyway.
but the load wouldn't even work, would it? if it's to Portraits/Name? or am I being confused
I really shouldn't be messaging here today until I sort out my dizziness tbh 
? But that's the portrait path for portraits
yeah but Portraits/Abigail already exists
Yeah but loading it just overwrites it
me bac
Nothing explodes
But the game doesn't Load so there's no clash, like Forsy says
huh. wha
You can even Load with priorities. By default it's exclusive, but you can change that.
It's a CP or SMAPI thing to refuse to Load two exclusive patches
So you can maintain compatibility.
yeah but that's not what I meant haha, priorities just mean your load won't be applied
Only one will still Load, they just won't both explode
When you have two "Exclusive", neither will load.
Yes, that's the exploding I referred to
Like so?
When only one or neither has Exclusive, there's no exploding, but still only one will apply
correct, but we're talking about something else where you're loading onto an asset that already exists and it does work
Unlike EditImage where multiple will apply which is how overlays work
Ok you're missing the actual target. You have the folder it's in but not the asset name.
Oh, I need the asset as well. Oopsies.
Close, but you're currently only using half of the asset names. You need "Target": "TileSheets/emotes" etc
Yeah, that works. I just meant that you can even load onto an asset that already exists multiple times without it exploading.
definitely not content patcher, but tbh you're right that I never checked if the way we handle loads is monogame or smapi
~~Only in a total replacement way. ~~Not in an additive way like you can with EditImage.
There we are.
you can't, though. those loads just won't apply.
loads with lower priorities will just be ignored.
Stellar. And this will make it so the two images I have in my mod's asset folder will replace the images following these targets, yeah?
Yup
Brilliant.
Oh yeah, ignore what I said. Only one will Load.
And I believe that's all.
Yeah, but it's still great for compatibility.
Im finding it very funny that your text editor refuses to accept FromFile as a correct word though
My puter's in a foreign language, if that helps.
But that doesn't make much sense, the others aren't redded out.
Oh well.
I recommend using an actual code editor that supports JSON highlighting.
I have Notepad++, but I keep forgetting about it.
I have a Windows "mod" that forwards everything to a code editor of my choice. So I can't even open Notepad if I wanted to.
In general would people want a mod that adds more machines or do you think they'd want to use already existing vanilla machines
I don't think you can generalize like that. Mods exist so people can adjust based on how they want to play, so thinking in terms of "do people want this or this" is usually counter-intuitive.
I don't care, personally. I'll use Lookup Anything to figure it out either way.
I am making a mod so you can turn produce you grow into animal products. Do you think people would want to use existing machines or specifically dedicated machines
(We, uh, both just answered that question.)
And Wiz you know better than to ask the modmakers :P Go ask the players!
You could make it a setting. But I think it completely depends on the produce. Putting soy in a keg could make soy milk. But that's not really an animal product.
That's not a warp. The front door is handled by building data. If you delete it, the game will break, but you can move it to elsewhere on the building by editing building data
im curious if this is even possible, but could I make a mod that spawns me in a non farm house and I have to buy the farm?
new age healing isnt helpful
Hah! No I meant Harmony, the c# code-patching library that mods use
ah, i dont know that library
!harmony
Harmony is a framework for patching .NET code, allowing you to take any portion of the game's logic and insert or substitute your own. This gives you more flexibility and control than SMAPI helpers and events, at the cost of being typically more complex and difficult to use safely and correctly, and more likely to break with a future update of the game and/or SMAPI.
If you are trying to do something that isn't possible or practical with SMAPI alone, then Harmony is usually the solution.
For more information, refer to the following:
- Harmony Modder Guide - Intro, Use Cases, Initial Setup
- Tutorial: Harmony Patching - Types of patches and code examples
- Decompiling Stardew Valley - For finding methods to patch
ah
XD now im thinking of someone making a mod simply with the power of positive vibes (not vibe coding)
although thinking about it a bit more, maybe it would be easier to edit the farm map itself, and make a new farm?
A new second farm map I mean
i mean you could always make a new farm map/farm type but for what you're saying, you'd still need some kind of C#
to prevent the player from actually being on the farm
You would need harmony to add an option to buy the farm to Robin's menu, as well as to tweak some other things, like disabling farm events until purchased, and changing the respawn logic
That would be pretty easy, but there are some things restricted to the farm itself, like crows and lightning
Also I think moving cabins or farmhouse to a different map might break things
Actually what if u just do some crimes like
- Day started, betas warpfarmer somewhere else
- Map edit all the entrances to farm to gate it off
- Until the farm is "unlocked", keep warping farmer to somewhere else every morning if they ever end up in farmhouse by pass out
i want opinions about this before i make the mod
Verdant Maker
+ 40% sell price and 10% processing speed for plant-based artisan goods
Lvl 10 Rancher Profession
Barnstead Maker
+ 40% sell price and 10% processing speed for animal-based artisan goods
Coopmaster and Shepherd gets combined:
Husbrandy Master
Befriend Farm animals quicker. Incubation time cut in half
* also increases product quality of animal products, like vanilla```
Heyyyy I'm trying to create a custom monster but I'm a bit lost. I already checked the wiki, but, from what I was able to understand, it only gives information on how to EDIT monsters, not explaining how ADD a new monster. I'm lost, I can't find tutorials to do so, do I need to use C#?
By "adding monsters", do you mean adding a completely new type of monster with its own loot pool and mechanic? Or a new "skin" for a monster/a monster with the same mechanics as an existing one?
A monster with the same mechanics as an existing one
Do you know if the event id are unique?
in that context
Then you can probably take a look at this framework https://www.nexusmods.com/stardewvalley/mods/32241
If you want it to behave exactly like an existing monster, then you can make it a "skin" (i.e., an alternative appearance)
Tyyyy
Only downside is it will be that type of monster, so spawn at the same time and attack the same way
It'll just look different
hello!
i was wondering if there was a mod request area? it's a mod i could make myself but i'm just so tired lately i wanted to venture to see if i could work with someone instead
!modideas
If you have a mod idea that you aren't planning to make yourself, you can put it in the mod ideas github: https://github.com/StardewModders/mod-ideas
However, this does not mean anyone is guaranteed to work on your idea—modders who are looking for ideas sometimes go through and work on what they find interesting off this list. If you want to pay someone to make your mod idea, there are a few people who do commissions (mostly art, sometimes code); you can ask around, search usernames for the word comms, or see !commissions.
u can also say it here
i want to make a fashion sense pack for an outfit, nothing extreme
If you want a collab, then feel free to describe it here so people can reach out to you
i already have all the pngs as i modified a mod for personal use a long time ago so i didnt have to write the code
u need help with the code bit?
yeah
ive got the fashion sense wiki up but i am tired and my brain is fuzzy, chronic fatigue stuff
a hat, a shirt, a pants, and a boot.
i did wanna try my hands at FS code. the art bit not for me
it's like a onesie of my fursona, nothing fantastical lmao. i'd love to make wings to match but i've made do with other wing mods instead
feel free to dm me, i'll give it a shot. can't promise it'll work lmao
we could work together if you want, since i already have all the art. i bootegged a different mod and just changed the graphics, but stardew doesn't like that mod anymore and it's a weird mod anyway as it starts an event on game start to give you the clothes an i'd rather just use fashion sense
thanks, will do!
What about farm warp totems
On location change to farm warp again 
That would work but you'd still get the various farm events when that happened
C# would do all that much nicer yeah
I miss entoarox framework. It had an event that let you change a warp before it happened
is there an easier way to get the current appearance data?
CharacterAppearanceData currentAppearance = null;
foreach (var appearance in speaker.getData().Appearance)
if (appearance.Id == speaker.LastAppearanceId)
currentAppearance = appearance;

or var currentAppearance = speaker.getData().Appearance.FirstOrDefault(x => x.Id == speaker.LastAppearanceId)
but that's still iterating over all appearance entries...
not sure the cost of getData() either
welp
But that is why u can consider checking the effects instead
Like the portrait as result of appearance selection
You can also consider only checking the id
that's a bit weird to store an ID but not have a dict to use this ID on...
so... something like checking against speaker.Portrait.Name to have something like...?
"Conditions": { "Portrait": "Sebastian_Beach" }
or does Name include the path and/or extension?
I'd check but um...
The Portrait is a Texture2D right? That means it should be entire asset path
it's a GraphicsResource
What class is that 
er, nvm that's the parent class of Texture2D
I have never heard ok

Yeah ok
in small N scenarios a iterate and find is sometimes better than hash
Yeah, actually, good point, since this is about appearance
But i think the reason for Id is probably so that content patcher which does stuff in dict form has something to edit
So there's a lot of vanilla assets that r list with Id
I meant the fact that the speaker holds the id specifically instead of the actual appearance data. Don't know much about that though
might also have something to do with how the last appearance id shouldn't be taken as a source of truth as explained in this comment:
// Summary:
// The appearance ID from Data/Characters chosen by the last StardewValley.NPC.ChooseAppearance(StardewValley.LocalizedContentManager)
// call, or null if the last call didn't apply an appearance entry. This may not
// match their current textures if they were manually overridden after calling StardewValley.NPC.ChooseAppearance(StardewValley.LocalizedContentManager).
if there was a field readibly available to grab the appearance from, you might be more inclined to think that's the actual appearance being displayed, when it might not be
It's a netstring
what's the util method to strip the path and extension from a texture again? 
There wouldn't be extension right
hmm I guess not if it's internal
would the locale be included?
var portraitTextureName = ModEntry.SHelper.GameContent.ParseAssetName(speaker.Portrait.Name).BaseName;
no idea if I'm doing this correctly
Hm i never considered loading a localized portrait asset
mod idea: add holiday decorations to portraits depending on holiday in the locale 
afaik BaseName just excludes any translation suffixes, e.g. for the string Data/Achievements.zh-CN it'd give you Data/Achievements
I don't see any path removal utils at a glance, it mostly comes up in CP
I guess including the path wouldn't be so bad anyways if it's just a Portraits/ prefix or whatever path a mod puts it at
you could split the string by / and grab the last index if needed
it gets a bit longer if you have file extensions, but ig if that's NPC portrait data it wouldn't
(or \\? whichever it is after helper parsing)
It's possible and honestly frequent for mods to not load to Portraits i feel
I would just check the entire asset name and trust mod author to know
(minus the locale bit)
example usage
"Action": "EditData",
"Target": "Mangupix.DialogueDisplayFramework/Data",
"Fields": {
"ExampleMod.WinterPortraits": {
"ID": "ExampleMod.WinterPortraits",
"Portrait": {
"texturePath": "{{ModID}}/{{DDFC_Speaker}}_Winter",
}
"DisplayConditions": {
"PortraitMatches": "Portraits/{{DDFC_Speaker}}_Winter",
"AssetExists": "{{ModID}}/{{DDFC_Speaker}}_Winter",
}
}
}
Hooray, my test for whether or not separating out the dialogue break and portrait commands from my i18n text would cause issues worked. Now to change the rest of my event dialogue to match, so translators don't have to parse through the dialogue commands...
...or maybe just {{DDFC_SpeakerPortraitName}} that extracts the part after the last / as Esca mentioned, and skip the PortraitMatches entirely
side note... {{DDFC_TokenName}}, {{Mangupix.DDFC_TokenName}} or {{Mangupix.DialogueDisplayFrameworkContinued_TokenName}}? lmao
Is that gonna update fast enough
👆 idea from SinZ/irocendar, it'll insert a substring I can internally replace when needed
@brittle pasture Hello, i would like to thank you for your reply on the Nexus forum ! I changed what you told me for the target "AnimalExtensionData" but it still doesn't work and i don't know why :/ Could you help me figure it out ? I hope my request doesn’t bother you too much
But wouldn't this be interpreted as a token
Maybe u could just put a {0} and use regular C# string format
spacecore has this, though for c# mods only. Did this other framework make it available for content packs?
// in ModEntry.Entry or something:
ContentPatcherAPI.RegisterToken(ModManifest, "Mangupix.DDFC_TokenName", () => "\U55512speaker\U55512");
// in my patch validator:
if (!string.IsNullOrEmpty(conditions.AssetExists) && Game1.content.DoesAssetExist<Texture2D>(conditions.AssetExists.Replace("\U55512speaker\U55512", speaker.Name)))
continue;
// in content.json
"AssetExists": "Portraits/{{Mangupix.DDFC_TokenName}}"
i don't really understand what that token is supposed to be doing or why it wouldn't break due to not updating fast enough
This seems like a lot of steps when you can just tell people to put {0}
If you aren't depending on content patcher to resolve your values nor do you expect things to work in a When cond then there's no need to jump through all these hoops
if it's meant to just be a single static for the whole game session identifier value whose only purpose is to be replaced then I agree with chu
why {0} for the speaker's name, though? then {1} for the portrait string, {2} for the next variable, and so on?
also you don't get a choice what your token is called here really. your token name is prefixed with your mod unique id. it's not negotiable
can you post everything you have at smapi.io/json pls
I get how string formatting works, but I'm saying mod authors might want to substitute with different values
(a bit busy currently so wont get back immediately)
Yeah sure, as long as you define what 0 1 2 and so on are in the context of the display condition block you good
Afaik there's no issue with passing more params than what the string actually references
correct
Nope, c# only
You could also do custom format syntax really, point is just that this ain't a job for content patcher tokens imo
here's the convo that convinced me to use CP tokens btw
The file : https://smapi.io/json/none/ee9d5c3260b7447d9c77f127d8fb36af thank you for helping me understand where my mistake comes from. I’m just starting out, and even if you respond later, I’d like to understand what I did wrong
you can also just copy what SMAPI does for translation tokens, so long as you follow the license
how does SMAPI do translation tokens?
im on mobile so you'll have to go looking in it's source yourself
hellooo would there be a way to give krobus a 'wedding' event where they show up at your house for the first time? if so, could i make the weather rainy that day?
do you mean you want the event to happen 3(ish) days after roommate proposal, and you want it to be raining that day? i don't think you can control when the wedding happens without C#, and i don't think you can change the weather at the farm without C# as well
if you want to make the event separate from roommate proposal though, you could have Weather rainy be an event precondition
hm, I am using BETAS to trigger the roommating, since i made a proposal event, maybe i could also use it to make it rain 3 days after, AND use spacecore to trigger the event after going to bed on the third day?
is there no vanilla roommate "wedding" event?
nope
nothing, they just show up in your house lol
cannot do overnight events without More Nightly Events
Ohhh okay, i'll use that too then!
then yeah you can handle all that timing yourself!
awesome, thanks guys :)
already have lol, made it so the proposal event can't trigger 3 days before a festival :)
nice
also I don't know what day it is during an overnight event
hm, i think the previous one?
¯_(ツ)_/¯
I'll find out ig haha
yeah, but they don't have to be if you're writing your own implementation based on it
I mean the implementation is a simple string.replace
well no, it isn't, it uses regex
and can take in a dictionary as values to replace
also, I can't believe I forgot about these, but why not a tokenizable string?
"why not" not as in "why didn't you think of this" because I clearly didn't either, but more as a "huh, wouldn't these work here?"
huh... why not indeed 
(also apparently the SMAPI translator can also get token values from just... any class instance? by looking at the properties and fields via reflection? i must've forgotten that too because when has someone used this that seems way overkill lmao)
Progress???
I did completely destroy the mod id's in the file, so it's loading now... sort of
I was gonna suggest tokenizeable string but i felt it was too much context anyways
though thinking about it, with new folder based i18n I could just load a "substitutions.json" into some data model and then pass that into the translator... 
You don't have easy access to speaker in tokenized text
And this is your data model to begin with, not dialogue or whatever
you have as much access as the string. Format way
It comes back to the point that this is a narrow scope thing
I'm not sure what you mean by too much context
Too specific to one context I mean
a tokenizable string is just a glorified find and replace
Game1.content.DoesAssetExist<Texture2D>(TokenParser.ParseText(conditions.AssetExists))
much cleaner
it'll also have precedent in 1.7 when tkstrings get all that wild stuff for tractions and whatnot
If you know you only ever need to support this for some fields on your custom model then do u rly need to expose it 
Not saying you shouldn't consider doing tokenizeable string parse on ur fields ofc, just whether the specific substitutions should be so
personally I think it's mostly for the benefit of the end user not needing to remember which substitution is which and whether it's one brace or two
wasn't that the same concern with GSQs? which would also be an alternative offered for doing the exact same outcome
if you really wanna get silly with it you can put a {0} in a tokenizable string. don't know to what end but you could
What is the behavior if you call the ddfc tokenizeable string on like, a furniture name
the standard behavior for a tokenizable string that doesn't have a value, an empty string
same user error 😂
very user error
Well as long as u r fine with that 
i still don't think gsqs are good but I think tkstrings are fine
People use i18n for all sorts of non dialogue stuff, misusing string storage systems is normal in Stardew modding
don't know what emotion that is
ill take it as approval
It's
but the netflix adaption
tbh I don't know what emotion that is either
I kinda just accept whenever you use it that I don't know
wasn't there a GSQ for checking assets...? could've sworn I've seen it but can't find it now
Checking assets of what
if an asset exists or not
there would be no reason to have that in vanilla
there's barely a reason to want one in SMAPI
I feel like there's nothing a content mod can do if asset no exist so...
and they'd likely already be able to know if it exists via other means
More of a game/c# mod thing to deal with bad texture loaded
hmm maybe it's just a niche usage to portraits then
You can certainly make one
For your niche usecase
But I feel like it's just part of normal valid/invalid check and not something user ever should think about
I mean the field condition should be plenty enough, I just thought there was a GSQ alternative 🤷
In livestock bazaar i just refuse to display animals that have bad textures
Because they would be broken if you did buy them
Warn + skip bad portrait texture makes sense to me too
If anyone has time for it, I have a question. The assets load now, after I got rid of the faulty mod id's, but I was wonderin if I should be using a high priority and if my weight/precedence should be higher, like 101? "KrobusWinterPink": { "Id": "KrobusWinterPink", "Condition": "SEASON Winter, {{KrobusWinterPink}}", "Portrait": "Portraits/Krobus_Winter_Pink", "Sprite": "Characters/Krobus_Winter_Sprites_Pink", "Precendence": "1", "Weight": "1" },
so in the same use case as earlier (but now tokenized) where you have a mod that replaces some NPC portraits but you don't want to list them all directly:
"ExampleMod.SomePortraitEdits": {
"ID": "ExampleMod.SomePortraitEdits",
"Portrait": {
"texturePath": "{{ModID}}/[Mangupix.DDFC_SpeakerPortrait]"
}
"DisplayConditions": {
"AssetExists": "{{ModID}}/[Mangupix.DDFC_SpeakerPortrait]"
}
}
Hi, so your code is actually correct; it's not working because of a bug in EAC that prevents skin override from working for egg layers. I've uploaded a new version of EAC that should fix it; thanks so much for finding this bug!
It's good to follow the conventions i feel
(though side note - I recommend adding your mod ID to your animal IDs to reduce risk of collision with another mod; after all there's at least one other Pokemon farm animal mod out there)
Krobus doesn't have winter outfits, or at least not visible ones... I'll go with lower precedence if you think it's better though.
Is there a case where I'd use this without having AssetExists 
(ie. {{ModId}}_bulbasaur instead of just bulbasaur)
It's probably impossible for anyone to have a portrait for every custom npc that exists so
Is it actually worth offering a mode where you apply this entry even when portrait doesn't exist?
hmm
good point...
so you're saying it should soft fail without warning if the texture isn't found? what if the user did a typo in their filename?
You should log something probably
if the user is specifically trying to use an asset that doesnt exist, you warn about it
@uncut viper You leveled up to Desperado. That's level 1000! :open_mouth: You have been taken by the server's evil clutches and there is no escape for you. Congrats!
Whether that's a warning or a trace is up to you
thanks man
Urple

incredible that when i finally get my so sought after ourple, i cant even see it
I do think it's visually definitely not working for the modder
Thanks a lot, I never would have imagined being able to find a bug with my limited modding skills haha! And thanks for the advice, I’ll change the ID then - It works !
And easy enough to debug
The asset name being only known at runtime is why logging would be helpful for the debugging
Tell ppl that hey i tried looking for this asset it no there
Therefore i didn't proceed
there is, when the mod is patching the portrait texture directly, then patching the dialogue box separately 
wouldnt they know then that the asset did or did not exist?
hellooo I wanna see if i did my more nightly event thing right, here it is! ```
{
//===================//
//MORE NIGHTLY EVENTS//
//===================//
//
"LogName": "{{ModId}}.Log.More_Nightly_Events",
"Action": "EditData",
"Target": "Mods/leclair.morenightlyevents/Events",
"Entries": {
"{{ModId}}.MoreNightlyEvents.Lunaloo_Event": {
"Id": "{{ModId}}.MoreNightlyEvents.Lunaloo_Event",
"Type": "Script",
"Conditions": [
"PLAYER_NPC_RELATIONSHIP current Krobus Roommate, PLAYER_HEARTS Current Krobus 12, SEASON_DAY fall 1, PLAYER_HAS_CONVERSATION_TOPIC current {{ModId}}.Topic.KrobusSeesLunaloos"
],
"IsExclusive": true,
"TargetMap": "Beach",
"OverrideWeather": "Sunny",
"TimeOfDay": "2600",
"Script": "enter the event script here"
}
}
},
if no one on here's familiar with it, do you guys know if Khole is okay with being @-ed?
Is that 2 independent ddfc patches
I'm probably overthinking it
is changing portraits via DDFC a new feature? I thought DDFC was for changing the layout of the dialogue box 
they could just list the NPCs that have their textures patched in the DDFC patch
Nah ddfc always had that
for better or worse
||it's what those big booba mods uses to get vn style portraits||
weird, never realised
But yeah theoretically someone could make i dunno, mistria style portraits with ddfc
And have them display at 3/4
heck ye
im not familiar with it and i cant speak for khloe bc i dont know, but the easiest way to see if you did it right is to try it
You could consider adding a Requires field maybe
that's true! forgot that that was an option-

I'm trying to appeal more to um... varied mod authors... but there's a clear audience that creeped in 
Which would mean "do this only of this other ddfc patch took effect"
if its not right bc of some syntax error or something, then several people here can probably help even without being familiar with MNE
god i'm so into modding i forgot you can actually play the game 
It does mean u gotta graph theory a little bit
implementation though is shrugs
graph theory my beloved
Another similar concept is having some sort of patch group
Apply only if all patches in this group is valid
by texture patch I mean a CP Load action on a texture, though... I don't think DDFC can or should check if other CP patches exist
it definitely can if you're willing to do some funky things
What does patching texture and dialogue box separately even mean then 
asdjkhf just realized I've been mixing things up... AssetExists wouldn't apply in my earlier examples because no new portrait texture is loaded, only altered
ill be honest i realized like three scrolls up ago that i think i just dont understand DDFC enough or how to use it/how it works to be able to offer further input on it. i like tokenizable strings tho. thats all i know
..oh my i think i broke the game-
all i need to know, really
!log
Important note: Your computer username may appear in the log. If your username is your full name, please be aware of this before uploading it.
Please share your SMAPI log file. To do so:
- Open this page: smapi.io/log.
- Follow the instructions at the top of the page to upload the log file. (Don't copy & paste from the console window!)
- After uploading, it will show a green box with a URL to share. Post that URL here.
Please do it even if you don't see any errors. This has useful info like what mods and versions you have, what the mods are doing, etc. If the issue didn’t occur in your last session, please load the game to the point where the issue occurs, then upload the log.
I like tokenized string too
thanks for that
i expect 50% of the DP
Wow a 0.5 dolar discount
scribbling with 25% already to aedenthron, that leaves 25%.....
oh, i didnt realize i would already be sharing with someone else. 60%, then

that looks about right for something that breaks overnight on loop
yeah
idk if it's an issue with my mod or something else? https://smapi.io/log/b6cf16557f264ad3934653d31a181ebf
Log Info: SMAPI 4.3.2 with SDV 1.6.15 build 24356 on macOS Unix 15.5.0, with 83 C# mods and 231 content packs.
Suggested fixes: One or more mods are out of date, consider updating them
are you Loading something instead of EditData'ing it?
hmm lemme see
because i see an i18n token in your log, which should not be possible
uhh edit data
also i dont know if you patch reloaded after the first json parse error at the top
nope
well you should fix that first and foremost
but yeah, there should be no way that the game even knows you're using a token unless something is being Loaded when it shouldnt be and bypassing token parsing
Yeah, i know what the problem is, i need to actually add the portraits lol
hmm okay
i understood roughly 70 percent of that lol, so somewhere in my code (or maybe someone else's???) I have a load when it should be editdata?
probably. the token in question is in some Condition field
Failed parsing condition 'IS_FESTIVAL_DAY Any 1, !IS_FESTIVAL_DAY, !IS_PASSIVE_FESTIVAL_TODAY, !SEASON_DAY {{i18n: i18n_Code.SpecialDaysList}}, [...]
OH YEAH THAT GUY
i'll fix it!
also why are you so behind on BETAS updates when you're using BETAS features
that one has never interfered with other stuff tho
heyyy cmon let me be dumb
if this is about the condition, its literally stopping whatever you're using the condition in from working
Oh, that condition is unused so far
its unused always as long as its broken 
regardless, every error that can be fixed should really be fixed when you're asking for help fixing errors
true true
hm, any idea what the issue was that caused it to keep repeating the same error?
That's more of a quirk of night stuff exploding more violently
well you didnt fix the json parse error at the top that seems to hold your night event data
..i am just very lost rn-
or whatever "Events.json" holds
found it, it was an extra / in another event
eughhhh what have i done-
hm, should i post it to modded tech support later?
its for making a mod, so it goes here
unless the error happens even without your mods and its someone elses mod
huh, I'll test that soon
I've created a monster 
Hello!
My new NPC mod seems to break NPC Map locations and I can't seem to figure out what's going on. No NPCs show up on the map at all 
It seemed to be working fine when I tested my world map edits, but something must have happened?
Here's my smapi log and my world map changes:
Log Info: SMAPI 4.3.2 with SDV 1.6.15 build 24356 on Microsoft Windows NT 10.0.26100.0, with 50 C# mods and 62 content packs.
Suggested fixes: One or more mods are out of date, consider updating them
in the future you should upload your json at the same website as your log please but i can see you are currently overwriting the entire MapAreas list with just your own
you need to use TargetField to drill down into the MapAreas level so you can add new entries without deleting the whole thing
Oh, right! That makes total sense
Fields will replace only the fields you specify, yes, but that applies to the top level only. you're replacing the whole MapAreas field of Valley still
Yeah, I didn't think of that - thank you so much! :)
Thanks! 
Oh, hey, you just released an npc right? She looks pretty neat!
Yeah, thank you! :D
It has been a bit of a long-term project, lol
Can I ask how long it took? Mine's been taking forever!
I think I've been working on it on and off for about half a year 
have you applied for cheeto yet?
Oh, I haven't 
oh, right
Guess I'll do that when the time comes
Not bad time at all, in my book
I took some breaks to make other stuff though
Especially with all that dialogue to write, it's a lot all in one go
Writing mine has proven to be quite hard. Mix that in with coding, and actually making events, and finishing assets... it's a lot
Sure is! But I also think it's a fun and challenging project
I have been enjoying it!
As someone with zero talent for anything remotely related to coding, I have wanted to throw my laptop out of the window many times, but seeing my NPC slowly come to life has also brought immense joy
You also technically released two npcs around the same time didn't you??
Yeah, but Leela is veeeeery minimal
Only the basics for now
I wanted to get Aliyah done before going more in depth for her
Makes sense
Now I can focus on adding heart events and all that good stuff
Along with the dialogue, I think that's what took me the longest for Aliyah
Yeah, that should be fun. Especially since you've already done it once!
Yeah, I'm starting to memorize the commands, I definitely got faster by Aliyah's 14 heart event 
... I should also probably save the wedding day on my test file, I don't know how often I've watched that ceremony just to test some small stuff and forgot to save
I can see my npc on the worldmap, and her events trigger but even after sleeping a day she doesn't show up T.T
I usually keep about 3-4 projects going at a time (I am currently overhauling a config for one and updating sprites for another)
can you try debug where MyNPCInternalName
(technically debug where takes a fuzzy match but better safe than sorry)
I’ll give it a go 🙂
Bus stop 4,5
Hm. Interesting
Oh holy shit
Ok so I moved her positions and she’s there now
But cannot interact with her whatsoever
make sure you have all the necessary parts (dialogue, gift tastes, etc)
I’ve got them but my content.json is probably a nightmare so I’ll check those and see.
Ty!
np! if you need a second set of eyes feel free to upload every relevant file to smapi.io and share in here
If it doesn’t work between now and pie I’ll do that 😄
in that case you should use SMAPI 2 (Send Me A Pie Too)
(happy turkey genocide/alt history/family feud day!)
Coming back with my strawberry cow edit, I finally built the barn and couldn't find the alternate type, I changed the purchase price from -1 to 1 to see if the animal would load on its own and it did, but when I go back to -1 there's no option in the cow menu https://smapi.io/json/none/24d80f9ce6c1454d8d36c9f2b388ccca
probably a dumb oversight, but if anyone can see the issue please lmk it's killing my ocd brain
(I didn't add a chance because I was using livestock bazaar specifically, and its a personal edit)
your animal id in the alt purchase field of the white cow is wrong
note the missing modid
I finally published my first mod
I can't post it here cus it's not within guidelines (which is totally fair and once again, something I'd agree with) but I'm still very happy! From the first seeds of the mod idea happening 3 years ago to now actually publishing it after like 4-6 months of work feels really weird but in a good way
I'm intrigued
It's not one thats appropriate for everyone (I wouldn't recommend anyone under 16 playing it, so nothing crazy but not kid friendly) so i'll keep it very vague on here, i just wanted to celebrate a little since so many people on here helped me make it ^^
good job regardless 
after looking it up, it's (probably) definitely not as bad as it sounds, but yes congrats on the release
Cus of the yandere rule, I don't want to make any mod have to ask themselves if it's appropriate and I hate talking around issues so thats why lololol I def don't think it's anything totally out there weird
great job on your first mod!
That could maybe be done with trigger actions that add a very high negative value at the end of every day?
Well, the value. Displaying them would be different.
Does anyone have any brush packs for procreate that are low size/low pixel 
anyway the answer is "through C# anything is possible"
its an old outdated mod actually
I'm almost positive the game clamps it in various places so it cannot be negative
(it does)
Yeah, I was more thinking of how you can add negative friendship points and drive it to 0.
So I likely just got a bit mixed up there. 🙂
Ok. Looking for resources here. Who has used procreate for a high res portrait pack and still has the brushes they used?
you can also try asking in #making-mods-art
i wonder if negative heart events are possible with that mod
another mod for ddfc to support 🧐
idk about that mod specifically but barley's thing explicitly adds "nemesis" events
POV me making an enemy of Harvey
is there a resource anywhere that shows which default dialogue lines go with the manner, social anxiety, and optimism values? i tried looking but i couldnt find anything that told me which were which
i know "read the source code" is unhelpful advice but it's also the only one i have
though last I checked I recall it mattering less than I expect
that's true if im providing enough of my own dialogue i guess it doesnt matter
thank you though!
however much you think it matters it very likely matters even less, and thats accounting for how much you might think it matters after selph already told you it doesnt matter much
as far as i know the exact dialogues for each exact value in every situation where it comes up arent documented, probably because they dont really matter and it comes up so rarely in the game
I think it matters mainly for saying "Hi" when NPCs pass each other
that's the one identifiable thing I can remember
that, drinking mayonnaise, and commenting on items you sold to a shop are the ones i know
Oh yeah, commenting on items sold to shop. But you can also turn that off (I did, which is why I forgot it)
socially anxious characters react less to you drinking mayonnaise
they're just flavor text for people digging into the json i guess then, like the love interest field
well the love interest field literally does nothing
but its funny to look at
the social mannerisms do things
I have a full list of what we discovered last time i asked about this
do you want me to dm
Yeah you will notice it if you have your character set to go "hi" when they walk by people or talk about stuff they bought at the store
i do love a list
speaking of which, is there no way to customize those generic hellos? Just double checking
It's not a list its more like a collection of screenshots of discord messages that I intended to put on the wiki and then gave up
But I'll send it to you
The love interest field is so interesting. Like, I really don't approve of Lewis keeping the relationship with Marnie a secret, but apparently he doesn't even love her.
I love that despite that it survived 1.6; it's important enough to exist but also completely useless
we can only guess if mr ape wanted to do a rival hearts thing
because I'd like to be able to make that random greeting a Howdy, but I never saw a way to do it, so I figured it's one of those things the game just does
you can change it, but not per-NPC
(I would love that list
)
yeah that's what I was afraid of
this is the logic for choosing which Hello to use
I thought that was a 2 y/o npc until I remembered age is an enum
ofc! Your eyes will regret seeing this mismatch of discord screenshots tho
for anxiety, its:
0 => Outgoing
1 => Shy
2 => Neutral
no regional dialog involved in greetings, I guess shakes fist
Does the game respect NPC.cs.<number> dialogue keys added to a character's dialogue JSON or no?
no, because thats not the whole asset key
I mean, I imagine in the screenshot case it won't because that looks like a direct path
its not loading NPC.cs.### its loading Strings\StringsFromCSFiles:NPC.cs.####
But speaking more generally for any of those variants, does it EVER work?
no
Okay, so every reference to NPC.cs.#### in the code includes the StringsFromCS portion?
yes, because the reason theyre called "NPC.cs" is because they were originally hardcoded
in the C# file called "NPC.cs"
Gotcha, just trying to be sure I understand
(.cs is the file extension for C# code)
the same will be true for anything with a .cs extension in its key in that StringsFromCSFiles asset, thats just where it was originally hardcoded
There are some keys that will be checked first in the Character Dialogue file, just was unclear where the line was
before being unhardcoded so it could be translated
those will have dedicated keys documented for the dialogue line, but they wont be in the form NPC.cs.###
But that's mostly the location stuff I am thinking of probably
Ah, I see. Thanks for explaining!
theres actually less from GameLocation.cs than I expected tbh
only 7
i wonder if the DiaryEvent.cs keys were removed from the 1.6.16 alpha since the DiaryEvent class was removed 
In a related query, if one wanted to change the npc.cs.#### lines across the board when a player is say, in the Desert, would an EditData for those lines with a When condition checking for player location allow that?
yep
along with the LocationChange update rate ofc
they can be edited like any other asset
you could also probably nerdsnipe a C#er into making the most niche framework of all, the Randomly Appearing Greetings Framework
sole purpose is to allow per-NPC customizability of those random greetings that a player has like a 10% chance of saying IF they happen to walk by an NPC and IF that NPC is a friend or family and IF they are not too socially anxious to say hello
IF the farmer is nearby
load bearing framework
I'd use it instantly, let my boy Howdy
Framework to make an NPC say "Excuuuuuse me, princess!" when another specific NPC walks by.
i have no idea what happened but I'm suddenly unable to run smapi without getting this error on the console window: https://smapi.io/log/15d713088c854523bde069f626501690
My actual log has no mention of this, I also checked the stardrop log and it also has no issues listed https://smapi.io/log/15d713088c854523bde069f626501690
Oops, couldn't parse that file. Make sure you share a valid SMAPI log.
Oops, couldn't parse that file. Make sure you share a valid SMAPI log.
the second one is valid, first one is just a copy paste of the error because I wasn't able to find it anywhere
not the full log but also AVE error
You could even do a test mod with Willy going "Ahoy" instead of whatever he says
ah the ol AVE
try randomly disabling and reenabling mods
(tbh, itd also just be the most ridiculously easy harmony patch in a C# portion, assuming you already have a C# portion)
whats ave
access violation exception
it's just a thing SMAPI does sometimes, no known cure
no real rhyme or reason for them
!ave
Oh wait, is it harmonybug? I forget
But this: Fatal error. System.AccessViolationException
it can happen with and/or plausibly because of Harmony but not because of an error with Harmony itself really as far as anyone really knows
the weirdest thing is i tried to run smapi from the exe instead of stardrop or steam and it loaded
sometimes the computer just says "no you cant do that" even though yes i can thank you very much
should i restart the pc lol
selph's suggestion of randomly toggling mods wasnt a joke
Yep, something about your C# mods loading via Harmony went wonky, restarting client or changing the number of C# mods can make it try again
It is actually random
You did nothing wrong, Harmony had a derpy moment.
"have you tried turning it off and on again" is sometimes the actual right question to ask
We apparently do not have a command related to Harmony/AVE errors, even though my brain remembers one existing
I guess I just saw a copy pasta about it too many times in modded tech support and my brain decided it was a command
I get AVE often for some reason after my computer upgrade, restarting the computer is always the surefire way I fix it, it's happened atleast 20 times so far and 20 times a comp restart fixes it
What part of this is the "FarmType"? "FlashShifter.FrontierFarm/FrontierFarm": { "ID": "FrontierFarm", "TooltipStringPath": "Strings/UI:FrontierFarm", "MapName": "Farm_FrontierFarm", "IconTexture": "Mods/FlashShifter.FrontierFarm/Icon", "WorldMapTexture": "Mods/FlashShifter.FrontierFarm/WorldMap" }
FrontierFarm? I want to use the Content Patcher "When": {"FarmType":"name"}
hm if they dont match does id win
welp, I'll try that and we can hope!
A custom farm type, using the ID value from the mod's farm data.
yea does sound like ID wins
"Name": "SpousePatioExit",
"Value": "128 16",
"When": {
"FarmType": "FrontierFarm"
}
},```
i mean that still doesnt really say for sure one way or the other
u can patch parse "{{FarmType}}"
(I"m trying to add compatibility without actually installing the farm mod and marrying the NPC in question, lol)
id assume ID just bc its a List and not a Dictionary asset but i think id assume the opposite if it was a Dictionary asset instead
@ivory plume hello pathos how are you, i made a new searching menu for chests anywhere:
i will open the PR for reals in a few days
Welp, the person that lodged the bug report can tell me if it works or not, I guess!
(they can also enter their own coordinates)
itd be an easy enough thing to test
I suppose I can literally just install the farm mod, choose it and do a patch summary
the patch parse thing chu said is probably quicker
HAha yeah definitely. I've never used Patch parser before
it'll evaluate the token in your console and just tell you what the token is
you have to have frontierfarm selected
if you did like patch parse "{{ModId}}_MyFarm" itd show Lemurkat.Whatever_MyFarm
to know what it'll resolve to
you also dont need the quotes so long as you dont put spaces in the token
i only mention that bc i get annoyed having to escape quotes in my console in rider
i noticed that the textbox in chests anywhere don't show a keyboard for controller players rn, maybe fix in separate PR
so im typing "patch parse" into the smapi console?
Frontier Farm is so BIG!
(I havent played SVE since 1.6, so I've not seen it)
yea it is a command
but man i wonder if we could just
add a token for spouse patio location
it would be extremely helpful...
Its cos I add a warp from it, and I need to add an exit warp
currently in Frontier Farm you can enter fine, but you exit in front of the farm cave
It happened again so I removed some recently installed c# stuff and idk what did it but works now ig??
Ugh I need to test Flower Dance with SVE installed now.
Not in the mood to track down the culprit in detail rn
and make me cry with my several spouse spots mod
hmm maybe a mod I have is also causing the issue, I just assumed it was my computer
well it sounds like your job to add a fancier token then
The recent stuff I added was mostly event/character things, a couple had c# components
I need someone to convince me to do the Expanded Flower Dance compat, or I will play Mistria instead.
play mistria instead 
Do thing
slacc is always correct
Or dont
I'm at a somewhat grindy stage in Mistria atm... Also my farm is lagging badly due to poor optimization or weak laptop. It's a pain.
my gf has been selling mistria to her siblings over call for the past 30 minutes and I tab here to see more mistria 
(I actually checked to see if there was a mod to improve this, lol. There wasn't. Mistria doesn't have a lot of mods yet, being in EA and all)
(Hayden my beloved)
also isnt it written in a real game engine in C++, not sure how much code crimes are allowed
it's gamemaker
I have no idea, I'm no code expert, I just wanted to see if anyone had fixed my issue! It does look like someone made a Mod loader though.
(hopefully they'll fix it in their next update)
gamemaker engine makes it terribly unoptimized afaik
it gets really laggy at times and sometimes full crash... although that could just be because it's still early access
I haven't had it crash yet, just lag a bit on the actual farm map - which I presume is due to my buildings and grass and crops and livestock
honestly, temptation to merge Stardew and Mistria in a mod is rising.
mistria-style portraits when 
Anyhow, I've talked myself into Flwoer Dance compat.
(I'm only testing with SVE though)
ai 
ah..
i kinda expect that sort of thing. I do find it weird that posts aer disabled ther though
this seems like someone put grep in winforms lol
"rewrites" smapi error messages to add em dashes, lol
oh cus this person spammed a bunch of chinese ai translations
and riled up a bunch of other chinese translators
they have a couple other weird ai-seeming mods as well
minor drama i was witness to 
like one for fixing json, such as removing trailing commas that break parsing... even though they dont break parsing
is the crypto miner a built-in feature?
dunno, I'd have to download it and find out
-> 138 mods
-> 9,5k unique downloads
that's how you know they're legit lol
I think I had one of his mods at one point..
they translated cloths and colors 
checks load order
this is a cheap shot at the ai-gen mod art but i can't stop laughing at CLEAB
CLEAB
CLEABED
ah, no
it doesnt make sense even if you fix the typo
Joja voice "You aren't clean.. until you're cleab!"
Recommendations clean? what does that mean?
clean and clear, and then get cleab
surprised the bigger word isn't messed up
why does their raw smapi log look like that
"Highlights risky & “heavy” mods
• Save-serializer changers, direct game patchers, console access"
console access...
just the standard things that the smapi log already warns you about
there's one for direct console access. let me pull it up, i'm sure i've trained myself to ignore it
ive used direct console access before but not gotten a warning i thought
[21:31:21 TRACE SMAPI] --------------------------------------------------
[21:31:21 TRACE SMAPI] These mods access the SMAPI console window directly. This is more fragile, and their output may not
[21:31:21 TRACE SMAPI] be logged by SMAPI.
[21:31:21 TRACE SMAPI] - Generic Mod Config Menu```
we all know console access is super risky
i don't know what triggers it
i have gmcm and dont get that warning, is that snippet very old
no, i just booted my game with latest gmcm to get it
is it a dev smapi config toggle?
could be
i don't have that one on (or verbose), but i do have developer mode set
what's the point of using the original mod's picture but then throw in some AI images that look nothing like the game??
i've always wanted to drive a pig with a cancerous growth on its head in the shape of a duck
I already didn't like this person because they uploaded a translation of one of my mods without permission but the more they post the more justified i feel about being upset in a way
there's "open source code" in the optional files for the smapi doctor thing
but the zip includes really weird files that have nothing to do with code, including some with local paths, and even a zip inside the zip
I'm not much of a python developer, though
seems they used a python compiler (which often give false anti virus alerts), there is honestly no need to compile this kinda python, it's plenty fast enough as is, my best guess is obfuscation? not entirely sure why theres a html file in there though? what an odd little ecosystem of chaos theyve made
how do I stop music playing in the rain?
rain should already override music in most situations because rain uses the music channel/priority
huh weird, cos it doesn't in one of my maps
maybe I coded it wrong
(I cannot even find where I coded the custom music, sigh) Found it and fixed it
WHEEZE why would you do this
on a translation even
Did it work?
It did! I'm orange now! 
After about 3 years of being a mod maker, I'm finally allowed to say it publicly
Congrats on being coated in a thin layer of cheeto dust!
I'd gladly post in #mod-showcase but at this point I just don't feel the hype anymore lmao 
What were you going to showcase? the archipelago mod?
Yeah, I tried to showcase it here on initial release in early 2023
I was stopped by the "need Farmer role" system, and it took me about 2.5 years to finally earn it
At this point I have my big community and all, I don't really need the marketing anymore 
A big creator just posted a video 12 hours ago with a 7 person randomiser using archipelago so I would say it's the perfect time as some people here may watch the video and see the showcase
who? did it include stardew?
it didn't include stardew but people would be able to see it's for the same system if they check it out, creator was Cjya on youtube, along with 6 other people
I think I'll wait until AP core decides to finally release our version 7. That will probably bring about a bunch of new hype for both myself and existing players, so as good a time as any to market it
sounds good!
why won't Keanu use his Flwoer Dance portrait?
the sprites work fine...
I tried exporting it and that is working fine... how can I figure out why he's broken?
you can use debug gq to test the Conditions in the Appearances section
Oh FFS I forgot to give him Flower Dance dialogue. I forgot that was a thing.
Hi. I was wondering if there is an easy way to see how many times a vanilla portrait is used in the game’s dialogue. I don’t have a big need to get this done, but I am curious.
another job for grep or your favorite find-in-files implementation
Hmm?
(point your search tool at your content folder, search for the text, and count the results (frequently the tool will count them for you))
Oh, I've never heard of that one
wait
It's not something that comes with the OS, right 😅
I think it's not
macos and linux both ship grep. windows has a search function (or used to) but last i checked it was glacially slow and isn't suitable for this specific use
It can do, but programs also are able to provide it or similar, vscodes find in files (hover over workspace and press ctrl + F I think) also works
i just open notepad++ and point its search at a folder
ok, thanks. I think I might have an easier time just testing the dialogue I'm curious about in game to see which portraits are used. I keep getting distracted from the important things my update needs to be finished.
I know this should never return getStandingPosition, but doesn't getStandingPosition return a pixel value, not a tile?
public Vector2 GetGrabTile()
{
Microsoft.Xna.Framework.Rectangle boundingBox = this.GetBoundingBox();
switch (this.FacingDirection)
{
case 0:
return new Vector2((float)((boundingBox.X + boundingBox.Width / 2) / 64), (float)((boundingBox.Y - 5) / 64));
case 1:
return new Vector2((float)((boundingBox.X + boundingBox.Width + 5) / 64), (float)((boundingBox.Y + boundingBox.Height / 2) / 64));
case 2:
return new Vector2((float)((boundingBox.X + boundingBox.Width / 2) / 64), (float)((boundingBox.Y + boundingBox.Height + 5) / 64));
case 3:
return new Vector2((float)((boundingBox.X - 5) / 64), (float)((boundingBox.Y + boundingBox.Height / 2) / 64));
default:
return this.getStandingPosition();
}
}
Hello, helpful folks! Is it still possible to add items to a shop inventory if they're added through Fashion Sense? I was following the example here: https://github.com/Floogen/FashionSense/wiki/Item-Properties but my hat keeps defaulting to a spriteless Cowboy Hat
Fashion Sense doesn't actually add clothing items, only the mirror, if you want the clothes in item form, you'll have to use Content Patcher
or another framework
FS actually does have some functionality to make its items "physical"
I have never used it, but can you post your code
Oh does it? I must've missed that, cool!
pathos posted an example mod using that functionality some time ago
damned if I can find it though
nvm found it: #making-mods-general message
Omg Pathos shared that for me, while I was still trying to fix my mod 🫣 Hahaha
Thank you!
How to I see what mods patch a specific area again? I tried patch summary but that says it filters with content pack ID and not asset name
found it, needed the asset arg
Hiii! I have a question - I'm making 2 NPCs BUT one of those 2 is tied to another NPC's heart event
Basically when you trigger NPC A 6 heart event, then NPC B will arrive in the town and become a regular townsfolk there. I've managed to spawn B in A's cutscene and make him talk. However, once the event is over, B still isn't in the town. His name and portrait is listed under the relationship tab, though.
I'm basically just setting up his definition :
Spawnifmissing to false
And lock his schedule to
HasSeenEvent: (event code)
At a cursory glance can anyone let me know what I'm doing wrong? Otherwise I can send more detail. Thank you 😭😭
you shouldnt change his SpawnIfMissing, leave it unset/true. dont lock his schedule behind anything either. Set his UnlockConditions in his character data instead. it takes a GSQ, so you can use a GSQ to check if the host farmer has seen the event in question
Ohhhh! Okay okat I will give that a go. Bless 🙌🙌🙌
the "host farmer" bit is important too, you can get very weird and buggy messes if two different players have different unlock states
You also gotta sleep
Ohh the host thing. Didn't consider that.
Npc spawning is overnight or save load thing
"Target": "Data/Shops",
"TargetField": ["SeedShop", "Items"],
"Entries": {
"IMS.FS.RainGear_RainHood": {
"ItemId": "IMS.FS.RainGear_RainHood",
"Price": 15,
"AvailableStock": 1
},```
It's an error item in the shop 😞
can you also post the FS code
The hat.json?
also oh yeah, if they're hats/pants/etc. they need the qualifier (ie. (H))
Oh yeah, in the ItemId?
yes
right now your item ID is unqualified so the game tries to find an object ((O)) with that ID instead of a hat or pants or etc.
does the top Id need to match the item id?
that's the entry ID which doesn't really matter (though you should also set it)
time to check your FS code then
guys i only played vanilla do u recommend stardev expanded
conditions.json:
"HoodDown":[{"Name":"IsOutdoors","Value":false},{"GroupName":"RainOrSnow","Value":true}],
"HoodUp":[{"Name":"IsOutdoors","Value":true},{"GroupName":"RainOrSnow","Value":true}],
"RainOrSnow":[{"Name":"IsRaining","Value":true,"Independent":true},{"Name":"IsSnowing","Value":true,"Independent":true}]
}```
hat.json:
"Id": "RainHood",
"Name": "Rain Hood",
"Format": "7.0.1",
"FrontHat": {
"HideHair": false,
"StartingPosition": {"X":0,"Y":0},
"HeadPosition": {"X":0,"Y":-2},
"HatSize": {"Width":20,"Length":20},
"AllowRecolor": false,
"UniformAnimation": [
{"Frame":0,"Duration":100,"Conditions":[{"GroupName":"HoodUp","Value":true}]},
{"Frame":1,"Duration":100,"Conditions":[{"GroupName":"HoodDown","Value":true}]}
]
},
"BackHat": {
"HideHair": false,
"StartingPosition": {"X":0,"Y":40},
"HeadPosition": {"X":0,"Y":-2},
"HatSize": {"Width":20,"Length":20},
"AllowRecolor": false,
"UniformAnimation": [
{"Frame":4,"Duration":100,"Conditions":[{"GroupName":"HoodUp","Value":true}]},
{"Frame":5,"Duration":100,"Conditions":[{"GroupName":"HoodDown","Value":true}]}
]
},
"LeftHat": {
"HideHair": false,
"Flipped": true,
"StartingPosition": {"X":0,"Y":40},
"HeadPosition": {"X":0,"Y":-2},
"HatSize": {"Width":20,"Length":20},
"AllowRecolor": false,
"UniformAnimation": [
{"Frame":2,"Duration":100,"Conditions":[{"GroupName":"HoodUp","Value":true}]},
{"Frame":3,"Duration":100,"Conditions":[{"GroupName":"HoodDown","Value":true}]}
]
},
"RightHat": {
"HideHair": false,
"StartingPosition": {"X":0,"Y":60},
"HeadPosition": {"X":0,"Y":-2},
"HatSize": {"Width":20,"Length":20},
"AllowRecolor": false,
"UniformAnimation": [
{"Frame":2,"Duration":100,"Conditions":[{"GroupName":"HoodUp","Value":true}]},
{"Frame":3,"Duration":100,"Conditions":[{"GroupName":"HoodDown","Value":true}]}
]
}
}```
🥺
👉 👈
You will want to ask in #modded-stardew. This channel is about making mods :)
Building Shift, lets you shift buildings in any direction (for e.g. half tile placement)
ok sorry
!json Can you share the rest of your CP json too 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.
it seems like your item id is literally just RainHood?
try (H)RainHood
though I recommend making it more unique of course
I am finding these docs extremely confusing, but I think there needs to be more data than just a hat.json and a CP shop patch for this to work 🤔 Like the Item Properties need to actually be added to the FS side, I think?
yeah it's fs side data
the fields seem to match
(also I'm sleeping in 5 min so i wont reply)
The docs say it has to be in an "Item" field though which theirs isn't?
Well, I managed to compile a c# mod again in Android using Termux lmao
that is truly phenomenal, nice one!
This is so validating 😂 They're hard to follow, hey?
Yeah there's a bunch of information there but not a lot of links between it all to provide context for how and when to use it lol
Registered trigger type for Data/Triggers: DopeFlamingo_UpdateTicked.
Kinda proud ngl
Did Selph's suggestion work?
It didn't 😞 Current ItemId is '(H)RainHood'
The hood appears in the Hand Mirror, so it's in there somewhere
Just not in the shop
So I think that's the missing link
Might be worth looking into what I said then, maybe? About adding an Item field into the hats.json and adding the fields from the Item Properties page to it, then using the ID field from there in the shop.
Oh, sorry for not acknowledging earlier! I'll try that - mind sending an example of what you mean?
Hmm, on re-reading it looks like you might not need to add it directly to the hats.json because it autogenerates an ID. Instead it looks like you need to change your CP side so instead of an ItemId of (H)RainHood in the shop you're using "ItemId": "IMS.FS.RainGear/Hat/RainHood/Item" (if I'm correct that IMS.FS.RainGear is the unique ID of your FS pack).
(Please bear in mind I have never made an FS mod. Never even edited one. I'm just going off what I can interpret from the docs.)
I will not hold you liable! Thank you for holding my hand!
I have tried this entry for the ItemId and it returns an error item in the shop
Hmm. Is IMS.FS.RainGear your FS unique ID?
It is!
Drat
That mod that Pathos made - was it intended as an example for you for how to get your FS item into a shop?
I thiiiiink it was about items in FS being "real" items now, like findable in Item Spawner? It was back in Jan so it's a bit hazy now
From Pathos, back then: "The whole idea of the new Fashion Sense feature is that they're still regular Content Patcher items, but they have metadata which lets Fashion Sense hook into them."
And I'm pretty sure that's where I lost the trail
If I am understanding correctly, where you are going wrong is that you don't have the CP item.
That's sounding right, now that I've found another github manual 😂
Yeah
I've been going back and forth between that page and the item properties
I think they are supposed to be connected but Peaceful doesn't actually make that connection anywhere in the docs
You're actually my new best friend
If you copy what Pathos made I think that will help (excluding all the dynamic and local token stuff, that is just unnecessarily complicated for what you need).
I really only need FS for the indoors/outdoors trigger too! Do you think Pathos is sick of people asking for that condition yet?
(By the way, may I recommend that you add the {{ModId}} token more consistently to your mod. You have some things unique but then others are not.)
I only just managed to get it working with the boots! 😅
If I get the mod working tomorrow, I'll replace everything with dynamic tokens
Promise
No need for dynamic tokens!
Haha they are all tokens but ModId is a built-in Content Patcher token, while Dynamic Tokens are ones that modmakers create themselves inside their own mod.
Of course, that makes sense! Thank you!
I have annotated your json to point out where to add {{ModId}}_ in front. I've also pointed out places where you should remove any spaces from the ID, and one spot where you can remove the update field because it's negatively affecting performance for no benefit.
Quick question: In the Seasonal Hats mod, the TextureName dynamic token value is: "Mods/{{ModId}}/Seasonal_Hats" but I can't see the underscore asset 'Seasonal_Hats' anywhere? Is it automatically parsed?
Let me just open it up
I'm not quite sure what you're asking, sorry. (I also really don't know why Pathos bothered with that dynamic token when he only used it twice.)
He's used that dynamic token only twice, in these two patches. The second screenshot is what those patches would look like if he'd just put the value directly into them instead of using the dynamic token.
(I don't think that's answering your question, but I'm just explaining the token in the meantime lol)

