#making-mods-general

1 messages · Page 211 of 1

dusk mulch
#

Oh yeah.

naive wyvern
#

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 😔

vernal crest
#

You targeting a tmx bub

naive wyvern
#

Oh! do I take off .tmx for that?

vernal crest
#

And also assets?

#

Your Target is the game asset name, not your mods folder file or its path.

naive wyvern
#

yeah wait lemme show my folder structure kamo_laugh
I separated the clock hands from the main map folder because i didnt want them clogging up stuff

vernal crest
#

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?

naive wyvern
#

yess gimme a sec
yknow it might be because i forgot to add my {{ModID}} now that I think about it

vernal crest
#

It's definitely not just that

#

This "Target": "assets/Maps/RuneskeepSquare.tmx", is a completely invalid Target

dusk mulch
#

Do I do the same thing for .tsx files in ATA?

naive wyvern
#

ay oops I copied my edit strings, disregard that kamo_laugh

uncut viper
#

inside the .tsx is more xml

vernal crest
#

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.

naive wyvern
#

oh! okay thank u aba SDVpufferheart

uncut viper
#

(correct slashes are irrelevant, SMAPI normalizes them)

vernal crest
dusk mulch
naive wyvern
#

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 kamo_laugh

uncut viper
#

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

vernal crest
#

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.

uncut viper
#

a .tsx stores information about your tilesheet

vernal crest
#

I know

uncut viper
#

if you just delete a .tsx without then fixing the map then things break

vernal crest
#

I know

uncut viper
#

ATA does not ever know or care if you used tsxs or not

vernal crest
#

(Sorry if that seems short, I am not intending to be terse!)

uncut viper
#

all it cares about is when the game reads what the source is for a tilesheet

vernal crest
#

Okie dokie cool thanks

uncut viper
#

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

gentle rose
#

I think it's monogame!

naive wyvern
#

😔 my little clock hands arent showing up
could it be my file names?

gentle rose
#

from what I remember from messing with monogame outside of stardew

naive wyvern
vernal crest
# dusk mulch I would like to get rid of them...

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.

lusty elm
#

Are all of those dynamic tokens named the same thing? does that work?

#

I've never used them before, so i dont know rooBlank

uncut viper
#

thats how dynamic tokens have to work

#

if you want them to change value dynamically

lusty elm
#

okay, that makes sense.

uncut viper
#

CP parses them in order from top to bottom

vernal crest
uncut viper
#

so the bottom-most valid one will be used

naive wyvern
dusk mulch
#

.

#

So I just realised that one of the files corrupted in the mod, which was one of the farms.

vernal crest
dusk mulch
#

I assume so, I was also moving alot of files around from the garbage bin and back so I expected as much

vernal crest
#

Probably just a tilesheet path issue then

dusk mulch
#

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

vernal crest
#

Exported what file? From where?

dusk mulch
#

okay

#

The farm file, I was embeding the layers, exported it into the mod.

vernal crest
#

I have no idea what you mean. You exported a .tmx file from somewhere into somewhere else?

dusk mulch
#

What?

#

No.

vernal crest
#

I also don't know how you export something into a mod.

lusty elm
#

.choose recycle, small, normal, green, color.

patent lanceBOT
#

Choose result: color.

vernal crest
#

You also can't embed layers AFAIK

dusk mulch
#

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

vernal crest
#

I'm good, thanks. I'm already booked for all of 2025 working on my own two mods lol

dusk mulch
#

welp im -1 keycap now

#

Well I guess I will need to think of a new mod idea.

vernal crest
#

RIP keycap

dusk mulch
#

like idk where it went, it vanished into the boid

#

void

#

nvm i found it

#

thinkly thinking intensifies

lusty elm
dusk mulch
#

oooo can i try

vernal crest
#

You don't need Draylon's permission to make a recolour mod lol

dusk mulch
#

i meant the command

#

lol

lusty elm
#

making a recolor? you can, but its not something i would describe as easy, for aesthetic reasons mostly.

#

oh

dusk mulch
#

Oh great Maru's Robot, What is my destiny?

vernal crest
#

Sure you can if you want to

dusk mulch
#

.choose recycle, small, normal, green, color.

patent lanceBOT
#

Choose result: recycle

dusk mulch
#

uh

#

what does that mean

vernal crest
#

Now you have to guess what Draylon's recycling mod idea was /j

dusk mulch
#

lol

lusty elm
#

Its choosing between prompts i gave it xD

dusk mulch
#

ik so what does recycle mean

lusty elm
#

That one is actually probably the easiest if you actually want to try.

dusk mulch
#

Hit me

lusty elm
#

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.

dusk mulch
#

OW WHY DID YOU HIT ME

#

ohhhhhhhhhhhh

vernal crest
#

That's a great idea Draylon

dusk mulch
#

hmmm i think i can do something like that

dusk mulch
vernal crest
#

I'm always making like 4 or 5 paths at a time so I don't accidentally end up with extras

uncut viper
#

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

lusty elm
#

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.

gentle rose
#

cjb to spawn and pause time

rancid temple
#

You can just add more recipes to the Deconstructor as well

lusty elm
#

Huh.... how long has that mod idea been on my to-do list?

uncut viper
#

tbh i didnt realize it took paths

#

i forgor they were craftable. bc of the aforementioned spawning of them lmao

rancid temple
#

It takes anything with a crafting recipe

