#making-mods-general
1 messages Β· Page 352 of 1
If u show nerds cool art then more likely to get help 
Could anyone help with a crash reported by a FF user? The log ends with:
Fatal error. System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.at MonoMod.RuntimeDetour.Platforms.DetourRuntimeNETPlatform.GetFunctionPointer(System.Reflection.MethodBase, System.RuntimeMethodHandle)
at MonoMod.RuntimeDetour.Platforms.DetourRuntimeILPlatform.GetNativeStart(System.Reflection.MethodBase)
at HarmonyLib.Memory.GetMethodStart(System.Reflection.MethodBase, System.Exception ByRef)
at HarmonyLib.Memory.DetourMethod(System.Reflection.MethodBase, System.Reflection.MethodBase)
at HarmonyLib.Memory.DetourMethodAndPersist(System.Reflection.MethodBase, System.Reflection.MethodBase)
at HarmonyLib.PatchFunctions.UpdateWrapper(System.Reflection.MethodBase, HarmonyLib.PatchInfo)
at HarmonyLib.PatchProcessor.Patch()
at <something in Furniture Framework's Harmony Patching methods>
.
.
.
I can't provide a full log because the users didn't π
My guesses is either they don't have a proper version of the game, or their memory is messed up
Also easier cus we'd know what u want and be able to say "yea u can do xyz with just vanilla" or "no you need abc framework but u can do it without c#"
Classic harmony bug nothing to do here
Tell them to restart and see if it persists
(this is the AVE thing people bring up here)
Other things include uninstall or install random c# mods
Sometimes it just works
I've got one user dropping a log chunk (poop lmao) without context, and another saying they have "the same issue", providing a log that cuts off during harmony patches and they say that this crash happens basically randomly (happened many times) with different amount of mods (including MRPs)
I have to figure it out myself still
Weird for it to consistently reproduce hm
It also normally not an error that appears on the log at all
not consistently mind you, but it does happen a lot according to them
Since it would just crash smapi before it could do anything
Yeah i would recommend have less c# mods
But get a harmony summary if you can
I'll see if they even follow up on it
Did you have a invisible Building later tile
Also, the farm cave entrance is a map property, did you change that
Whoever that was pls don't delete your messages
I'm trying to edit and make a room in the saloon for a custom NPC I'm making and I was wondering how I can start doing that. I've looked on the wiki and it just confused me more so
See how you go with this tutorial? https://stardewmodding.wiki.gg/wiki/Tutorial:_Map_Patches_and_Warps
hi, i have two dialogue expansion mods for CP and i'm trying to make them both work together instead of one overwriting the other, i was told i can make use of the randomization feature
the first mod i had to convert specifically with a tool, the second one is native for CP, however i can see that both mods have lines for, let's say, Mon2
how do i go about ensuring both mods' lines show up
for the first mod i specifically ticked the option to make it compatible with the base game lines so that both show up and so far it seems to have worked
(i think)
I looked through it and started to see that it was for making a building that was based on another character, I just want to see if I could edit the Saloon room like you would your house. I tried to see if it would work but it was based around the outside rather than editing an already established building's interior
editing a map is the same process no matter what map you're editing
only difference is your CP targets
In theory if you wanted the mod, another mod, and the base game to all have a dialogue line for the same day/key you'd likely have to make your own mod/edit that includes all three dialogue options for that day.
Personally I use {{random}} as a token for my dialogue to pull multiple lines
In your example if you had the three lines:
Mon2: Hi @!
Mon2: You're cool!
Mon2: Today sucks...
From vanilla, mod 1 and mod 2, you could make your own entry that does
Mon2: {{i18n:Mon2{{random:1,2,3}}}}
Where your i18n tokens would be
Mon21
Mon22
Mon23
Usually I put an underscore between my random and the token so that I can differentiate things (so {{i18n:Mon2_{{random}}}} )
Oi im doing this on my phone so formatting is hard sorry
i see, this looks like it's a bit out of my league since this is the first time i'm doing something like this and i don't know my syntax well, my friend feels that mod #2's lines are more important to her, so what i can do in theory is rename mod #2 so that it loads later than mod #1 and then the same entries will be won by mod #2 and be overwritten, is that correct?
if i understand SMAPI's mod load order correctly
I do believe patches are done in order of loading when it comes to dialogue (unless I'm misremembering)
and they're loaded alphabetically yeah?
so if mod #1 starts with A and mod #2 starts with B, the latter will win events with its lines
Honestly im not 100% sure in this case, i think adding one of the mods as a false dependency might also work but I can't remember for sure right now π€
(these are the mods and their names)
Iro save me iro
yes and no. This is true but there are also a lot more ways to change things, like false dependencies and patch priorities (the ideal way)
yeah so this is my first time doing something like this and i know nothing about modding SDV
which two mods are you looking to change the order of?
so i got Stardew Valley Gift of Gab - Marriage Candidate Edition, and Over 75 New Dialogues for Shane, where the former i had to convert to CP with XNB to CP Converter, and the latter's lines my friend prefers to have in the game over any others
and they both seem to contain some lines for the same day/occasion
did you also convert shane's new dialogues? it's also an xnb mod
they have a CP version that contains the .XNB file, i didn't make use of it
like if you download it it contains both content.json, manifest,json, and Shane.xnb
ah, I see. The easiest way for your own personal use is to go into its manifest.json and add a dependency (give me a sec and I'll send the exact instructions)
there's no reliable order: it's directory traversal order, which is implementation-defined. on windows it's frequently alphabetical, but on macos and linux i believe it's inode order. like others said, you need dependencies or load/edit priorities to guarantee an order
hmph
aaaand wiki's down. give me a sec and I'll tell you exactly how to set the false dependency
can you explain what i'm trying to do here? am i trying to set Gift of Gab as dependency for Shane's, so that Gift of Gab loads first as a dependency, and then gets overwritten by Shane;s?
you need to both open the manifest.json file for Shane's, and before the last }, add a comma to the end of the line above it if there isn't one yet, and then add:
"Dependencies": [
{
"UniqueID": <the id you made for gift of the gab>,
"IsRequired": false
}
]
(replace the <...>, brackets included, with the ID)
not quite - you did it one line too high
undo it and do it on the line before the very last }
that last } is highlighted at the bottom in blue
is that not the one i needed
i input the block right before it
you notice how there's another } right above it?
you needed to do it below that one
so under what's currently line 18
So, I edited the room in the saloon, and now I'm trying to figure out how to make it usable in my mod
is this correct?
that feels like i did the same thing lol
You need a comma after the curly brace on line 12
Yep
this should work?
Yeah let us know if it doesnβt
yup, looks good
oh my god someone from this server dm'ed me asking about this message π i wonder what the scam is lmao
report them to bouncer
are they a digital artist trying to pay rent by any chance
they take your money and don't give you anything
i had two people do this to me one day after another, they had no idea what the content of the message was and i had less than two dozen messages in the server by that point; it's specifically the word you mentioned, they scrape for this (the one that starts with C lol)
no idea, they're still offline. their profile says they're a "modder"
wait that makes a lot of sense, Klip! I always wondered how they chose me that one time
mine had no messages on the server whatsoever so it was obvious they were scammers
Would it be possible to get an invite?
its just so funny to me that i went "ugh i keep getting art commission scams when are they gonna scam me with plushie commissions instead" and someone took that as a challenge π
This is why my DMs stay off xD
yea ofc
it did give me the best quote of all time though
10/10 would get called a little fool by a scammer again
Would love to join
oh wait, this one was the fake game scammer. the commission scammer just got lost trying to tell me when tf I asked for a commission
Anyone have any ideas on how to get this in my mod and how to have my NPC work with it?
oh, I was waiting for you to give details of what you actually mean
So, I have the map, I have my character, I have my dialogue for him, I'm working on the schedule, but I'm trying to start with where he will start during the day and I wanted to know if I have make another .json file for the map specifically
you don't ever really need to make another .json file, but earlier you said you edited an existing vanilla map, right? it's not your own new map
Yeah, so I edited the room next to Gus's and made it for my character, so what do I do now?
I assume you edited the unpacked map file in tiled?
Yes
I posted a picture of it in the making mods art channel if you need to look at it
right, next step is to read [[Modding:Maps#Getting_your_map_in_game]] and follow that
people in the comments of Over 75 New Dialogues for Shane say that there's an issue with a particular heart cutscene that prevents the player from selecting any options, is there any way i can figure out which one that is? i am assuming it's one of the following expressions in these "events" because i can't see anything that could correspond to a "heart cutscene"
i don't know what these symbols actually represent
i figured out that @ is the player's name
that's about it lol
the other events that aren't JojaMart and danceRejection are just for specific days
Maybe the extra $ after b in the second highlighted part.. i dunno
So, I figured out why the map wasn't loading in, because I haven't created a manifest json file, I just did, now I need to finish with making his schedule and working on his path which I have no idea how to do
Paths are auto, you just need to tell him where to go and when
You made at least one published mod right? Idm inviting you 
Sure! Thanks Chu :3
can i join too? π₯Ί
Sure 
π
hi, Better Things dev here... in the "ItemName" you need to put:
maat.BetterThings_BigShed3
Oh, I always wondered what that shortcut is for!
Could I also get an invite, please?
Added by Chu, thanks to them!
it would be weirder to me if it was, given that its invite only and also would be strange imo to have a modmaker community in this discord that advertises a different mod making discord instead
Oh cheers I'll try it in the near future
you can disable it if you want, in the mod config. ( I known it have an issue with the ring given by the Mystery Boxes ) Sadly i cant fix it my own..
Is this a good tutorial / template i can use? https://stardewmodding.wiki.gg/wiki/Tutorial:_Making_Custom_Furniture_With_CP#Making_Custom_Furniture_with_CP
This tutorial explains how to add custom furniture using the new 1.6 game update features and Content Patcher. The tutorial assumes you already have the game unpacked and that you have some basic familiarity with the Content Patcher format. The mods referenced as examples in this tutorial are Bonsaiβ¦
Looks good, but note that in the next game update, furniture data will change completely
it's updated for 1.6 it seems so yeah
the next update that Nomori mentions has no release date and may be months or years away, and content patcher will rewrite your mod to fix it
so I wouldn't worry about it
@woeful lintel
not sure why you're pinging them?
they told me to
fair enough, then, but if you plan on using their framework, then no that tutorial won't help
no, it would be only for CP
im learning the very beginning
or if there is a better source and template?
then Leroy's framework won't have anything to do with it
I don't know of any other tutorial or template
Leroy offered help earlier
Can I get in on this joining party as well 
im just setting your expectations, is all, so you're not caught off guard if the format is different
yeah i dont want to use FF yet, im just so lost in the vanilla idk how to put files in folders and how to write code for them
a CP-only furniture is a lot different from a Furniture Framework furniture
but if sticking to just CP then that tutorial seems fine
okay i will try something
!startmodding
Making mods can be broadly divided into two categories:
- Content packs are formatted text files, and don't need any programming knowledge. They can add/edit NPCs, maps, new items, shops, and more. To get started, see the list of framework mods, the wiki tutorial for Content Patcher, and there might be relevant guides on the tutorial wiki.
- C# mods use programming code to change fundamental game mechanics. See getting started with C# modding.
Usually itβs easier to start with making content packs, since you don't need to learn programming.
this info will help too
ty
I want to add those choices during dialogue, but I have no idea how to do that.
one more question, it would be the easiest for me to take an existing mod and keep the structure, just replace the pictures and the specific details, but is it ok?
Yeah, I want to have choices because my NPC is a bit of a Yoba sceptic and I want to put choices in it
As far as you will change the code, I don't see a problem there!
In fact, it is pretty common, I'd say.
if it's a very basic mod there's really not many ways one can add furniture anyway
if it was a larger or more complex mod and you just copied it all and tweaked it, then it's more frowned upon
So are you wanting questions in regular dialogue that happens when you talk to the NPC? And do you want those questions to impact other dialogue lines?
yeah something very basic, i already made a scarecrow mod like this but i want to understand what im actually doing and not do something not allowed
if you didn't plan on publicly releasing the mod, you could do whatever you wanted anyway
This might help?
https://stardewvalleywiki.com/Modding:Dialogue#Question_example
Copying vanilla and changing the data as a start is fine
I want the questions during regular dialogue and for it to slightly impact the friendship level
but if you do plan on releasing it then yeah just using a small mod as a learning template is fine, as long as you understand what you're changing and it really is a small mod that doesn't have like, a creative touch to how it's set up
its already on Nexus XD i got permission from the owner/artist tho (it featuers a character)
but the code was taken from a similar mod, if i need permission for that too
Is that the mateo scarecrows mod
yeah
depends on how much of a creative touch the mod has, really, which there is no defined criteria for
but one cannot own the ability to write an Edit data patch
it was very basic
right, okay
It'll be great trust
so far i cant assess how creative a mod is
there is a Mateo plushie already
The mental image of an npc on a table is funny to me
im vague on purpose because it's a vague and subjective thing that I'm not qualified to speak on legally, nor do I know what people consider the limits to be socially
Isn't the case that controls this Google vs Oracle
some people have very complex patch setups with custom dynamic tokens and includes and yada yada and copying that wholesale without permission tends to leave a sour taste in people's mouths
omg okay i run from that XDD i think i will take two mods i find easy and compare and see what i can use of that
someone who's mod consists of one EditData to the furniture asset and a folder of pngs has no reasonable claim to that
alright, i feel better XD ty
Sorry, I'm gonna be sitting here asking a lot of questions. So, how do I set up the portraits with the dialogue? I have a whole seven pages of dialogue for my character and I'm putting it in my dialogue.json file, but I don't know how to set it to put it in the portraits and dialogue boxes
Portraits are triggered with portrait commands
Use npc data to define the portrait texture, then use the portrait commands to change which "mood" is displayed
^
No command means neutral or the first portrait, $h is happy, and so on, you can find that on the page that Dennis linked as well under portrait commands
You can also use $0, $1, $2 etc but standard is to use $h and such, as vanilla has the first six portraits pre defined as to what they are
Anything beyond the sixth portrait will be $6+ (with 6 being the 7th portrait since the index starts at 0)
So if you had a dialogue line that says "It's so good to see you!" And you wanted them to be happy, it would be "It's so good to see you!$h"
Thanks
Also make sure your portraits are laid out in that format if you're going to use the vanilla layout (they should be anyways for potential default lines.. dont be like me and not realize it existed and then have to go in and change every generic dialogue line)
200 downloads! π₯³
Not a lot compared to the top for the month, but Iβm super grateful that people took time to download and try it anyways πβοΈ
congrats!
(For graphics category)
Soooo, I may have made them all separately instead of in the vanilla way
You cant load portraits like that unfortunately, what you'll have to do is put them all on one canvas - each portrait should be 64x64 pixels, canvas should be 128(width)Γ64 times however many portraits you need length wise
So if you had 5 portraits your canvas would be 128x192
Okay, I have six portraits and I am currently trying to figure out how to put them on a canvas, because the app I'm using is a bit finicky
What are you using?
Pixel Studio on Steam
I think pixel studio is free so you could try that, its what I used to use before - WELL
All you have to do is make a canvas (it'd also be 128x192 though you can make it bigger if you may add more portraits) and then have the other portraits open and copy the pixels and paste them on the new canvas
I think they can be wider if you wish to Sow Confusion and Chaos (dont)
How do I copy them and paste them to another canvas?
Please chu please no
You select the pixels and then cntrl+c and then cntrl+v on the other canvas
So, this would work, right?
Yep! Im not sure how to do it on pixel studio any more but you'll want to make sure each portrait is within the bounding box of the 64x64 or else itll be messed up in game, but from what I can tell they are lined up !
So, with everything I have, what would I put in my dialogue.json for the bouquet and pendant acceptance and rejection?
Not using my laptop rn so I canβt link but the keys are in the dialogue wiki
i think the dialogue keep for bouquet is just AcceptBouquet, reject has a bunch of options i'll link https://stardewvalleywiki.com/Modding:Dialogue
howdy all. i'm trying to make use of github and its branch feature so i can have my main branch be for PC, with a branch for android compatibility. first of all, is this a correct usage of branches, and second of all, how do i make it so that edits to files in the android branch aren't saved to my computer, but only to that branch? i use N++ if that helps
I dont know if theres a dialogue key for the pendant i cant seem to find it on the wiki
- I think its a fine use of branches
- How will the android edits not be saved to your computer if you edit them on your computer?
I recommend not doing this for your own sanity
that's my quandary haha. do i have to edit them on my computer, push it to the branch, and then undo my changes so that i maintain my PC-safe copy?
You just switch back to the main branch
Then the files on ur pc are magically the main branch ones
the android compat actually isn't that hard, if that's what you mean. it's just removing BETAS-dependent things, of which there are only 2
I thought your mod is cp only anyways and the not working betas stuff are unused
I mean so long as u rmemeber what branch ur on........
They can just ignore the betas errors and still use the mod
Is this not a c# mod
Not that im aware which is why im confusion lol
I see where ur opinions come from now
it's CP with BETAS as a dependency. i have two map files whose tile properties are a spacecore trigger action, the trigger action then firing a warp and a different sound than the door closing
i mean a repo is still helpful for jsons
Yeah im recommending against branching for android
If you really wanna do it i would put the betas related stuff behind a include
So if ppl don't have betas for any reason they can still use your mod
In your manifest make betas an optional dep
it's tile properties though, so i'm not sure how i would section that off haha
You can use EditMap for that
Assign different tile props depending on whether BETAS is there
with a when hasmod condition?
yeah it's <property name="Action" value="spacechase0.SpaceCore_TriggerAction TreeWarp"/>
If it's not a tile action it might not even matter cus this just becomes unchecked data
This is spacecore not BETAS tho
the trigger action being
"Id": "TreeWarp",
"Trigger": "Manual",
"Actions": [
"spacechase0.SpaceCore_PlaySound leafrustle true",
"Spiderbuttons.BETAS_WarpFarmer handwrittenhello.dbda_CrystalVoid 22 26 2"
]
},```
Yeah just have 2 different edits for the trigger action
Target field in there and append the BETAS action when available
okay cool that's even easier than editmap
in content patcher, is it possible to just Include all of the files in a particular directory? or do i always have to list them out individually
oki good to know
oh, also can dynamic or local tokens override global ones within my mod?
like if i want to name them the same thing
I think u get bonked for this
i wanna override ModId to remove the .ContentPatcher suffix
what does this look like? a separate patch targeting the field in my tree warp patch? i'm confused by target field
is this bonk worthy
Yeah ModId is even more specialer
It's considered invariant and baked in real early
I mean u can just give up and AssetRequested everything
that sounds like a bad idea π
oh you are exactly who I wanted to find here what a coincidence :D
But yeah just define a dt not named ModId i guess
I just saw machine control panel has a requirement for GMCM Version 1.15.0, could you maybe take that out as gmcm is still broken?
Probably
yea π ill do that
just thought ModId would be more readable
I just have manifest builder bump the version
ah makes sense
I should just get my ui mods out of gmcm entirely
But yeah go delete the thing from manifest ill upload new version later
yeah I already did :D I was just thinking how I bet there's gonna be support cases coming from this at some point so I wanted to tell you already 
Fwiw I don't put gmcm requirements in the manifest usually
"Action": "EditData",
"TargetField": ["Data/TriggerActions", "{{ModId}}_TreeWarp"],
"When": "HasMod: |contains=Spiderbuttons.BETAS",
"Entries": {
"Actions": [ "spacechase0.SpaceCore_PlaySound leafrustle true", "Spiderbuttons.BETAS_WarpFarmer handwrittenhello.dbda_CrystalAndNiko 37 11 2" ],
},
}```
is this the correct way to target and edit the BETAS-dependent trigger action? i removed the BETAS and spacecore actions from the normal trigger action and made the action just `Warp`
u still need "Data/TriggerActions"
but u only need one of the 2 things between conditionally edit map warp and conditionally edit trigger action
{
"Action": "EditMap",
"Target": "Maps/{{ModId}}/YourMap",
"MapTiles": [
{
"Position": {
"X": 5,
"Y": 6
},
"Layer": "Back",
"SetProperties": {
"Action": "spacechase0.SpaceCore_TriggerAction {{ModId}}_TreeWarp"
},
},
]
},
wdym, as a target? and i was not going to conditionally edit the map warp if that's what you mean, just conditionally edit this trigger action
on your actual tmx, put the vanilla warp action
is there a reason for me to do that instead of what i'm doing? genuine question, i don't know the difference
well you want to make betas an optional dependency right
this one's just incorrect tho
{
"Action": "EditData",
"Target": "Data/TriggerActions",
"TargetField": [
"{{ModId}}_TreeWarp",
"Actions"
],
"Entries": {
"Spiderbuttons.BETAS_WarpFarmer handwrittenhello.dbda_CrystalAndNiko 37 11 2": "Spiderbuttons.BETAS_WarpFarmer handwrittenhello.dbda_CrystalAndNiko 37 11 2"
}
}
i think 
targetting into string lists is funny
oh and i forgor on both but now u can stick a When hasmod
do you always need both target when using targetfield? i'm still trying to figure out how to use targetfield lol
can i use content patcher tokens for numeric fields (in EditData's Entries)? like can i do
"IconSourceRect": {
"X": 0,
"Y": "{{Query: {{SomeToken}} * 16}}",
"Width": 16,
"Height": 16
}
```or does the type matter here?
and yeah, i assumed that was what the when hasmod was for lol
this works yep
oki good good
well, as long as SomeToken is a number
yea ofc
i have just discovered that Include + LocalTokens is a templating engine
i will do great things with this knowledge
I have successfully bullied stardew valley into letting me gift whatever non-object I want
"Target" is always required, and controls which asset you're editing. "TargetField" just specifies which entry/field you're editing inside that asset, so you need "Target" even if you use it
we just got a tutorial for that on the modding wiki! 
oo yay
u can do really fun and nested things with it now that it supports passing a single local token down the includes
further question about this: when does this get applied? i already have a conditional edit on this tile dependent on heart level. do i need to target both my base map (CrystalAndNiko.tmx) and my overlay map (CrystalTreeWarp.tmx)? should i do priorities or something?
"Action": "EditMap",
"Target": "Maps/{{ModId}}_CrystalAndNiko",
"FromFile": "assets/maps/CrystalTreeWarp.tmx",
"FromArea": { "X": 0, "Y": 0, "Width": 1, "Height": 2 },
"ToArea": { "X": 37, "Y": 9, "Width": 1, "Height": 2 },
"When": {
"Hearts:CrystalPalace": "10, 11, 12, 13"
}
},```
if its gonna be overlapping zone and assets/maps/CrystalTreeWarp.tmx is what has the warp action then put this patch after
altho if i was doin this i'd probably see about not even having assets/maps/CrystalTreeWarp.tmx 
the only things that absolutely require tmx include adding new tilesheet and adding animated map tiles
rest u can do all in json
hmm okay so... base map with default action (play dialogue), no map overlay patch. then two patches targeting the base map, one for when hearts level 10+, and then the next patch one for when hearts 10+ AND hasmod BETAS? and only one will be applied?
yea patches that otherwise have no priority will go in order
your situation is like this
Load map Maps/{{ModId}}_CrystalAndNiko
EditMap Maps/{{ModId}}_CrystalAndNiko When Hearts
EditMap Maps/{{ModId}}_CrystalAndNiko When Hearts AND BETAS
excellent, thank you. and the way to do 2 whens is with the comma for AND, right?
but yea what does assets/maps/CrystalTreeWarp.tmx actually look like
separate key in the dict
and is just me writing generic logic
it's literally two tiles tall haha i was 1) experimenting to see if i knew how to do a map overlay without copying the whole thing over 2) lazy about writing tile actions in json, preferred to use Tiled
oh that's much cleaner than i would probably end up making mine haha
idk if there's performance implications for tmx vs this whole thing
but i just like doing it here cus dont like xml
Each tile needs to be in its own { }, within the [ ] in "MapTiles": [ ] I think
its a list of {} tiles
gotcha. it would be cool if we could define a rectangle with width and height, but no big deal
the fact that i can set individual tiles is probably why no rectangle
So, I'm still working on the dialogue for my character and I can't seem to find the dialogue key for marriage and expecting kids and having kids.
OneKid and TwoKid are the ones for having kids, you can do _<random number 0-4> behind it to have variations
expecting a kid is a generic dialogue, I think?
yayayay he shows up in game
absolutely crushing marnie's windpipe here but thats okay
toothless omg
So the 'expecting kids' lines seem to be in StringsFromCSFiles, if that helps!
hmmmm i could make him into an npc
i did consider it but i wanted him to live on the farm
and i dont know how to do that without adoption
Could probably just move his position down a bit in that event xD
To not murder Marnie
i could make a separate mod where he's an NPC and he could live in the cove map i made
im gonna rehaul the entire adoption scene to make it custom so it wont be an issue when the mod is done HAHA
theres gonna be like 3 or 4 build-up events prior to adoption
Here are the expecting/kid-related lines in StringsFromCSFiles
you could try using those keys in your MarriageDialogueJx JSON and see if you can override them, but I can't guarantee if it'll actually find them there first instead of defaulting back to the generic ones there.
Okay
Everytime I see it, I'm reminded that I really should change the "can't you tell? You're pregnant" line for my personal games. xD
That's the last thing I'd want to hear as a pregnant lady from my SO in the morning. LOL
"Can't you tell?"
I get it, the way they speak is like, "no duh I know I'm pregnant, I'm the one who took the test?!"
The ONLY viable person I'd accept that from is Harvey, because as a doctor, there is a possibility he would notice the symptoms first.
Yesss, I would love for him to have a little cutscene like Rasmodius does in RRRR
I do need to know what the unique ID for the apartment mod is so I can put it in the manifest for my character
FireRedLily.NPCApartments
Thank you
(if you wanna check uniqueIDs, check manifest btw)
It's right there in my mod's manifest.json, yep
haven't they heard of morning sickness
Honestly, if they know before you get morning sickness and before they are told, I would have to question HOW. Other than in the case of a doctor who has an unfair advantage with blood draws. LOL
I'm just thinking of the male partner using that line while the female partner is hugging a toilet
Tbh if you do that you deserve to be smacked
So if toothless was a NPC you could roommate
The first time I got that message when I went to talk to Shane in the kitchen I asked "where is the smack upside the head dialogue option"
Where could I find a set list of coordinates for the town and the buildings?
The easiest way is to open the maps in Tiled or use something like debug mode or the debug ppp command to get the tile info
debug ppp will spit out the coordinates where your player is standing, but if you're between tiles, it's not super accurate.
Debug Mode: https://www.nexusmods.com/stardewvalley/mods/679
TO make a custom item that draws flavor from its input (ie like wine, jelly, etc) and color from that item as well, do you need a C# component?
oh i totally forgot about that
i cant remember if apples from SVE can be added as a roommate i feel like yes but i cant remember for sure
i might look at apples code
Apples is a roommate, also Mr Ginger and Dwarf.
lovely ill go poke around :D
that pregnancy dialogue coul dbe "Darling, isn't it wonderful, you're pregnant!" and then you can still slap him upside the head. Although so saying, SDV pregnancy seems pretty cruisy compared to RL.
I do try not to run the mines when expecting a baby though.
am i able to have npcs actually walk around on the farm? ive never had a custom npc as a roommate so i dont know what they act like
no they can't roam the farm, although I did make one spawn on the spouse patio, and it was buggy AF.
then i might keep toothless as a pet bc i think itd be rather mean to have him stay inside all day as a big dragon xd
you can replicate them roaming using MEEP or Custom Companions though.
(I did it with my kids pre-1.6. Was still a bit buggy though)
no, i needed a framework for color but i believe this is possible now in 1.6.14 or 15
hmmm okay then yeah i think ill keep him as a pet
I wonder if adding a qq to the dialogue would properly let you do this
i think ill make two mods one as a pet and then one as an npc but he never gets adopted just lives in the cove
and then you can bring him gifts and stuff that would be nice
I think you can make the preserveid field the drop_in_preserve
Not anymore
DROP_IN_PRESERVE
Then u can be like
MyFruit -> MyFruit Tea -> MyFruit Kombucha
Rather than having to do Tea Kombucha
man, why do i always fuck up the texture path for building skins
-# local tokens
they sell roasted errors in there
I mean, I feel like the Trash Bear would be right at home dropping down cooked meals from the bin
i really dont get why i keep messing this up? i copy paste my code and i copy paste the image name
so how is it giving me error
You've loaded the texture and aren't just using the filepath, right?

I made that mistake a ton of times with the NPC appearance textures, so I figured I'd ask. π
Thanks! Is there a good existing example that you can think of offhand?
Also, I'm hoping to have the ESR/ES 3.0 beta out end of next week.
wag simple mode has kombucha but thats quite a lot
(this question is not somehing I'm doing but I"m asking for a friend)
ah I'll tell them, they might have that mod!
oh i know
this one's simple
i think vanilla roe -> aged roe is this too
coolio, thanks so much
one day I might add cider back into the game
oh NM it already exists
maybe I'll make rhum arrange. First I gotta make rum though.
my event for some reason is not having the camera center on the tile i write it to be no matter where i set the x y coordinates oh and also does not make the farmer appear where i put them
the event runs everything else just not that
(how would you make rum in SDV, placing sugar in the keg?)
i cant believe how i keep falling for this
u can do it like take sugar in vanilla, switch to sugar cane if cornu
no
@golden basin latest version of Extra Animal Config supports GSQ on animal attack now, so you can condition it with something like SpaceCore's ring buffs + attack only if not has buff
I'm not doing the "trough can accept multiple items" unfortunately, it's too complicated when silos/autofeed is taken into the picture. You can do something like a crafting recipe that crafts any fish into "meat animal food"
also wow, the one time I'm taking a break from the channel 1.6.16 is out
I have been used as an example my life is complete now
can i ask someone about my content.json? it shows no errors but SMAPI ignored it, value is invalid, the token cant be found
https://smapi.io/json/content-patcher/afbc2464dfb14be0b3967c2b7bccf7ed
I didn't realize rhum arrange was French, I thought it was Malagasy in origin (and the name came because they speak French there). And here's me with already some French-esque NPCs... and essentially some pirates... Hmmm. Something to consider adding when I'm done with the other stuff.
this {{1}} and so on is getting treated as a token
idk what a token is, really
a token is a (set) of values 
actually I think sugar cane in the ill maybe gave me the byproduct I need
ModId is a simple one, it'd simply be acceptablefudge9000.Vases
oh i should have replaced that
nop
contentpatcher.dll will substitute that in for you
that is why you simply put {{ModId}}
can you give me an example of a correct line?
yeh molasses
"{{ModId}}_vase1": "{{ModId}}_vase1/decor/1 1/1 1/1/1000/-1/{{i18n: vase1.name}}/0/Mods\\{{ModId}}_vase1\\red vase"
thank you
Does anyone have a calendar for the game with all of the clinic visits that I can use to make sure I don't overlap my character's visit with another's?
aha the 1 needed replacement
which could be no translation ofc
just gotta make a i18n/default.json like this
{
"vase1.name": "Red Vase"
}
oh
also for anyone who cares I went back to the harmony mines for this; I managed to got the "add back hoedirt on daystart" solution working but then they weren't watered/DayUpdate'd
had to patch "natural dirt decay", "debris-based dirt decay", and "season start dirt decay" (the last one involves patching a predicate, funβ’)
and if i want to add more names, is it each separately in the brackets or all in one?
hello! I just hit level 25 which means that I can apply for the mod author role now! According to the rules, they said that I had to submit my request here to see if I qualify!
https://next.nexusmods.com/profile/hoshikuzunosora?gameId=1303 hereβs the link to my nexus profile in case it is wanted/needed!
@outer glacier
thank you!
{
"vase1.name": "Red Vase",
"vase2.name": "Another Vase",
}
aha thank you
Hey if anyone wants to use this building in a mod or something go ahead, just made it for fun last night and today
Aseprite file too
Yeah its got:
- Impractically thick rope
- Fish bucket with no lid
- 17 build code violations
- Pulley elevator
is it on a cliff to catch sky fish
Well the pulley elevator brings you down to the water
The cliff is for the epic view
oh yay, success! it works! ty again!
hi friends
I want to make a mod where there is no consequences for not being in bed at 2am. In the sense of you the PC do not pass out, but rather see the daily save/level up/profit, then continue to be where you are to the next day
is something like that possible?
night owl?
omg I'm so sorry when I was googling it I didn't see it!!
that one implements consequences, but the general logic is the same
you will have to do C# either way
I'll def check it out to see if it's what I'm looking for! thank you so very much I appreciate it

hi all - i vaguely remember someone saying there is a spreadsheet with modded npc festival location; does this exist or did it happen in my dream 
There is! I don't have a link on hand but I think there's a command or quote for it?
did some digging and huzzah! https://docs.google.com/spreadsheets/d/1q0j3BqE79_wDlTW43teNPEspudt29S0EmlKwL7PDUCo/edit?gid=1314484656#gid=1314484656 i think ive found it 
yipee!
It stops aligning right towards the bottom unfortunately
but I don't know how to even try to fix that, I haven't used spreadsheets for much
idk why, but it's completely broken for me. i dont see any red tiles at all except for the luau
Oh... yeah, I'm seeing that too.
I used this not THAT long ago and it looked fine until stuff stopped aligning
So, I got curious and I made an entire calendar based around who had a clinic visit because I wanted to give my character a clinic visit so I'll post the picture here in case anyone needs it for their own characters and to adjust schedules for NPCs
i did not know every clinic visit is on a Tuesday or Thursday
this is new information to me
hmm iirc maru works on tuesdays? so maybe that's why?
And the 18th of Fall is the only Thursday where no one has a visit and it's not on a festival day either
Hey all, I'm looking for some help on a personal mod I'm working on.
It's a reskin mod for the obelisks, and I discovered when I went to implement (after making my graphics) that the code I wanted to use won't work for what I want it to do. I'm hoping someone can suggest another option (besides manually changing the image I want to mod in the files every season, which would be a pain).
More full explanation:
I found a cute reskin with different seasonal looks for the obelisks, but I'm running with a bunch of mods, including Ridgeside, Mount Vapius, and East Scarp, and want all the obelisks to match. Someone else already did an additional mod to that adds a matching reskin for the obelisk from Ridgeside, and I tried applying that code to add my reskins for Mount Vapius and East Scarp. It worked for East Scarp, but not for Mount Vapius. Looking in the Mount Vapius code, the obelisk seems to be implemented differently, and at this point I'm definitely out of my depth on how to get it to reskin over the Mount Vapius obelisk.
For reference, the reskin-of-RSV-obelisk mod on Nexus: https://www.nexusmods.com/stardewvalley/mods/31684
!json post what you have? but Vapius's obelisk is just a regular building like the others, you're probably picking the wrong texture name maybe
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.
Here's what I've got:
"Changes": [
{
"LogName": "Obelisk",
"Action": "EditImage",
"Priority": "Late",
"Target": "Buildings/Scarp_Obelisk",
"FromFile": "assets/{{season}}/Vapius_Obelisk.png",
"PatchMode": "Replace",
"When": { "HasMod: |contains=atravita.EastScarp": true }
}
]
}
Oh, sorry, that's the East Scarp one
I've got Lookup Anything, so I know I've got the right name for the obelisk
I peeked in VMV's files, the texture name being used is Mods\\Lumisteria.MtVapius\\mtvapiusobelisk
so you need to edit that Target
Pro tip for any mixed C#/ContentPatcher modders out there: The behavior for setNewDialogue() with a nonexistent translation string is not what youβd call desirable. This will do what you want.
character.setNewDialogue(translationKey);
}```
there is also another function to just check if a translation key exists that I don't remember off the top of my head
I'm sure there is but I couldn't find it
also if you want you can modify this method to do text substitution in C# by swapping out βis not nullβ with βis string <variable>β
of course then you couldnβt just do a one-argument setNewDialogue but whatever
thereβs a method for that too
Could someone help me figure out why i can't run an event? it's in a custom location. Console just says the event can't be found. The location does show up (im in the map rn) but it just wont run the event when the target is Data/Events/locationname
did you load a blank.json to that location first?
oh i did not are they necessary?
either that or you can just write out the (location).json and load that without editing it
otherwise the asset doesn't exist before you edit it
the blank json is the better method as it allows tokens
true
Wooo, that worked, thank you!
sorry ive never used a blank json for anything ive always been able to avoid it
just create a json file with nothing in it but {} and Load it to Data/Events/LocationName with low priority
the json should contain {}
okay i will do that and try things out thank you!
So I was trying to validate my .json files and one came with an error, I'll send the link in a second message
missing commas on line 57 to 61
missing comma on line 127
So many missing commas
what editor are you using
I know next to nothing C#, but Iβm trying to fix a small issue I think (hope) I might be able to handle. Iβm using a framework that lets you inject portraits into dialogue via Content Patcher. The problem is, when I change a portrait conditionally, the change happens one day too late in-game.
For example, if I set the portrait to change on Wednesday, it doesnβt actually update when Wednesday begins. It only changes after I sleep and wake up on Thursday. However, if I quit and reload the game on Wednesday, the portrait updates correctly.
I'm guessing this is the part that determine when a portrait is loaded (again. know next to nothing, so sorry if I'm completely offbase). Is there anything I could change to make the portraits load properly? ``` public override void Entry(IModHelper helper)
{
Instance = this;
HarmonyInstance = new Harmony(ModManifest.UniqueID);
helper.Events.Content.AssetRequested += AssetRequested;
helper.Events.GameLoop.DayStarted += GameLoop_DayStarted;
HarmonyInstance.Patch(AccessTools.Method("Game1:drawObjectDialogue", new[] { typeof(string)}), prefix: new HarmonyMethod(AccessTools.Method(typeof(ModEntry), nameof(Prefix_OneString))));
HarmonyInstance.Patch(AccessTools.Method("Game1:drawObjectDialogue", new[] { typeof(List<string>) } ), prefix: new HarmonyMethod(AccessTools.Method(typeof(ModEntry), nameof(Prefix_StringList))));
}```
Oh u gotta handle invalidation
(thats just the ModEntry which applies the harmony patches and assigns a method to the DayStarted event)
(not where the portrait is actually chosen)
(So I am completely offbase.) π
we can link the sauce right, since it's on gh anyways
Oh I have the right to share it; I just worry about telling people to look at an entire code. But if you don't mind looking:
https://github.com/XxHarvzBackxX/StringPortraitFramework/blob/main/StringPortraitFramework/ModEntry.cs
yea it doesnt look like theres assetinvalidated implemented
yeah you would want to handle invalidation to call PopulatePatcchDictionary
(Tbh as I said earlier, I really do not like the idea of using the dialogue string to index)
Among other things, translations, etc
what is likely happening currently is your DayStarted event is triggering before CP's so you are populating your cache with the old version
other hack is to just put a low priority attribute on the daystarted event to have it run after CP, but wont solve locationchange/timechange CP patches without doing it properly with invalidation
one of my unfinished things does a similar crime, relying on exactly matching the event command as an index, since i couldn't find a better alternative
it stinks and i don't like it. maybe if everyone switches to the indirection in 1.6.16 (or the existing translation key thing we have now) it could work based on those
can always do the arguably simpler but also equally as fragile and use the CurrentCommand index
The difference between "atra is willing to do implement" and "atra has time to implement" is fun and games
helper.Events.Content.AssetsInvalidated += OnAssetInvalidated;
private static void OnAssetInvalidated(object? sender, AssetsInvalidatedEventArgs e)
{
if (e.NamesWithoutLocale.Any(an => an.IsEquivalentTo(Asset_QuestionDialogue)))
_qdData = null;
}
need a thing like this
tho hm this would require lazy loading pattern instead
replace _qdData = null with this.PopulatePatchDictionary() and Asset_QuestionDialogue with PATH and pretty muc hthere
lazy loading is great because it makes invalidation this easy to support ^
is it ok to load things in an invalidate tho
We again try to nerdsnipe the chue
modded assets need something to react to invalidation to cause a load
i didnt even finish gima and i have 2 days before button puts me on the isle of elba
smapi itself reacts to invalidation to do the propagation phase for vanilla assets
most of the time! SNF used to do it until you and kedi found the race condition, so i made it lazy
Anyways @devout otter I'm more or less willing to do a rewrite for you (for free) when my schedule allows
that reminds me I still need to do my invalidation diagram
Until then, I'm going to try to nerdsnipe sinz
I did the asset pipeline diagram but not the invalidation part to finish the loop
Wha? That's amazing, thank you very much! Please don't hesitate to DM or ping me if I can be of any help.
in the meantime dolphin
do u wanna try doing invalidation?
i support dolphin C# adventures
you may alsso try writing your own C# mod that patches that mod and calls its populate function via reflection, which is not at all easier but is more fun to suggest
Might as well!
I hubristically humbly suggest the common code I use to manage all my custom assets if you need example: https://github.com/zombifier/My_Stardew_Mods/blob/master/Common/BaseAssetHandler.cs
Smh. Am I the only person who refuses to iterate a hashset when I don't have to lol
tbh doing the lazy loading approach of setting to null and needing to always use a central handler to query the data and fetch when null, is only really needed if its an asset very infrequently read.
if its frequently read, just immediately setting the cache value to the new load value does the job fine
AssetReady is a weird lifecycle hook, and I'd only use it for other peoples assets
It really is tbh
yes but it vibes better

if you are the one calling load, reacting to getting the value is much better and safer
tho honestly i dont think theres a real diff between doing lazy loading to a field
and just go Game1.content.Load when u need
isnt it cached anyhow
with smapi there, there isn't really a difference
i mostly do it in case i transform asset later
you technically save a tiny bit of work, but not much, the cache is very early
Technically speaking there is overhead to asset name parsing
you can call it with the parsed name
But yeah. For the bulk of things it's finnneeee
Not Game1.content
ah yeah Game1.content is typed as LocalizedManager, though the runtime value is GameContentManager instead which does (and is LoadExact for the one where you feed it parsed names and whether to use the cache))
Anyways. I like lazy loads and I will not lie. All the other .... cannot deny
calling load one and saving it somewhere saves me the effort of passing in the right type name but that's not particularly relevant probably lmao
tbh an extension method into DataLoader would be a decent pattern
or skip the syntatic sugar and have your own util class do the pretty much same anyway
(im sorry we r bein nerds here)
Can you do a static extension method?
Dolphin go ahead you're actually modding
I'm eating dinner
oh right they are adding new extension method syntax, that makes searching the current/old way more annoying
(love that the first search result for that is a "no" from 16 years ago
)
morning, and...probably
$USE_PORTRAIT <npc name or asset> command for dialogue
the new extension syntax can do static extensions, not sure if .NET6 runtime will let it run though
I keep forgetting how old c# is and having to set time filters while doing research bc so much of it is ancient monstrosities written for wpf or asp.net
How old is it?
25
dotnet goes back to the early 2000's as a part of windows
It is not older than me, but thank you that's very flattering
public release is 2002-01-15
...but you're younger than Javascript I assume
but its slightly older as it was used internally in windows longer
I'm 29
i am also older than d otnet
(I don't follow, if this was for me
what's a dialogue)
I legit thought you were 26-27
Dialogue syntax!
Older than .net party, I guess
I mean, idk much about that whole system or whether that's new/upcoming/mod
Most people think about older or younger than drinking afe
Here, we ask: older or younger than dotnet
also I always forget C# predates me going to college, because profs acted like it was new
Dotnet can vote
And drink
wikipedia cites 'late 1990s' but the earliest reference I've actually seen is a June 2000 post, which does probably mean it had a development tail going into 1999
dotnet cant vote unless its registered to
I'm also older than Javascript
was originally called Next Generation Windows Services
anything newer than Java is cutting edge modern
I thought C# and Java were basically the same 
Anyways, as resident old (older than the sea or the stars, or perhaps a medium sized language model, or perhaps a normal age...) get off my lawn
They used to be
now I think about it, it makes sense they called it .NET during peak dot com bubble
(I have not used java)
New quote added by atravita as #6458 (https://discordapp.com/channels/137344473976799233/156109690059751424/1388333554156572743)
New quote added by atravita as #6459 (https://discordapp.com/channels/137344473976799233/156109690059751424/1388333556232622164)
oh no, my first quote probably
If you want something basically the same as java, there was J#
.q esca
No quote found. Wow, chat more, losers.
what's the oldest language yall use
mine is probably ||Vietnamese||
serious answer: Pascal
pure lisp is like 40's-60's
wiki says 65 years, impressive
Lisps are probably as old as speech tbh
the various permutations and variants aren't
Looks like scheme is 70s
GML, for the 3 of you that know what that is (ask casey about it)
Oh wait oldest not first
https://en.m.wikipedia.org/wiki/Geography_Markup_Language this one? π
That would definitely be java
I mean, GML predates C# by official wiki dates 
Verilog (1984)
so close enough
(wait no, it just redirected to game maker itself, so maybe the scripting was later)
the oldest (non human) language I use is probably html.
its older than JS (which I don't actually write), definately older than typescript (which I do write) along with C#
GameMaker Language, a proprietary scripting language used by Gamemaker
Yeah I figured when you said Casey 
Wait a sec this isnβt the off topic thread
Weβve escaped confinement
Oh oops
whoops
Thank you! So if I'm understanding this correctly, I can incorporate this to the start of the codes? And afterwards an asset request would call for this?
I guess HTML too if we're talking active use
(and pretending I still update my config editor)
The oldest language I can program is likely arm variant assembly
that thing I hear about when I tamper with nintendo devices 
The youngest I can program in was designed and written by one of my coworkers lol
Downloaded Tea's Recolor tool off github. It says I need to run the exe but.... I'm not seeing it
Looks like you downloaded the source and not the release
β¬οΈ check the Releases tab/page for the proper download files
these were the only two options
i dont know how
if you want to use that code as is, in your mod you'd create a new instance of BaseAssetHandler, pass it the type of the asset (in this case seemingly just a dict of strings to strings), instantiate a new instance, call RegisterEvents on it, and then every time you need data you just call .data on the instance you created
for your mod specifically I just want to show an example of how you'd add an asset invalidate event to clear the dictionary
Yeah, install requirements and then run main.py, assuming you have python already
(you can do pip install requirements.txt from command line and it should install whatever you need to run it)
i dont know crap about python
clicking the main.py does nothing
all the instructions say is run the exe. that's easy enough to do.... if i can find it
maybe tea took down the release. that's the only explanation i can think of
Alright, thank you. I'll try tinkering with this.
having found the tool, yes, they stopped using the exe due to licensing from the sound of it
/// NOTE THAT DUE TO CHANGE IN LICENSING FOR PYSIMPLEGUI THE EXECUTABLE IS NO LONGER AVAILABLE / SUPPORTED ///
welp
i'm gonna put this project back on the back burner then because i am not doing this recolor manually
where is the trash can asset sourced?
Aw yeah that did suck. FreeSimpleGUI can 1:1 replace tho
May not get new features but itβs a copy of the last open source version of PySimpleGUI
Have you checked cursors?
Itβs a meme but itβs also often true that if you canβt find it, itβs in cursors
it sucks to run but easy to write thats all i know
I blame windows tbh
doesn't seem to be in cursors
Is this trash can the outdoor object, trash can animation, or trash can the tool?
^
Wow that was a lot of requests to join SMC. Many of which did not ping me >:(

any and all, i was looking for outdoor obj firstly
cursors contains these, at a glance, though I imagine the maps sheets have one, etc
ugh, i missed those. thank you! still sifting through tilesheets
ah, here's the one in Maps/spring_town (and the other seasons), near the top
right, _town was probably the place to start
now it's festivals and whatnot
Pathos said no they can't because there's too much hardcoded logic relying on them being two columns
Wasn't it just not recommended for generic dialogue reasons
The Junimos have a policy of only including the other language Stardew servers as friends. And invite links are otherwise banned (last time I forgot that and tried to give someone a link to SMC here I got put in gay baby jail and DH had to free me lol). You have to escape the maincord atmosphere before you start getting the mutual server links.
For instance I had a hunt around and found that SBV and RSV both have standing SMC invites.
If by that you mean that your NPC will break in certain situations if you don't use the two columns...yes?
(Whoops soz I am on a pinging roll and you got caught up)
I'll DM you with the invite!
hi :) new to this. I'm trying to figure out how to give ducklings a unique texture (vanilla just uses baby chicken). my unsuccessful attempt looks like this
"Changes": [
{
"Action": "EditData",
"Target": "Data/FarmAnimals",
"Fields": {
"Duck": {
"BabyTexture": "assets/Animals/duckling.png"
}
}
}
]
}```
I feel like I'm missing something obvious but I can't figure it out :p
You have to Load ur png somehow
Commas
Not commas, trying to use a texture that's in the mod folder directly which isn't possible.
Commas are a pain for me, it's just a matter of putting them correctly
Ohhhhh
yea it parses fine
reading abt the load action on the cp readme taught me how to replace an image. is there another way to use it?
You just write your own Target instead of using a vanilla one. Such as "Target": "{{ModId}}/Duckling".
And then you copy that Target into your BabyTexture field.
The {{ModId}} part is not intended to be replaced, by the way. Keep it exactly as-is. Content Patcher will replace it with your mod's ID from the manifest.
ok sick I'll give that a shot, thanks !
Thank you!!! This is awesome do you have examples of how it looks in your document page?
Would it be possible to switch sprites depending on whether an event has been seen using a GSQ?
like prior to an event the pet uses one spritesheet, and then after the event, they use a different spritesheet
not using a GSQ, i don't think, since i don't think pets can use Appearance the way NPCs do
but you could do it with CP's When
something like this from my own mod:
{
"LogName": "Spooky Changes - Custom Asset",
"Action": "EditData",
"Target": "selph.ExtraAnimalConfig/AnimalExtensionData",
"Fields": {
"Void Chicken": {
"IsAttackAnimal": true,
"AttackCondition": "!PLAYER_HAS_BUFF Target CustomBuffIdHere",
},
},
},
thank you!!!
oh my god right this is what i was thinking of, thank you!
its actually not working correctly? i put the ring on and take it off and they still do not attack even when the ring is removed
there's a cooldown
when checking attack with GSQs to avoid performance issues
try waiting a couple seconds
yeah theyre still not attacking
"LogName": "Attack On",
"Action": "EditData",
"Target": "selph.ExtraAnimalConfig/AnimalExtensionData",
"Fields": {
"{{ModID}}_MaleMovoraptor": {
"IgnoreRain": true,
"IgnoreWinter": true,
"SpeedOverride": 4,
"IsAttackAnimal": true,
"AttackDamage": 5,
"AttackIntervalMs": 10000,
"AttackRange": 5,
"AttackMaxChaseTimeMs": 10000,
"AttackCondition": "!PLAYER_HAS_BUFF Current {{ModID}}_MotherOfRaptors.Buff",
"FeedItemId": "(O)684",
},
},```
and it was working before the condition? hmm
yeah it was working before
did u try debug gq !PLAYER_HAS_BUFF Current YourActualModId_MotherOfRaptors.Buff
so looks like if the ring is put on once, the buff just kinda stays forever
or?? ok idk what
!PLAYER_HAS_BUFF Current Fellowclown.TW_MotherOfRaptors.Buff | true```
and the result is true
let me try myself
well that means the condition is true = the animal shouldn attack
is it true even when you took it off?
yeah its true ith the ring off
hang on, I can reproduce now, I think I may have made an oopsie
π
yeah I was stupid, after testing the code I added a last minute change to check the condition right before the attack in case it changed midway, and I flipped the sign
@golden basin pls test this version
I uhhh can't at the moment I'm very sorry
no worries, you found the bug in the first place so I should thank you 
there's no rush
actually since I'm so confident that was the issue I updated EAC on Nexus too
Iβve been banging my head against what I thought was a frustrating out of nowhere bug but I think whatβs actually going on is that my setNewDialogue() is being overwritten by the rainy day dialogue before I get a chance to trigger it
whatever, I saw that it was working before so Iβll just move on for now
What are you trying to achieve?
for translations, if the word is something like "seasons" or "spring", which already exist in the game in stringsfromcsfiles and have translations, is it better to just do those automatically or is it better to make your own label and put it in your i18n
for some reason this causes a null return on Game1.getLocationFromName for multiplayer clients when outside the location 
{
"Action": "EditData",
"Target": "Data/Locations",
"Entries": {
"{{ModId}}_WildHavenCave": {
"CreateOnLoad": {
"MapPath": "Maps/skellady.WHF_WildHavenCave"
},
"DisplayName": "{{i18n:WHF.Cave.Name}}",
"DefaultArrivalTile": {
"X": 6,
"Y": 9
},
"ExcludeFromNpcPathfinding": true,
"ArtifactSpots": [],
"FishAreas": {},
"Fish": [],
"Forage": []
}
}
}
That seems fine in testing. Same PC but separate clients, my only change was "MapPath": "Maps/Forest", and the farmhand can getLocationFromName and/or warp there. I'd guess it's something like a name typo, loading error, or the farmhand not having the same pack somehow 
(the latter part can be ruled out in local testing, but yeah)
that's the thing, the farmhand can go to that location just fine and then getLocationFromName also returns a GameLocation
just outside of it the same call returns null
odd, since iirc that's how warps work anyway, but I did get a result for that before warping there
i am so happy
@vernal crest
sorry for the random @ but just wanted to say thank you so much
i figured out the mail thanks to your previous help, ive switched the mystery bag names to no longer have spaces and removed the event thing i tried to use previously as was recommended 
Is it hard to make a farmhouse map?
It can be, yeah. If you haven't made any other maps I wouldn't recommend starting with a farmhouse.
farmhouses are very janky - it naturally has a lot of issues that currently can only be worked around using other frameworks like MMAP or noclip mode. i would say a starter farmhouse redesign is on the easy end, but i absolutely do not recommend upgrades 1 and above for beginner mapmaking.
So the best map to start with is the farm? Or perhaps a brand new map for a npc?
farm maps surprisingly have a lot of moving parts. it is the easiest to make on account of you being able to just start by editing an existing vanilla farm map, but it may take a bit to figure out the code (especially editing Data/AdditionalFarms for custom farms) and map properties.
in terms of coding i'd say a regular custom location map (not farm, not farmhouse) is easiest
in any case, i suggest figuring out Tiled first before figuring out how to make a stardew map
oh, by "moving parts" i mean all the bits and bobs you need to figure out so they make a farm map work, not literally 
Ah okay xD
why on earth would Grandpa's Evaluation be patching to my Data/Events/EastScarp_Lighthouse file?
in any case, Modding:Maps is where you go for mapping basics in stardew
Here is where you go to for Location data, and this page has the special data required for custom farms.
If you ever need a relatively simple working example, you can take a look at my map Cliffside Cove for reference. it has no additional gimmicks, it is just a custom farm map with a custom farm cave and location data 
NM, might be a random line of code I accidentally incldued
It's a beautiful map and ty!
ahoy friends! can somebody remind me what the SMAPI command is to reload a pack? ^^;
patch reload <yourmodid>
thank you!!
Assuming cp
CP, yes
Hi all, I am trying to load a custom NPC location into the town map. So far I have:
created the house/interior in Tiled and saved as both TBIN and TMX
Editted the town map with my new house and where I want it
Started the code to load
However, I can't seem to get the house on the map. I am also unsure of what coordinates I need to use, if any. Here is the code I have so far:
{
"Action": "EditMap",
"Target": "Maps/Town",
"FromFile": "Assets/Town_Percy.tmx",
},
(the format, changes part of the code is already in the entire code, this is just the code piece thats nested in all of that)
Please let me know what else I need! I also have no idea how to make it so my character can "enter" the home once its loaded, to load the interior of the house as well
You also want a from and to to just patch only a part of the map
I usually do that on tiled but you can fo it on the content json if you want to
putting aside that you are yeeting the whole town.tmx, lets look at your log for errors first
Sure. here's the SMAPI log
Log found, uploaded to: https://smapi.io/log/0d1934a1982f48fe8350a9c4f2605503
Do you have an example code of that?
ah yes sve already got to town before you lol
do you have a Load targeting Maps/Town somehwere
nasty things those 
I don't but what I'm starting to realize is that I'm probably better off creating my own little area for this NPC lol outside of the town map
basically only 1 mod may (exclusively) load an asset
but many mods may edit the same asset
i do think extra area is better, but it's unrelated to getting your thing to work
So can I edit the SVE asset then to include my little NPC house on its town map? (sorry if dumb question, I'm very new)
JSON is a standard format for machine-readable text files that's used by Stardew Valley mods.
If you need help with a JSON file, you can upload it to smapi.io/json to see automatic validation and share the link here.
When making mods, it's recommended to edit your files in a text editor with JSON support, such as VS Code, Notepad++, or Sublime Text. These programs will check for syntax errors.
I would assume you use the SVE map to figure out where u want ur house to go but the code targets the vanilla town map?
yea (though personally i'd say check vanilla first
Tbh sve is big enough that I don't blame people for either supporting sve only or not supporting sve
People do that
It's fine
Is the wikiβs description of festival data inaccurate? It says that the game ignores a key without _y* if there are any corresponding _y* keys, but all the vanilla festivals have e.t. set-up and set-up_y2. If what the wiki said was how it worked, that would mean the first half of every vanilla festival was completely ignored. Does it mean to say the game just treats a key without a year as equivalent to _y1 if other year keys are found?
u can look at TryGetFestivalDataForYear
i think it is like
- count max num of years that have data
- take modulo of current year by that max
- see if theres a set-up_y[n] key otherwise use set-up
see thatβs what I thought, but that is not what the wiki communicates
I think itβs just unclearly worded
If year variants are defined for a key, the original key is ignored (e.g., set-up will never be used if set-up_y* entries are defined).
i read * as "the year now"
but yes it does mean wildcard in general so i get u
worth rewording a bit
people can do what they like, but SVE-only tends to have much lower download numbers since you're cutting out a much wider chunk of the audience vs. vanilla-only or vanilla and SVE compatible. If you don't care about numbers/have a lore reason to be SVE only, go for it.
just from experience, if you don't have a setup_y2 key, and only have setup, your NPC won't appear in year 2 festivals. I had to add _y2 setups to mine after 1.6 came out.
(Fetching mod updates for the monthly stats, and... what happened this month that led to 1,152 mods updated and 56 mods deleted on Nexus, and another 70 deleted mostly by two authors on ModDrop?
)
Two authors deleted 70 mods between them? Damn thatβs a lot
(On ModDrop, they were deleted by three authors: 51, 17, and 2 mods respectively.)
Who deleted 51 of their mods wow
what is the usual number of mods updated on Nexus?
Median or mean?
whichever
I expect a distribution that is like. Most people upload 2. Casey has like near 100
Median is a better measure
I don't track those stats, but I feel like the usual would be closer to <500 updated and <25 deleted? I don't have specific numbers though, I just noticed it this month because of the lengthy progress bar.
Oh, I misread. Sorry
Yep, 'updated' means any change to the mod (including the initial upload), except for deletion.
I suppose the 51 deleted mods by one author is an anomaly, are their mods all similar to each other? Or are they a variety
ahh, okay. in that case that number doesn't seem too large to me
the deletions by two people is a lot though. guess someone just wanted to delete their mod drop account
Yeah ^
Maybe it's just been an active month for mods; I guess we'll see if there's any difference in the final stats from the usual.
Oh true, it could just be school summer vacation.
wonder if it happens in past June mod stats too
51 deleted at once just seems like "author decided that moddrop is bad vibes"
Or "author quits modding, scorched earth"
What is the opinion on moddrop? Iβve never used it
Not sure if Iβve ever even visited the site
my opinion is I'd not change that
I don't like the ui it's too busy
Moddrop seems barely maintained and the ui is slow
Yikes
very slow site, and the staff are horribly inactive
"probably passable as a mirror site but don't make it your primary mod hub"
(or secondary... or tertiary)
That's my opinion anyway
June last year was right after 1.6-1.6.9, so we can't tell anything from that year. June 2023 wasn't much different from previous months and June 2022 was maybe a bit more active, but the community was also much smaller then so it's hard to tell.
remind me in one year to check if this June was anomalous
or not
does the bot not understand "one year"
Remind @Button in 1 year to statistics
Ugh I suppose, atravita (#6751770) (1y | <t:1782664598>)
Lowkey also interested in that
Itβs nice that the modding community has grown so much
i dont know who thats gonna remind atra but it aint me
remind me in 1 year to june statistics
DUDE!! Heck YEAH i can do that (#6751771) (1y | <t:1782664643>)
Can i see the stats for the last years?
and you can just search for from:Pathoschild Monthly mod stats time! for previous ones
i wonder what the current state of this is
It's cus they are bad compat
!xnb
XNB mods often break the game and are not recommended. See:
- using XNB mods for more info and a list of Content Patcher alternatives;
- reset your content files to fix problems caused by XNB mods.
For mod creators, see editing XNB files for help unpacking & editing them (including for use with Content Patcher).
it's like doing a content patcher Load operation on all the assets except you can't tell what broke and it's a whole thing to update or even uninstall them
And there's no reason to use em usually, if u come across one just convert it (and check if u need to edit things for new game update)
They will have a .xnb in them?
yes and you put them in your content fodler
don't think it will
Alrighty
Also Pathoschild, thank you so much for everything you have done and are doing for SV!!! ππ―β¨οΈππ
hey, im making a custom farm map, and im trying to add custom fishing zones, but they do not work at all
could you help me understand whad did i do wrong?
from what i read on wiki it should be done in content.json
but all i ever catch is trash
Could someone help me figure out what i need to fix?
This is my content.json: https://smapi.io/json/content-patcher/7aa7adbed630407db4401786d7731434
This is the warning SMAPI gives me:
Can't apply data patch "Stormlight Spheres > Include assets/itemsetup.json > Objects > entry #2" to Data/Objects: failed converting entry to the expected type 'StardewValley.GameData.Objects.ObjectData': Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List`1[StardewValley.GameData.Objects.ObjectBuffData]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly. To fix this error either change the JSON to a JSON array (e.g. [1,2,3]) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object. Path 'Buffs.Id'..
In the game, Stormbasket and Dun Sphere show up in CJB item spawner (the ones with crafting recipes, although it might be unrelated), but Infused Sphere doesn't even show up in CJB item spawner. Also, the two items that do show up don't show the sprites from the assets folder (they show the error π« instead)
your farm map is replacing Farm_Island but you're overwriting Farm_Beach's fish data
side note, but I recommend you use the additional farm system instead of overwriting a vanilla map
yea, i checked locations file, and farm was called farm beach there
i thought it should match locations.json
what's the Farm_Island load for then 
ah okay, hmm
well next issue is that you didn't add any fish into your location data
just empty fish areas
Hey all, when creating custom portraits for a custom NPC, do you need to have a .xnb file in the stardew valley game Portraits folder itself for your character? I got this error when loading my NPC: [game] NPC Percy can't load portraits from 'Portraits/Percy': Microsoft.Xna.Framework.Content.ContentLoadException: The content file was not found.
---> System.IO.FileNotFoundException: Could not find file 'C:\Program Files (x86)\Steam\steamapps\common\Stardew Valley\Content\Portraits\Percy.xnb'
^
So I do have a load code:
{
"LogName": "Base Portraits",
"Action": "Load",
"Target": "Characters/ena.bakernpcpercy_Percy",
"FromFile": "assets/Image/EnaSpritesheet.png",
},
You can just put in ur own mod folder
is there something wrong with it?
cant i get the fish from normal game places like ocean, river?
Thats for sprite
oops sorry, just a sec
It is asking for a portrait
{
"LogName": "Base Portraits",
"Action": "Load",
"Target": "Portraits/ena.bakernpcpercy_Percy",
"FromFile": "assets/Image/EnaPortrait.png",
},
I pasted the wrong one
LOCATION_FISH
check the unpacked Farm_Beach entry for examples
Buffs in your Infusedsphere entry must be a list [] of buff objects, not a single buff object
so [] instead of {}?
(I'm assuming you're doing fish areas from scratch entirely because you're wiping every fish field from Farm_Beach)
The issue is your intrnal name for the npc does not match to what you are loading
your {} must be inside a set of []
[ ] around the existing buff, like "Buffs": [ { "Id": ... } ]
just like Changes is a list [] with patches inside surrounded with {}
Iirc after you load in the portrait you have to also put it in your NPC data?
one more thing: you should probably use Fields instead of Entries, right now you're wiping all the other fields in Farm_Beach
which file do you mean, locations.json?
yes, in your unpacked content folder
i know there is "Fish": marker
but it doesnt contain everything that should be there
thanks to LOCATION_FISH, which is "get fish from this location instead"
[[Modding:Item_queries]]
I've fixed the buffs [] problem, but i still have a problem of the textures not loading
updated code: https://smapi.io/json/content-patcher/b28bbfd82d26429e942929e12ef6ce50
ive tried multiple ways of formatting it. assets/Spheres, assets/Spheres.png andSpheres.png
SMAPI gives ```[game] Failed loading texture assets/stormbasket.png for item (BC)KitN.StormlightSpheres_Stormbasket: asset doesn't exist.
[game] Failed loading texture assets/Spheres.png for item (O)KitN.StormlightSpheres_Infusedsphere: asset doesn't exist.
[game] Failed loading texture assets/Spheres.png for item (O)KitN.StormlightSpheres_Dunsphere: asset doesn't exist.
I changed the code now: {
"LogName": "Base Portraits",
"Action": "Load",
"Target": "Portraits/ena.bakernpcpercy_Percy",
"FromFile": "assets/images/Percy.png",
},
But its still saying the same message
(Moddrop came out publicly in support of IDF, so I suspect it's related to that)
What does your npc data look like
Here is a file showing it. This is in its own folder called "data"
heres my content.json file too, in case it helps
very quick and dirty chart (same deal, unique authors, 10+ mods only)
just realized the numbers werent put on the chart. ah well. just look at the json i guess lmao
a handful of people are off by a couple mods it seems but idk why and i didnt feel like taking too much time to figure it out rn. like i said, very quick and dirty Β―_(γ)_/Β―
Why are you loading portraits and sprites twice? Is this for two characters?
wow, I knew aedenthorn had a lot of mods but that's something seeing it in comparison 
potentially more, too, if aedenthorn has any content pack only mods, since this is only counting mods that have a C# component
She has a few that are content packs for her own mods, I believe
it's clear i need to make a 10th mod
there were about ~1300 authors who were cut off by the 10 mod minimum
that said given the aforementioned "off by a couple sometimes" error its possible that a few people with 8 or 9 mods were wrongfully culled
What does it look like if u exclude broken in 1.6
i dont know. the mod dump file i used doesnt have that information
i know the repo exists and is there but i already have all the stuff set up to read this specific file and this specific file only
I also wonder what this looks like for content pack authors
Mod dump has stats for that right
worse
(the mod dump does record whether a given mod folder is a content pack or a C# mod)
I can't download your file right now to check the character data (looking at this on mobile) but in case you missed it, the earlier comment was that your NPC's internal name (their ID) is missing the {{ModId}}_ prefix that your portrait target has. You may need to change your NPC's internal id / internal name.
The internal NPC name needs to match the NPC name used in the load target for its portraits and character sprites EXACTLY .



