#making-mods-general
1 messages · Page 211 of 1
i come waddling in here with a question about map patches
so I have my dynamic tokens set up (thank u roku for helping me with them)
and then i have this for the patch Im intending to do
https://smapi.io/json/content-patcher/32df672538544bb2b9330f57eed4b8d2
The patch doesnt seem to work (my clock hands arent showing up on my clock), and I dont know what Im missing
I named my .tmx files after the time (so like, 0600-2600) if thats helpful info
so I dont know what Im missing 😔
You targeting a tmx bub
Oh! do I take off .tmx for that?
And also assets?
Your Target is the game asset name, not your mods folder file or its path.
yeah wait lemme show my folder structure 
I separated the clock hands from the main map folder because i didnt want them clogging up stuff
And! Where is your mod id in your Target? You're allowed to say it's not there for ease of testing
Your folder structure doesn't matter for your Target
Show me your Load code block for the RuneskeepSquare map please?
yess gimme a sec
yknow it might be because i forgot to add my {{ModID}} now that I think about it
It's definitely not just that
This "Target": "assets/Maps/RuneskeepSquare.tmx", is a completely invalid Target
Do I do the same thing for .tsx files in ATA?
ay oops I copied my edit strings, disregard that 
you need to change it inside the .tsx file itself rather than the tmx
inside the .tsx is more xml
Okay see how you Loaded your map into this Target? "Target": "Maps\\{{ModID}}_RuneskeepSquare", (double backslash not necessary there but it doesn't hurt, I don't think). That's the Target you need for your EditMap too.
oh! okay thank u aba 
(correct slashes are irrelevant, SMAPI normalizes them)
Do they need the tsx files for ATA? Because if not I would like to advise them to get rid of them all anyway.
I would like to get rid of them...
i was having issues with my new map not loading in when I was using /, and \\ ended being what fixed it 😭
So I just put it for everything map-related now 
well if they keep the .tsx files then the source= stuff is inside them instead of the .tmx
tsx's ARE fine to use just unnecessary most of the time
But if they don't keep them the source will be in the tmx, so that's okay? They just really don't need those tsx files at all and it's just a clutter.
a .tsx stores information about your tilesheet
I know
if you just delete a .tsx without then fixing the map then things break
I know
ATA does not ever know or care if you used tsxs or not
(Sorry if that seems short, I am not intending to be terse!)
all it cares about is when the game reads what the source is for a tilesheet
Okie dokie cool thanks
if you use tsxs, that comes from the tsx. if you dont, its inside the tmx
SMAPI handles that part
or monogame maybe. i dont know. something not ATA
I think it's monogame!
😔 my little clock hands arent showing up
could it be my file names?
from what I remember from messing with monogame outside of stardew
here's what my stuff is named
and here's my tokens (shoutout roku) https://smapi.io/json/content-patcher/8b9dac89a5aa49099d58ecb98df6f6fa
You don't need to use a tsx for pretty much anything there from what I can see. The only time you need a tsx is if you want to export tileset data (like animations or tile properties) from a map to use in other maps. Using them for tilesheets that come from a different folder than Maps doesn't do anything useful because there's no information they hold that can't just be held by the map itself.
So my advice: open your .tmx file and find the "embed tileset" button for each tileset and then embed them. Then get rid of the tsx files.
Make a backup of your maps folder first though.
Are all of those dynamic tokens named the same thing? does that work?
I've never used them before, so i dont know 
okay, that makes sense.
CP parses them in order from top to bottom
You're not actually calling your token. You need to use {{ClocktowerTime}} in the file name in the FromFile, not {{Range: 0600, 2600}}
so the bottom-most valid one will be used
Ohh!
like this then? "FromFile": "assets/Maps/Clocktower Time/{{ClocktowerTime}}",
Will do.
.
So I just realised that one of the files corrupted in the mod, which was one of the farms.
Because of the tsx embedding stuff?
I assume so, I was also moving alot of files around from the garbage bin and back so I expected as much
Probably just a tilesheet path issue then
No like I exported the file and when I tried to open it again it just wouldnt open
oml hold on stupid reddit is blowing up my phone
Exported what file? From where?
I have no idea what you mean. You exported a .tmx file from somewhere into somewhere else?
I also don't know how you export something into a mod.
.choose recycle, small, normal, green, color.
Choose result: color.
You also can't embed layers AFAIK
I really don't want to continue with this mod, It is my mod so I can choose to scrap it, unless you want to take over.
now i lost one of my keycaps brb
I'm good, thanks. I'm already booked for all of 2025 working on my own two mods lol
RIP keycap
like idk where it went, it vanished into the boid
void
nvm i found it
thinkly thinking intensifies
I guess my next Mod related task is going to be recolor
welp, i now have a long term project at least.
oooo can i try
You don't need Draylon's permission to make a recolour mod lol
making a recolor? you can, but its not something i would describe as easy, for aesthetic reasons mostly.
oh
Oh great Maru's Robot, What is my destiny?
Sure you can if you want to
.choose recycle, small, normal, green, color.
Choose result: recycle
Now you have to guess what Draylon's recycling mod idea was /j
lol
Its choosing between prompts i gave it xD
ik so what does recycle mean
That one is actually probably the easiest if you actually want to try.
Hit me
The premise was to use CP to make a new machine to recycle old paths and fences you dont need/use anymore, maybe machines too if its possible?
Essentially one of my annoyances is whenever i redesign my farm layout i have like 800+ paths that i dont use anymore and just go in a box, usually stone based paths, that i would have liked having the stone back.
That's a great idea Draylon
hmmm i think i can do something like that
also you would be good at a recolor mod, you make maps after all Cartography MathPerson
I'm always making like 4 or 5 paths at a time so I don't accidentally end up with extras
paths are something i use CJB cheats to spawn in 999 at a time so i can experiment with decorating without worry and then just trash em
My favorite Path is Brick, but it takes a lot of clay, so i usually end up using stone floor or stone walkway floor as a primary, then use stepping stone or cobblestone path for secondary branches.
cjb to spawn and pause time
You can just add more recipes to the Deconstructor as well
Huh.... how long has that mod idea been on my to-do list?
tbh i didnt realize it took paths
i forgor they were craftable. bc of the aforementioned spawning of them lmao
It takes anything with a crafting recipe
it IS missing a few at a glance, probably mainly the ones that give more than 1, like I dont see Brick Path on there.
So most things it should already do, but there are some things missing like transmutation recipes don't get put in there
Let me do it the hard way!
yeah i just forgot that paths werent like, just a buyable thing
To be fair, if you do it the hard way, you can limit what it can do, and when the player gains access to your machine, so it can be a stopgap machine until they get the Deconstructor, cuz i'd consider that shop late game.
Harder mode: use Extra Machine Configs to give everything perfect return recipes
where is its data stored
Data/Machines probably?
meh its fineeeee i will just configure the deconstructor
it doesnt list what can be put in it
https://stardewvalleywiki.com/Modding:Machines is also a place to look, but I dont have all the answers, I'd be exploring files to try to figure out what to do as well.
you can also check to see how other people added recipes by looking at published mods.
But not only that, when you're actively scraping around to try to find a mod to make, it's going to look pretty odd if you then turn around and ask people to feed you all the answers as to how to make it.
i think ive done too much modding and thats why i am abandoning everything, i need to take a break
If you want to take a break, take a break.
ok
Do some cleaning, make some food, watch some youtube/tv/twitch, play a game, read a book, sleep. 🤷♂️
ew no im just going to lay in bed and contemplate life and wonder if im actually making any impact in the grand scheme of things
that sounds depressing, I'd recommend avoiding that, unless you find such things strangely motivating.
not difficult, just time consuming to do properly i think. (only change is grass color on the spring_outdoors)
Oh my god I’m so proud of myself I successfully recoloured a texture pack
that looks lovely draylon
I recoloured the blue grass from Dasiyniko’s earthy revolution to… not be blue. It matches the rest of the blue grass that’s not blue and I like it so much better
Me and blue are enemies
ye, I just basically wanted to do a tiny proof of concept to check how motivated i am, the harder part is going to be getting all the new colors to mesh well, and to well, be patient with it. did you know there are about 20-30 different shades of green in the grass? I didn't.
I should also probably make a worksheet if i'm really going to do this.
I don't think I've ever been more shocked then when me trying out a new thing with an event just... worked right the first go
Anything working right on the first go is suspicious
Very but it's literally fine
i dont even know how that's possible but yippie
is there a debug for robin's building shop
I think im going to finish the to-do spreadsheet later, its gonna be a lot bigger than I thought and i'm fading, night everyone!
some praise for CP's capabilities, just added a walkable bridge to a farm map without even relaunching the game (visual issues aside it works perfectly)
but to my actual question, using this farm map https://www.nexusmods.com/stardewvalley/mods/26041, is there a way to prevent these bushes and stumps from respawning on top of your buildings and such? i suppose it's a problem with how they are set to spawn but i don't know much about maps
(should be #making-mods-general appropriate since i'm editing the mod)
Do you want the building menu or her actual shop?
building menu, i know how to get the shop
Not that I know of. I just do debug warpshop robin and that warps both me and her to her shop. But if I just want to build something without the menu I use the build command.
the stumps can be removed by editing the Stumps map property, but what about the bushes? any way to prevent all of them from respawning?
Huh... for some reason I can't use translation keys in my marriage dialogue json
it simply do not be working
Even if I remove the random keys I have in there and everything it does not work, i have to actually put the dialogue in there
That's unusual
I thought maybe i was just doing my keys wrong (you know, forgetting brackets and whatever)
that is not the case though... 
All of my mods are up to date too
I wonder if this is the same issue as your portrait/sprite thing, where CP isn't parsing the tokens properly
What happens if you do use the i18n keys?
it just shows brackets or an empty box
also i got rid of the tokens in a few of the boxes to test it and those still didnt work
the only thing that did work was just putting straight text in there
Do you have any other mods with marriage candidates that use i18n that you can check to see if they're working?
I found some with the Marry Morris mod so im literally doing that now lmao

Well that worked so i dont know why MINE wouldnt work

Do you want to share the dialogue file and the i18n file to get some other eyes on it?
So.. I don't know why this fixed it, but loading his marriage dialogue to a blank and then putting the actually edit data entry in my content json worked
That's what the Morris mod did so I was like 'might as well try it'
Oh, did you directly Load his marriage dialogue before?
ok my break is over time to get back to modding... in the morning, its 10pm rn
Tokens and translation tokens cannot be directly Loaded. The working method is exactly to load a blank.json first.
Well.. I mean I did try to load a blank json as well but it didnt work
it kept yelling at me for exclusive property loading stuff
c'est la vie im just gonna keep it in my content json I .. .cannot be bothered anymore :') ive worked so hard
Were you Loading a blank json to "Target":"Characters/Dialogue/MarriageDialogueMrQi" (or whatever you've given his internal name I don't remember) in the content.json and then doing an Include data block to your marriage dialogue file also in the content.json and then inside the marriage dialogue file doing an EditData to "Target":"Characters/Dialogue/MarriageDialogueMrQi"? There shouldn't be any Load exclusive priority clashes there because you're only doing one Load.
the debris layer only covers initial generation, once an object like a stump or bush is destroyed, if it's respawning then it's like their FTM settings are set to respawn it, if it's respawning over stuff they changed the tile strictness of what's a valid placement from it's default of Maximum.
I honestly don't know what I was doing... and I'm not gonna find out
It works now which is what matters 
it does have an FTM component but it only has ForageSpawnEnabled set to true, i guess it's not coming from that. the farm's Stumps map property had the stumps at those coordinates though. not sure if FTM can interact with it
i did switch to the farm mid save (from the vanilla meadow farm), not sure if that can mess anything up with the bushes
Hello Draylon, nice to catch you like this.
A user reported being unable to switch to your recently released Forever Falls Farm.
Judging the smapi log they provided it is because the map assets aren't available when Easy Farm Switcher changes the farm type and reloads the farm map. I am guessing that the conditional loads for Forever Falls are a thoughtful attempt at reducing load when players are playing a different farm.
Afaik game assets aren't being loaded, until they're needed.
Cheers
Stumps property will respawn them yeah. There are mods for bush destruction if needed but I don't know what's respawning them.
they are the type of a bush you can break with an axe but it just seems to respawn the next day
That makes sense, I originally added the conditions as the submaps were showing up as valid build targets when you were playing on a different map, I'm probably going to have to do something different to make that not happen, as I think that patch also broke multi-player loading
On this one, the only thing I could think of is FTM can be set to spawn them. But you said that it's off.
actually i already have destroyable bushes installed, didn't remember that. so it might not be a destroyable bush originally i guess
oh i see
I know base Bushes aren't normally destructive so they are probably using EMP as it has a functionality to make them destructible.
that mod has a setting that lets them regrow after a certain amount of days
so the issue is probably that
rather than the farm map
Probably.
(Felt)
(Is booked through 2025 even not considering mods)
Should be fixed in 1.5.3
Is there a best time to post mods
like if I waited until the afternoon... would that be better
If you want attention Friday afternoon is best
Yeahhh yeah
If you want to avoid attention, try middle of the night on Tuesday
I was going to post it on Friday of last week 
And then I spent an extra week making him marriable because im ill
just post when its done no thoughts only ship
I always post the second I wrap up the last bug because I'm impatient as hell
I am impatient but I will also cry if this does not get attention, I'm sensitive/hj
Mood, you & your mr qi will always be famous to me
🥹 thank you
I should post my pile of updates + Furniture Machine eventually
alas Civ 7 eated my free time
Is furniture machines a separate mod
I don't think release timing really matters as much as what's being released and by whom (like, Pathos releases something, it's going to get attention no matter what), and luck getting on the Hot Mods..
it's separate, but now that I removed all the transpilers from it I'll probably fold it into EMC
central station also immediately became a dependency of stardew aquarium though, the framework boost
Probably, but you can't exactly rely on that kind of serendipity, I place that in the aforementioned "luck" bucket.
I thought someone else (G something) was maintaining that.
I don't think this really applies to the mod lily is make tho, an npc
Having an easily-searchable name probably also helps over the long term. Nexus literally won't find AFS unless I type the exact name.
gervig is the main maintainer of aquarium
Those r down to whether your preview image pops, no idea how that works tbh
Feesh
Huh?
A Fishing Sea, the one I promised to add VMV support for and still haven't gotten around to doing (sigh).
ah yeah! (i have a WIP with that acronym too, so maybe i'll see if i can find something working better)
How good impression works is mystery
Oh, yeah, but I don't think it affects searchability?
(well i get how this kind of stuff can take time)
I like to think Animal Multiproduce made hot mods solely because of the thumbnail
despite being a rather nothing mod
I don't think [framework boost] really applies to the mod lily is make tho, an npc. Those r down to whether your preview image pops, no idea how that works tbh
I don't think Pen Pals had a super impressive thumbnail. But, yeah, maybe AFS is extra bad for that.
Sorry i broke up msg inconveniently
I love animal multiproduce, it is not a nothing mod.
you don't really can control everything, you can get some stuff well done and help with getting a good start but also
a mod isn't just a good start so even if it's okish
mod can still grow
Nexus search is famously bad bc it only works on titles
Too many major updates to do, hopefully these are the last of them (famous last words).
And I only maintain 7 mods, imagine being one of those people with 50.
Yup. If you mod name does not describe what it does the search will never find it.
I started doing Quirky Mod Name - Searchable desc of what Mod do lately
I mean, it won't even show that mod if you type "fishing", I guess too many fishing mods already.
i regularly have messages about how one of my item has a broken translation and like, if i knew how long the update adding other stuff would have took me and the numbers of messages i would have uploaded a small, separate quick fix
Ah. It shows in the "full results" but not the inline popup search thing.
same
maybe your keyboard's firmware is accidentally inserting zero space widths every other letter /s
i do like the bubble feature of the mod, really great to know if a bubble is worth it or will disappear soon
(or know about future bubbles)
Do u have opinion on whether searching "fish" should include results for "fishing" or "fished" etc
Discord search seems to do that
If I were designing a full-text search engine then I would definitely use stems.
Discord search is poo
Try searching for "animal"
(focustense, will it bother you if a npc mod had AFS as abbreviation, do you not care, else?)
You boost exact matches but show all matches. (Of course, Discord butchers the boosting)
Not really, it would hardly be the first acronym clash, though it might get confusing in the Discord channels.
(spoiler: you also get results for "animated", "animation", "anime", etc. for some gods know reason)
Would not surprise me if there's already some other mod whose initials are AFS that we don't know about.
ok, thanks! i feel it may be ok in context usually but we can always clarify if needed
possible indeed
Sounds like u just gotta rename extra animal config to extra livestock config selph
Solves everything trust
Most likely Soundex. I can't confirm precisely because it's freaking ancient and I haven't used it in forever, but it's well-known for producing very silly matches like that.
And it was built in to a lot of the ancient database engines, which Nexus almost certainly uses for its backend.
Wait but nexus search doesn't do that
I am wondering now why the full-page search results are in a completely different order and have so much non-overlap with the autocomplete search results.
(interesting, thanks for the wikipedia rabbit hole)
How do you know?
Nvm i am silly 
(I don't know that it does, that's why I said "most likely", it's a parsimonious explanation for it's half-baked matching)
I thought fishing would show fish result too
But hm I don't think the animal silliness is there 
Yes, I can see why that would be your first guess having been exposed to modern searches. But Soundex is phonetic, not stem.
Not getting mods like fast animation when i search animal on nexus at least
I thought selph was saying all the animal search things were discord
They're both terrible for searching in different ways imo
Discord search is definitely special in its own way.
There's a mod that's named Start with 1 Fishsomker
Back in the bad old days, we used to score really good deals on eBay by searching for misspelled names.
I thought a fishsomker was maybe the German word for lure or something at first just then xD
And kailey tried to correct them so that it work properly in search
The author replied in Chinese so im not sure they understood
Well, if they never updated it then the answer's probably "no"
What's that meme mod that misspells every item name? Or did I only imagine that one.
Sounds like something the Swedish Chef would say from the Muppets.
Huh, maybe that mod really doesn't exist. I'll have to make it for April.
Fish somker...
Ghoti mod that rearrange everything to equiv spelling
Phonetics are hard, I'd rather just transpose letters randomly.
And maybe add descriptions that make no sense and sound like they've been run repeatedly through machine translations for seven different languages (because they have).
As long as you keep the first and last letter of each word you can pretty much scramble the middle letters and people should get it.
As lnog as you keep the frsit and lsat lteter of ecah wrod you can pterty mcuh smbrclae the mdilde ltrtees and ppolee slhuod get it.
... in theory. Though as demonstrated, it means 2 and 3 letter words don't get scrambled, which reduces the effect somewhat.
I remember there being a thing where it becomes more difficult if you reverse in the internal letters
Like scrambled randomly works, but reversed is not as easy
So there is this mod on Nexus. Groupable Chests. The author hasn’t updated in forever. Hasn’t responded to email. And has posted source code of said mod on the main page? Is this mod dead? Can I or someone use the source code to update and reload? (How hard would that be to do). I have such an issue w how the game handles the chest/fridge inventories.
Always check the mod permissions, or the source code license if it's open source.
If the open sourced license permits it, then you're probably welcome to revive.
this is a mod i have that replaces the title screen logo. would it be better to use EditData instead of Load? https://smapi.io/json/content-patcher/da3474717d3c4c5f90426f04520bb618
It's probably funnier if some of the words become unintelligible even if most are OK. Like "Sap" becomes "Asp"
repo has no license, nexus permissions are closed
you're out of luck
yeah best practice is only load for your own mod asset that hasnt existed yet
Dangit
Thanks tho
Given that there is a source code link, it's a fair guess that the author intended for it to be open but just didn't understand licensing, and probably no one will come after you for doing an unofficial update.
...but they might.
If I could figure it out I wouldn’t even care if 100% full credit was given to the original author. It’s been over two years since an update tho.
Which is also why I tried contacting the author to either beg an update or maybe give myself or someone else permission to try and update to 1.6
Morning, and who’s mod may I ask wouldn’t be to difficult?
What does groupable chests do
I can't fiigure out how to use EditData instead of load 😭 https://smapi.io/json/content-patcher/da3474717d3c4c5f90426f04520bb618
You need EditImage
It if I understand it correctly allows there to be blank spaces in chests. So you can organize chests like your inventory. Like how you can put items anywhere in your inventory. Without auto sort. Incidentally this is how stardew on android mobile is. Not really sure why pc was so restrictive.
Wow i specifically made a mod to autosort whenever i do anything with chest lol
I like having this organized a certain way. And vanilla stardew just tosses them how they want lol. Really bothers me
And some that’s fine. But if I want three items in the bottom left and two in the middle I like spaces between them as well
As for replicating the exact behavior, it'd be a few harmony patches on Chest.cs and maybe ItemGrabMenu
Less worried about the relative difficulty and more worried about compat
If you just make the mod of similar feature from scratch without looking at preexisting work you don't have to worry about license
Yea I am very inexperienced in modding so would need to learn ALOT. I was hoping to just get in touch with the author.
Which I’m not opposed to but I wanted to start by asking the questions.
I'm under the impression that you already tried reaching out and got no answer, hence why we r now on the "make my own version of this mod" talk
Right so I’m starting to read up on how these could be made. I do appreciate the discussion
!decompile
If you want to make SMAPI mods with C#, one important resource is decompiling the game to read the game code. Here's how to do it: https://stardewvalleywiki.com/Modding:Modder_Guide/Get_Started#How_do_I_decompile_the_game_code.3F
!harmony most likely need this
Harmony is a framework for patching .NET code, allowing you to take any portion of the game's logic and insert or substitute your own. This gives you more flexibility and control than SMAPI helpers and events, at the cost of being typically more complex and difficult to use safely and correctly, and more likely to break with a future update of the game and/or SMAPI.
If you are trying to do something that isn't possible or practical with SMAPI alone, then Harmony is usually the solution.
For more information, refer to the following:
- Harmony Modder Guide - Intro, Use Cases, Initial Setup
- Tutorial: Harmony Patching - Types of patches and code examples
- Decompiling Stardew Valley - For finding methods to patch
Anyone have any custom npc tutorials?
!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!
Usually you make a folder right insdide your Mods folder and put all of your work there
I find it is really helpful to have an example to look at, so maybe go check out Hat Mouse Lacey
I think this mod drove me insane (I added the first images a bit ago and the second images this morning)
These look great, Lily!
My favorite is "mawwaige" ^_^
Is what bwings us togever, today!
Honestly, I don't even know where to start with screenshots for my mod. It's mostly dialogue + events, without a lot of custom assets to catch the eye
Alright, I can try to get a couple of dialogue line screenshots 🙂 Maybe 1 or 2 from the new events, too, although the art is obviously still vanilla Stardew
Does anyone know if it's possible to specify a custom mod folder to use for debugging? I'd like to setup different mod combinations for testing different mods, so ideally I'm looking for something I can add to each respective mod's csproj.
I've tried using GameModsPath but that only seems to affect deploy tasks, but does not affect debugging.
Is it not possible to just set up mod groups? (Sorry if im misunderstanding this btw)
I want it so that when I hit Debug for one of my mods, Unlimited Storage for example, I can test it alongside a specific group, and when I hit Debug for a different mod, I can test it alongside a different group.
I know how to setup the groups, and how to launch SMAPI manually to test those groups, but not how to implement that for debugging.
Oh, hmmm im not sure then... I haven't heard of something like that before
😅 sorry i couldn't be of any help
Hm can you set the env var when you debug launch?
Oh I think I figured it out
I added this to a <PropertyGroup>:
<StartArguments>--mods-path "X:\_mods"</StartArguments>
hey? when playtesting a mod right? what are some mods i should have installed?
mainly cosmetic but in general
I tend to test with mods that are most likely to affect mine. And whenever a conflict is reported, I'll sometimes add that to the mix.
Just to make sure I have no regressions when compatibility is a concern.
cool cool
My test mod profile is getting too big
mostly ask since idk what i should always have on hand when testing
But i dunno if the goal is to try and hit incompatibility then just use ur normal list
I just use my regular mod list, 176 folders so far, and let people report other incompatibilities
I was speak from pov of initial dev when me mod doesn't even work
That's why I'm trying to customize what I test with per mod
My load time is blowing up
I assume u would have a super computer
Unless it's like cant believe this load time is higher than 10s
but i've had this thing since college
I'm restarting the game so much between tests that the seconds I can shave make a big difference in my productivity
it's a gaming laptop
Oh don't u have hot reload
When im testing mods i keep it to like, frameworks, cjb cheats, and noclip/debugmode just to make sure it actually works
I thought that was working in rider
(I develop in isolation)
I hot reload too, but I'll still stop and reload depending on the amount of changes I'm making
And then I test never

Playtesting ends up after "okay this should logically work..." for me using my whole mod list lol
I am kind of used to no hot reload ever
I'll especially reset if I want to reset the conditions of my test
The extra seconds r not that bad cus i can zone out while it is happening
(See "retired")
... didn't know hot reloading was a thing. Sounds useful, though?
good afternoon, I'm probably missing something important from my craftingrecipes file as my fence isn't showing up in game (when supposedly if I read the guide correctly, it should have no conditions for unlocking and just be available). It is spawnable through cjb cheats. I figured maybe I should tackle this issue before trying to get to the last issue of the tilesheet not working correctly. I've tried a few different variations of the fence "recipe" string with no luck
"Changes": [
{
"Action": "EditData",
"Target": "Data/CraftingRecipes",
"Entries": {
"Picket Fence": "388 5/Field/false/none/",
}
},
]
}```
I'm just down to the point where I'm likely missing something key to go along with it in the file. no errors in log
cool cool!
you're missing the output field
you have Field (the unused field) immediately followed by false instead of the output
output as in how many it makes? for clarity
as in what it makes (the item id + the quantity)
Yield is what it's called on the wiki
hmm theres a couple of different fences, just go with 322 for wood fence then or?
is this a custom fence?
cause I feel like I'm missing a few critical pieces of the overall puzzle, custom item fenceing is... more difficult than it seems when theres no other stuff to look at
I thought you were adding a brand new custom fence item
yeah
You would go with what you defined your fence as in Data/Fences or the object data for yield since you want YOUR fence
then your yield should be your fence
setting it to the wooden fence would make your recipe produce wooden fences
also once you fix your recipe, your unlock condition is "none" meaning it isnt unlocked from the start
Since you can get your fence through CJB, you defined it somewhere
change to "default"
hmm I dont think i gave it an id number, so like "Picket Fence": "388 5/Field/ShilohAreles.CuterPicketFence_DefaultFence"/false/none" ? I think I had the id in here just in the wrong spot last time
ah so..
Hot reload is like patch reload but for C#
"Picket Fence": "388 5/Field/default"/false/none"
oops extra " in there
oh
I se nowI cannot read
"{{ModId}}_FloorLoom": "388 20 771 20 709 10/Field/{{ModId}}_FloorLoom/true/null/{{i18n:FloorLoom.name}}",
(this is how i did one of mine)
(if someone notices i messed something up oopsies)
? ask in #modded-stardew
ty
this is where we make the mods ^^
That looks good, but see [my comment above](#making-mods-general message)
uh oh did i just scope creep myself
You probably need to set <GameModsPath> too to make sure your build output is going into the proper mods folder for testing.
Yeah, I tried that alone initially
But this works great, now time for me to establish different mod testing groups for each of my mods
In my own common I have ```xml
<PropertyGroup>
<ModSet>DevMods</ModSet>
<GamePath>C:\Program Files (x86)\Steam\steamapps\common\Stardew Valley</GamePath>
<GamePath Condition="!Exists('$(GamePath)')">C:\</GamePath>
<GameModsPath>$(GamePath)\$(ModSet)</GameModsPath>
<StartArguments>--mods-path "$(ModSet)"</StartArguments>
</PropertyGroup>
hmm wrong i18n string for it, must have something named wrong somewhere..
Oh I like that, creating a ModSet property that is
- Hardcoded GamePath is necessary since this file is evaluated before the autodetection of GamePath from ModBuildConfig
- I check if the folder exists, and if not just set it to C:\ which is guaranteed to make things fail unless your environment is really weird (I think I was hitting some other weird error without that?)
I should be able to use my shared file to do the GameModsPath and StartArguments, and override in each csproj
Admittedly you might be able to run the path detection targets file before things go, but I don't think I got that to work when I last messed with this.
SMAPI's detection already works for me for GamePath since it uses Steam's registry entries which are correct for my setup
Yeah but that detection runs after this file is parsed
I dunno I was having trouble without setting it manually
ahhh it fixed my tilesheet issue
although I dont like how the vertical pieces align with horizontal
buuut its not changing tones aagh
So just adding this works for me
<GameModsPath>$(SolutionDir)\mods</GameModsPath>
<StartArguments>--mods-path "$(GameModsPath)"</StartArguments>
But because my common .targets import is at the top, I can't add it to that since the game path wouldn't be overridden.
I guess I can do a second common at the bottom perhaps, and then I only need to set GameModsPath per project.
Or I suppose the default value is fine since SolutionDir in this case is per project already
Omg, that load time though. Reduced my mod group (for this mod) to just 14 mods, and it start almost instantly.
There used to be a mod that let you load directly into a save file, I wonder if that still exists and works
My ultimate vision is to automate most of the tests I regularly do for mods so that I can easily tell that everything is working as expected
https://smapi.io/log/f53d0e9381664c3fa8888d94fee7d3fb I'm so confused... all my tilesheets are 48 wide not 56. do I need a nap to think about this
Log Info: SMAPI 4.1.10 with SDV 1.6.15 build 24356 on Microsoft Windows 10 Home, with 6 C# mods and 1 content packs.
Suggested fixes: One or more mods are out of date, consider updating them
your images are fine, check your json
target area (X:0, Y:0, Width:56, Height:356)
I have, none of them specify a patch of that size
🤔
unless I'm straight up blind, which is, a possibility
ctrl+f for "56"?
nothin
all my patches are just switching one for another, I havent made any patch areas yet. it was in the plan for one of my options but I havent done it yet as I'm waiting for gwen's permission; but she's on hiatus
and you are sure the canvas size for this - "Texture": "ShilohAreles.CuterPicketFence/Default Fence", - is not 56?
yup. I'm going through and fixing one of the textures now (1 and 3, funnily enough as they were the wrong sprite) so maybe once I've gotten them all fixed it'll be good? theres a possbility I might have saved one before I cropped
1 and 3 were the ones throwing the size error
@lusty elm After my break I have found an idea for a mod and I want to see what you think, Make the farm computer into an actual computer. You can surf the web on it.
If you're thinking something like Farmstronics or Minecraft's ComputerCraft, it'd be a decent idea. The continuing security vulnerability emails from the time I used CefSharp once in an old project tells me that web surfing might be a bad idea tho.
Yep, but I'm not sure why because they're the same size as the other sprites and fit in the width 48px
The initial reason I'm changing them is because I didn't realize they were corner pieces
you are counting any empty transparent space around the sprites, right
Yes
I'll bring up my grid and recheck but they should all be 16 px in width
But that will have to be later as the toddler is home and using my pc to watch monsters Inc lol
I switched to having Stardrop profiles for each of my mod projects. Just have to start SMAPI from Stardrop once after switching profiles so it wipes and updates its "deployed" folder, then can run from VS. No more manually updating all my mod-testing mods. From my stardewvalley.targets:
<GameModsPath>C:\Users\USERNAME\AppData\Roaming\Stardrop\Data\Selected Mods</GameModsPath>
<StartArguments>--mods-path "$(GameModsPath)" </StartArguments>
It won’t be the actual internet, just a replica with a few apps, youtube and stuff.
damn i realised how hard i crashed out last night, im going to recreate the farmers market mod @vernal crest
I also use Stardrop to manage updates, but my mod groups are all symlinks that I manually create. I know they have a built-in thing, but I want to cut out any manual interactions as much as possible.
if I were you, I'd try making a proof of concept for this kind of project before actually taking it on because it will be a very big one
Before I do that one I will redo the farmers market
Also consider making an app for the Mobile Phone mod instead
I think I've shared this before, but I just keep my mod groups saved in a json file, and I wrote up this small script to create my mod group folders from that file:
# Self-Elevate
if (-Not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] 'Administrator')) {
if ([int](Get-CimInstance -Class Win32_OperatingSystem | Select-Object -ExpandProperty BuildNumber) -ge 6000) {
$CommandLine = "-File `"" + $MyInvocation.MyCommand.Path + "`" " + $MyInvocation.UnboundArguments
Start-Process -FilePath Pwsh.exe -Verb Runas -ArgumentList $CommandLine
Exit
}
}
(Get-Content -Path "Mods.json" | ConvertFrom-Json -AsHashtable).GetEnumerator() | ForEach-Object {
# Create mod folders
New-Item -ItemType Directory -Path $_.Key -Force
Set-Location $_.Key
# Delete any existing links to mods
Get-ChildItem -Directory | Where-Object { $_.LinkType -eq "SymbolicLink" } | ForEach-Object { cmd /c rmdir /s /q $_.FullName }
# Create symbolic links to mod folder
$_.Value | ForEach-Object {
$ModFolder = [System.IO.Path]::GetRelativePath((Get-Location), "$PSScriptRoot\$_") -Replace "\\", "\\"
cmd /c mklink /D "$_" "$ModFolder"
}
}
# Return to script folder
Set-Location $PSScriptRoot
I did the same thing before I found out about stardrop! I actually wrote a shell script that took a list of mods and created a simlink mods folder with them in it
And this is what the json file looks like
{
"X:\\Repos\\StardewMods\\UnlimitedStorage\\mods": [
"ChestsAnywhere",
"CJBCheatsMenu",
"CJBItemSpawner",
"ContentPatcher",
"DataLayers",
"DebugMode",
"FastAnimations",
"FauxCore",
"GenericModConfigMenu",
"InstantBuildings",
"LookupAnything",
"NoClipMode",
"Profiler",
"SkipIntro"
]
}
is this powershell? it looks close to shell scripts I'm used to but not quite
Yeah it's Powershell
oh nice
maybe I'll share my shell script later then for the macos and Linux people and that way we'll have covered all pc bases 
So all of my mods are just in one folder that Stardrop can easily update, and my various groups are all in a json file that I can update and track via source control
Symbolic links my beloved
So if you want to remove/add/update a mod in a mod group you update the JSON file and re-run the script?
Yup, that's all there is to it
It won't remove actual folders, only symlinks
So it allows me to have my debug mods in there, while also keeping my external test mods updated
The one problem I have is that if I have a symlink to a mod that I build, the build will write to the symlink source. i.e. overwrite my main folder
It shouldn't happen now that I'm using unique groups for each mod
Yeah that happens with my setup now lol
I've been just removing the symlink to the mod I'm working on, but it is a flaw in the setup
You know, I should really set up symlinking for my mod installs. I hate it when I need to go update mods in my dev mod pack.
Yeah I got over doing that quickly once I needed to test compat with like 20 other mods and fresh 1.6 updates were flying out each day
The problem with symlink is that smapi doesn't like it when i delete the source of what i linked
I have no idea why tbh
Is it fine if I just have the TSX file in the mod that goes to the image in the content files? Since I won't have any offical game assets in my mod.
MSBuild runs everything sequentially including packages/references which surprises a lot of people. I think if you put your <PropertyGroup> or whatever after the PackageReference to ModBuildConfig, the directory macro will work.
Oh yeah, that's what I do
Of course if ModManifestBuilder is in the mix then I don't know, that makes the order of build tasks a bit... strange sometimes.
Tsx is fine yes, just remember that your tilesheets need to be relative to the Maps folder
Not without ATA they don't.
With ATA you need a Content prefix, which is it's own kind of nuance
!tilesheetclimbing
When creating or editing maps in Tiled, one common error is tilesheet climbing, marked by red text containing "invalid tilesheet path '../../..'. This is caused by SMAPI not being able to find the tilesheets needed by the map file. To prevent this error, make sure that you have a copy of all necessary tilesheets in the folder containing your WIP tmx file. Copies of vanilla tilesheets can later be deleted, but must be present while working on your map.
If you get this error with a completed map, an easy way to fix it is to open your tmx file in VS Code or a similar text editor, find all of the places with <image source=, and remove the filepaths to so that only the tilesheet names remain. For example, if the code says <image source="Content (unpacked)/Maps/townInterior_2" width="512" height="64"/>, change it to just <image source="townInterior_2" width="512" height="64"/>.
This is the thing to avoid
I wonder if we could convince pathos to promote ATA to just SMAPI 
It seems safe enough
Not including the game tilesheet is obviously good for respecting copyright but the more practical reason is to let recolors work for your map
Whenever I try to do Content/Buildings/Big Shed.png for ATA it automatically goes to the mods folder, checking for FarmersMarket/assets/Content/Buildings/Big Shed.png, I need it to go to the content folder and not the mods.
ATA?
so? what's the command to target a portrait?
in content patcher?
i'd like to make it so the shirtless sebastian mod can allow portraits to be used
mainly to allow to switch portraits in a config?
editimage -> Portraits/Sebastian
and then you'd want to add a
"When": {"YourConfig": "true"}
One of these days I need to PR into SpaceCore to fix recipe descriptions. They have a major case of dumb.
@uncut viper I can't figure out how to use ATA due to tiled automatically going to the mod folder to look for the image.
Nevermind, I got an idea.
here's an interesting thing... I want to acquire all the Music and Sound Ids with a command... any ideas?
this is for the beach portraits right?
oh wait beach portraits lol
that's the one im targetin
I see Game1.getMusicTrackName.. but I am unsure how to use that
FUCKING FINALLY I GOT ONE OF MY MAPS STABLE

1/4 maps stable... and it took me 30 minutes to do 1, and the rest are tripple its size...
😭
good luck 
no thoughts on my current situation?
its already broken.
hmmm
unfortunately i know nothing about C#
you could use patch export blah blah blah (idk what the extension would be)
is that for me?
yeah, srry
i dont do much with music i am just trying to give what i know
lol well.. it's not the music itself i'm interested in
I am acquiring lists
CP cannot do that x3
I am making a personal tool that acquires things I need to reduce my workload on creating mods
Does anyone have good smapi documentation to help me study mod programming... because I'm finding it very difficult to do something simple due to the lack of documentation.
For example, how do I load a texture into the game using C#?
I haven't found any information explaining this correctly anywhere, none of the codes I've found work.
what are you trying to do in the first place?
depending on what it is, you may or may not actually need C#
https://stardewvalleywiki.com/Modding:Modder_Guide/APIs/Content
the wiki extensively documents many SMAPI features which you can find from the modding index page
damn looks neat 
for a moment, I thought that was directed to me xD
Okay, but how do I transform this loaded texture into a texture object within the game, to use in a new object created in the game?
to use in the object's dictionary, in the Texture property
you dont, because thats not how objectdata works
the Texture field is a string
you give it the name of an asset you create in AssetRequested
That's just normal Better Crafting and me complaining about how SpaceCore recipes handle descriptions, lol
so i can make the maps stable so they run in tiled without any missing textures but i cant run them in game because of tilesheet climbing and if i try to remove tilesheet climbing then it breaks again
@final arch you tend to point me in good directions... do you have any input to my current conundrum?
my object
var watermelon = new ObjectData
{
Name = "Watermelon",
Type = "Basic",
Category = StardewValley.Object.FruitsCategory,
Price = 100,
Texture = this.ModManifest.UniqueID+"/watermelon",
SpriteIndex = 0,
Edibility = 20,
IsDrink = false,
CanBeGivenAsGift = false,
ContextTags = new List<string> { "Green" },
CanBeTrashed = true,
};
Game1.objectData.Add("Watermelon", watermelon);
please look at the documentation on the page i linked to see how to properly add an asset to the game, as directly adding it to Game1.objectData is not the way to go
What I need is for this.ModManifest.UniqueID+"/watermelon" to be an object in the game that points to assets/watermelon.png
you need to use the AssetRequested event
yes, you need to use AssetRequested for that too to create your asset name from your png
oh
I have found the best way to work with TILED isa to have a working folder where you put a copy of all of the tilesheets and map files that you are working with, and after you are done, just copy the map files to the pack folder
I think I understand now
but can I do this, even though it's a new object?
if i keep the .png's of the files in the mod its a crime due to the images being copyrighted
yes
you are allowed to make up any asset name you want
not sure, looks like the MonoGame SoundBank class holds all Cues in a hashmap, could try that?
tho not sure if actual music are held somewhere else
Imma try a code I made.. if that doesn't work, I will try that... not sure the command for it but I'll cross that bridge when i get there ❤️
i think i will make all the farms from scratch
but before i can do that i need to fix the STUPID TILESHEET CLIMBING
you just need to have the tilesheet in the same folder when saving
yeah but if i remove it at any time tiled gets mad and doesnt work
then make it mad, and then fix it.
thats like punching someone in the face then hugging them
yeah and it fixes the issue
that doesn't seem to be the right way to go
alternatively just edit the tmx file itself in notepad++ or smth
and fix it directly
i will try it then...
whenever i try to edit the paths of the files it automatically goes to my mod so it would go FarmersMarket/Assets/Content/Tilesheets
like i cant fix it
i would put in Content/Tilesheets/blahblah.png but it would go to my mod
i will see what i can do
also why did i just get deja vu
thats not what you wanted?
w h a t.
did you generate that?
its the debug view of Game1.Soundbank.soundbank._cues
well.. they are there.. but i need to be able to get that to a text file
File.WriteAllText(Path.Combine(path, "output.txt"), text);
hi so i have seasonal sprites and they work, but for some reason my seasonal portraits don't work
i thought they worked on my other device but not on my pc?
is that for me?
I can be... that's the simplest way to write a text file
off topic but i am in your server lolol
Hey, if anyone has any dialogue experience in 1.6, would there be any reason a character's dialogue entry for a specific day of the week would always overwrite an entry for a day of the week + friendship prerequisite? Full disclosure, I'd just like to add a one-time question on a Tuesday at 2 or more hearts, but the game won't give me the dialogue entry to start the question, only the character's generic Tuesday dialogue entry.
i appreciate that.. but that's not exactly what i meant in terms of getting it to the file x3...
Oh, I apologize. I thought that was the challenge. I'm not caught up on the prior discussion.
My server is mostly for help with my mods... here is the best place to get a great amount of other things
I am trying to find a way to get the music ids to text. Meaning i need to find them and generate the ability to
Ah, so the sound bank has more than just the music. Is that the problem?
shek has given me a location.. but i need to figure out the code
Game1.soundBank.GetCue() almost gets me there.. but it wants the ids just to do it.. so i am missing just one thing
You're going to need Reflection I think
Since the _cues are a private field which are part of the SoundBank class
Are you trying to distinguish between music cues and sound effects? I looked into that a few weeks ago and decided it was impossible.
<.< it can't be that complex.. I just want it to read the names and tell me them
You don't have direct access to the names (publicly) unless you are part of the StardewValley Microsoft.Xna.Framework.Audio namespace
It is easy enough with reflection or publicizer, it's just reading 1 field. But it's all cues, there's no good semantic info to tell you what kind of cue.
Yeah, that's why I asked if you cared about all sounds or you're trying to look for just music
i will need the separate.. never really done reflection so I'd like to avoid it
especially since this mod is just a data collector
Separate what?
Music, Sound
Yeah, you can't. Not with the game data directly.
XNA just has "audio" and there's no metadata attached to tell you whether it's music or sound. You could maybe try to go by duration as a heuristic, though it won't be perfect.
Reflection is part of SMAPI's APIs to try to make it more accesible even if you're not totally familiar or comfortable with them.
Helper.Reflection
*sigh
Reflection/publicizer is just to be able to read the _cues field in the first place and get the list of names, but even once you do that, you'll have a list of all cues with no reliable way to programmatically distinguish between them.
.choose Seasons Food Magic Signs Pets
Choose result: Seasons Food Magic Signs Pets
Shek's image shows a value i can't see
Believe me, I tried - I thought maybe looping information could help, but XNA mangles it so badly in the runtime data that it's practically unusable to anyone but XNA.
@final arch that image, could i see the value a bit more?
.choose Seasons, Food, Magic, Signs, Pets
Choose result: Signs
If you just want a list of all the vanilla music and this isn't for some dynamically updated thing that needs to include mod music, have you looked at the music spreadsheet?
This works:
var soundBank = this.Helper.Reflection.GetField<SoundBank>(Game1.soundBank, "soundBank", true).GetValue();
var cues = this.Helper.Reflection.GetField<Dictionary<string, CueDefinition>>(soundBank, "_cues", true).GetValue();
I am fully aware of that.. but I want something that can include music added by mods
any idea how to edit info in mods show case?
you cant if you've already posted it
you can ask bouncer to take it down and you can post another
@cyan marsh Full code and output:
var soundBank = this.Helper.Reflection.GetField<SoundBank>(Game1.soundBank, "soundBank", true).GetValue();
var cues = this.Helper.Reflection.GetField<Dictionary<string, CueDefinition>>(soundBank, "_cues", true).GetValue();
File.WriteAllText(Path.Combine(this.Helper.DirectoryPath, "cues.txt"), string.Join('\n', cues.Keys));
i would help you but i am not a mod here... i've come to realize i'm a mod in too many discords xD
I just generated a text file with all the sounds using those three lines of code
i see that.. will it work with music cues?
As far as I'm aware, it'll produce all sounds that the game can possibly play
But it doesn't know what's music or a sound effect
You have to run that after any sound has loaded
I do.. i just need to see the values
I want to be abled to put icons on signs, how do I define the size of the icon in the sprites?
hmm i think i can change this code to make it sortable
I appreciate the assistance @tawny ore
I want to learn how to make mods for stardew valley can somewone help?
!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.
and welcome! do you have ideas on what you want to make?
gotta have some kind of idea, if you already know what you want to make, then we can give more specific advice
mabye a simple item like a defalt item with nothin special to get started
thanks
you can use content patcher then
do follow the tutorials/docs above, as well as read the link Person posted above to see how the game organizes its object data
Hi, would it be difficult to change a game's sound, for example?
For example, it's a .wav file of the sound, right? What code would be needed to change the sound specifically? A friend wanted to do this, so I wanted to learn how to teach him.
no worries, welcome to modding! (dont forget to sell your soul to pathos on the way through!)
ok(:
[[Modding:Audio]]
you need to find the cue name of the sound you want to change and then load your own audio on top
.choose Glow, Furniture, Emotions, Sprites, Weather
Choose result: Furniture
is there like a video series?
If you need help lmk.. I've done music replacers only though
But that doesn't seem to be useful for changing the sound of an axe, for example.
what do you mean?
there arent really any up-to-date video tutorials i dont think
Why, it is useful
you target Data/AudioChanges, edit axchop to point to your wav file, and done
lol hang on
@hard fern oh ok
Where would this axchop be?
!unpack
Follow this guide to unpack the game's content files in order to see and explore how the game data is structured.
It's helpful when making your own mods, or just to learn about how the game works!
Unpack wont get the audio I think
Oh, oops
I guess that's why existing sound banks needs a separate effort to document them
The answer to "where" in the game itself is in the _cues field Matt just posted the code for above. In the game data, it's the sound bank file (not wave bank).
And the answer for Content Patcher mods is... it doesn't matter, because CP does special things.
anyway your question is also answered on the doc I linked above
pls peruse and let us know if any part is confusing
@wooden basalt here is a more specific answer json { "Format": "2.5.0", "Changes": [ { "Action": "EditData", "Target": "Data/AudioChanges", "Entries": { "axe": { "ID": "axe", "Category": "Sound", "FilePaths": [ "{{AbsoluteFilePath: assets/newaxe.wav}}" ], } } }, ] } where newaxe.wav is the file you named
sorry @brittle pasture x3
(not me
)
no i said sorry because you were trying to get them to do it on their own
and i popped up with the code
oh I thought you were trying to ping the person asking
but inside Data/AudioChanges there is an empty dictionary to add new sounds, and there are no other sounds already existing in the game to change their sound, how will the game know that I am changing the sound of the axe?
(well that code wont work if the cue ID is axchop and not ax)
yeah Data/AudioChanges is for overrides
it doesn't contain every cue in the game
it's accurate
there's also axchop below
I'm not giving all the answers D: where's the fun in that
Axe and axchop are separate sounds (just Stardew things)
I'm trying to redesign the shed but something about it looks off to me? Any feedback?
What sound does an Axe make when it's not chopping?
I think the regular axe sound might be the "thump" like sound you get when hitting like, a sprinkler with it.
pfff i failed somewhere xD
Whereas axchop is for trees and stumps.
(#making-mods-art is probably better)
(But I'd say the entrance being level with the south wall looks weird? SDV rooms don't work like that)
SDV needs a Lucy mod to give the axe a voice. Points to anyone who gets that reference.
Maybe one is for when you try to chop something your axe can't actually chop?
Like when you try to use a copper axe to get into the secret woods
It's the same sound as hitting a stone with a pickaxe (and not breaking it). I think.
Well, that's why I'm wondering if it would actually work to change the value inside Data/AudioChanges, since the dictionary is empty when extracting using StardewXnbHack
Unlike other documents inside Data, which have a lot of data, this makes me think that Data/AudioChanges is for extra things.
putting down chests also use the axe sound
(though now that i think about it, i dont remember if the axe is actually possessed or not. been a while)
You're adding things to that dictionary with Content Patcher. Doesn't matter that the vanilla data is empty.
I can send it there, I just thought the place was here since I'm not designing any new assests, just using vanilla tilesheets
yeah it's intended to be empty; as mentioned the dict is for overrides (and new mod-added ones), and the game loads its vanilla cues elsewhere already
Immediate thing that jumped out at me is that the top corners arent coloured black (there should be a black tile for that purpose somewhere near those borders on the tilesheet)
That file seems to exist solely for modding purposes. So it's probably empty because the vanilla game doesn't care about it.
i need to stop reading this channel, every time i do i learn info like this that i wish i didn't learn 
I'm definitely planning on that, I've just edited that corner so many times that I'm holding out on filling it so that I don't have to erase it a million times 😅
Lets continue in making mods art genre
ill take a closer look
who knew we can learn eldritch knowledge humans weren't meant to know modding cozy farming sims
Alright! Sorry for sending it on the wrong channel
any artistic endevours is welcome! mapmaking is one of the more common things ppl discuss there really
you're basically painting with the brush being tiles
i think i'm overthinking something
Really? I never look in there 
(speaking of audio, the XactSoundBankSounds in a Cue's sounds list do store a category id)
(so they might be able to be sorted by music, ambient, etc. havent tested)
@tawny ore I'm trying to figure how to take your cues down to a Dictionary<string, string> so I can make a json that shows the cue definition... i seem to be missing something
Can you share an example of what you expect the output to look like?
If you're trying to write json, SMAPI has data helpers that can make that easier too
well this is what it gave me
Can you tell me in C# what format AudioChanges uses?
private void EditSounds(object sender, AssetRequestedEventArgs e)
{
if (e.NameWithoutLocale.IsEquivalentTo("Data/AudioChanges"))
{
e.Edit(asset =>
{
var data = asset.AsDictionary<string, AudioChangesData>().Data;
});
}
}
Visual Studio did not recognize this AudioChanges
.choose tiny, normal, fix, color, sleep, other, relax.
Choose result: relax.
i was using a foreach but instead of cue.Key it only response to Keys and Values
You'll need to cast the values to a Dictionary<string, string>, but besides the keys, what additional part of the dictionary are you trying to represent?
As in
{
"axe": "what?",
"axchop": "what else"
}
I don't know whats in the CueDefinition
Huh, you might actually have something there, it looks like 2 is used for music, 3 for fx and 4 for ambient, at least in some cursory random sampling.
#making-mods-general message i only have a partial image
Ah, I see. The easiest way for me is to inspect it in the Debugger.
I don't know how you'd interpret it if different sounds in a cue have different categories, but maybe you'll get lucky and that just doesn't happen.
i want to read what it is and i could probably make a sorter
So like, if I do this, then I can just see what cues looks like in Visual Studio:
private void OnGameLaunched(object? sender, GameLaunchedEventArgs e)
{
var soundBank = this.Helper.Reflection.GetField<SoundBank>(Game1.soundBank, "soundBank", true).GetValue();
var cues = this.Helper.Reflection.GetField<Dictionary<string, CueDefinition>>(soundBank, "_cues", true).GetValue();
Debugger.Break();
}
in practice i dont think they should, as at least with AudioChanges i believe the list is just like, if you're adding multiple possible sounds to one audiochange to choose from at random, in which case they all use the same overall Category. i would assume (hope) vanilla does the same
I don't think you need the first line, isn't Game1.soundBank public?
Oh yeah right, I forgot it's actually Game1.soundBank.soundBank
(totally normal, nothing to see here)
imo the 'off' part is fromm the diagonal walls, where the top is angled and the bottom is flat. i'm not sure if you're going for a curved roof effect, but if not that would be my call
It's AudioCueData
(5 should be the footsteps category btw)
(the type of the dictionary value)
this is all well and good.. but i need my program to sort it... not just let me look at it
AudioChanges is a Stardew thing, not part of the XNA API
to do that i need to make individual keyvaluepairs
i know it is, im saying i hope stardew handles its cues with the same premise
that no cue should have multiple-categoried sounds within it
Ah, well, I expect it does most of the time but there's probably nothing validating it.
I understand what you're trying to do, but if you just want to inspect what's in a cue, then you can use debugging to do that, and then separately once you've identified the fields you want to extract then you can code for those fields. Here's what it looks like when I debug the code. It stop there and I can see what all is available.
They are insisting on using AudioChanges, I am trying to see if it works, but each piece of information they give me makes me more confused.
ive spent far too long digging around in the game and XNAs audio stuff to have any mental energy left to check if there is
Once you know what you're looking for, sorting is easy
focustense was replying to me. different conversation, unrelated to what you're doing
You do have to use audio changes. I was referring to the fact that the built-in soundbank has its own XNA-specific data. You cannot touch that data.
id like to know that too xD
(I mean, technically you can, but messing with the raw soundbank/wavebank data would be an even worse idea than doing XNA mods)
Like you can't just arbitrarily sort on unknown fields. Unless you mean you want to sort by keys in which case that's easy.
So what is the correct way to modify the sound of the axe?
the idea is "Cue": "definition",
What is definition?
Data/AudioChanges
the way Selph was telling you to
There was a JSON posted above showing exactly how to do this, down to the line.
this is all i got rn xD
I want to do it using c# to learn
CueDefinition is an object that has a bunch of properties. So you're not really going to get a single string representation of that... unless you somehow serialize the whole object
CueDefinition has sounds which is where the categories and stuff are, on the XactSoundBankSound
I'm not sure what else you'd sort by, the dictionary key is already the cue name.
Case in point, you're trying to convert this into a string, but it isn't really something that can be represented as a string. (I mean technically you can, but for the purpose of what you're doing it's not really helpful to try to do that)
What you do in C# is basically the same as CP, just manually
Anyway the C# code you posted is a good start actually, you were just using the wrong type
var data = asset.AsDictionary<string, AudioCueData>().Data;
Yeah that's the type that AudioChanges should be.
I think I just found some side stair tilesheets
(as in, AudioCueData, not AudioChangesData)
I just don't know if they will look good
From spring_outdoorsTileSheet
Wait I sent it on the wrong channel
Aaaaaa
Sorry guys
i have a problem where my winter portraits aren't working?
my winter sprites are fine
https://www.nexusmods.com/stardewvalley/mods/31520
Have ya always wanted sebastian to be Shirtless at ginger island?
well now he is!
sorry i had to edit the card since i put the wrong saying
i've moved foward...
@cyan marsh here's an example where I output a Dictionary<string, string> json file, I'm using the category as the value part, and I'm sorting by the name.
var soundBank = this.Helper.Reflection.GetField<SoundBank>(Game1.soundBank, "soundBank", true).GetValue();
var cues = this.Helper.Reflection.GetField<Dictionary<string, CueDefinition>>(soundBank, "_cues", true).GetValue();
var sortedCues = cues.Values
.ToDictionary(
cue => cue.name,
cue => string.Join(',', cue.sounds.Select(sound => sound.categoryID).Distinct()))
.OrderBy(dict => dict.Key);
this.Helper.Data.WriteJsonFile("sounds.json", sortedCues);
Just realized the data wrote key value pairs instead of a dictionary
(well at least with a quick scroll i dont see any cue having multiple categories)
This works:
var sortedCues = cues.Values
.OrderBy(cue => cue.name)
.ToDictionary(
cue => cue.name,
cue => string.Join(',', cue.sounds.Select(sound => sound.categoryID).Distinct()));
Had to put the OrderBy on top
i can change the portrait for maru but when i try to change the portrait for harvey it says fixed
@brittle pasture
if (e.NameWithoutLocale.IsEquivalentTo("Data/AudioChanges"))
{
e.Edit(asset =>
{
var data = asset.AsDictionary<string, AudioCueData>().Data;
data["axe"] = new AudioCueData
{
Id = "axe",
Category = "Music",
FilePaths = new List<string>
{
"assets/axe.wav"
},
StreamedVorbis = true,
Looped = false
};
}, AssetEditPriority.Default);
}
It didn't work
Your path needs to be made available to the content pipeline
use the ``` ``` please DX
The game doesn't have direct access to your assets folder
You can use this.Helper.ModContent.GetInternalAssetName("assets/axe.wave")
Can't do that either
You don't want the internal asset name
You want the fucking absolute path lol
actually that's not how- atra beat me
Sounds are a ducking cluster lol
which one do yall want running a seed and fertilizer shop, a raccoon or a squirrel
I want the Racoon and Squirrel to be buddies, and they work on different days
Then again, since Racoon shop is already a thing, maybe Squirrel to be more unique
im downgrading my FarmersMarket mod alot, like getting rid of the location and moving the shop to the secret woods entirely (there were some... issues with the way i did it before)
But when I load an asset, it loads directly from the content
example:
if (e.Name.IsEquivalentTo("Portraits/Abigail"))
{
e.LoadFromModFile<Texture2D>("assets/abigail-portraits.png", AssetLoadPriority.Medium);
}
sounds work differently
as mentioned sounds are different
Yes. Because pathos is lovely
why? because
Why can't you do the same for audio?
because you cant
so 2 is Music... 3 is soundeffects and 4 is ambient...
you have to do it the audio way, which expects a full file path
Also, your edit is loading the data model, but that's entirely separate from what LoadFromModFile does.
Even if you were editing a data model for an object, and you pointed it to a texture, you would need to separately load that texture or provide the internal asset name.
plus.. the code is aware of mods 😄
Data models do not automatically have access to your mod folder
so squirrel or raccoon, you can only pick 1
Awesome, sounds like you can convert the numbers to a string representation, and make the sound list much easier to update!
So how can I do it?
well.. i don't need the value past the sorting process...
this will allow me to make 3 different lists.. more in-depth than i thought
oh crap im in the wrong channel srry
Yeah you can use three
File.WriteAllText("music.txt", string.Join('\n', cues.Where( ... )))
to produce a file for each category
"[Portraiture] Loaded Active Portraits: Odette's Portraits
[Portraiture] Loaded Active Presets for Harvey:Vanilla"
why does it say vanilla harvey, how can i reset it?
Absolute file path means it needs everything from the drive to the folders/subfolders all the way to your file
So you can maybe use a utility method to get that
Maybe?
Path.Combine(this.Helper.DirectoryPath, "assets/axe.wav")
when i try to change harvey in game, it only says fixed
I need to check if DirectoryPath is relative or absolute
i'd deeply appreciate it if someone could help me
do you have a log, or a file you're editing?
you are working with portraiture which not everyone here is familiar with
not really
ok i'll remember that
Is Portraiture still officially supported? I was under the impression that most Platonymous mods just weren't really being used anymore
if you do not have a log or json that you are working with to share then the odds of getting help plummet to basically 0
The code looked like this
private void EditSounds(object? sender, AssetRequestedEventArgs e)
{
if (e.NameWithoutLocale.IsEquivalentTo("Data/AudioChanges"))
{
e.Edit(asset =>
{
var data = asset.AsDictionary<string, AudioCueData>().Data;
data["axe"] = new AudioCueData
{
Id = "axe",
Category = "Music",
FilePaths = new List<string>
{
Path.Combine(this.Helper.DirectoryPath, "assets/axe.wav")
},
StreamedVorbis = true,
Looped = false
};
}, AssetEditPriority.Default);
}
}
It didn't give any error in smapi, but it didn't change the sound of the axe
You may need to change the other axe sound since the game uses two of them
wait i understand
for some reason, the json says
{
"changeKey": "P",
"menuKey": "M",
"fixPortraitKey": "O",
"styleChangeKey": "I",
"ShowPortraitsAboveBox": false,
"MaxAbovePortraitPercent": 80,
"SideLoadHDPWhenNotInstalled": false,
"SideLoadHDPWhenInstalled": false,
"HPDOption": true,
"active": "Odette's Portraits",
"presets": {
"Presets": [
{
"Character": "Harvey",
"Portraits": "Vanilla"
}
]
}
}
so just get rid of presets and it is all good?
Yes, it was the sound when I cut something that the axe cannot cut.
i'm not familiar with mods so i don't really know what to share
The sound when you cut something the are cannot cut is not axe
We're seeing a lot of unformatted json here. FYI @dreamy pagoda @pine elbow when sharing json it's recommended you use smapi.io/json so that it's easier to read
!json
JSON is a standard format for machine-readable text files that's used by Stardew Valley mods.
If you need help with a JSON file, you can upload it to smapi.io/json to see automatic validation and share the link here.
When making mods, it's recommended to edit your files in a text editor with JSON support, such as VS Code, Notepad++, or Sublime Text. These programs will check for syntax errors.
It's like smallshake or something
Use debug logsounds
To find the actual sound cue
And I have to ask
Why do this in c#
They mentioned earlier wanting to learn how to do it in C#
(read the code, can confirm the tree chopping sound is axchop, axe is used for, among other things probably, putting down chests)
okay sure
(sakura hasnt posted any json though so i wouldnt point them towards the uploader. i dont know what would be recommended for C# besides just pastebins or gists but for quick snippets idk, but a code block would be nice at least)
woop.. properly sorted
data collection is going swimmingly
i guess it is pointless now lol
Oops, that's right. For C# it's
```cs
// your code goes here
```
At least that shows the json is properly formatted, so that's good
everyone who helped me with ideas of what to do, it worked, thank you very much
@tawny ore ```cs
public void MusicID()
{
string pathmusic = Path.Combine(Environment.CurrentDirectory, "ExtractedData", "MusicList.txt");
string pathsfx = Path.Combine(Environment.CurrentDirectory, "ExtractedData", "SFXList.txt");
string pathambient = Path.Combine(Environment.CurrentDirectory, "ExtractedData", "AmbientList.txt");
List<string> musiclist = new List<string>();
List<string> soundlist = new List<string>();
List<string> ambientlist = new List<string>();
var soundBank = this.Helper.Reflection.GetField<SoundBank>(Game1.soundBank, "soundBank", true).GetValue();
var cues = this.Helper.Reflection.GetField<Dictionary<string, CueDefinition>>(soundBank, "_cues", true).GetValue();
var sortedCues = cues.Values.OrderBy(cue => cue.name).ToDictionary(cue => cue.name, cue => string.Join(',', cue.sounds.Select(sound => sound.categoryID).Distinct()));
// 2 is music 3 is SFX 4 is ambient
foreach (var def in sortedCues)
{
string parseValue = def.Value.ToString();
if (string.Equals(parseValue, "2"))
{
musiclist.Add(def.Key.ToString());
}
if (string.Equals(parseValue, "3"))
{
soundlist.Add(def.Key.ToString());
}
if (string.Equals(parseValue, "4"))
{
ambientlist.Add(def.Key.ToString());
}
}
File.WriteAllLines(pathmusic, musiclist);
File.WriteAllLines(pathsfx, soundlist);
File.WriteAllLines(pathambient, ambientlist);
Monitor.Log("Audio Lists saved!", LogLevel.Debug);
}
Nice, I'm glad it all worked out
appreciate the work
well in terms of data collection.. i think that is all
I can now start work on the next portion of the toolkit
I don't understand why I'm getting this error, can someone help? https://smapi.io/json/content-patcher/7426996dd1fa440bbb5973200d484506#L185
Missing ", line 180
Oh. I missed that, ty!
I hate Nexus so much. Spent 15 minutes writing the first third of the mod page, think "I should probably save, just in case", hit the Next button, and... "you do not have permission to perform this action". All gone.
nexus is so broken, i uploaded a file and it got a falsly flagged for viruses and when it got verified after i contracted support, the file was corrupted so i had to reupload it
Office Space energy.
nexus should remove the articles feature, i mean has anyone actually used it?
I don't know why we use Nexus as the main hub for Stardew Mods, we should use the forums or something else.
The biggest sanity thing I did for myself for modding
Nexus is the Fandom of modding sites.
Was to write a markdown to bbcode convert
So I could draft mod pages in markdown, etc.
no offense to the forums but id rather use i think anything else as a modding hub
or a github repo
Then just do a copy paste
lcpdfr.com uses a good solution.
We could also just use Moddrop, their app is already natively available and supports SMAPI.
i personally dont mind nexus overall
its too buggy
Have you tried their new beta site?
Sure it's not completely different, but they are improving it.
I wish Modrinth was a bit less hard coded for Minecraft.
Well, it was only ever intended for Minecraft.
The whole goal with it was to be a better CurseForge for Minecraft mods.
Yes, I am aware.
no? where can i find it?
Well it'll come up as a popup near the top of the website with a blue banner.
Otherwise just replace www with next in your URL and it should work.
I like moddrop's website but i feel concerned about how the lead person for it is apparently missing, is that true 
ok so... i have everything fixed. the only problem is, when i warp myself and harvey to south island, his sprite doesn't change to the south island outfit
i have a custom outfit for him, his regular and winter sprites work, but the south island outfit isn't appearing
i actually don't know how to activate the south island sprites either
the south island portrait doesn't work either, unless it is because i am in winter?
Is he visiting island for real
somebody cooked here...
Maybe special nonsense around island outfits
i can never tell the difference between #making-mods-general and #modded-stardew since the same conversation is going on in both half the time
they are trying to fix that
Oh hey Miss Coriel, how goes the NPC Creator?
been working on it's toolkit lately
Oh nice, any other projects you're up to?
music mod..
Oh?
what layer is the player on?
yeah i finally converted it to CP
Oh cool.