lusty elm
#

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.

rancid temple
#

So most things it should already do, but there are some things missing like transmutation recipes don't get put in there

dusk mulch
uncut viper
#

yeah i just forgot that paths werent like, just a buyable thing

dusk mulch
#

actually-

#

I will do it that way

lusty elm
#

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.

rancid temple
#

Harder mode: use Extra Machine Configs to give everything perfect return recipes

dusk mulch
#

where is its data stored

lusty elm
#

Data/Machines probably?

dusk mulch
dusk mulch
lusty elm
#

you can also check to see how other people added recipes by looking at published mods.

vernal crest
#

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.

dusk mulch
#

i think ive done too much modding and thats why i am abandoning everything, i need to take a break

lusty elm
#

If you want to take a break, take a break.

dusk mulch
#

ok

lusty elm
#

Do some cleaning, make some food, watch some youtube/tv/twitch, play a game, read a book, sleep. 🤷‍♂️

dusk mulch
#

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

lusty elm
#

that sounds depressing, I'd recommend avoiding that, unless you find such things strangely motivating.

dusk mulch
#

depression is my motivation, in a weird way

#

anyway by

#

bye

lusty elm
#

rooThink not difficult, just time consuming to do properly i think. (only change is grass color on the spring_outdoors)

unkempt beacon
#

Oh my god I’m so proud of myself I successfully recoloured a texture pack

naive wyvern
#

that looks lovely draylon

unkempt beacon
#

Me and blue are enemies

lusty elm
#

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.

rigid musk
#

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

lusty elm
#

Anything working right on the first go is suspicious

rigid musk
#

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

lusty elm
#

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!

mighty ginkgo
#

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

vernal crest
rigid musk
vernal crest
mighty ginkgo
rigid musk
#

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

vernal crest
#

That's unusual

rigid musk
#

I thought maybe i was just doing my keys wrong (you know, forgetting brackets and whatever)

#

that is not the case though... confused_mathlady

#

All of my mods are up to date too

vernal crest
#

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?

rigid musk
#

it just shows brackets or an empty box

rigid musk
#

the only thing that did work was just putting straight text in there

vernal crest
#

Do you have any other mods with marriage candidates that use i18n that you can check to see if they're working?

rigid musk
#

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

vernal crest
#

Do you want to share the dialogue file and the i18n file to get some other eyes on it?

rigid musk
#

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'

devout otter
#

Oh, did you directly Load his marriage dialogue before?

rigid musk
#

I did

#

I loaded it to whatever json I had that it was named

#

isntead of to a blank

dusk mulch
#

ok my break is over time to get back to modding... in the morning, its 10pm rn

devout otter
#

Tokens and translation tokens cannot be directly Loaded. The working method is exactly to load a blank.json first.

rigid musk
#

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

vernal crest
#

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.

lusty elm
rigid musk
#

I honestly don't know what I was doing... and I'm not gonna find out

#

It works now which is what matters tbh_dances

mighty ginkgo
#

i did switch to the farm mid save (from the vanilla meadow farm), not sure if that can mess anything up with the bushes

spice inlet
#

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

lusty elm
#

Stumps property will respawn them yeah. There are mods for bush destruction if needed but I don't know what's respawning them.

mighty ginkgo
#

they are the type of a bush you can break with an axe but it just seems to respawn the next day

lusty elm
lusty elm
mighty ginkgo
#

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

lusty elm
#

I know base Bushes aren't normally destructive so they are probably using EMP as it has a functionality to make them destructible.

mighty ginkgo
#

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

lusty elm
#

Probably.

calm nebula
#

(Is booked through 2025 even not considering mods)

lucid iron
#

Should be fixed in 1.5.3

rigid musk
#

Is there a best time to post mods pondering like if I waited until the afternoon... would that be better

calm nebula
#

If you want attention Friday afternoon is best

rigid musk
#

Yeahhh yeah

calm nebula
#

If you want to avoid attention, try middle of the night on Tuesday

rigid musk
#

I was going to post it on Friday of last week kekw

#

And then I spent an extra week making him marriable because im ill

lucid iron
#

just post when its done no thoughts only ship

rigid musk
#

I mean I could post it right now

#

At this very moment exactly

drowsy pewter
#

I always post the second I wrap up the last bug because I'm impatient as hell

rigid musk
#

I am impatient but I will also cry if this does not get attention, I'm sensitive/hj

lucid iron
#

Mood, you & your mr qi will always be famous to me

rigid musk
#

🥹 thank you

brittle pasture
#

I should post my pile of updates + Furniture Machine eventually
alas Civ 7 eated my free time

lucid iron
#

Is furniture machines a separate mod

teal bridge
#

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..

brittle pasture
#

it's separate, but now that I removed all the transpilers from it I'll probably fold it into EMC

lucid iron
#

central station also immediately became a dependency of stardew aquarium though, the framework boost

teal bridge
#

Probably, but you can't exactly rely on that kind of serendipity, I place that in the aforementioned "luck" bucket.

lucid iron
#

But he maintains aquarium Dokkan

#

Give luck to self

teal bridge
#

I thought someone else (G something) was maintaining that.

lucid iron
#

I don't think this really applies to the mod lily is make tho, an npc

teal bridge
#

Having an easily-searchable name probably also helps over the long term. Nexus literally won't find AFS unless I type the exact name.

