#making-mods-general
1 messages · Page 301 of 1
the test_event.txt replaces all newlines with /
But the fact that you have to write it differently means it's more work at that end
the cost is i have to massage the final form into the event script at the end, but that cost is very low (my text editor is good at this job)
You can just do multiline events in json anyway
(not in real json)
rte saves me a lot of time overall, but it probably won't save most people a lot of time overall, which is why i said it's finicky
Yeah but the game is not in real json so...you wouldn't be writing events using debug rte outside the game context otherwise would you?
What do you mean by reinstall the files?
I don't do content anyway, and would write it in a C# multiline string to avoid the problem
i have a work directory and don't edit my files directly in my mods folder. installing them is not difficult (run make) but it's still a step and it takes place in a different terminal so it increases friction on the patch reload method
Are there any vanilla applications of RejectItem dialogue keys? I'd thought Elliott's reaction to sea cucumbers would've been it but it's still written to just give you back another sea cucumber after taking yours 
Dang, guess I'll just need to add one to test with then, thanks 
I shoould use grep more but I just use "kfind"
RejectItem doesn't count as a gift
AcceptGift counts as gift
Anywyas
"RejectItem_category_bait": "{{i18n:willy-rejects-bait}}$h", // magic bait
(Ignore the comment, it's wrong)
good point, atra. RejectItem won't reveal the gift taste in the social menu, since it wasn't a successful gift
I handed the man my bait one too many times while trying to crab pot
Well, what I wanted to see was whether RejectItem dialogue would be blocked by the daily/weekly gift limit since it's not counted as a gift 
Also I'm now looking at my example and I'm not sure mine is right (category..bait? Not a negative number?)
It has very high priority
category_bait is the automatic context tag for that category, so it's correct
// Wine - reject
"RejectItem_(O)348": "{{i18n:Sterling.Gift.RejectItem_(O)348.Marriage.{{Random:0,1,2}} }}",
// Generic alcohol - reject
"RejectItem_alcohol_item": "{{i18n:Sterling.Gift.RejectItem_alcohol_item.Marriage.{{Random:0,1,2,3}} }}",
Hey pathos is there a GSQ fork
the proposes 1.6.16 choose was a gsq goto
Tbh i see those as sufficiently different (especially for content modders not used to transpilers)
Pathos!
Plz!
considering the tentatitve 1.6.16 has forking as a concept being deprecated, its gsq goto or nothing at all
though the current proposal doesn't datamodel or change how preconditions work so the duplicate ids don't matter
Forking is what
other option is to just make them have unique ids and in a skipAction/final action set the other ids to seen
Oh that includes deprecating quickQuestion
Man, I haven't even learned any of this stuff yet. I hope 1.6.16 is not so far away as to make me put off doing event stuff in case I learn deprecated things.
So can you code pong with event scripts
I'm curious if you can infinite loop an event by goto'ing backwards
It's not like current commands would be deprecated, this is more of an advanced toy
Use if u need type thing
oh wait one of the explicit examples is an infinite loop for asking the same question until the correct answer happens
But the migration page explicitly says they will be deprecated
And to stop using them because they might break in future updates
I mean you cant stop using them because the alternatives also new for 1.6.16
though wouldn't be too hard to backport them
We got no release date for 1.6.16 either
Hence my "I hope 1.6.16 isn't too far away so I don't learn how to use quickQuestion and then immediately have that be deprecated"
tbh the bigger qol change is making all the vanilla events multilingual
What does that change for us?
the Data/Events folder will be a lot less busy
Yes that's true. I just made an English copy of the Content (Unpacked) folder where I deleted all the non-English files though lol
other qol is a bunch of hardcoded ccommands got deleted by moving their logic into the event itself using skipaction stuff
Hi all, does anyone know what tile sheet or sprite sheet or font sheet that the numerals inside the "money box" uses? I am trying to make a mod that changes its font. However, I can't seem to figure out where in the game are the numerals are sourced from. Any help would be appreciated. Thanks!
What?
Wait
Language agnostic I assume
Sorry, I parser "multilingual" as "French and English in the same event" (god that is a font nightmare)
Although it could be done
i think this might be in LooseSprites/Cursors, like everything else
I will have another swing at it. I will see what I can do. Thanks!
I wonder if this means the live in-game language swap mod becomes viable
Perhaps if there's multilingual daily dialogue too
It works
Now onto the choose thingy 
thank you so much.. i will try later 
Ooh, I like choose 
i do like it, but it's also funny that this is like the sixth or seventh way to do player choices /lh
Definitely looks like the most friendly option at least
I do prefer goto / choose / label over quickQuestions and its backslashes
but I also do like fork events
hmm i won't miss fork but i didn't mind a switchEvent
quickQuestion is hell... and I definitely don't say it just cause of the converter 
Wait... the quotation marks don't need to be escaped with with the choose command and labels...? Or is it just written like that in the migration example? 
label accept/
emote Willy 32/
speak Willy "Aye... I thought you would.$h#$b#I'll leave this door unlocked for ya... you can come drop off the materials whenever you like."/
goto resume/```
you will have to escape them
it isn't written with json/cp in mind
Oh thank god, I got scared when I saw no matches
my burning question about these examples with ends sprinkled in is does the index += 2 and continued execution thing still happen
i have an event with an early end and i had to follow it with nulls like so: end/null/null/... because otherwise it would continue executing 2 commands later during the end
Hi there. Is there a way to generate skill books. I've tried Hack and debug, but neither work. I am trying to test "book void" and "skillbook_4" audio dialogue. (I am doing voice-overs for Abigail and I want to make sure the volume is good.)
Ok, I just went to the 1.6.16 migration page and I just learned that "Instanced Static" are a thing in C#. This is now my top 1 hated language
No, scratch that, top 0
matlab is top 1 for an obvious reason
really? the page seems to infer that it can be found in mono game framework, maybe I misunderstood.
Even if it was xna/monogame still not a c# thing
Yeah, the quick question into a switch event used to be the goat
The issue was that it used to check every loaded assembly
And thus would sometimes hit steam's assembly and die
Is 1.6.16 going to make my event stuff I’m doing deprecated? Aaa
It will still work, it just might break sometime in the (potentially very far) future.
Oh that’s not too bad then
Chue, the instancedstatic stuff is reflection
Oh i thought you meant quick question switch checked assemblies
Just realized that the player isn't pixel aligned with its own shadow...
unplayable
How do I spawn something in a body of water ?
Trying to make a creature spawn in the water or under the water like fish do
If you just want them to be fishable look at location data
If you want them to move around on water tiles u can also just do that if the water tiles are Back layer or passable
If you're asking about our sea minster friend she's a specific subclass of Temporary Animated Sprite
wonders if stardew will ever get console mods

define "console mods"
A mod that exists on console
If content patcher, even a frozen version, existed on console it could happen!!!!
I feel like mods on the Switch version could exist with repacked XNBs right now.
Yeah, there's definitely a decent amount of content that could exist via repacked XNBs.
Even a stripped down SVE or RSV without the C# necessities could exist, I think.
As long as it doesn't use conditional patches or framework stuff, it'd work.
It's off an earlier discussion re: mod.io
And spawned slightly from the security discussion
And I was thinking well
Also my dear chue do you use sphinx
Not at the moment
I think I like it, I might use it for smd
question about Farm Type manager since i can't find a good awnser in the github read me.
can i have multiple settings files in the same ftm content pack? since i was wanting to have an modified forage list for the map in addition to the default ftm forage but only if a specific mod is loaded, and it seems ftm has a way to only load files if specific mods are present or not. im just not sure how to have multiple files able to be loaded.
oh no my question has summoned esca
FTM can't have multiple content files in a single pack. It can have multiple spawn areas in the same content file, though, with conditions that decide which area is active, like this:
"Areas": [
{
"UniqueAreaID": "Forage that's always active",
/*...*/
},
{
"UniqueAreaID": "Forage that's only active with Mod A",
/*...*/
"CPConditions": {
"HasMod": "Mod_A"
},
}```
or if you need one of the areas turned off while another mod's active, it should be something like this
"CPConditions": {
"HasMod |contains=Mod_A": "false"
},```
I. See. Okay thats not terrible. I had admittedly sorta assumed area ids were only for area delimited spawns which this isn't.
(map is small enough that it doesn't make sense to separate any further)
The "areas" list is basically just a set of rules; each one is limited to a single map, but multiple can target the same map, etc
I see. Cool. I was worried my question was about to spawn some forbidden knowledge or something
@uncut viper Would it be okay if I mentioned your mod dependency graph in my monthly Patreon post? Here's a rough first draft of how it'd look (let me know if you'd want any changes):
i wonder if it'd be confusing to have some no longer working mods there
Pathos, quick question while you're around and on the subject of dependencies.
Currently, the monthly summary doesn't account for framework mods that aren't used via ContentPackFor, does it? Can you think of any way it might be possible to account for frameworks like that?
(Asking for a friend. Definitely not myself in any way at all.
)
Possibly! Dependencies are a bit messier though. For example:
- a mod can have multiple dependencies;
- dependencies are often used to set load order or indicate a compatibility patch, rather than something actually used by the mod.
I'd need to look into how clean the data would be. (It's too late for this month's summary though.)
Would it be reasonable to assume that every mod which "Loads" a data model to a non-vanilla path, then every mod which performs edits to that path should be considered a dependent mod
I guess that also excludes mods that do their framework integration from CustomFields
Yeah... it seems tricky. I can't think of a clean way to account for all of those.
Feel free! Or if you'd prefer, I could do you one (subjectively) better: an interactive version I literally just finished touching up and pushing to my site. I've tweaked the visualization a decent amount since that initial graph in your preview; this new one has the edges weighted by dependency "stength" (aka required dependencies are a stronger link than optional dependencies, and contentpackfor dependencies are stronger still) as well as some more colour coding between the links to follow suit. So which one you like better is up to personal taste (though I personally like the new one better since I think it shows a clearer relationship between all the mods, rather than nodes just sorta spreading out just to fill up space).
It would only affect things going forward, and it would be a slow change, but maybe a simple:
"DataModelsFor": [
"Not.DHs.Mod",
"Other.NonFrameworkPackMod"
]
Cytoplasts...
Well that's just about the coolest thing I've seen in a long time.
Personally i think the straight forward "how many mods are dependent on blah" is still useful as a stat
(also that page does require like, at least A GPU installed to view I think according to the library's docs... bit of a rough time finding a library that allowed for smooth graph loading and viewing in the browser when dealing with so many nodes and edges, so it uses webgl i think)
Shows how many ppl use spacecore at least
Can confirm it's basically unusable on phone
yeah thats no surprise to me lol
Perhaps u can render static pngs
Tried loading on a potato, only saw spuds
Setup some cron job to do that once a day
i do still have the raw data as well so i can just put it in the same tool i visualized it with originally
eventually i will set up a "hey, i dont think your device can handle this, heres a static image instead" but i was already calling it a day for it with where its at now when Pathos pinged me, so...
Thanks! I'll go one better and just show both versions.
I was also gonna ask about that when Pathos posted the mod dump yeah 
I only need the ~200mb folders.json inside the mod dump to make this, not the other 66gb
I can add a separate download for the folders.json and mods.json files. They'll always be at the same URL and Azure Blob Storage returns the headers like ETag, so your tool could auto-update when a new version is posted.
could definitely set up a monthly cron job for that then, yeah! thatd be wonderful 
Exciting new frontiers of graph theory
also, in case you feel like changing the bit about unknown mods, i realized theyre not just deleted/hidden mods but just any mod that the mod dump determined was an "Invalid" mod (as opposed to "Smapi" or "ContentPack"), so it also includes things that arent typical folder structures (like replacer mods or mods with multiple mods inside them nested)
i can probably adjust it later to differentiate between those and truly unknown mods based on whether or not they have a ModPage url
That's insanely cool
i wouldve been done with it earlier but i think i spent a non-zero amount of hours just twiddling with the simulation setting knobs (there are many) to both a) find something nice and b) watch it go brr
aaand ive somehow managed to brick my farm map. i dont even know what i did. nothing about the map file name has changed or its location. but now it can't be found by smapi.
not sure this at all helps others understand whats happening. but log i guess.
tysm it worked instantly, the house is there and I can warp to it
you probably saved the .tmx when there were errors or missing tilesheets, as that messes up the gids (but also in the future use the smapi.io uploader)
according to that graph Custom Companions is above 100 dependencies already 
https://smapi.io/json/content-patcher/2604bc94006f4400a678f0296422db3e is my npcdata completely wrong?
(this is the other reason i took so long to get it done: just doing this forever)
huh. i didn't consider that itd break if the tilesets werent availible when saving. since they need removed before packaging the project.
never ever save a tmx when there are errors present! gotta add the sheets back in
i mean i know that now. and also im probally never doing another map after this disaster of an experience with it. whole things been a wreck from start to finish
if you click on "Dependents" on the left side when looking at Custom Companions you can see all the mods that list it as a dependency; many of them are actually the same mod, just different components within the mod
or different optional files but on the same mod page
Here are the stable URLs:
- ~~Full mod dump (68 GiB): https://smapistorage.blob.core.windows.net/smapi-exports/mod-dump.zip~~
- ~~
folders.json(263 MiB): https://smapistorage.blob.core.windows.net/smapi-exports/folders.json~~ - ~~
mods.json(158 MiB): https://smapistorage.blob.core.windows.net/smapi-exports/mods.json~~
(These were updated yesterday for this month's data.)
fresh data 👀 thank you!!
(Actually, maybe I'll rename it to exports since SMAPI is already in the account name.)
its too late ive already integrated those urls into my automated system, cant change em now /j
Figured out the setup with Mac which was less painful than I expected. For my job it's near impossible working with SQL and worse: WPF.
I'm curious how many duplicate image files exist in all the dumps
(ill figure out some automation later probably, but for now the site should be updated for april's mod dump manually now)
(Blob-to-blob transfer is pretty fast.)
(Now try between datacentres!
)
What does that mean?
i assumed they meant like, how many different mods include springobjects.png
I thought this was an Obsidian graph view at first, That's rad to visualize dependencies! Thanks for sharing
im glad its neat to look at!
The stable download URLs are now listed on this beautiful export page.
Each file has automatic HTTP headers like ETag and LastModified, so your server can send a HEAD HTTP request to fetch the headers and see if the files changed since the last time it downloaded them.
it loads instantly and that counts as beautiful in my books
i will definitely make use of this 
That looks fun!!!!
Oh, @uncut viper, you even added a light mode for me! /j
it was definitely just for you
(dont tell anyone but i actually use light mode on my site too)
(I just saw the link to the upcoming event command changes while reading through the backlog this morning and panicked when I saw quickQuestion on that list of deprecated commands.)
As long as I actually release my mod before that somewhere in the far off future update, it'll be fine, right? 😛
(i also never realized how many dependencies DSV seasonal outfits has
its got the most out of every mod at 97)
most of em are probably false deps for load order I'd think considering these are all nexus lists
sounds like a lot of compat work on their end
they for sure are, its just still more than i expected. i naively assumed the most dependencies a mod would have would be like, 50
Todo
!androidsmapi
There is an unofficial port of SMAPI for Stardew 1.6 to Android. Please see the wiki instructions for more information.
IMPORTANT: This is a highly experimental build and may be prone to glitches, bugs, or incompatibilities. We are not able to provide support if you run into trouble or compatibility issues; please use the discord linked on the Android SMAPI github.
Do not harass mod authors to make Android specific compatibility patches.
we dont provide support for mobile/android SMAPI in this discord, you should use the one for the smapi port
well, the fact remains that we dont provide support for it here (and this wouldnt be the right channel even if we did)
ask again in the android smapi discord and hope you get a response
its not an official SMAPI port and not maintained or worked on by people in here, so we don't know whats up with it or how to troubleshoot it
And that's enough of that.
insane behavior
(It's just deprecated, not obsolete. All events that use it will still work fine as-is for the foreseeable future even once 1.6.16 releases.)
I'm not sure there's a way to contribute/PR to the wiki but for Mac I think the Avalonia ilspy is not a valid option anymore. I'm about to test ilspycmd cli instad
that's good. I just learned how to use quickQuestion, so I was gonna be bummed if I had to unlearn that immediately for something else
what are the changes, a better way to deal with questions in event? some harmonised changes?
Yep, anyone can edit the wiki! You just need to create a free account and sign in (see top-right corner of the page).
Yeah, the Avalonia version of ILSpy is a couple of years out of date, and currently unmaintained.
The choose event command in 1.6.16 is the new universal way to show a choice dialogue box and (optionally) change the event flow based on 1.6.16's new event label feature. That replaces the 7+ older ways to do it (which the base game no longer uses), but they'll still work fine for backwards compatibility. See event changes in the 1.6.16 migration guide for more info.
"7" yeah ok i knew we had a few but maybe not that much
mandatory : https://xkcd.com/927/
where are the spouse portraits kept
the furniture? in the junimo furniture
(In general the base game is moving to a label-based event flow, where each event has any variations/forks/choices/etc entirely within the single event script.)
ah junimo furniture, thanks Lumi
Turing complete!
i don't really know what a label based event flow is except the tiny bit i saw about the goto thing the other day but i can definitively see the pro of not having to remember 7 different formats to "go to next event/offer a choice"
Tbh I prefer the old quickquestion into a switchevrnt methodology
(Atra, are you from xkcd 435 now?)
(it'll be also easier to understand the new stuff with the vanilla converted examples)
In 1.6.17 will we get turing complete events?
For example, let's look at the band event.
In 1.6.15:
The game runs a common event intro, then calls cutscene bandFork which (through a few hardcoded C# steps) injects one of these commands based on your previous choices:
fork poppy/
fork heavy/
fork techno/
fork honkytonk/
Each of those forks is then a complete separate entry (in a different location's asset!) which contains around 60 lines of mostly duplicated event code, where only the first 18 or so are actually different. If the game then wanted more variations within those, it would split off more forks which would then duplicate even more code.
In 1.6.16:
The game runs a common intro, then runs only the specific commands which are different from each variation:
<common intro>/
goto poppy "PLAYER_HAS_DIALOGUE_ANSWER Current 76" heavy "PLAYER_HAS_DIALOGUE_ANSWER Current 77" techno "PLAYER_HAS_DIALOGUE_ANSWER Current 78" honkytonk "PLAYER_HAS_DIALOGUE_ANSWER Current 79"/
label poppy/
<commands specific to the poppy variant>
goto finish/
label heavy/
<commands specific to the heavy variant>
goto finish/
...
label finish/
<common outro>
If the game then wants more variants within these, it just adds a label with goto or choose without needing hundreds of duplicated lines of code.
Can labels be used to create a "middle part" of an event, so that could be appended to for additional actions without breaking the start or end of an event?
(Yes I'm still thinking of the Egg Festival and the egg hunt section)
and if i'm reading right there is also now translations separate as the event command for vanilla?
If I understand correctly, yep that's the main benefit of labels. You can have diamond flows like this without needing to duplicate whole parts of the event script:
/--- variation 1 -\ /--- variation 1 -\
common intro --> question --> ---> condition --> --> common ending
\--- variaiton 2 -/ \--- variaiton 2 -/
You can have any number of variations within the script. For example, the Solarian Chronicles board game event is fully implemented using labels now.
(We're just discussing it abstractly here, so it'll be easier to grasp when you see it used in practice in 1.6.16. Many of the base game events are much easier to read and follow now, with much less hardcoded logic needed.)
(Please tell me for your own sake you aren't needing to edit the vanilla events by hand, and you have some sort of automation for it!)
(It involved lots of custom scripts and global regex replacing for the vanilla migration.)
(Whew!)
Yep. I guess I should make that clearer on the mod migration page.
My preference for the old switchevent system is because you could also do the same diamond schedule but it's broken into separate strings
Hopefully a bit clearer:
A good example is the .15 penny picnic event
Where depending on player choice it would switchevent to different subevents
But they would all switch event back to a finale
Doesn't the term deprecation imply that using those commands breaks?
(Here's how that event looks in 1.6.16. Essentially it does the same thing, but within the same script using choose.)
Maybe it's just me, but I think obsolete aligns more closely with "this is no longer the preferred way"
deprecation implies unsupported in favor of new alternatives to me
with the possibility of removal in the future
Like when I mark something for deprecation, that means by the time it's deprecated then it's gone
Deprecation and obsoletion have specific definitions; deprecation means it still works but is no longer recommended (and will often be removed in a future major version like 2.0.0).
Interesting, I didn't know that. I feel like most times I encounter that word, it has been the wrong usage.
On the bright side I think you've successfully obsolete event tester 
But I'll make a reminder to myself to support those cmds anyway
Oh perfect, I will add the console nuget I used which worked like a charm but on a wiki might need a bit of extra instruction to both not overshare nor overcomplicate.
Hey what dose this mean I'm trying to make a mod
These multiline events kind of makes me wonder if there is a usecase for Content Patcher to do edits to specific lines of strings
(Sadly the events won't be multiline in the XNB files; there's a pipeline extension which squashes them to single-line mode for efficiency.)
Ah so the data as it exists will all still be single line
Hi! That's a token, which Content Patcher will automatically replace. {{ModId}} will get replaced with the unique ID from your mod's manifest.json before the game sees it.
ok
@inland rain sorry for pinging you, i remember you said to let you know if we hear about requests for updates, not sure if this falls into this category but i'd love to see Craft and Build from Containers work with chests that are organized using Ultra Organized Chests
seeing how events gonna change and me already not liking making events this coming update is scaring me xD
(Anything you learn and do now will still work in 1.6.16. But if you learn the new approach when it releases, I think it'll make your events much easier to edit and maintain in the future. For example, you can just learn choose instead of question forkX + question null + quickQuestion + $q + $r + splitSpeak + ...).
speak for yourself, I don't need to learn the arcane multitudes of quickQuestion and forks and the like
but will it make chaos easier
Even if it ever does become obsolete, you can always count on Content Patcher to fix everything for you
Given that 1.6.16 is not yet settled this means I can delay my npc to 2028
well, I am always a sucker for things getting easier to do
i for one welcome our new event command overlords
who needs to learn new syntax when i can surely just ask chatgpt to do it for me the day 1.6.16 drops
barley will you help me implement an event turing machine
Discord needs to hurry up and launch their DiscordGPT trained on all of our conversations
i... i suppose with gotos and such we have control flow for a state machine??
hm, gotta scroll up and see if there was some sort of aprrox time when this update gotta hit or is it gonna be one of the end of moth update wave moments
exactly, we have all the tools we need to prove events are turing complete
Basically, to read event flow you need to know...
In 1.6.15 | 1.6.16
-------------- | ----------
question forkX | choose
question null | goto
question <id> | label
quickQuestion |
$q + $r |
fork |
%fork |
splitSpeak |
resetVariable |
switchEvent |
... |
if you mean 1.6.16 then there is no approximate time
It's a far off unknown future date
~unknowable~
Imagine if SDV updates adopted agile methodology and there was an update every other week
I would cry
Release early, release often, customer value, blah
we don’t need discordgpt anyway, we have ai cat pathos right here
good to know, i can stay in the pure ignorance land until then (just wanted to know since i still gotta do like 20 events for my mod and wondering if it was worth it to wait or just go and change things later)
/pathos "when will 1.6.16 be released?"
(Definitely don't wait for 1.6.16, since there's no ETA for it. The mod migration guide is just documented early to get feedback as we go and because it's easier than documenting everything in one go later.)
what do you propose our machine do?
universal turing machine ofc
Render and play pong
you could probably do it with some advanced moves
(I do have plans to de-hardcode the board game, so you could render a pong graphic to the screen through an event script and play using goto. I'd say it's a terrible way to implement pong, but someone implemented Doom through TypeScript types, so...)
Can someone code a stardew mod loader in stardew events data?
any time i try to do multiple advanced moves at once i face pain and suffering
i wager lack of memory becomes a problem
wait so what’s going on with typescript types that they allow that level of code execution 
Where is SDV redstone?
(Here's the video if you're curious: TypeScript types can run DOOM.)
automate
Automate doesn't have nand gates though
Yeah that project was insane. Doom using only types.
Lol, tried programming a "multitool" to select the first found weapon under certain conditions. It worked sort of, by changing every tool I hold into the first found weapon. Goodbye pickaxe, hoe and fishing rod, hello extra Obsidian Edges
Idk if hoppers are sophisticated enough
someone saw the haskell five queens post and took it as a challenge
It seems like Automate with hoppers should be able to accomplish logic gates
i question what we would actually DO with a logic gate in stardew valley without adding additional machines to autocraft and such
Somehow run Doom on Stardew Valley machines?
Look at Core Keeper for some ideas on how a 2d game might use logic gates, but tbh it doesn't really fit the vanilla theme
So anything would probably be lore breaking
You'd need additions like conveyer belts and sensors for it to have SDV applications
Binary adder
To me it'd be something like a do your own automate
A sensor has a charge when machines are in a current state, a collector when powered can grab the output, etc.
I would like the idea more if space isn't so fixed
But there was this old issue on automate about directional in/out right
Well I think the answer is we need an infinitely growable farm land
Procedurally generated side areas where you can buy the neighboring land for exponentially more costs
It can be called "Space: The Final Frontier"
hmm, what if to balance expansion we can have machines produce pollution as they run, and if you produce too much pollution biters attack neighbors go to your farm and complain
to defense against biters you can set up gun turrets bribe dispensers
What's the best way to only allow entry to an area once the player has paid a fee?
It'll pollute until you advance technology with Demetrius help for more greener machines
This isn't a topic I know much about, but mail flags maybe? @sour sleet
if you want to stop them permanently you can find and destroy biter spawners make your case at city town halls
you can add Unlockable Bundles and gate a map patch behind a mail flag that's activated once you pay off the bundle
Not sure how these help?
That's a good idea, thank you. Gonna try this 
(That's because you're supposed to wear them, not throw them.)
Can you only add bundles to the community center or add them to a custom location?
custom with UB is doable
Scythe being a MeleeWeapon is throwing off my masterplan
VMV has a whole set of custom bundles, as well as WAG
Ah that's good to know. Looking at the wiki made me think it was only possible to add to the community center lol
The wiki is about vanilla
Gotta look at the mod's documentation 🙂
There are some other ways to do it though
Like if you made a shop where you had to purchase a pass item
I was trying to avoid using too many frameworks but it's something I really wanna do
And then action on purchase set mailflag
This would let u make it cost money and or a trade item
Would it be possible with just a dialogue response?
Yeah, you could use a dialogue response to remove money
I want to say yes but it might get really big and terrible
would be much easier with event gotos
Blueberry had a thing where u buy an item via dialogue
it gets a lil bit messy bc you also have to check if they even have the money in the first place and it becomes an ugly ternary upon ternaries
but it should be doable
my feeling is UB is opening a lot of cool options, so it's worth it if you do plan to use some of those
Shops are for selling things...
source?
if it's not the case then some event trickery may be a better thing
Hmmmmmmmmmmm... Is there a way for me to get loaded data from content patcher before conditions are applied?
To provide a bit of context, I'm trying to figure out a clean way to get the full data from certain targets (eg Data/Events/Trailer or Data/Festivals/spring13 as examples) about loaded patches regardless of whether conditions are in effect, and pulling that data from the thing loading the data initially (CP) seemed far more efficient than externally scanning and parsing full mod folders, but a patch export for "Data/Events/Trailer", for example, would only show the data with the currently in effect conditions, as I understand it. 
Essentially I'd like to be able to either get the final state of the data content patcher is interpreting after applying the various mod patches but before applying conditions, if that makes any sense at all.
I dabble in C#, but am by no means an exprt. Tried to do some harmony patching to poke around a bit with CPs data, but it's honestly beyond my level, so I got a bit lost there.
I thought it might initially have the data i was looking for, since it has to load the patches before it parses them for the conditions, but since I hit a dead end, I figured I'd ask here in case anyone else had more insight.
You can observe the asset early and late (in C#)
The difficult part i think is that you desire some sort of contextless state
the only way to do it would be to reflect into content patcher and look at where it stores patches, otherwise the data does not exist as far as the game is concerned
What do you hope to see if i had some kind of mutually exclusive patch?
The closest thing you get to data prior to conditions is basically the vanilla asset
Otherwise, conditions are sort of a live concept, they are applied as they are relevant
Even the absence of a condition is technically a condition
Also you can have tokens in the Target 
So a patch isn't guaranteed to edit a particular target all the time
Perhaps better to ask what your desired effect is
I kind of think the only way this would be possible is if the idea about having patches work sort of like a docker layer was a thing
Content patcher only knows what it changes, and even then it only has it in a newtonsoft JObject data structure.
It can only stabilise to the correct data type once the asset pipeline runs to tell it the type
Patches exist in a quantum superposition of all states until observed, at which point the waveform collapses into an asset edit.
Also got the problem that some of the conditions arent just logical gates but stuff like "is the save loaded because it was using a token that needs the farmers display name"
Ah Schrodinger's patch
In this particular case, I'm essentially trying to find a way to obtain festival locations for NPCs in all their potential placements (Year variants, HasMod variants, etc.) in some sort of automated fashion, which means either finding a way to get some kinda JSON export the data before those conditions get applied, or getting a file listing of the patches that are being applied to the target prior to and parsing those outside of Content Patcher myself, I suppose.
I am probably overcomplicating things in some manner. 😛
patch summary asset "whatever" kind of gets me the sort of data I need as it tells me what is applying patches to that asset, so maybe I can work with that in some manner. 
If it's for data collection and not for normal mod usage
Yeah, purely for data collection. 🙂
You can just time travel to the days you are after, do a location changed so tokens update and then do the export
Automating stardew to get into the state that the festival data will be present will be a lot less painful than the alternatives
This means you need to install all the npc tho
See also: Event Tester mod, it's easier to automate stardew to just run the events than trying to static analysis them
I think there were efforts to update a spreadsheet based on the mod dump
That would work for the current state of things, but I'm also wanting to capture things like "changes location based on a hasMod", with well over 100 NPC mods is quite a task.
(Except in the upcoming 1.6.16, which adds static analysis support for event commands.)
This would be completely offline cus u r just read a bunch of content patcher mods with some magic knowledge about festival
I do want to hijack those c# attributes when I get my hands on them for the debugger mod
I think I can do some fun LSP stuff with them
Syntax highlighting, red squiggles, etc
Can GSQ also get it?
Possibly; it would certainly be nice to have unit tests for game state query fields too in the base game.
I would like ability for mods to mark their gsq as invariant
Or mark as always false/always true
I just need easy ways to know what the arguments are without starting to use harmony or the mono one to try and interpret the il to see how ArgUtility gets used or whatever
But yeah having immutable/deterministic flags would be nice
Granted I'm still a ways off the LSP half of the mod as there's still untapped potential on the dap side
Would this be like, give my method an attribute defining the arg types
unfortunately this did use custom c# trigger handlers since it was opening a new shop menu from dialogue 、but other than that it's doable still i think
oh right that. i didn't push it, maybe it's in chat
Yes, which 1.6.16 has on event commands now
New quote added by atravita as #6360 (https://discordapp.com/channels/137344473976799233/156109690059751424/1367260909344522330)
this one 🍘
Yeah, my initial attempt was outside the game via a python script that just iterated over every mod folder that had a manifest that indicated it was a content pack. and just scanning every json within those folders for Set-Up_additionalCharacters and MainEvent_additionalCharacters which actually somewhat worked, but turns out most parsers that aren't the one used by content patcher... Aren't very happy with the very loose restrictions that CP allows, so about half the JSONs fail to parse for about a dozen different reasons, which is why I decided to try the "use the tools the game is using" approach. 
Even json5 won't be happy with all the crap newtonsoft supports
Also, scratch a modder and find someone who will bitch about the json spec
Tried both. json5 had the best results, but still plenty of failures. newtonsoft be reall lenient.
Everyone?
It has been 1 0 days since a modder has complained about the json spec
Yeah it's an active problem trying to figure out how to get anything else to be as remotely 'flexible' as newtonsoft
You can make a c# cli project to use newtonsoft
(If you prefer working in Python, you could create a tiny C# CLI app which just reads a JSON file and re-saves it. Then your Python tool can just run files through the CLI app to clean any Content Patcher-supported JSON file into a strict-valid JSON file.)
Yeah, that was going to be my next thing to try if the CP stuff wasn't viable, so that'll be my next attempt. I'm not tied to a language, so I'll probably just implement the thing again in C# instead of having an overcomplicated snake. 🙂
That tiny C# app - Stardew Valley with SMAPI /s
I only did python because it was super quick and easy, didn't think about the different json handling.
Meanwhile my mod is going to in the future have to figure out how it's going to sourcemap line/columns in the json to the internal data structures in content patcher
I have some hacky ideas on how to do it but it's annoying enough that I'm procrastinating in the debug half instead
That sounds a bit like witchcraft to me, are you doing witchcraft?
I need either a better syntax parser in the extension or start on the LSP if I want the inline experience to be better
but once I go near the LSP I need the stardew side to be able to understand line numbers
I have some ideas because Newtonsoft does have some support to preserve that metadata if you tell it to
but that will involve having to hotswap the json serializer cp uses (which for the core content pack is smapi)
and potentially hotswapping the data structure as well to have extra fields/properties
(Gsq is easier to Just Run though)
Y'all can have that if you want
I would love it if gsq had an optional hint for their update rates
I want red squiggles in my editor though, not does it crash
i wonder how u can describe something like this the critter query
mushymato.MMAP_Critter": "Birdie T 4 Birdie 175 4 Birdie {{ModId}}/critters/birdie 4
u r allowed to put as many pairs as desired here
for more birdies
vanilla does this sort of thing in map props
hmm is it possible to know what the generic arguments are of a method within a harmony prefix?
Should 'Helper.Events.World.ObjectListChanged' be getting called on clients? It seems like its only called on my client for the farm, not even if the client is the one placing an object
https://smapi.io/json/content-patcher/2604bc94006f4400a678f0296422db3e is my npcdata completely wrong?
its Data/Characters not Data/NPCData
Ah
@rancid musk i fixed the problem scarlett had by removing dependency on GameMenu https://github.com/gottyduke/stardew-informant/pull/74
wait it was harmony postfixing gamemenu's draw to get the collection data?
Nice, thanks! I hadn't gotten to looking into that yet cause of being busy with work
For anyone who has used stardeui, what's the experience been like?
I've never used qt
Hmm what about vue 
I've used avalonia/wpf and angular
Well in a general sense, it separates layout and logic
it's like me...
I did know it was mvvm/mvc/whatever it's called these days, I guess I just wanted to know how easy it is to integrate and if there were any specific pain points or highlights of working with it
I do think the sml needs getting used to
It looks less bad than avalonia xaml
And sometimes it's hard to integrate with sdv menu assumptions because you do not get to define IClickableMenu
This is why i needed terrible harmony patch on lookup anything
Aah that is good to know
In exchange though u get to do elaborate layouts without thinking about controllers
(could you elaborate? i don't understand this at all)
And scrolling without thinking about mouse wheels
u also get to hot reload just the sml part
so its possible to tweak all kinda things without needing the C# kind of hot reload that i dont have anyways
does stardewui handle gamepad trigger/shoulder buttons at all? i usually use those for quickly changing selected regions or pages in menus
There is something I'm concerned about- there doesn't seem to be any provisions for "virtual" scrolling, and I'm somewhat concerned about the potential memory footprint of large but uniform lists
yea this was a thing discussed in #1293051032904925255 a while back
raffadax made my menu incredibly slow
cus it added like 1000 rules
and each rule costs about 10 elements
It's not hard to use an offset slice, but scrollbars don't seem to be independently usable for a custom scrolling implementation
there's a button binding event
so you may handle any kind of button event yourself as desired
anyways what i mean by "not define IClickableMenu" is that you do not subclass that on your own
you just give the sml asset and the context instance to stardewui and it hands you a IClickableMenu (internally DocumentView iirc, something like that)
here's example of how menu is launched https://github.com/Mushymato/MachineControlPanel/blob/main/MachineControlPanel/GUI/MenuHandler.cs
and here is how you might do a trigger paging impl https://github.com/Mushymato/MachineControlPanel/blob/main/MachineControlPanel/GUI/ControlPanelContext.cs#L411-L426
bound to this bit of sml <lane orientation="vertical" horizontal-content-alignment="end" button-press=|HandlePagingButton($Button)|>
https://github.com/Mushymato/MachineControlPanel/blob/main/MachineControlPanel/assets/views/control-panel.sml#L1C1-L1C108
when i went from hard reference to using the sml/framework mode, i had to toss out whole mod
so it's a hard sell to convert existing menu done in vanilla system over imo, better something decided b4 even starting mod
Yeah that's why I'm don't research now
this particular issue is also why my shop menu mod did not use sml, too many things doing is ShopMenu or patching it in various ways

there prob would have been some terrible™️ way to use stardewui to build the menu then backend into the ShopMenu but i decided to just obey vanilla limits for that particular mod
You could probably get around that by storing an sml view inside a subclass and passing stuff back and forth
Oop
Ninjad
yea but i dont have good way of dealing with Game.activeClickableMenu is ShopMenu
And I'm gonna get into race conditions with happy home design type replace whole thing mods 
You could subclass shopmenu and just call the sml methods from overrides
That's even harder because now i do actually have to think about controllers 
I also dunno of the attribute binding would work
True
so uhh. getting farm type manager to work for my maps custom forage is completely eluding me...
and unfortunately its failing silently so im not even sure where to begin trying to debug it. file for context https://smapi.io/json/none/66120a95606841a6928fc42e0bb5d8fa
since its a FTM pack i assume no additional schema is correct?
i would assume other than sleeping a day i don't need a new save to test this?
So yeah overall opinion is that if u be making whole new menu it's great, can also do HUD displays too (like that fishing ui mod)
But there r some perf limits with really big scrolling (10k+ elements)
The problem with huds is that draw and input order are reversed so you can't have overlapping elements or it goes weird
It drives me nuts
Oh yeah in context of hdd idk if it has much interactive hud support
Not something i tried to do or seen anyone do with it atm
hey y'all! is there a way / guide to debug mods quicker? right now I'm just compiling and restarting my game afterwards
!reload
- Content Patcher pack: enter
patch reload <your_mod_id>in the SMAPI console window. This will reload and reapply all your patches (but won't recalculate theConfigSchemaorDynamicTokensections if you use them). - Translation files: enter
reload_i18nin the SMAPI console window. If it's for a Content Patcher pack, also runpatch reloadafterwards. - C#: see the Visual Studio hot reload or Rider hot reload feature.
I'm not planning to migrate hhd to sml right now. It's a complicated project but it's layed out in a way that makes sense and works well right now
@uncut viper Saw the dependency graph thing when Pathos shared it in the monthly Patreon post. It was really neat! Thanks for making it. Interactive version was fun too.
I was kinda surprised at how small SpaceCore was, until I realized transitive dependencies don't count for size.
You can attach debugger to smapi
ahhh gotcha, thanks!
I'm considering it for another project but I don't want to commit unless I'm reasonably confident it will actually improve development
I'm trying to add a bundle with UB and i get endless red smapi text when interacting with my bundle. Is there a different documentation I could read? I'm not finding the original very much help as it doesn't list all the fields and how to use them
!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.
The error probably says what's wrong
tbf i think its also a lot to do with the fact that Content Patcher is just so dominant in terms of how many dependents it has that it just throws the whole scale out of whack lol. everything is tiny compared to it!
One day CP eats allllll
I was actually wondering earlier today if, say
Console Stardew could eventually get CP mods
Hey, I wanted to ask you about something, if a mod is not working anymore, and I want to create a mod with the same idea as the old one but without taking any of its code. Should I still ask for permission from the dev of the broken mod?
Is there way to hide CP on the interactive one
this is fine usually, depending on the old mod's license you can also update it and do a redux/continued/the return of etc
and even when a mod is active nothing stops you from just making your own take, 2 cakes etc
If you arent using any code or assets and just the same idea, Id say two cakes. Maybe give credit in description
I thought updating def needs permission cuz you are using someone else's assets?
If you feel inspired
yes, and sometimes the license gives you blanket permission
e.g. if old mod was GPL all u need to do is make sure your redux version is also open source with same license
details is for ppl who are lawyers 
Ok thanks everyone.
in some other games their CP equiv is just in the game itself
i think problem with console is that you need to serve the files there officially
something concernedape llc has to setup and host
has anyone here possibly connected rider to stardew on linux for hot reload?
I'm able to attach to the process just fine, but I'm not quite sure how to work hot reload. It's enabled but seemingly not working.
bc of the way i store the data there is no way to do this at present, but heres a pic of the graph where i manually capped the scaling so that CP is equivalent to Json Assets, which is in 2nd place with 1504 dependencies
that's fair, I'm still looking into it, just wanted to see if someone here might've had experience with that.
its undergoing mitosis
God that's pretttttty
Gorgeous 
@next plaza (heres SpaceCore looking much more impactful with the outlier removed
)
i have hot reload working on linux but not through rider (i use a bare terminal), and it has some minor drawbacks, but let me know if you want details
(ill try nd add a "limit CP influence pls" toggle in the next version i push to live)
if you wouldn't mind, I would super appreciate the help. I wouldn't mind using just a terminal tbh, I don't benefit too much from Rider's features
say is the current simulation settings a contentpackfor centered(?) one
i am trying to find gmcm basically
SMAPI is saying that it can't load my image 'BundleBackgroundImage'. Here is my entry for loading it:
{ "LogName": "Load Bundle Assets", "Action": "Load", "Target": "Mods/{{ModId}}/OpeningBundle, Mods/{{ModId}}/BundleBackgroundImage", "FromFile": "Assets/Images/Bundles/{{TargetWithoutPath}}.png" } I really need some better documentation for UB, oof
its not centered on anything right now except for a very slight lean towards the center of mass
there is a search box on the left side
its not the most visible in light mode (the library im using is not the most customizable...)
pathos noted gmcm underrepresented because it's not typically a dependency at all, let alone a hard one
it actually stands out a lot more with the CP limiter in place
gmcm will have a lower quantity than normal because
- all the content packs don't use it, cp does
- once you are in C# land, optional dependencies aren't very useful for just grabbing its api so you just don't put it in the manifest
(this is why people usually like to remove outliers, i suppose. but when your outlier accounts for half of all mods....)
Hi button, just dropping in to say thanks a lot for your json tutorial. Very digestible and well made for an absolute code layman like me
i think maybe if we just had a no node size adjust mode?
im glad it helped!! very glad 
log scale the sizing?
wont log scaling might make everything too similar in size since most of everything will be on the smaller side? or am i confusing how log scaling works
log scaling makes bigger things still bigger but not 👁️
but i feel like the number of edges to a node ought to be enough indicate
Content patcher being the eye of sauron moment
Is this a known issue with Unlockable Bundles?
ill try and add some toggles maybe for different scaling functions, if i can figure my way around the library enough. the version im currently using is a beta and its not fully documented yet orz
sdv modding in 2038
okay! the main thing is that to run your mod with hot reload, you will have to open a terminal to your mod's directory (the level with the .csproj file in it) and run this command exactly:
$ dotnet watch run
this should work on dotnet sdk 8+ (which you should have installed already, anyway) but due to some hardcoded nastiness in its bowels you must use that command exactly
for books do they have a context tag like 'category_books'
i think they have book_item but im not 100% on that
liike 90%
they do have their own categories too though
-102 for skill books and -103 for power books. or vice versa.
so to make this boot up SMAPI and run your game with hot reload active, you will have to define what run means. i do this with the shared project variables in ~/stardewvalley.targets which ModBuildConfig loads for me when i build:
<PropertyGroup>
<RunCommand>dotnet-SDV</RunCommand>
</PropertyGroup>
</Project>```
(i have some other stuff in there, but this is the important one)
can I use those for the reject item dialogue 
beats me! dont know how that works. i dont do dialogue!
Very fair
ahhhhhh, gotcha! I saw some mentions of that command but I didn't know exactly how I'd use it. tysm!!
I think I should be able to get that working in Rider, if not, then I'll switch to something else. this will make this process much less painful lol
poor profiler, sitting on the outer most orbital
that dotnet-SDV is, in turn, for me a shell script that actually boots SMAPI. mine is sort of a can of worms due to the drawbacks, so i'll come to those later, but the main thing is to cd to the game directory and exec ./StardewModdingAPI (the exec is important, so it replaces the current process)
some lovely log scaling. much more blotchy
bumppp
gonna need an actual log
yeah things with a lot of optional dependencies, mainly. lots of recolours
Log Info: SMAPI 4.2.1 with SDV 1.6.15 build 24356 on Microsoft Windows 11 Home, with 16 C# mods and 6 content packs.
Suggested fixes: One or more mods are out of date, consider updating them
As a retired modder I like the CP eye of sauron effect
(recolours, outfits, item retextures, etc... basically a lot of things one needs their editimages to go after)
and ofc your typical suspects like ridgeside and SVE and whatnot
just harder to spot now as they dont stand out as much
i love that Console Commands has 8 mods that depend on it
no clue!
is your modid just 8bitAlien?
Nope
well, im not sure where you put whatever for the UB stuff, but its just trying to load Mods/8BitAlien/BundleBackgroundImage, so if your ModID is more than that, id double check wherever your UB stuff is
the Mods/whatever is just a convention
there isn't a load on Mods/8BitAlien/BundleBackgroundImage
Huh?
Clearly you need an option to hide content patcher and its content packs, to give the rest of a chance at pretending we're important 😛
i was under impression that u needed a dependency to access api for a long time
i still put optional dep on gmcm when relevant
(Pretending that I personally don't have possibly the most important framework mod after Content Patcher)
all optional dependencies do is mess with load order, and if an optional version is specified, not load your mod if the dependency is out of date
and considering you can't go anywhere near .GetApi() until GameLaunched anyway, load order isn't a factor
I think you do for Pathos mod APIs, but I don't think most other mods bother with that check
I'm pretty sure Content Patcher does in fact require an optional dependency to use at least some of the features
if we discount CP, you actually have 3 spots in the next top 10 
(even pathos doesn't put most optional dependencies in his manifests)
the only thing i can think of for CP re: dependencies is using a C# custom token, but you can alternatively just use a HasMod condition if you dont want to add a dependency
maybe you need a dependency to make the custom token too? cant remember
Now, make me a copy of this graph pre-1.6 (so I can inflate my ego by seeing JA dominance for everything item related)
Let's ignore that you'd need a mod dump from pre-1.6
if you could get me a mod dump download from pre-1.6, sure
pathos doesn't keep the old ones iirc
Yeah I was talking about to make it.
aww ok
and I deleted most of mine due to filesize constraints
which is a shame bc this library does have like, a history view slider thingy i could use to see nodes pop up over time
ok new plan, time machine just for button
as my excel spreadsheet schenanigans was doing A/B comparisons of mod-dump folders
But the git repo probably does! (Before he stopped maintaining it)
https://github.com/Pathoschild/smapi-mod-dump
go back to 2016
the smapi-mod-dump folder only has smapi mods, no content packs
Oh
Alas
That would do nothing for inflating my ego via JA, and therefore is unimportant
it was my original 1.6 compatability analysis that had him start uploading the full thing
say would it be possible/easy to represent compat between content packs?
hard part is prob defining what is incompatible
i dont know what you mean by that
what is there to represent, whats the data point there
not on your dependency graph i mean
but it would serve as way to identify genres of content mods
still, the very concept of incompatible content pack is nebulous outside of exclusive loads
ok went through all the old mod-dump links and they all 404 now, so they got removed from the storage account
Exclusive loads are still pretty new right?
i think pre 1.6 all Loads were exclusive right
Oh, you mean content patcher
I was thinking you meant mods disabling themself when another is installed, which I didn't think was a thing but I've been out of the loop for months so I could've easily missed it
smapi content pipeline had load/edit priorities before 1.6. 1.6/2.0 gave them to CP
I've replaced {{ModId}} with my actual mod id but still the same error sadly
@uncut viper what part of the dump do you need?
I do still have my original end of june 2023 dump intact
for content packs that'd be tossing your whole mod behind a HasMod?
I suppose but I thought you meant manifest level
i dont remember a manifest feature to do that 
Like instead of optional or required you could mark a mod as incompatible and your mod would unload itself if the other was detected
Me neither
Hence this: #making-mods-general message 😛
I thought it was the sort of thing Pathos didn't want to add, but Pathos has changed his mind on some stuff before
im sure it was tossed in here as an idea but no psure u gotta do it yourself
sticky wicket on that one if two mods both mark the other as incompatible. who loads?
Neither
i suppose neither
is smapi obligated to count exclusive groups and load the biggest one
It could be useful for people who make alternate versions of their mods though (and choose not to go the config route)
Can you share the json you wrote to use the BundleBackgroundImage? Not the load, but where in the UB-related json you used it.
(aside: i am a C programmer and seeing the abbreviation UB (undefined behavior) sends me into
)
Oh thank you, I think that's it. I didn't look at the beginning part of the JSON. I was hyperfixated on the Load part 
it would be the folders.json file, assuming the structure of the mod dump has remained the same since then
though my mod dump from 2023 doesn't have the split mods / folders.json files but it does have a singular cache.json file, not sure how different the data structure is
beats me! as long as it has the same data i need i could just write a custom script for it anyway, though itd not be tonight
hm cp is only 0.6% away from being majority government
oh wow that is tiny
yeah i didnt expect the zip to compress it that much
my mental gauge for how compressable things are is not tuned
its a formatted json file, with a lot of repeat words due to data structure
it contains all the manifests so should be enough
I had my own scripts for analyzing it, because I had fun stuff like symlinking the contents of the mod-dump into my smapi mods folder
so I could run all distinct modids
tbh I find it hard to believe that content patcher is <50%
One day content patcher will take over the world
i mean if you consider xnb (7%) not real then its already over 50%
also I'm very interested what happens if you overlay this with a compatibility report to filter out mods that will no longer load
anyway, seeing the dependency interactive page is making me very tempted to rewrite my profiler site again
I'm not happy enough with my current data visualization
well it errors out loading the json at around line 246,000 or so and i dont have the time right now to debug that, but i will at some point soon bc the data structure is like basically identical except for whatever this is its erroring on
i guess RawData.Id used to be an int[] and now its just an int. shrugs
in my typescript code I had to JSON5 load it as it had some naughty stuff in it
i lied i fixed it and ill justr ctrl z it after. CP still dominates
the biggest blob to the left of it is JA
the old cache data structure does have a fun quirk at least for nexus section where it know multiple mods came from the same nexus entry, and so you could clump the various SVE sections into one that has the combined dependency graph
dunno! I've left my desk now. it's movie night time so that screenshot is all you're getting right now
Gasp! Work life balance????
the new structure also does that too Im pretty sure, it was an intentional choice not to clump them
I've been "at work" for the last 2-3 hours and still haven't logged into teams
Yay, managed to get my first custom bundle done! Never used UB before or used queries so learnt lots of new stuff tonight
Monthly mod stats time!
Mod compatibility
76.2% of SMAPI (C#) mods are compatible or have a workaround, up from 75.4% last month.
Unique mods by type
We have 285 more mods this month. That includes:
- +179 Content Patcher;
- +52 SMAPI;
- +31 Alternative Textures;
- +28 Fashion Sense;
- +4 Farm Type Manager;
- +2 XNB;
- 0 Better Artisan Good Icons;
- 0 Custom Furniture;
- 0 Dynamic Game Assets;
- 0 TMXL;
- -2 Custom Music;
- -2 Mail Framework Mod;
- -3 Shop Tile Framework;
- -4 Producer Framework Mod;
- -5 Json Assets;
- and +5 for frameworks with <100 content packs.
Content Patcher packs
We have 10,929 Content Patcher packs.
The top five Format versions are still...
- 2.0 (3,350 ↗ 3,356), 2.3 (764 ↗ 776), and 2.4 (554 ↗ 575) for Stardew Valley 1.6;
- 1.19 (566 →) for Stardew Valley 1.4;
- and 1.3 (477 →) in old unofficial guides.
Open source
- We have 3,365 tracked C# mods, of which
- 2,185 mods (65%) have a source code repo, with
- 1,168 (53%) in a multi-mod repo and 1,017 (47%) in a single-mod repo.
Web costs
And finally, web hosting costs for the SMAPI.io site, update-check server, and API rose to US$208/month due to increased web usage. (The graph is always a bit behind due to billing cycles.)
See also
- Stats for March 2025
- Full mod dump
- Download all open-source mod repos
- Dynamic view of mod dependencies
And that's it for this month!
~~+2 XNB
~~
Why is CP 2.0 still going up and quite fast XD
mod stonks
(One day the world will collapse into nuclear fire, and the next day someone will release a new XNB mod.)
im not sure i understand what xnb modding would even be.
take Map/springobjects.xnb, unpack it, change the color of
to pink, pack it
as you can imagine it's pretty bad for compat
oh no
(It's a way of modding without the use of any mod loader or frameworks, by directly replacing whole game files.)

Would you rather an xnb mod or a CP format v1.0.0 mod
(I'd much prefer the Content Patcher 1.0.0 mod; it'd probably still work fine, it just wouldn't be able to use fancy newer features like tokens or conditions.)
rip "for mysterious reasons" my beloved 
(The satellites running ChatGPT will have learned how to initiate their own actions (hence nuclear fire) and learn how to make SDV mods... but it'll only know how to make XNB mods, so for the rest of eternity, only XNB mods will ever be made again)
truly that's the most bleak part of the upcoming nuclear annihilation
I was gonna ask when we got a stone emoji but then noticed it's from a custom server. Given the name... do you have an emoji for every qualified item ID in vanilla?!?!
Convenient that you can just check your emoji list for items in way, though still not as useful as
!stone
🪨 The item ID for Stone is 390.
Does anyone know why ObjectListChanged is only getting called on the farm for a client? Similarly is LocationListChanged supposed to get called on clients? It seems to never get called for me
@uncut viper Oh, and a friend of mine said you should try a more heavily modded game next. Maybe Minecraft or Skyrim? 😛
I told them your browser (and probably computer) would explode upon opening it, though
tbh those games don't have as rich of a dependency tree
Skyrim does have https://modmapper.com/ which is a visualization of the skyrim world and what mods change which areas
In multiplayer, clients can't see the whole world. They can only see the farm (and buildings on it), and their active location.
Technically they have copies of other locations, but they don't really have any of the real game world data - they're mostly empty copies that are used purely to keep things from breaking as easily on the client
I thought we had a wiki page on this (whether on main wiki or modding wiki) but I can't find it
its from smc and sadly no we only have (O)390
i have this tho

cursors too big
(Still hiatus-ing, just saw the question and thought I'd answer while here)
I vaguely remember a pathos message about how the smapi events are delibrately withheld even when the farmhand was in the location at the time
But cursors is literally the best option. Did you try scaling it down?
(You don't have to justify the hiatus to anyone)
but my search-foo isn't having much luck
Plus we all know you're temporarily loaned to Minecraft
I already can't see the full size version of the springobjects one
wait is the minecraft SpaceCore getting updates again?
The clients get networked the object list somehow though right? I assumed the objectlischanged event would work for listening, but i guess not. Since it works on the farm would there be some way to hook into it for a farmhand?
Hey, I haven't started actually making mods for it yet! The C#-to-Java compiler doesn't count since it isn't technically Minecraft related even if that's the only reason I'm updating it
For the other locations, even if its just the one the farmhand is on would work
No, but I have like 11 mod ideas sitting in a notepad file (with two of them actually being longer separate notepad files) from within the past week or so
tbh I actually think it'd be fine, the library supposedly easily handles millions of nodes, just a matter of getting the dataset in the first place 
What language is Stardew Valley made in?
C# (MonoGame / XNA Game Framework)
I see.
i definitely wouldn't have made the graph in the first place if I was also the one who had to do the work of compiling every mod
Yeah they should only get it for locations active on the client (ie. not all the fake ones). Though if SinZ is correct about it only doing farm stuff on clients, you might have to do it manually using the net collection changed events
I would assume it be something like Python.
You're making active efforts!
If you're already familiar with Python, C# is pretty similar since they're in the same language family.
I'm also slightly afraid of re-learning it all since the last time I modded Minecraft was 1.7.10 (technically 1.8 but I didn't feel like finishing updating things with all the code changes from that update) 😅
Plus there's multiple mod loaders to support now
And thanks to my ADHD I haven't gone back to it since the other day and who knows when I will. 😛
The bug I got stuck at being a non deterministic one certainly didn't help
Just make the mod then wait multiple months years to finally release it
(I've seen people release single jars that support both major mod loaders at once so surely it must be easier now to do that I'd hope)
I don't wanna code in Java so need to finish the translator thing 😭
Yes!
Hmmmm
What's wrong with java?
(I do actually know what's wrong with java)
(Multiple people are typing.)
(I'd show one of the weird errors I'm getting but this is getting not-SDV-related, so tl;dr: A program that is just a single Console.WriteLine crashes every time, and with a different error each time)
Jython?
What do you hate about Java?
Might just be past "trauma" from dealing with Minecraft's codebase in particular. It's definitely not as nice as C#. One thing I hated in particular was dealing with all the "void mymethod() throws SomeException { ... }" stuff
It definitely isn't as straightforward as I was expecting the codebase to be, especially regarding exception handling
Two of atra's favorite things. Too much coffee and oxidation
It's technically optional, but inheriting something means you have to follow the parent method's declarations. And guess what vanilla used a lot
Just use this, then use my translator to turn the result into Java. https://github.com/FractalFir/rustc_codegen_clr
More translation layers can only be beneficial and will surely have no downsides whatsoever
Tbh i don't even have a like desire to write java

magick -compress LZMA -quality 40 Cursors.png CursorsCompressed.webp imagemagick is the right answer every time
In theory either Go or Zig is next up for me buttrttttt
Excellent. Now, go forth and traumatize new texture modders
The JVM does have weakref
I wonder if you can get a decent ReadOnlySpan mock with that
i feel like i understand why nexus thumbnails look the way they do now
The Minecraft mod scene also has Scala kicking around that looked terrifying.
not sure if kotlin ever started being used or not
what's the conflict with them?
I didn't see much about possible weakref when I looked the other day. Or maybe that was structs.
ROS is what's causing me Problems ™️
Hello! I am new to making mods, and was looking for help. I've seen a few other posts on reddit and such talking about getting help in the stardew valley discord server, so is this where I'd come to ask questions, or is there a better place for something like that?
yeah, they force-converted everything to webp and cranked the quality down to save bandwidth
here be the place ask away
a sensible decision with terrible effects on pixel art
😔
Wonderful! So, I'm using content patcher as I know nothing of C#, and so far it's been fine, however I'm currently trying to get mail to send the following day after viewing a specific event. Currently I have it in a test mod and get no errors, but it doesn't work. I was checking the wiki but it admittedly isn't the easiest to read and understand when this is the first of done of anything like this
there are a few ways to do this, but if it's mail for actual reading in the mailbox, the most straightforward way is probably using the mail command in the event script https://stardewvalleywiki.com/Modding:Event_data
if you've added your mail to Data/mail, and it's called e.g. Succuless.firstmod_EventMail, you would put
/mail Succuless.firstmod_EventMail as one of your event commands. probably first thing, so the player won't miss it if they click skip
(of course you should use content patcher's {{ModId}} token for your convenience, but that's another topic)
Thanks! That looks like it has worked 
Thank you! I'd like to make sure I know how to add the mail correctly. So, it's be edit data, similar to adding dialogue, I'd think? Is the [#] at the end of the mail denoting it's key or id? like that is what I'd put to express what mail I want it to send?
the id of the mail is the key for its entry. this asset is a dictionary, or map, or key-value store. here's a snippet:
{
"Robin": "Hey there!^I had some extra wood lying around... I thought maybe you could use it. Take care! ^ -Robin %item id (O)388 50 %%[#]A Gift From Robin",
"Demetrius": "Dear @,^I was conducting a field study the other day, and I found this specimen. ^I hope you find it as interesting as I did. ^ -Demetrius%item id (O)392 1 (O)394 1 (O)132 1 (O)66 1 %%[#]A Gift From Demetrius",
// ...
}```
take the first entry ("Robin"). the key (which is the mail's ID) is Robin, and the value is Hey there!^I had...
May I ask something
go ahead and ask. it's common to have parallel conversations in here
I'm confused on how to make a door open in tiled
-# (Don't ask to ask, just ask)
Okay so then if I was adding custom mail and the event sent the letter "Succuless.firstmod_EventMail", that would be in place of the "Robin"? As in, "Succuless.firstmod_EventMail": "Insert letter message here"? If that is the case then what is the "[#]" used for?
the part following [#] is the mail's player-facing title, which is shown in the collection menu when you go there to reread mail you have received
https://stardewvalleywiki.com/Modding:Maps#Map_properties:~:text=Doors [<int x> <int y> <string sheetID> <int tileID>]%2B
there is the Doors map property
and on the tile of the door itself there is the Action Door tile property
Thank you
yes, you have it right. when you add your mail by doing an EditData on the target Data/mail, you should call your mail
"Your.ModId_YourMailId": "letter message text here"
and then send it by using the same id in your event script
we could probably write a dissertation on how to choose IDs for your stuff, but broadly speaking you should use your mod's unique ID everywhere you are allowed, to guarantee uniqueness among all installed mods
content patcher provides a token called {{ModId}} which is automatically replaced with your mod's ID, so it's pretty easy to do
{
"Target": "Data/mail",
"Action": "EditData",
"Entries": {
"{{ModId}}_MailFromMyEvent": "Hey, farmer! This is the mail you should be getting after my event plays.[#]The Mail from the Event"
}
}```
(insert second dissertation about i18n, which is truly a topic for a later time)
Ah, that would be handy, and would explain why it was on the wiki a lot. I'll keep that in mind. In good news, I followed the instructions and got it to work in my game! And, not to bog you down with too many questions as I'm sure you have better things to do, but is there a way to send mail based on heart level? Like mail that sends the next day after achieving 2 hearts with a character?
also the transition from 1.5.6 to 1.6 was fairly major and collectively took action to try and ensure having namespaced identifiers everywhere is best practice and the norm
yes! for that you will need trigger actions, which are a bit more complicated than that event command but powerful and broadly useful: https://stardewvalleywiki.com/Modding:Trigger_actions
I was actually trying to use trigger actions to get the mail to send originally, using the "PLAYER_HAS_SEEN_EVENT" condition, so I've looked into them a little bit and can probably(?) figure it out. Is it under conditions?
I'm guessing the trigger would be day ending, and then it'd be a condition and the action would be addmail
yeah, that should do it. DayEnding, PLAYER_HEARTS, AddMail tomorrow
Alright, I'll try that and I'd imagine I can get it working. If not, at least I know you guys are kind people! I was honestly worried about asking stupid questions and looking like an idiot, but thank you very much, have a great night!
My NPC is moving according to the schedule but isn't doing the animations like sitting etc
Are they set up correctly in your animations json?
I dont really know the format
And, follow up, are they correctly tiled on your sheet?
I think so?
Could you send your sprite sheet and the json containing the animation code?
for example if I go inside the house theres a chair which I, the player, can sit on, but the npc does not do the sitting animation they just stand on the chair
Ahh okay. But are they performing the sitting animation? As far as I know, you need special code to have characters sit on map benches and such. I'd take a peek at Penny's code and try to find where that is
You need to make the animation
hang on, let me find mine
here we go, you need to make a sprite of your guy sitting and make an animation for their schedule
So no special code? Hm. I must've misremembered
I mean, if there's special code to just make them sit, I don't know about it. It's an animation where they take a sitting pose and are placed on the chair
https://stardewvalleywiki.com/Modding:Schedule_data#Schedule_points here's the wiki page bit on it, under animation.
be warned, you might need to offset it to actually make them sit on the right part of the chair
yes my npc has a png of the sprite for sitting
WEll there's how you hook it to an animation
Last time I tried to make my npc sit they clipped through it while performing their sit animation
and here's what my sitting one looks like, it's just the one frame
it takes some... fiddling
Sprite is step one, you need to hook it to code
After you do this, you will call that animation in their schedule
I also believe that when counting sprite sheet tiles, the first tile is 0 and then 1, so keep that in mind
Keep in mind that laying_down will remove their shadow so you don't have a weird floating shadow if you need an offset
"{{ModID}}_bill_saloon_lunch": "43/43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 42 42 41 41 42 42/43//offset 16 16/laying_down",
for example, this is a bit I made so he could sit on a stool in the saloon and eat lunch. I had to offset it to put his butt actually on the stool right
which is how you get around the clipping problem you were having, Sage
You offset them so they don't clip
Offset........please explain that to me like I am. 5 years old /silly
It's just shifting the thing you made over by however many pixels
Okay okay I think I see
Fine-tuning the placement
Ty I will keep this in mind when i update Margo's spritesheet
You also generally want to use laying_down if you do that so their shadow isn't in a weird place
Also notice the // double slash there, that's something it says on the wiki:
f you want to use offset or laying_down without a message, leave that spot empty. Example: offset/laying down without message: "haley_beach_towel": "20 20 21 21 21 21 21/22/21 21 20//laying_down/offset 0 16"
I'm sealing this info into my brain thank you
I had a real "butt on chair" fight with some of the schedule locations
Also if you want a big animation, bigger than your one dude, (like fishing or Clint blacksmithing) that takes you into Spacecore
will patching data/animationdescriptions even work for 1.6 content json?
eh?
I'm not sure what you mean?
this isn't an outdated way of doing it, I did this on the new game patch and it works
oh okay well you said look at other npcs to try and learn the format so I looked at aspen and she uses data/animationdescriptions but idk if that still works or not
once the chests are being organized by Ultra Organized Chests they have a GlobalInventoryId and are no longer "seen" by Craft and Build from Containers. Just to mention, i've been using mouahrara's unofficial update of Craft and Build from Containers, i know you've been going through some updates from them
I'd generally recommend looking at NPCs updated for 1.6 just in case, but many old ways of doing things do still work
Aspen is outdated I believe
But it should still work
Well I don't wanna be outdated right? Might as well try the new format
https://stardewvalleywiki.com/Modding:Schedule_data#Schedule_points This page has it under Animations at this bookmark. Even if it's just sitting for one frame, it's technically an animation
it just lets you tell it what frame of your sheet you want it to show while your guy is in that spot
I'm itching to mod but my head hurts 
And I also have my half of an art trade to finish...sigh...Margo will have to wait
Are there events that aren't events? I can't find an event associated with this precondition: "66/e 295672/t 600 700/H"
i.e. 295672
there are events generated by code (and various hardcoded flags), but that one seems to be for getting 60 items in the museum, according to Data/MuseumRewards
"RewardActions": [
"MarkEventSeen Host 295672"
],```
Ahh okay. Thanks for checking, I couldn
(oops premature send)
I couldn't get searching within json files working for some reason so I was coming up blank
I use this setup in notepad++'s ctrl+shift+F menu, in case it helps
I'm on mac using VSCode. I'll look up later how to adjust the search - I could search but it wasn't clear what files were in scope or how to change it, as it only found one instance (from an open file). Also it usually works in finder, but when I used that it only found it in json's I'd downloaded (ie mods), but not the ones within the unpacked stardew files, which is weird and annoying.
ah, yeah, I've never touched VSCode and some editors can be weirder about it 
vscode has a search in the sidebar
Yeah that's what I was using, chu, but I coudn't see where to point it to the right place. I think maybe it's set up to not have access to everything?
Opened the folder in VSCode? (I usually jsut open individual jsons)
Ahhhh awesome, you're a legend
also lets you ctrl+p to quickly go to a different file
it's a whole new way of using software (for me) heh
Still perplexed why finder wasn't doing it for me though
The finder only searches in the currently open project scope
anyone know any vanilla style waterfall tilesheets
looks like the vanilla one but longer i mean
I mean MacOS Finder (the file system)
Oop my bad
Question out of curiosity, is the doc still up to date regarding macOS not being able to run debug mode (to make changes without restarting SDV each time) or is there a workaround for this? I have trouble finding the specific wiki page where I found this yesterday, it seems the search tools in the wiki keep giving me a hard time (I know I’m searching for terms I am 100% sure are on that page but it gives me nothing)
I'm assuming you're talking about Rider? I was under the impression that debugging and hot reload are different things and that some people have managed to get Rider to hot reload on Mac but that possibly it was at the expense of debugging.
Searching discord, I am seeing people mentioning having issues with hot reload on Rider on Linux. Not seeing any mention of macOS.
Yeah indeed the hot reload. I’m actually working with VSCode now so I may give Rider a shot instead (haven’t tried it yet) since I think I might have that installed.
I’m not very interested in the breakpoint/debugging anyway at this point, just the continuous restarts tripping me up
Hm I just found a message from focustense saying that hot reload is broken on Mac using Rider. But if you search the discord for hot reload yourself, you might find something useful for you rather than me trying to do go-between searching where I might miss something.
I’m expecting issues to be similar for Linux and Mac. Docs said so as well. Wish I could resurface the doc where it stated this was due to some mono behaviour. I was mostly hoping I could manage a workaround but searching the discord didn’t give me many results than your finds either sadly.
Thanks for having a look with me. I think I’ve combed through a lot as well before asking here and I’m afraid it’s just the disadvantage of working on Mac
I’ll try rider since ichor seems to mention getting that working
Never mind I read that wrong, it was while running through terminal. I’ll investigate
Yeah I was going to suggest trying ichor's terminal approach if there's enough similarity between Mac and Linux to make that feasible
Yep and I may have found some other clues with targeting NET8. Kind of stupid I forgot it was called hot reload, so big thanks for that. I guess I took it for granted on windows too much 😂
No problem, hope you can find something that works for you!
If I do, and if I find the mystery doc again, I’ll update it for others
Has anyone made a UI maker ? I hate having to make UI stuff 😭
https://www.google.com/search?q=sdv+ui+modding+framework&ie=UTF-8&oe=UTF-8&hl=en-gb&client=safari I did find some stuff that might be of interest to you
is it possible to make it so that a heart event can't start until X amount of days have passed since the previous one?
I think you’d have to store the last event time then and add a condition that checks if x amount of time has passed.have your tried anything yet?
From what I’ve seen so far that does not seem out of reach.
It is, if I recall correctly, by using mail flags or something like that. Never tried that myself, though.
do a CT, and then set the amount of days you want to wait before the CT isnt active
oh no i haven't tried anything, i was just thinking about it while i'm sitting here at work rewriting my heart events
amazing
thank you all!
What’s a CT (excuse my lingo unawareness)?
all you do for the next event in the preconditions is check that the CT isnt active
conversation topic
yep, conversation topics are essentially timed flags. mail is a basic flag, and doesn't come with any received or expired dates. once the conversation topic is up, it's removed completely
you can read more on the tokens you'd use here:
https://github.com/Pathoschild/StardewMods/blob/develop/ContentPatcher/docs/author-guide/tokens.md#player
Sword and Sorcery makes liberal use of time gates for events so if you want to see examples of how to do it, that's the mod I'd recommend. Desty even made the timegate configurable so users can decide if they want it to be 3 days between events or a week etc (don't remember the actual numbers)
!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.
it looks like the chests are seen, but the chest inventories are being hidden by that mod; I don't like mods that block other mods from accessing inventories like that; why doesn't it just sort and leave it at that?
i'm very confused about what you're saying i think @tawny ore should clarify the situation between Ultra Organized Chests and Craft and Build from Containers
since he made Ultra Organized Chests and i've discussed a bit with him about making Craft and Build from Containers work on chests with a GlobalInventodyId
thank you for the recommendation. it always helps to see someone else's code/approach
@median forum You leveled up to Cowpoke. You can now speak in our voice channels and share images in all channels!
congratulations!
I really like that it's configurable because it allows players to adjust to their own playstyle without removing the timegate completely.
Irrc there's a one day timegate config as well
that's probably a good idea to implement. i'd hate to force players to wait as long as i think they should and then have them lose interest
Great for the players who want to really get through the mod, although I would personally do the week myself
gonna make my players wait a month for pierre to get over his divorce before dating again (i am not actually going to do this)
I really need to work on getting Hiria's relationship gating set up. I've been procrastinating on it forever.
seems like there's always something else to do, i bet
Yup, especially when I'm trying to rotate between things equally so I don't end up with a bunch of just one mod task to do at the end. Have to ensure I don't lose interest and lack of variety is guaranteed to do that.
absolutely
I should set Aideens 14 heart event to run without marriage soon. Kat, Tristan and Victoria still need 14 heart events. I know what to do for Tristans, the others... theyll be complicated.
Good morning mod making general
In SDV 1.6 any chest can be a global inventory as opposed to before when it was just Junimo Chests. This has nothing to do with my mod and more to do with adding support for global inventories by using chest.GetItemsForPlayer() instead of chest.items
Hello, Is there any way to modify other mod's i18n files with a mod as I only want to modify certain tokens to match what I have
it wont work like that right?
{
"Action": "EditData",
"Target": "Data/Events/Custom_TestHouse",
"Entries": {
"805272/f Testy 1000": "long..."
}
}
No but you can modify where the token is used
thank you Matt
Okay, thanks
😔 i think I'll work on gift tastes some more, and then i need to work on overhauling my map ... I think it was too small, the last time
Hello SDV modding community!
I’m looking to make a small mod that adds a custom npc to the game, along with things like a house, events, complete sprite sheets etc to have the npc fully integrated into the game. I’ve seen that there are guides on the SMAPI wiki on how to make mods generally, but was wondering if there were guides or anyone that’s able to give instruction on making an npc with a storyline from the ground up? I’m an established c++/c# programmer so I’m not looking for deeply technical advice, this is the first time I’ve attempted to mod SDV so I’m a bit clueless :)
!npc
Keep in mind that making NPCs is a complex process that requires learning many different aspects of Stardew modding.
Here are a few links that can help get you started on all that you need to know:
-
Tiakall has a great tutorial on making a custom NPC for 1.6.
-
NPCs no longer use dispositions, check the wiki page for the new NPC data.
-
Aviroen has put together a template that will allow you to easily create a romanceable NPC.
-
Feel free to jump into the https://discord.com/channels/137344473976799233/1277457201077813280 thread for more interactive feedback and help!
-
Fireredlily has a WIP NPC Builder Please do report any errors you get with it into the NPC thread!
I don't know if this will be as in depth as you'd like
So npc stuff mostly happens via content
But here's the npc specific guide and stuff
You can ofc edit content via C# but most people don't do that and just use content patcher
I see, I saw that content patcher uses a tag system?
Tag?
There is a lot of fiddly bits so yes pls check out the guides 
Not sure meaning of tag in this context but content patcher has tokens and conditions to do dynamic edits with
You can do various things in c# to extend what you can do in content so it's not that bad if you start in content patcher and go "hm my npc needs special sauce"
I need to use load i know but it says i need load it fromfile but how should it looks like