hallow prism
#

gervig is the main maintainer of aquarium

lucid iron
#

Those r down to whether your preview image pops, no idea how that works tbh

hallow prism
#

Pathos helped with the C#, atravita did too

#

what is AFS?

lucid iron
#

Feesh

lucid iron
#

For an npc mod i mean

#

If your images make good impression ppl download

teal bridge
#

A Fishing Sea, the one I promised to add VMV support for and still haven't gotten around to doing (sigh).

hallow prism
#

ah yeah! (i have a WIP with that acronym too, so maybe i'll see if i can find something working better)

lucid iron
#

How good impression works is mystery

teal bridge
hallow prism
brittle pasture
#

despite being a rather nothing mod

lucid iron
#

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

teal bridge
#

I don't think Pen Pals had a super impressive thumbnail. But, yeah, maybe AFS is extra bad for that.

lucid iron
#

Sorry i broke up msg inconveniently

reef kiln
#

I love animal multiproduce, it is not a nothing mod.

hallow prism
#

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

lucid iron
#

Nexus search is famously bad bc it only works on titles

teal bridge
#

And I only maintain 7 mods, imagine being one of those people with 50.

reef kiln
lucid iron
#

I started doing Quirky Mod Name - Searchable desc of what Mod do lately

teal bridge
hallow prism
#

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

lucid iron
#

Hm i tried just now, it's there

teal bridge
#

Ah. It shows in the "full results" but not the inline popup search thing.

brittle pasture
#

same
maybe your keyboard's firmware is accidentally inserting zero space widths every other letter /s

hallow prism
#

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)

lucid iron
#

Do u have opinion on whether searching "fish" should include results for "fishing" or "fished" etc

#

Discord search seems to do that

teal bridge
#

If I were designing a full-text search engine then I would definitely use stems.

brittle pasture
#

Discord search is poo
Try searching for "animal"

hallow prism
#

(focustense, will it bother you if a npc mod had AFS as abbreviation, do you not care, else?)

teal bridge
#

You boost exact matches but show all matches. (Of course, Discord butchers the boosting)

teal bridge
brittle pasture
#

(spoiler: you also get results for "animated", "animation", "anime", etc. for some gods know reason)

teal bridge
#

Would not surprise me if there's already some other mod whose initials are AFS that we don't know about.

hallow prism
#

ok, thanks! i feel it may be ok in context usually but we can always clarify if needed

#

possible indeed

lucid iron
#

Sounds like u just gotta rename extra animal config to extra livestock config selph

#

Solves everything trust

teal bridge
#

And it was built in to a lot of the ancient database engines, which Nexus almost certainly uses for its backend.

lucid iron
#

Wait but nexus search doesn't do that

teal bridge
#

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.

brittle pasture
teal bridge
lucid iron
#

Nvm i am silly DokkanStare

teal bridge
#

(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)

lucid iron
#

I thought fishing would show fish result too

#

But hm I don't think the animal silliness is there bolbthinking

teal bridge
#

Yes, I can see why that would be your first guess having been exposed to modern searches. But Soundex is phonetic, not stem.

lucid iron
#

Not getting mods like fast animation when i search animal on nexus at least

vernal crest
#

I thought selph was saying all the animal search things were discord

brittle pasture
#

yeah it's discord

#

Nexus only does exact text as far as I know

vernal crest
#

They're both terrible for searching in different ways imo

teal bridge
#

Discord search is definitely special in its own way.

lucid iron
#

There's a mod that's named Start with 1 Fishsomker

teal bridge
#

Back in the bad old days, we used to score really good deals on eBay by searching for misspelled names.

vernal crest
#

I thought a fishsomker was maybe the German word for lure or something at first just then xD

lucid iron
#

And kailey tried to correct them so that it work properly in search

#

The author replied in Chinese so im not sure they understood

teal bridge
#

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.

brittle pasture
#

hmm somked fish

#

is that nordic

reef kiln
#

Sounds like something the Swedish Chef would say from the Muppets.

teal bridge
#

Huh, maybe that mod really doesn't exist. I'll have to make it for April.

hard fern
#

Fish somker...

lucid iron
#

Ghoti mod that rearrange everything to equiv spelling

teal bridge
#

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).

rancid musk
# teal bridge Phonetics are hard, I'd rather just transpose letters randomly.

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.

tawny ore
#

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

ivory garden
#

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.

teal bridge
#

Always check the mod permissions, or the source code license if it's open source.

tawny ore
#

If the open sourced license permits it, then you're probably welcome to revive.

molten charm
teal bridge
brittle pasture
brittle pasture
teal bridge
#

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.

calm nebula
#

I feel like the concept isn't hard to do from scratch tbh

#

(Morning!)

ivory garden
#

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

ivory garden
lucid iron
#

What does groupable chests do

molten charm
lucid iron
#

You need EditImage

ivory garden
# lucid iron What does groupable chests do

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.

lucid iron
#

Wow i specifically made a mod to autosort whenever i do anything with chest lol

ivory garden
#

I like having this organized a certain way. And vanilla stardew just tosses them how they want lol. Really bothers me

lucid iron
#

I would actually just change how things sort

#

Yoinked this from atravita, is MIT

ivory garden
#

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

lucid iron
#

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

ivory garden
#

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.

calm nebula
#

Just replace all of item grab menu

lucid iron
#

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

ivory garden
#

Right so I’m starting to read up on how these could be made. I do appreciate the discussion

lucid iron
#

!decompile

ocean sailBOT
lucid iron
#

!harmony most likely need this

ocean sailBOT
#

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:

topaz tusk
#

Anyone have any custom npc tutorials?

brittle pasture
#

!npc

ocean sailBOT
#
Creating a Custom 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:

topaz tusk
#

Thank you!

#

Where do i start coding?

tribal ore
#

I find it is really helpful to have an example to look at, so maybe go check out Hat Mouse Lacey

rigid musk
#

I think this mod drove me insane (I added the first images a bit ago and the second images this morning)

tribal ore
#

These look great, Lily!

rigid musk
#

Thank you...

#

the names i gave them indicate my insanity

tribal ore
#

My favorite is "mawwaige" ^_^

rigid musk
#

The descent into madness if you will

#

Mawwiage...

tribal ore
#

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

hard fern
#

Pick the funniest dialogue line to show offM

#

*?

tribal ore
tawny ore
#

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.

hard fern
#

Is it not possible to just set up mod groups? (Sorry if im misunderstanding this btw)

tawny ore
#

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.

hard fern
#

Oh, hmmm im not sure then... I haven't heard of something like that before

#

😅 sorry i couldn't be of any help

lucid iron
#

Hm can you set the env var when you debug launch?

tawny ore
#

Oh I think I figured it out

#

I added this to a <PropertyGroup>:
<StartArguments>--mods-path "X:\_mods"</StartArguments>

rare orbit
#

hey? when playtesting a mod right? what are some mods i should have installed?

#

mainly cosmetic but in general

tawny ore
#

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.

rare orbit
#

cool cool

lucid iron
#

My test mod profile is getting too big

rare orbit
#

mostly ask since idk what i should always have on hand when testing

lucid iron
#

But i dunno if the goal is to try and hit incompatibility then just use ur normal list

jagged cairn
#

I just use my regular mod list, 176 folders so far, and let people report other incompatibilities

lucid iron
#

I was speak from pov of initial dev when me mod doesn't even work

tawny ore
#

That's why I'm trying to customize what I test with per mod

#

My load time is blowing up

rare orbit
#

ahh ok

#

i just ask too since i have a rather large list

lucid iron
#

I assume u would have a super computer

rare orbit
#

at 1,365

#

welll

#

not really??

#

i added 16gb of ram to my laptop

lucid iron
#

Unless it's like cant believe this load time is higher than 10s

rare orbit
#

but i've had this thing since college

tawny ore
#

I'm restarting the game so much between tests that the seconds I can shave make a big difference in my productivity

rare orbit
#

it's a gaming laptop

lucid iron
#

Oh don't u have hot reload

hard fern
#

When im testing mods i keep it to like, frameworks, cjb cheats, and noclip/debugmode just to make sure it actually works

lucid iron
#

I thought that was working in rider

tawny ore
#

I hot reload too, but I'll still stop and reload depending on the amount of changes I'm making

calm nebula
#

And then I test never

lucid iron
jagged cairn
lucid iron
#

I am kind of used to no hot reload ever

tawny ore
#

I'll especially reset if I want to reset the conditions of my test

lucid iron
#

The extra seconds r not that bad cus i can zone out while it is happening

calm nebula
tribal ore
#

... didn't know hot reloading was a thing. Sounds useful, though?

true coyote
#

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

brittle pasture
#

you have Field (the unused field) immediately followed by false instead of the output

true coyote
#

output as in how many it makes? for clarity

brittle pasture
#

as in what it makes (the item id + the quantity)

latent mauve
#

Yield is what it's called on the wiki

true coyote
#

hmm theres a couple of different fences, just go with 322 for wood fence then or?

hard fern
#

is this a custom fence?

true coyote
#

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

brittle pasture
#

I thought you were adding a brand new custom fence item

true coyote
#

yeah

latent mauve
#

You would go with what you defined your fence as in Data/Fences or the object data for yield since you want YOUR fence

hard fern
#

then your yield should be your fence

#

setting it to the wooden fence would make your recipe produce wooden fences

brittle pasture
#

also once you fix your recipe, your unlock condition is "none" meaning it isnt unlocked from the start

latent mauve
#

Since you can get your fence through CJB, you defined it somewhere

brittle pasture
#

change to "default"

true coyote
#

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..

lucid iron
true coyote
#

"Picket Fence": "388 5/Field/default"/false/none"

#

oops extra " in there

#

oh

#

I se nowI cannot read

hard fern
#

"{{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)

ripe crow
#

anyone have any cute soft recolor mods?

#

idk where to ask this

hard fern
ripe crow
#

ty

hard fern
#

this is where we make the mods ^^

brittle pasture
hard fern
#

uh oh did i just scope creep myself

rancid musk
tawny ore
#

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

rancid musk
#

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>

true coyote
#

hmm wrong i18n string for it, must have something named wrong somewhere..

tawny ore
#

Oh I like that, creating a ModSet property that is

rancid musk
#
  1. Hardcoded GamePath is necessary since this file is evaluated before the autodetection of GamePath from ModBuildConfig
  2. 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?)
tawny ore
#

I should be able to use my shared file to do the GameModsPath and StartArguments, and override in each csproj

rancid musk
#

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.

tawny ore
#

SMAPI's detection already works for me for GamePath since it uses Steam's registry entries which are correct for my setup

rancid musk
#

Yeah but that detection runs after this file is parsed

#

I dunno I was having trouble without setting it manually

true coyote
#

ahhh it fixed my tilesheet issue

#

although I dont like how the vertical pieces align with horizontal

#

buuut its not changing tones aagh

tawny ore
#

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

true coyote
ocean sailBOT
#

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

jagged cairn
#

target area (X:0, Y:0, Width:56, Height:356)

true coyote
#

I have, none of them specify a patch of that size

jagged cairn
#

🤔

true coyote
#

unless I'm straight up blind, which is, a possibility

jagged cairn
#

ctrl+f for "56"?

true coyote
#

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

fervent horizon
#

Can you post your json?

#

You can post it in the validator on the Smapi site

fervent horizon
#

and you are sure the canvas size for this - "Texture": "ShilohAreles.CuterPicketFence/Default Fence", - is not 56?

true coyote
#

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

fervent horizon
#

1 and 3 were the ones throwing the size error

dusk mulch
#

@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.

jagged cairn
#

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.

true coyote
#

The initial reason I'm changing them is because I didn't realize they were corner pieces

uncut viper
#

you are counting any empty transparent space around the sprites, right

true coyote
#

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

languid aurora
# tawny ore So just adding this works for me ```xml <GameModsPath>$(SolutionDir)\mods</GameM...

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>
dusk mulch
#

damn i realised how hard i crashed out last night, im going to recreate the farmers market mod @vernal crest

tawny ore
gentle rose
dusk mulch
jagged cairn
#

Also consider making an app for the Mobile Phone mod instead

tawny ore
#

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
gentle rose
tawny ore
#

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"
  ]
}
gentle rose
tawny ore
#

Yeah it's Powershell

gentle rose
#

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 SDVpuffersquee

tawny ore
#

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

rancid musk
#

Symbolic links my beloved

languid aurora
tawny ore
#

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

languid aurora
#

I've been just removing the symlink to the mod I'm working on, but it is a flaw in the setup

rancid musk
#

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.

languid aurora
#

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

lucid iron
#

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

dusk mulch
#

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.

teal bridge
tawny ore
#

Oh yeah, that's what I do

teal bridge
#

Of course if ModManifestBuilder is in the mix then I don't know, that makes the order of build tasks a bit... strange sometimes.

lucid iron
dusk mulch
#

Not without ATA they don't.

lucid iron
#

With ATA you need a Content prefix, which is it's own kind of nuance

#

!tilesheetclimbing

ocean sailBOT
#

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"/>.

lucid iron
#

This is the thing to avoid

#

I wonder if we could convince pathos to promote ATA to just SMAPI monS

#

It seems safe enough

dusk mulch
#

lol

#

i will see if i wont go insane

lucid iron
#

Not including the game tilesheet is obviously good for respecting copyright but the more practical reason is to let recolors work for your map

dusk mulch
#

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.

proud wyvern
#

ATA?

dusk mulch
#

Arbitrary Tilesheet Access

#

oh wait

#

it might be because of the .png

#

nope

rare orbit
#

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?

hard fern
#

editimage -> Portraits/Sebastian

#

and then you'd want to add a
"When": {"YourConfig": "true"}

rancid musk
dusk mulch
#

@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.

cyan marsh
#

here's an interesting thing... I want to acquire all the Music and Sound Ids with a command... any ideas?

rare orbit
hard fern
#

oh wait beach portraits lol

rare orbit
#

that's the one im targetin

hard fern
#

u just need to stick Sebastian_Beach iirc

#

whatever the name is in the game files

rare orbit
#

kk!

#

just makin sure

cyan marsh
#

I see Game1.getMusicTrackName.. but I am unsure how to use that

dusk mulch
#

FUCKING FINALLY I GOT ONE OF MY MAPS STABLE

cyan marsh
dusk mulch
#

1/4 maps stable... and it took me 30 minutes to do 1, and the rest are tripple its size...

#

😭

hard fern
#

good luck SDVpufferflat

cyan marsh
#

no thoughts on my current situation?

dusk mulch
dusk mulch
hard fern
#

unfortunately i know nothing about C#

dusk mulch
#

you could use patch export blah blah blah (idk what the extension would be)

dusk mulch
#

yeah, srry

i dont do much with music i am just trying to give what i know

cyan marsh
#

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

pine elbow
#

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.

hard fern
#

what are you trying to do in the first place?

#

depending on what it is, you may or may not actually need C#

cyan marsh
#

pretty sure i know that x3

#

most of my efforts these days is C# based

uncut viper
cyan marsh
#

for a moment, I thought that was directed to me xD

pine elbow
uncut viper
#

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

rancid musk
dusk mulch
#

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

cyan marsh
#

@final arch you tend to point me in good directions... do you have any input to my current conundrum?

pine elbow
# uncut viper you give it the name of an asset you create in AssetRequested

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);

uncut viper
#

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

pine elbow
#

What I need is for this.ModManifest.UniqueID+"/watermelon" to be an object in the game that points to assets/watermelon.png

uncut viper
#

you need to use the AssetRequested event

#

yes, you need to use AssetRequested for that too to create your asset name from your png

pine elbow
#

oh

fervent horizon
pine elbow
#

I think I understand now

pine elbow
dusk mulch
uncut viper
#

you are allowed to make up any asset name you want

final arch
#

tho not sure if actual music are held somewhere else

cyan marsh
dusk mulch
#

i think i will make all the farms from scratch

#

but before i can do that i need to fix the STUPID TILESHEET CLIMBING

final arch
#

you just need to have the tilesheet in the same folder when saving

dusk mulch
lusty elm
#

then make it mad, and then fix it.

dusk mulch
#

thats like punching someone in the face then hugging them

rough lintel
#

yeah and it fixes the issue

cyan marsh
rough lintel
#

alternatively just edit the tmx file itself in notepad++ or smth

#

and fix it directly

dusk mulch
#

i will try it then...

dusk mulch
rough lintel
#

make sure you have also loaded the tilesheets in your json too

#

mmm no

dusk mulch
#

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

final arch
cyan marsh
#

i want to be able to generate a text file of it

#

to include mod additions

cyan marsh
final arch
cyan marsh
#

well.. they are there.. but i need to be able to get that to a text file

tawny ore
#

File.WriteAllText(Path.Combine(path, "output.txt"), text);

dreamy pagoda
#

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?

cyan marsh
tawny ore
#

I can be... that's the simplest way to write a text file

dreamy pagoda
sullen sun
#

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.

cyan marsh
tawny ore
#

Oh, I apologize. I thought that was the challenge. I'm not caught up on the prior discussion.

cyan marsh
cyan marsh
tawny ore
#

Ah, so the sound bank has more than just the music. Is that the problem?

cyan marsh
#

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

tawny ore
#

You're going to need Reflection I think

#

Since the _cues are a private field which are part of the SoundBank class

teal bridge
#

Are you trying to distinguish between music cues and sound effects? I looked into that a few weeks ago and decided it was impossible.

cyan marsh
#

<.< it can't be that complex.. I just want it to read the names and tell me them

tawny ore
#

You don't have direct access to the names (publicly) unless you are part of the StardewValley Microsoft.Xna.Framework.Audio namespace

teal bridge
#

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.

tawny ore
#

Yeah, that's why I asked if you cared about all sounds or you're trying to look for just music

cyan marsh
#

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

teal bridge
#

Separate what?

cyan marsh
#

Music, Sound

teal bridge
#

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.

tawny ore
#

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

cyan marsh
#

*sigh

teal bridge
#

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.

dusk mulch
#

.choose Seasons Food Magic Signs Pets

patent lanceBOT
#

Choose result: Seasons Food Magic Signs Pets

cyan marsh
#

Shek's image shows a value i can't see

dusk mulch
#

.

#

i think i did it wrong

teal bridge
#

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.

cyan marsh
#

@final arch that image, could i see the value a bit more?

dusk mulch
#

.choose Seasons, Food, Magic, Signs, Pets

patent lanceBOT
#

Choose result: Signs

dusk mulch
#

hmmmm

#

i could do that

teal bridge
tawny ore
#

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();
cyan marsh
rare orbit
#

any idea how to edit info in mods show case?

dusk mulch
#

you can ask bouncer to take it down and you can post another

rare orbit
#

could any of the mods delete it so i can try again ;-;

#

kk

tawny ore
#

@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));
cyan marsh
#

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

tawny ore
#

I just generated a text file with all the sounds using those three lines of code

final arch
#

you can remove it yourself with a certain react iirc

#

dont remember which tho ^^

cyan marsh
tawny ore
#

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

cyan marsh
#

I do.. i just need to see the values

dusk mulch
#

I want to be abled to put icons on signs, how do I define the size of the icon in the sprites?

cyan marsh
#

hmm i think i can change this code to make it sortable

#

I appreciate the assistance @tawny ore

wooden basalt
#

I want to learn how to make mods for stardew valley can somewone help?

brittle pasture
#

!startmodding

ocean sailBOT
#

Making mods can be broadly divided into two categories:

Usually it’s easier to start with making content packs, since you don't need to learn programming.

brittle pasture
#

and welcome! do you have ideas on what you want to make?

humble timber
#

gotta have some kind of idea, if you already know what you want to make, then we can give more specific advice

wooden basalt
#

mabye a simple item like a defalt item with nothin special to get started

dusk mulch
wooden basalt
#

thanksSDVpufferthumbsup

brittle pasture
#

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

pine elbow
dusk mulch
#

no worries, welcome to modding! (dont forget to sell your soul to pathos on the way through!)

wooden basalt
#

ok(:

brittle pasture
#

you need to find the cue name of the sound you want to change and then load your own audio on top

dusk mulch
#

.choose Glow, Furniture, Emotions, Sprites, Weather

patent lanceBOT
#

Choose result: Furniture

wooden basalt
#

is there like a video series?

cyan marsh
pine elbow
dusk mulch
hard fern
#

there arent really any up-to-date video tutorials i dont think

brittle pasture
#

Why, it is useful
you target Data/AudioChanges, edit axchop to point to your wav file, and done

wooden basalt
#

@hard fern oh ok

tawny ore
#

!unpack

ocean sailBOT
#

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!

brittle pasture
#

Unpack wont get the audio I think

tawny ore
#

Oh, oops

#

I guess that's why existing sound banks needs a separate effort to document them

teal bridge
#

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.

brittle pasture
#

pls peruse and let us know if any part is confusing

cyan marsh
#

@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

brittle pasture
#

(not me SDVkrobusgiggle )

cyan marsh
#

no i said sorry because you were trying to get them to do it on their own

#

and i popped up with the code

brittle pasture
#

oh I thought you were trying to ping the person asking

pine elbow
#

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?

uncut viper
#

(well that code wont work if the cue ID is axchop and not ax)

brittle pasture
#

yeah Data/AudioChanges is for overrides
it doesn't contain every cue in the game

brittle pasture
#

there's also axchop below

cyan marsh
#

I'm not giving all the answers D: where's the fun in that

teal bridge
#

Axe and axchop are separate sounds (just Stardew things)

sly lantern
#

I'm trying to redesign the shed but something about it looks off to me? Any feedback?

tawny ore
#

What sound does an Axe make when it's not chopping?

teal bridge
#

I think the regular axe sound might be the "thump" like sound you get when hitting like, a sprinkler with it.

cyan marsh
#

pfff i failed somewhere xD

teal bridge
#

Whereas axchop is for trees and stumps.

brittle pasture
tawny ore
#

SDV needs a Lucy mod to give the axe a voice. Points to anyone who gets that reference.

uncut viper
#

it already has ghosts, so why not

#

itd fit

sly lantern
#

Like when you try to use a copper axe to get into the secret woods

teal bridge
#

It's the same sound as hitting a stone with a pickaxe (and not breaking it). I think.

pine elbow
# teal bridge Axe and axchop are separate sounds (just Stardew things)

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.

brittle pasture
#

putting down chests also use the axe sound

uncut viper
#

(though now that i think about it, i dont remember if the axe is actually possessed or not. been a while)

teal bridge
#

You're adding things to that dictionary with Content Patcher. Doesn't matter that the vanilla data is empty.

sly lantern
brittle pasture
naive wyvern
tawny ore
#

That file seems to exist solely for modding purposes. So it's probably empty because the vanilla game doesn't care about it.

humble timber
sly lantern
naive wyvern
#

Lets continue in making mods art genre kamo_laugh ill take a closer look

brittle pasture
sly lantern
brittle pasture
#

you're basically painting with the brush being tiles

cyan marsh
#

i think i'm overthinking something

uncut viper
#

(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)

cyan marsh
#

@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

tawny ore
#

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

cyan marsh
pine elbow
lusty elm
#

.choose tiny, normal, fix, color, sleep, other, relax.

patent lanceBOT
#

Choose result: relax.

cyan marsh
#

i was using a foreach but instead of cue.Key it only response to Keys and Values

tawny ore
#

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"
}
cyan marsh
#

I don't know whats in the CueDefinition

teal bridge
cyan marsh
tawny ore
#

Ah, I see. The easiest way for me is to inspect it in the Debugger.

teal bridge
#

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.

cyan marsh
#

i want to read what it is and i could probably make a sorter

tawny ore
#

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();
    }
uncut viper
teal bridge
#

I don't think you need the first line, isn't Game1.soundBank public?

tawny ore
#

soundBank is, but it's a wrapper

#

The actual SoundBank instance is a private field

teal bridge
#

Oh yeah right, I forgot it's actually Game1.soundBank.soundBank

#

(totally normal, nothing to see here)

brave fable
uncut viper
#

(5 should be the footsteps category btw)

brittle pasture
#

(the type of the dictionary value)

cyan marsh
teal bridge
cyan marsh
#

to do that i need to make individual keyvaluepairs

uncut viper
#

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

teal bridge
#

Ah, well, I expect it does most of the time but there's probably nothing validating it.

tawny ore
pine elbow
uncut viper
#

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

tawny ore
#

Once you know what you're looking for, sorting is easy

uncut viper
teal bridge
cyan marsh
teal bridge
#

(I mean, technically you can, but messing with the raw soundbank/wavebank data would be an even worse idea than doing XNA mods)

tawny ore
#

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.

pine elbow
cyan marsh
#

the idea is "Cue": "definition",

tawny ore
#

What is definition?

brittle pasture
uncut viper
teal bridge
cyan marsh
pine elbow
tawny ore
#

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

teal bridge
#

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.

tawny ore
#

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)

brittle pasture
pine elbow
#

var data = asset.AsDictionary<string, AudioCueData>().Data;

teal bridge
#

Yeah that's the type that AudioChanges should be.

sly lantern
#

I think I just found some side stair tilesheets

teal bridge
#

(as in, AudioCueData, not AudioChangesData)

sly lantern
#

I just don't know if they will look good

#

From spring_outdoorsTileSheet

#

Wait I sent it on the wrong channel

#

Aaaaaa

#

Sorry guys

dreamy pagoda
#

i have a problem where my winter portraits aren't working?

#

my winter sprites are fine

rare orbit
#

sorry i had to edit the card since i put the wrong saying

cyan marsh
#

i've moved foward...

tawny ore
#

@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

uncut viper
#

(well at least with a quick scroll i dont see any cue having multiple categories)

tawny ore
#

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

dreamy pagoda
#

i can change the portrait for maru but when i try to change the portrait for harvey it says fixed

pine elbow
#

@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

tawny ore
#

Your path needs to be made available to the content pipeline

cyan marsh
#

use the ``` ``` please DX

tawny ore
#

The game doesn't have direct access to your assets folder

#

You can use this.Helper.ModContent.GetInternalAssetName("assets/axe.wave")

calm nebula
#

Can't do that either

#

You don't want the internal asset name

#

You want the fucking absolute path lol

brittle pasture
#

actually that's not how- atra beat me

tawny ore
#

Oh.... is that another nuance to sounds?

#

Why do sounds be so different?

calm nebula
#

Sounds are a ducking cluster lol

dusk mulch
#

which one do yall want running a seed and fertilizer shop, a raccoon or a squirrel

tawny ore
#

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

dusk mulch
pine elbow
#

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);
}

uncut viper
#

sounds work differently

brittle pasture
#

as mentioned sounds are different

calm nebula
#

Yes. Because pathos is lovely

brittle pasture
#

why? because

pine elbow
#

Why can't you do the same for audio?

uncut viper
#

because you cant

cyan marsh
#

so 2 is Music... 3 is soundeffects and 4 is ambient...

uncut viper
#

you have to do it the audio way, which expects a full file path

tawny ore
#

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.

cyan marsh
#

plus.. the code is aware of mods 😄

tawny ore
#

Data models do not automatically have access to your mod folder

dusk mulch
#

so squirrel or raccoon, you can only pick 1

tawny ore
pine elbow
#

So how can I do it?

cyan marsh
#

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

dusk mulch
#

oh crap im in the wrong channel srry

tawny ore
#

Yeah you can use three
File.WriteAllText("music.txt", string.Join('\n', cues.Where( ... )))
to produce a file for each category

dreamy pagoda
#

"[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?

tawny ore
#

So you can maybe use a utility method to get that

tawny ore
#

Maybe?
Path.Combine(this.Helper.DirectoryPath, "assets/axe.wav")

dreamy pagoda
#

when i try to change harvey in game, it only says fixed

tawny ore
#

I need to check if DirectoryPath is relative or absolute

dreamy pagoda
#

i'd deeply appreciate it if someone could help me

brittle pasture
uncut viper
#

you are working with portraiture which not everyone here is familiar with

dreamy pagoda
dreamy pagoda
tawny ore
#

Is Portraiture still officially supported? I was under the impression that most Platonymous mods just weren't really being used anymore

uncut viper
#

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

pine elbow
#

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

tawny ore
#

You may need to change the other axe sound since the game uses two of them

uncut viper
#

wavs are not streamedvorbises

#

isnt that ogg only

dreamy pagoda
#

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?

pine elbow
dreamy pagoda
calm nebula
#

The sound when you cut something the are cannot cut is not axe

tawny ore
#

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

ocean sailBOT
#

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.

calm nebula
#

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#

tawny ore
#

They mentioned earlier wanting to learn how to do it in C#

brittle pasture
#

(read the code, can confirm the tree chopping sound is axchop, axe is used for, among other things probably, putting down chests)

uncut viper
#

(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)

cyan marsh
dreamy pagoda
cyan marsh
#

data collection is going swimmingly

dreamy pagoda
#

i guess it is pointless now lol

tawny ore
tawny ore
pine elbow
#

everyone who helped me with ideas of what to do, it worked, thank you very much

cyan marsh
#

@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);
    }
tawny ore
#

Nice, I'm glad it all worked out

cyan marsh
#

appreciate the work

#

mcthink well in terms of data collection.. i think that is all

#

I can now start work on the next portion of the toolkit

dusk mulch
dusk mulch
#

Oh. I missed that, ty!

teal bridge
#

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.

dusk mulch
lucid iron
#

That happened to me once but the page actually did save

#

Tater website

teal bridge
#

Office Space energy.

dusk mulch
#

nexus should remove the articles feature, i mean has anyone actually used it?

winter dust
#

I don't know why we use Nexus as the main hub for Stardew Mods, we should use the forums or something else.

calm nebula
winter dust
#

Nexus is the Fandom of modding sites.

calm nebula
#

Was to write a markdown to bbcode convert

#

So I could draft mod pages in markdown, etc.

uncut viper
#

no offense to the forums but id rather use i think anything else as a modding hub

calm nebula
#

Then just do a copy paste

winter dust
#

We could also just use Moddrop, their app is already natively available and supports SMAPI.

uncut viper
#

i personally dont mind nexus overall

dusk mulch
winter dust
#

Sure it's not completely different, but they are improving it.

rancid musk
#

I wish Modrinth was a bit less hard coded for Minecraft.

winter dust
#

Well, it was only ever intended for Minecraft.

#

The whole goal with it was to be a better CurseForge for Minecraft mods.

rancid musk
#

Yes, I am aware.

dusk mulch
winter dust
#

Otherwise just replace www with next in your URL and it should work.

lucid iron
#

I like moddrop's website but i feel concerned about how the lead person for it is apparently missing, is that true blobcatgooglyblep

dreamy pagoda
#

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?

lucid iron
#

Is he visiting island for real

dreamy pagoda
#

no

#

i warped him

dusk mulch
#

somebody cooked here...

lucid iron
#

Maybe special nonsense around island outfits

dusk mulch
#

DAMN IT

#

WRONG CHANNEL

winter dust
#

I've done that before.

dusk mulch
winter dust
cyan marsh
#

been working on it's toolkit lately

winter dust
cyan marsh
#

music mod..

winter dust
#

Oh?

dusk mulch
#

what layer is the player on?

cyan marsh
#

yeah i finally converted it to CP

winter dust
#

Oh cool.

cyan marsh
#

fixed some of the songs too

#

took out some... added others..