#making-mods-general
1 messages · Page 253 of 1
Don't make me come over there 
Once you compile the assembly doesn't have concept of files
Okay, my next mod will be formatted like:
ModEntry.cs:
public partial class ModEntry {
// SMAPI entry.
}
ModEntryEvents.cs:
public partial class ModEntry {
private void InsertSMAPIEventHere(object? sender, InsertSMAPIEventArgsHere args) {
// Stuff.
}
}
(To be clear, do not do this.
)
So there's not really any perf consideration with splitting stuff up to cs
Isn't that how erinth mods are like lol
The big ol partial
My code is pretty small (just adding an on/off config for SMAPI part of the mod + message warning if the CP part is installed incorrectly), plus my knowledge of C# is small enough that it barely exists... So I don't think I need to know that right now.
Is it possible to create a mod-provided token that looks like {{your-mod-id/CharacterName/Data}}? Just looking at the CP documentation right now and all of the examples are a single level deep (e.g. {{your-mod-id/Data}} )
You can give whatever string though question is more why
Because I need the anniversary date per {{Spouse}}, and spouse is dynamic
What do u get out of that / when it's not a file path
Just do AnniversaryDate{{Spouse}} 
dynamic tokens are very cool (<-i have been corrupted, this is how it ends)
Local tokens 
Tokens are just about my favorite thing in the world, as a dialogue modder
Also the your mod id/ is prefix automatically and cant be changed
oh i wasnt talking about the tokens being used here I just meant in general... using dynamic tokens is insane and cool
They still confuse my brain a bit though
honestly so real, the amount of dialogue you can actually have is ... kinda infinite at this point. Bounded by creativity
praise be to tokens
If I Include two .json's in my content.json, I'm assuming they are Included in the order they appear in content.json, right?
I believe they're loaded in order yes
if waht other people have said was interpreted properly by me anyways
I've learned a lot since starting OlderSeb, so I'm going to try to organize stuff better with OlderSam. Part of that is just having a Erase.json to null out all vanilla dialogue before including Dialogue.json
As long as you don't set a different priority
Good
Is it possible to query context tags in CP? Something like "if this item has "item_bone", do X"?
what's the context?
GSQs support item conditions, but the context must have a target item (or input in the case of machines) to check
Could I run something like that within this block?{ "Action": "EditData", "Target": "spacechase0.SpaceCore/ObjectExtensionData", "Entries": { "{{Mod}}{{Object}}": { "CategoryTextOverride": "{{Name}}", "CategoryColorOverride": { "A": "{{Alpha}}", "B": "{{Blue}}", "G": "{{Green}}", "R": "{{Red}}" } } } }
Ideally, I'd have several such blocks depending on what context tag an item has.
Drat. Oh, well.
they'd have to be different items
Question: These are the condition stated from the wiki on how to unlock the CC
the player must enter Pelican Town from the Bus Stop on a day when it is not raining, from Spring 5th onward, between 8:00 am and 1:00 pm.
This may be me being pedantic, but does the weather need to explicitly be clear, or could it snow in winter and the cutscene would still play?
winter can have sunny days
yes, but that doesn't answer my question
I know I'm getting to that lol
I think it's an event so you can open the files and see its preconditions?
let me check in a moment
How would you ever get to winter without seeing that event? Or are you looking to do something similar and just wonder how it works?
Sleeping until winter
looks like it has to be sunny
Could you tell me where you found that check?
Snow is not sunny. Not that I have ever seen that happen.
in the event preconditions i would assume
Data/Events/Town
wait no ignore me
it indeed is "not raining"
according to the code "sunny" checks for !location.IsRainingHere();
so I think snow would work because it only sets "is snowing", not "is raining"
also if I'm reading this right it would mean green rain also works because it's not marked as "is raining" for some reason nope it's set later
Does snow not count as rain? Is snow not just rextextured rain. Never actually checked before
And which file was this check in?
I just did a test file, and the cutscene did indeed play while it was snowing
Preconditions.cs
Preconditions.Weather() specifically
Cool. Good to know if a player ever manages to go that long without seeing it I guess.
no. for one snowing weather doesn't water your crops
Never noticed, always have full sprinkler coverage by winter.
TIL that I need to update my Fishipedia since apparently you can catch Sunfish in the Pelican Town Fountain while it's raining
What
is this on the wiki
i feel you might wanna verify it first lol
well tehn
That's why I freaked out
I was memeing and saying "Oh I should have wood and stone in the Fishing Hud since you can catch them in the fountain"
Then I caught a fish
In vanilla Stardew
Isn't this a bug
I suspect that this probably wasn't an intentional addition because Sunfish - that is, (O)145 - is the default fish you get from GetFishFromLocationData if it returns nothing else.
You can apparently catch other fish?
Sunfish is the default fish iirc, whenever people add fish data we always tell them to double check
You can definitely catch trash in there tho
So if anything was "added", it must be the fact that the fountain is actually fishable and wasn't before (if it wasn't before).
But really, just seems like a bug crept in.
No the fountain has been fishable for ages
ArgonMatrix used it in his challenge pre 1.6
In the video that inspired my entire mod
Should I... report this somewhere?
It's probably supposed to be trash, but I don't see CA dropping everything to fix that one, haha
qq, do you still get stone or wood from the fountain
hmm so the wiki references Town.getFish, which no longer exists, and the wood/stone thing is handled by Data/Locations now
I suspect it's a bug caused by the move to 1.6 location data
but weird, its chance is 100% though
I'm not planning to dig into the exact reason why but it sure seems like a bug when the data looks like:
{
"Chance": 1.0,
"FishAreaId": "Fountain",
"Precedence": -10,
"Id": "(O)388|(O)390",
"RandomItemId": [
"(O)388",
"(O)390"
],
}
I removed all the irrelevant stuff, I see nothing that could limit it like conditions. Sunfish is most definitely not on the list explicitly, and as far why it's falling through this entry, who knows.
By "first" did you mean the very first catch of that test save
Oh, yeah, tutorial catches (first catch) are also special.
If it is just the first/tutorial catch, then that's known, that rule lets you catch a Sunfish in a lot of places where you aren't supposed to be able to. And if so then the fountain could work because it has explicit rules, it's not the default trash-only.
now I'm skeptical because
- Gamerant is... well, not to be too mean, but they don't exactly score high in terms of journalistic integrity. I also don't see the source they linked anywhere
- As mentioned, tutorial catch forces you to get a fish, and it'd be a sunfish in places that otherwise don't have fish
- The article only mentions testing on the Switch version (also with no source/videos). For all we know the switch code for fish data is different
Honestly, for the purposes of this mod, I wouldn't worry about it. Whatever the underlying glitch happens to be, Sunfish is not in the location data for the town/fountain and isn't explicitly a catchable fish there, so it's fine if the HUD doesn't show it.
(to add to 1, I can make a mod that makes villagers fart, send it to gamerant's email address and I guarantee you I'd get an article the next day)
Fart Framework
The perfect companion to aedenthorn's Poop Framework
Anything for clicks, right? Probably not such a bad way to generate traffic, if you don't mind dancing in the chum bucket.
that's assuming their traffic isnt also mostly bots crawling other bots
Oh yea it was the first catch of the test save!
I could try to catch more than one and see if that's the case
It probably is, mostly, but all you need is a few thousand real clicks mixed in with the million fakes.
[posted in wrong channel, sorry]
On the topic of fishing, I have to say that I am not a fan of being able to catch a Sunfish anywhere as long as you haven't caught a fish before. It can lead people to think "Hey, you can catch a Sunfish at this location." when you literally can't if you've already done it once.
If there's nothing in the fishing pool, just catch trash or show the user a message about not sensing any fish or something.
Would this work? Trying to target the currentPlayer
"When": {
"HasFlag: currentPlayer {{ModId}}_FlagName": true,
},
I can't get too worked up about it. It's meant for new players who have no idea how fishing even works, so they probably are unlikely to draw that conclusion.
Okay testing my mod, it works perfectly with SVE and Ridgeside and East Scarp out of the box!
That is, someone who's never played and never fished before isn't even likely to be thinking about the concept of "which fish can be caught in which location", they don't even know that it's location-specific yet.
Is there a way, out of curiosity, to get what mod an item is from?
No. But most people should be including their mod id as a prefix in the item id.
Maybe I should specify that in my Fishipedia?
Definitely not, even if you knew which mod it came from it could have had every field edited by a different mod.
Oh dang it
(You could hope for a useful prefix, but don't depend on it)
I wanted to have in my Fishipedia: "Fish added by SVE" or "Fish added by Vanilla"
One thing you can do is label the vanilla fish for sure. Then put the rest under "mod provided"
Better Crafting and Lookup Anything at least look for prefixes to the order of {{ModId}}_ when listing that an item is from a certain mod.
Tbh the prefix of {{ModId}}_ is convention used by lookup anything
I think it's fine to follow
Everyone making custom items and things should use that format.
"should", hah
Isn't SVE one of the main offenders for not doing that?
I could use the convention with "Added by Unknown Mod" for anything that doesn't get caught by that?
I mean, if it doesn't use the convention how are you going to differentiate it from a vanilla item?
I guess you could register a super super early editor and make a hash set of all keys?
Tbf vanilla items are a static list, so I could hard-code vanilla values?
I don't think there's a right or wrong answer here, it's just a matter of what kind of questions and comments you feel like dealing with (because users will bug you about it).
Gentle bump. Trying to figure out the right syntax because targeting the current player is kind of important for this. Trying to get Gus to say something based on a current player's stats
Compact Moss Soup
I think just trusting convention and going shrug on non conventional id is fine
(Cooking nitpick: adding soup to more soup does not make more concentrated soup, lol)
Just simmer it after 
You can reduce it, yes - but you don't need more soup for that.
"When": {
"HasFlag:currentPlayer |contains={{ModId}}_FlagName": true
}
or
"When": {
"HasFlag:currentPlayer": "{{ModId}}_FlagName"
}
Thank you, Button!
I’m pretty sure I forced JA to use that format, so even non-CP item mods should follow it xD
Large Moss Soup, in the mold of milk?
Very very large moss soup. "Moss Soup Cauldron"
Moss soup 2: mosslectric soupaloo
Little question, i'm writing the i18n file and I was wondering if I could do something similar? if yes, how?
the example is stupid, but it's just to know if i can do it.
"Example1.Name": "Gojo",
"Example1": "{{Example1.Name}} is a man.",
No you can't do that, but you can use arguments
{{Example1 | Name={{Example1.Name}} }}
And then Example1 needs
{{Name}} is a man.
for a c# mod, is there a way to tell if the user has another mod installed? How early in the mod loading process can I check? Specifically I'd like to show an compatibility option only when the user has another mod installed
Helper.ModRegistry.IsLoaded
you have it as soon as your Entry runs, so right away*
*unless you use your constructor, but why are you
i believe you can check as early as Entry, since mods load before any of them run their entry functions
soup minus soup equals... souper soup?
woot thanks
I sometimes use constructors, if it doesn't depend on any of the mod helper stuff and allows me to use a readonly field.
Can't access Helper safely from there of course, just answering the "why are you" part.
an answer is good! i only asked why and didnt say dont, after all
ive considered it before too
If I want to learn c#, (and don't want to pay for it) is the Microsoft YouTube tutorials a good place to start?
you dont have to pay a single cent to learn anything programming related
Probably! Atra would rec a book maybe (library?)
many many things online for it
Do you already know other languages?
the yellow book is often recommended
Not really. In highschool I learned Basic but that was 20 years ago
i think whether or not videos or a book are better will really vary from person to person
Imo the best thing is to have a goal
so its kinda hard to answer
Oh no been overshadowed
I’m more likely to recommend some tutorials if you don’t really have a lot of programming background
Since we r in modding land pick a mod you wanna fo and learn along the way
Things ljke “what’s a for loop” and “what’s a variable” are good to get down before you start making a mod imo
Nooooo
Are u doing alright
Sb is out
i love seeing new mods so sparkly and shiny
I restate my perennial advice that video is an inefficient and unreliable medium for learning to code. Plain old text-based sites are better than YouTube. If you don't have the patience to read the tutorial material vs. watching a video, you are not going to have the patience to read actual code.
And video just introduces a whole bunch of irritating issues like attention-splitting, inability to copy/paste or compare lines easily, poor searchability, and so on.
Might stop if no more players
I only really want to learn it to update some old c# mods. But was not sure where to start. For example, looking at c# mods on GitHub. I understand maybe 20% of what I see there. I do understand doing CP and .json but they are very different.
Yeah, the hard part about jumping in without some background is that there’s very little comments in a lot of mods
If you’ll forgive a little self-promo, I recall putting a lot of comments into More Conversation Topics
Anyone knows what's the cause of this?
You’ll also want a copy of the decompile tho
You really can’t easily make C# mods without the game decompile at hand
This was working well recently
If there’s something that isn’t making sense, you can ask where to read up more here?
Like the SMAPI stuff has more info on the wiki
And C# stuff has Microsoft docs
20% isn’t a bad start tbh
imo, as annoying a piece of advice as this is, one of the best things you can do for yourself as a modder is learn programming and c# for non-modders
this assets/Sprites/emotes.png is not your load target is it
GameContent.Load has never worked for mod paths
Nah, it's there
you want ModContent.Load
I guess, is the 80% that doesn’t make sense more like “idk what this variable does” or like “what am I even looking at”
you need to actually go through content pipeline yea
I think that is where I get lost. So much of c# mods a referencing external stuff. And I don't even get how to find what it is referencing. So I figured a basic tutorial would be a better place to start
External stuff meaning things in Stardew or like syntax stuff in C#?
A Microsoft tutorial sadly won’t help demystify Stardew variabkes
can i use the sprites from there on the animation?
They are honestly kind of a mess sometimes, partly bc we use a decompile to reference and partly bc CA built the game bit by bit and mostly by himself, so it only ever had to make sense to him
Alright, thanks
u can use helper.ModContent.Load but i recommend doing AssetRequested for compat reasons
Yeah that's what's used on the wiki, i'll go with that lol
doing the first one just means it's real hard for anyone else to edit your assets
I think, and it is a guess. It is the part that references the actual stardew code. First, I don't have the stardew code, and 2nd not that I would know where to look if I did have it. So yes, I guess the decompile would help but I still think more basics might be needed for me first. I will see about maybe finding a written tutorial first.
!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
i assume VS and Rider does this too
but vsc will decompile on the fly if you tell it to find definition
e.g.
gets u here 
VS was always mad janky about that
I don’t use VS anymore but it seemed to hate when I tried that
i rarely ever actually open my decompile bc its rare i need to find somethin that isnt a type/member/etc or a string
handy to have tho
I used to read the decomp a lot when I was first modding bc I had a lot of “how in the heck does this work” questions
Mine have a lot of comments but you won't understand them unless you already know all the basics.
rider also decompiles on the fly for similar reasons 
I still read the decompile a lot. It's like a combo between a how-to manual and a psychological thriller
Alright. I think I've got the second row of tabs, an option to disable it, and pagination/scrolling in general working well. Running out of things I wanted to do before a proper release of this. Basically just need mod compatibility, and that's waiting for other people at this point.
can i as user reorder the tabs
Good morning?
grumbles
I am trying to make a check of if the player saw a specific cutscene. The one where Lewis unlocks the CC. I made a postfix of the Precondition.Weather function in order to figure out what the parameter values were when that cutscene is played. I then used those same values in the Preconditions.SawEvent function like so in order to check if the cutscene was seen. But it says it's false, and I'm unsure why
GameLocation town = Game1.locations.First(l => l is Town);
bool a = Preconditions.SawEvent(town, community_center_unlock_id, new[] { "w", "sunny" });
Log($"Saw lewis cutscene: {a}");
That would require more than the bare basic GMCM integration to make a UI for, so I was avoiding that, lol
Can I get five rows of color coded tabs like visual studio
i hand out scope creep for free
Can I have vertical tree style tabs
I am immune to your scope creep because I already drowned in my own scope creep long ago.
And four separate groups for cookie reasons
you can just check the seenevent hashset directly
theres a utility method too
why would you ever do it like this instead of checking the farmers seen events list
You get one or two rows. With horizontal scrolling if necessary. And you'll like it.
HasAnyPlayerSeenEvent
I didn't know that existed
Khloe, if I can't hold left click on a tab and physically move it around while my gamemenu is open, why should i even download it
(/j)
I was going to ask that too. Sorry.
the next step is ofc tree style tabs you are already half way there with the right click menu \j
i also would like the tab icon to swing around in my cursor like it has movement physics so i can whip it around the screen and watch it flail until i place it down again somewhere
Khloe, can I pin tabs
Okay what is this a reference to
uh
All these tab management things that aren't in a minimum viable product...
p.. physics?
Will you support plugins
That's the whole idea, besides making the game menu less stupidly inefficient.
But I think atra is just memeing.
i take everything atra says 100% seriously, just vibes
I'm making jokes about Firefox tabs yes
Will the new tab button just show 🙂 if you have more than 100 tabs
Moving tabs though would be really useful as I am 100% sure mods will add them in an order I don't like. At least a config file to move them if not an in game function.
For example, I would want commonly used tabs before option and config menus. But if it is too much I get it. I don't understand the code so I may be asking for the moon.
Sorry if I am being needy, just checking in.
Needs tab groups.
I mean, how am I supposed to keep track of all those tabs?
I guess user-reordering is a bit meme-y, but, well, I did it in a similar situation.
If you have an open system that lets anyone pile on, you will eventually want to give users the ability to throttle it back down, although that is not necessarily an "MVP" issue.
Oh, I'm going to add re-ordering eventually. Just not immediately.
And there is an option to disable tabs you don't want to see.

It it possible to use config values from an older version of a mod to set new ones? Like I'm making a change which replaces old config values with new ones, so the old ones won't be used anymore, so if someone updates their mod, the config is go from {old: value the user might have set} to {new: default new value} when the user loads the game, but I'd like to automatically be able to do {new: value the player might have set}
not with CP
You can do it, though it's a PITA. You'd have to maintain two models for the two different config versions, try to load the old one first using some marker to check the version, and then upgrade and resave it as new.
are you changing the key for a good reason
I'm splitting up the old value into multiple ones for different things, kind of like a "enabled" -> "specific thing 1 enabled" and "specific thing 2 enabled", I'm in csharpt, but sounds like it's not worth the effort
ah i guess you can just keep the old field around
but personally just telling ppl to delete config.json is valid imo
Yeah, make the old field a {private get; set;} . This will let you migrate old configs
That would've been worse for the changes I did, but yeah I guess in this simple case of just renaming a property then it'd work OK.
Most mods just put it in the description to let me know when that happens. People that don't read are going to contact you no matter what so I would not bother.
Anyone know if it's valid to have multiple $action commands in a single dialogue?
"Blah blah blah $action AddMoney 200 $action AddQuest {{ModId}}_Quest_Linus1"
Surprisingly I did not actually get any complaints about deleting/recreating the config when I went through with that.
Lots of other user-error reports like not installing dependencies and so on, but that part was OK.
Valid but not like that
"Blah blah#$action first#$action second"
Thank you!
Tbh more early game quests would be interesting
Is it possible to add colors to any crop? Like if I wanted corn to be random colors when planted just like flowers is that possible with CP. Or is that only a flower feature?
It's technically possible yes but you may need to rearrange frames
I'm having fun experimenting with a little mod I thought of this morning. Might be ready to test tomorrow
And I think it only works for single harvest crops
Does a quest given in dialogue repeat if the same dialogue line comes up again?
By default
itll just add it again yeah
Nice. I think I'll make it a yearly then
Well, another mod idea dead out of the gate. Wanted to make ancient fruit different colors.
those are actually spacecore extra harvests
though hmm I dont see the part that blocks colored multiharvest crops
in the game code
it might work™️
may not be looking hard enough
It's not that there is a part that blocks it exactly
It's that the mask and the regrow are both the same frame
You could do something with spacecore I think (have an on harvest action that sets to a previous frame, or was that DGA)
Tbh making them different frames via c# would also be pretty easy
I go back and forth on what SMD's scope is (It's defined by the term "slightly", as in "it takes minimal extra code to data-ify this")
I think, currently, out
But would be nice for a crop framework 
is it ok to add compatibility in my mod for a different mod without asking that mod author for permission? Basically they add some items, and my mod affects items of that type, so I want to make my mod work on those items too. As a result, I don't refer to any of the art, but I mention the mod and the items by name in my mod
Yep it's fine
Although depending on what you are doing, you can do passive compatibility sometimes
With context tags
What programming language are mods made in?
What's the supported language officially?
@golden basin love the changelog message 
english
Fingers crossed the trees behave now
the trees......
!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.
How easy would it be to change the color values of items used for dying? (ex. Change the dye color of an ancient drum from 115,41,181 to 112,40,184)
look at ItemContextTagManager.GetColorFromTags
and yep, you can see that they are predefined
Anyways this is in scope for emc right
Sadness, but okay. Thanks
of course if you know C# anything is possible
Well. Guess I'm learning C# 
The statement that has killed 90% of my mod ideas.
Possible, yes; practical, on the other hand...
What I say but never do.
on the bright side, a patch for this is like, ridiculously easy
Just don't change the color to some totally different color that messes up the Qi quest.
I wasn't planning on it :)
Just changing everything (except 255) to the nearest multiple of 8
Actually I think the Qi quest uses context tags, never mind.
qi quest checks for context tags so it's fine, patching that function just changes- yeah
Ah, well I'm not messing with context tags
-the dye color
If in fact all you are trying to do is quantize the result and not even use arbitrary colors, then it really is ridiculously easy, you don't even need a transpiler, just a postfix.
A few will be getting substantial (and by that I mean noticable) changes tho, but it'll still be clear what color it's supposed to be
Either explanation sounds odd to me since actual perception of color is not even remotely linear.
I like seeing the numbers :')
Dye framework? Tell me more?
Every mod must be a framework now.
Of course
I suppose a helper mod that fixes up lack of context tag misteks might be nice
Still i also don't really get what you are trying to achieve here chaos
Me either tbh
Where do u even see numbers
In the game? I don't, but I checked what all I can use for dying and what color those objects are on the wiki
Well you cant mod the wiki 
I'm not trying to
As an "Intro to C# / Harmony patching" it's not a bad choice I guess. Though hard to imagine people actually, y'know, using it.
Well, it is a wiki 🤣 but probably not a good idea 😇
Idk what I'm really trying to accomplish, but it's something to do while I wait for my laptop repairs
I can get wanting specific dye colors but multiple of 8?
It makes my brain tingle :)
Among other things, dye isn't exactly like that
Also dark blue being 0,0,139 (no red or green) while blue is 46,85,183 (yes red and green) bothers tf outta me
Dye strength is also a mechanic
Those colors are both at full saturation
Another idea for a mod, one that allows crops to be over-watered and die. But I am sure that's another c# mod. Not even sure of the specific mechanics yet, but I am sure I can't make it. 😭
That's certainly an idea
Unfortunately, I don't know as much about modding as 10th grade Chaos wanted to believe
Maybe make all sprinklers manually activated and if you water 2 or 3 days in a row they die. Making farming harder and more hands on would be a welcome change.
I'm pretty sure that's partially just the nature of hex colours - having all three colours be non-zero decreases the saturation. Having green be higher than red does mean it's somewhat of a teal though
Getting bad luck with the rain schedule could be a disaster. Like real farming.
Saturation and brightness aren't the same thing 😭
true? doesn't change what I said though
I thought you were trying to say that having lower saturation made the color darker ;-;
My brain cell is not functioning right now 
it does certainly help make the colour less obnoxious though (from 1 to 3, the colour you said is used as "blue", the same colour with 100% saturation, and the same colour with 100% saturation and no green)
the latter two are just not very pleasant to look at in a game
Yeah, super high saturation is almost always an eyesore
exactly. High saturation and brightness are not a good combo, so it makes sense that the brighter blue is desaturated and somewhat shifted
are the quests given during the desert festival for Skull Caverns hard coded 
Not sure 
I'm going to go ahead and guess yes
want me to try to look for them?
Absolutely, but I'm wanting to desaturate the darker blue
I would appreciate it if you did
I kind of like #3 the best. But that is just looking at a mat of the color. Not sure how it would look in game.
Bright and horrible
Imo
A few pixels here and there would be fine, but much more than that... Eh, no thanks
desert festival is super hardcoded. really really hardcoded
same saturation is rgb(28,28,110), same saturation and hue is rgb(28,51,110) (from 1 to 3, original then the two I said i order)
I like the third one :)
(desaturating does, in fact, often increase how light colours appear btw)
Oh right 😅 My bad
#1 apparently I like bright blue. 😀
To each their own :)
#3 is more gray then a blue.
I like greyish colors
mmm yet another thing I need to clearn C# for then ... I will add it to the list
But yup. But that is probably a blue thing l. I really like blue.
Dreading my name changing from blue when I level up. But the next level is still blue so I have a while
Is there a cheat to run a song or track with debug?
I don't really mind the color change, and I think I've got a while as well
i like #2 ... its nicely saturated but not too much 
hmm this probably isnt too hard to make
just have each hoedirt remember how many times it was watered, and the last time it was. exceeding a certain limit may kill the soil
(also before you ask, I will not be making that mod
I'm much more of a fan of carrots than sticks in term of difficulty)
No

I wouldn't ask. If someone wants they can. I was just venting that my ideas all need c#. And I have not learned it yet.
Quest type DesertFestivalMarlon
See data/specialorders
(My special orders mod should have a few in them)
who needs documentation when we have atra
yippie thank you
Whoever wanted yellow couches, they are now out. So's the bear rug and some other stuff
I am getting an error saying that a mod couldn't apply a patch, but I deleted the mod and it is still showing up.


Yayayaya yippie yippie thank you so much
https://staticdelivery.nexusmods.com/mods/1303/images/32021/32021-1742083721-95113480.png These are the rugs I couldn't find separated
Bear rugs for all!
For people who make mods that have both a CP/framework component and a csharp component, is there an easy way to release or do they have to compile the csharp part then manually unzip the automatically created zip, move the files to a place with the framework component part, then zip together? Sorry if this doesnt make sense, I know literally nothing about CP and other framework mods
That Nexus Premium membership sure is paying off handsomely right now.
look into ModBuildConfig's bundled content pack option
8hr for 90mb..... Where are you the 1990's 😀
That's what it feels like, yes. But downloads from anywhere but Nexus are still happily chugging along at 300+ Mbps.
Nah Nexus has been acting shit all day
I'm relieved it eased up long enough to get my tilesets uploaded
I think you mean "all week". Or possibly "all month".
Woah since when is this a thing!! (i was just thinking i need something like that)
fairly recent, i think. 4.2 or 4.3 maybe?
@blissful panther I have figured out a way to make a conditional entry for PEEM. I don't need you to check it now
What is PEEM, it started showing up in my smapi log and no clue what it is. Not a big deal just curious.
Do you use MoreSecretNotes?
Yup
It is a custom version of MEEP that DecidedlyHuman made for me. (ty by the way)
does it add map stuff that regular MEEP doesn't cover?
Something with secret notes would be a guess as it is bundled with it.
Correct
Nevermind, I just saw the SetTilesheet entry
i did some counting ive done about 280 cards so far
athat means the end total will be over 1000 cards (as each cardf will have 4 variations 1 of common, uncommon, rare, and ultra rare
i want to make it where there is s percentile chance so im also thinking of doing 4 commons of one card 3 uncommons 2 rare and 1 ultra rare of eah card
What is the Spring_town tilesheet ID?
i have a question about threads made for mod development, will you get in any sort of trouble or anything if theres a large dip between posts and updates or is it more so a place to just keep everything in one place?
You can't really get in "trouble", Nobody will kick you out of the modding community for doing something. (Unless you grief the wiki or something). Most things are just bad manners.
ig i mean more will ppl get upset with me if im not constantly posting, sorry not good with words
many people have their own threads for whatever purpose
but the general channel is fine for just posting about updates do whatever you like
@ivory plume The second last example in your CP documentation for EditMap is wrong I think, since you are adding a tile you would need a SetTilesheet.
i dont have my own thread bc i just stalk other ppl's threads

you can make ur own thread if u get cheeto'd
just wondering if i should start one since someone asked if i planned to so they could follow my card mod
yea why not 
Ironically, I hate cheetos but I am a cheeto. (I mean cheetos as in the snack)
one thing i dont like about threads is that you can't search in just 1 thread
but it's no different than rn where you can only search #making-mods-art so
Orange is such a boring color. Which is why I have not asked yet. Also, like not being considered a Cheeto 😀
bump
ive set a goal of breaking 100 unique downloads on one mod before i apply, although its also because im nervous my since my mods are just silly little replacers atm 
People love replacers. A lot of people download them.
Is there a when token for if you have read a secret note?
i don't believe so, but there is a GSQ
I can't use a GSQ in a When entry though
not normally, but there's at least one mod that lets you
I already have a framework, I refuse to use more than 1 framework per mod.
more than one framework or more than one dependency
anyway, depending on what you need, there may be a way to use the GSQ to accomplish it, or maybe if there are side effects you could check those
or learn C#
I need it so that a MapEdit doesn't happen until the player has read a secret note.
can you put a mail flag in the secret note
No. I refuse. Never.
if it's a secret note that you are adding with my framework, you can run actions when it is read
I think when you do something that edits more than a few things, you'll get there! IME aesthetic mods are pretty popular if they replace a whole set of things 
Can I do a MapEdit when it is read?
i don't know if that's an action, but you can easily set a mail flag and have the map edit check for that with When or whatever else
It is an action so I will go test it out now
Is there a CP key like DayOfWeek that will just print out the abbreviated DayOfWeek? I would really like "Fri" instead of "Friday"
I am guessing not, but hope springs eternal
if not you can make it yourself with dynamic tokens
call it DyfWk /lh
Hmmmm. I didn't think of that. Good solution!
does CP have a substring token
ok what trading cards should i do next?
Forage
Tools
Ores
Monsters
Animal Products
Artisan goods
villagers
ores/forged ores
There isn't a mail flag for secret notes
no, i mean you can make up a mail flag for this purpose, if you are in control of the note
How do I make a mail flag? I havn't done it before
the note says "big secret reveal" and in the ActionsOnFirstRead you set a mail flag called like "{{ModId}}_GotSecretNoteDoMapNow". then your map edit uses that mail flag in its When condition, or similar
but if MapEdit is already an action it's probably better to just run that directly
I want to use a mail flag, but I cant find documentation on the wiki about it.
making a mail flag is just... picking a unique string and telling the game to add that mail
That example just changes the index for an existing tile, but you'd use SetTileSheet too if you were adding a new one outright.
oh.
(Thanks for reporting it though!)
So a mail flag would be like that if I am understanding it right?
"{{ModId}}_Flag": "..."
If so, the players will still see it in the mail page of their collectons, right?
Are you trying to add a letter? If so, yes you'd just add it to Data/Mail with your unique mail ID. But if you're just using it as a flag, it doesn't need to exist in Data/Mail.
summary here https://stardewvalleywiki.com/Modding:Mail_data#Mail_flags, but mail flags are just mail ids that don't have a matching entry in Data/Mail
Just so we're clear, a mail flag can be named anything. It only has to match a letter if you're trying to send an actual letter
I have a set of {{ModId}}_Rain and {{ModId}}_Sun flags that bounce back and forth in my mod
it's quirky to use mail to track assorted player/world state, but what mails a player has received is just a set of strings. any time you want a persistent bit of state, you can send a mail (mark it as "received") and it will remain there for any other parts of your mod(s) to check when needed
as long as it doesn't match a Data/Mail entry it will be invisible to the player
I only do it because it was easier for me to wrap my head around 😛 And because I wanted it to be "rainy" when it was also "storm"
So... Just a trigger action refrencing a non-existant mail id?
My brain hurts I am so confused
I use a ton of mail flags in my mod to start events, set conditons, etc. You can always download it and take a look at my TriggerActions file
Might help you get your head around it
yep. it will add whatever string you tell it to the list of received mail
(It's not just mods, the base game does that quite a bit too.)
They are very fun to use once you understand them, so it's worth putting the time in
I use them as event preconditions a lot
So like
AddMail Host {{ModId}}_24Read received
Yep
Received means it is registered directly. If you used "Now" and it corresponded to an actual letter id, it would make the mail icon go on the mailbox
Finally I think I understand it
They were a huge mind bend for me, too. But I absolutely love them now
Wait, do I need to edit the trigger actions file too?
(I am looking at the Older Sebastian mod)
Only if you want to set the flag with a trigger action
Ah, okay.
(if you used Now it would show the letter icon even if it didn't match an existing id, which would be annoying for the player)
You can set mail flags in a lot of different ways
Won't do that then
Yes, you're right. I remember getting that bug
Thanks for clarifying
Time to test it
does a mod exist that increases the timeout period when players try to join in multiplayer?
I've found whenever I try to play multiplayer with fairly large modpacks, if the other players take too long to join the game they get disconnected with the following error: [game] Failed to send message (k_EResultLimitExceeded). Closing connection. All the searching I've done hasn't gotten me anywhere.
I don't think that's a timeout; that's an error from the Steam client when too much data is sent over the network at once. Increasing the timeout likely wouldn't help unfortunately, since it'd still same the same amount of data within the same number of network messages.
If it's consistently related to the number of mods installed, it may be due to SMAPI trying to sync the mod data to other players. SMAPI currently just syncs data as JSON strings which isn't very efficient; maybe it could switch to protobuf or something.
could I potentially work around this issue by trying to launch the game not through steam?
You could try connecting through the GOG multiplayer servers instead. To do that, get the normal invite code but replace the S at the start with G.
I'll try that out. thanks.
How do I get a tilesheet ID? Whenever I put in a tilesheet to add a tile to a map in a JSON it says it doesn't exist.
{
"Position": {
"X": 29,
"Y": 27
},
"Layer": "Buildings",
"SetTilesheet": "spring_outdoors.png",
"SetIndex": "87"
},
],
(Partial)
You need to use the tilesheet name set in the map file (not the asset or file name). One option is to use Lookup Anything with tile lookups enabled in its config:
That's a bit dumb but okay, ty!
(It's how the base game works, and it's necessary because the asset/file name isn't necessarily unique. You can have multiple tilesheets with the same asset/file name, but they each have a unique ID.)
What can I use to add a new structure to the game?
Is there a way of having a random music track out of say, 3 from the game in a custom location?
Like, I want it to play a random spring song in spring, random summer song in summer etc
what do you mean by structure?
yea Data/Locations has a field for that
I know it's under Track, but I don't know how to choose a random one out of a few
You can add new buildings through Content Patcher by editing Data/Buildings, if that's what you mean. Feel free to ask if anything is unclear!
so we were able to get into the game but the connection was unplayable sadly. We'll try again tomorrow. we tried at least. thanks
should itry and make a concernedape themed stardew valley trading card? or are there rules against that
Is there a way to make it random though? I can't see anything on the wiki
fo the mod
You could use randomization in the Condition field.
it picks the first matching entry, so if you want 3 tracks each with equal probability, have RANDOM 0.333333 for the first one, RANDOM 0.5 for the second, and no condition for the third
Thank you both
{ "Format": "1.0", "Music": [ { "Name": "CustomLocationMusic", "Tracks": [ "assets/music1.ogg", "assets/music2.ogg", "assets/music3.ogg" ], "Randomize": true, "Locations": [ "Custom_Location" ], "IsIndoor": false } ] }
Like this? @sour sleet
uh, no? where did you get that from
I can't think clearly.
Hi, when adding a small map patch, does it go in the home category in the content json?
"Home": [
{
"Id": "",
"Location": "",
"Tile": {"X": , "Y": },
"Direction": "",
"Condition": ""
},
I'm having trouble finding out exactly how to load in patches to a vanilla, but maybe I missed something when reading through the maps wiki section? I not 100% sure how to specify where the map should patch either.
Home specifically is for the NPC starting locations
your tiles are missing numbers
Ok, so I'm not sure where to add in a patch that doesn't have to do with the npc then
I know
map patch is something else entirely, EditMap
I haven't written it yet
If you're just adding an area to a map, you use EditMap
Like:
{
"Action": "EditMap",
"Target": "Maps/Custom",
"FromFile": "assets/Maps/custom.tmx"
},
The Target should be an existing Map.
So if you've not used "Action":"Load" to create a map at Maps/Custom, that won't work
"Action": "EditMap",
"Target": "Maps/Trailer",
"FromFile": "assets/Maps/TrailerBedroom.tmx",
"FromArea": {"X": 0, "Y":0, "Width": 7, "Height": 11},
"ToArea": {"X": 0, "Y": 0, "Width": 7, "Height": 11}
}```
Here's an example changing Penny's room in the Trailer
Oh thank you! I couldn't find specific enough information on the wiki
Or clear cut examples from the mods I was looking inside
No problem, I just dug into my WIP Zelda NPC mod, I've got examples of most CP code blocks in there somewhere
I wonder if I missed something in the wiki, or if I should have read other documentation to figure it out. It's stuff like this that stumps me, because I can't find formatting examples for some reason.
If there are multiple mods that add a character with the same name, would they all conflict, or does each have an id linked to their mod id?
Oh, that is what a mod ID is for I believe.
I'll send a wiki link that explains a little further
Hello! Aviroen here.
Below I have constructed a ROMANCEABLE NPC template which are all standalone.json(s)
This is assumed that you understand Content Patcher to some degree.
If you want to see how all of these files interact with each other, you're free to look at my
"What does standalone mean?"
It means...
Ahh so I take from that, it depends if the people who wrote the mods chose to add the mod id or not 😉
Thanks! (I'll have to check the individual mods involved)
As long as your npc has a unique internal name (Mod ID), I'm pretty sure that you should be able to avoid basic conflict with other npcs named the same thing. Good luck!
What are all of the types of items?
Umm so my custom location isn't even loading for some reason. SMAPI is erroring with "is Data/Locations valid?" I'm going a bit mad
I usually Load custom locations in but I'm doing it differently this time by editing location data
In locations.json or content.json?
Thanks. I should have seen that lmao. I need to sleep
No worries, make sure to take care of yourself
I did something very wrong
[Content Patcher] Unhandled exception applying patch: My Mod > EditMap Maps/BusStop.
StardewModdingAPI.Framework.Exceptions.SContentLoadException: My Mod loaded map 'assets/maps/WSF_BusStopEdit.tmx' with invalid tilesheet path '../../Content (unpacked)/Maps/spring_outdoorsTileSheet'. Tilesheet paths must be a relative path without directory climbing (../).
This is only part of the Smapi log. I think I messed up specifying the location, because I wasn't entirely sure what to put in. Here is what I did:
{
"Action": "EditMap",
"Target": "Maps/BusStop",
"FromFile": "assets/maps/WSF_BusStopEdit.tmx",
"FromArea": {"X": 19, "Y": 1, "Width": 6, "Height": 2},
"ToArea": {"X": 1, "Y": 1, "Width": 6, "Height": 2}
},
!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"/>.
What do I do for that? I removed the tilesheet from the maps folder so it could look for the vanilla one instead
Okay first off you want to remove the ToArea.
Oh
Then go into the map TMX file and send a screenshot of that
Ok
if you read the tilesheet climbing governor command it tells you how you can fix it
I think I may also have an issie with the x and y coordinates...
What mod can I look at for an example of custom furniture?
I only sent part of the log.
Well fix the tilesheet climbing first, 1 step at a time.
ok, sure
nothing about your map will have been loaded because of the tilesheet climbing, so any other errors about yuor map edit are irrelevant right now
that said, if you dont intend to place your 6x2 map edit in the top left ish corner of the bus stop, then you do have coordinate issues, but theyre unrelated to the errors
I fix the first thing, then I'll add more about the second issue, thanks
to be clair, virtually any and all common additions to the game (items, characters, maps, music, ..) will conflict if they're given the same ID, which is why it's a rule that you include your mod's unique ID in the ID of anything you add. content patcher makes this very straightforward by letting you write names, keys, and IDs in the format "{{ModId}}_MyCoolThing" to avoid issues.
Well, I have zero errors now, but can't find my patch edit, so It's definately not loaded in properly
your FromArea is telling Content Patcher to go to tile x19, y1 inside your BusStopEdit.tmx
then its drawing a rectangle 6 wide and 2 tall, with x19 and y1 as the top left of that rectangle
it is copying that 6x2 rectangle from your tmx into the BusStop, with the bus stop's x1, y1 coordinate as the top left
Oh, first part sounds about right, so I must have messed up where it draws from the bus stop
right now you're putting it in almost the very very top left
bc thats where x1 y1 is
So, what I need to do is add the exact same coordinates up top to the: "ToArea": {"X": 1, "Y": 1, "Width": 6, "Height": 2}
Right?
Your ToArea should be the place on the vanilla map where you are placing the top-left corner of your patch.
Right, I'll try and run it again
It is worth noting that 1,1 on the BusStop map is likely not where you think it is, as it uses ViewportClamp and may prevent some of the map from being visible in game.
For furniture, if I set the rotations to 1, will the player just not be abled to rotate it at all or will it just rotate once?
(you can either use debug ppp when standing in a spot to find out its exact tile coordinates on the map, or use something like Debug Mode or Lookup Anything to check a specific tile)
4 is the number of facing directions, so 1 will mean no rotations
Alright, ty!
i use 4 here since if you look at the data/furniture asset you'll notice all chairs use 4
i cant words today
So, in tiled I'm able to veiw the exact cordinates, however, I have noticed that in the game without any terrain altering mods, the bus stop is not as long for some reason as the freshly unpacked Tiled version shows, so that may explain why my patch literally isn't even loading in the wrong spot...
do you happen to be playing with stardew valley expanded
It is not currently in my game. I remove my stardrop mods manager folder which contains all my big mods before testing my own, so I don't know what's going on
That's because the ViewportClamp map property on the Bus Stop prevents part of the map from showing in-game. It's to prevent you seeing black on the edges of the screen, since the map is an unusual set of dimensions
That is very interesting....
So, instead of reading the coordinates in tiled, I should get them directly from the game with debug right?
for that map, it will be easier, yes.
That way you can make sure that the spot you're picking is visible in game
Ok, I'll try it out
Ok, so the in game coordinates actually have the same coordinates as the tiled map does. The top left of the visible ingame map is x:10 y:0 so it doesn't count them differently. I'm at a loss. The coordinates I put in look right...
Do I need to use EditImage for furniture?
Like EditImage it into Tilesheets/Furniture?
nope, that's not really recommended. you just need to add some new Action: Load, Target: {{ModId}}_MyFunnyFurniture in one changes entry, and then include {{ModId}}_MyFunnyFurniture as the texture name in your furniture data in index 9:
https://stardewvalleywiki.com/Modding:Furniture
again, open up data/furniture, press ctrl+end, and see that all the new furniture includes a texture name for their new spritesheets
Could it be that when I edited out the tilesheet climbing error that a wrong space in the tiled document could be rendering this whole thing obsolete?
would you mind sending your current JSON?
!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.
I actually got some stuff in the smapi log. I send a slightly edited version of the relevent portion for privacy
But Load needs a FromFile entry.
i mean they need to be wrapped in quotes too but i cant have all the fun for you
I think we have a VERY different meaning of "Fun"
actually, they dont
(Please note that any and all furniture tilesheets, including custom ones, assume a SpriteIndex grid of 16px. Your SpriteIndex must align accordingly for any relevant Data/Furniture entries.)
json keys will work without quotes in newtonsoft as long as they dont have spaces
is newtonsoft aware of what json usually is? /lh
actually, does json even have an official spec 
[Content Patcher] Unhandled exception applying patch: MyNpc > EditMap Maps/BusStop.
StardewModdingAPI.Framework.Exceptions.SContentLoadException: Failed loading asset 'assets/maps/WSF_BusStopEdit.tmx' from SMAPI/parcysnippet.NPC: an unexpected error occurred.
---> System.Exception: Unable to load map with file path '/Users/ME/Library/Application Support/Steam/steamapps/common/Stardew Valley/Contents/MyComputer/Mods/[CP] Custom NPC 4/[CP] Custom/assets/maps/WSF_BusStopEdit.tmx'
---> System.NullReferenceException: Object reference not set to an instance of an object.
at TMXTile.TMXFormat.LoadTileSets(TMXMap tmxMap, Map& map)
at TMXTile.TMXFormat.Load(TMXMap tmxMap)
at TMXTile.TMXFormat.Load(Stream stream)
at xTile.Format.FormatManager.LoadMap(String filePath) in D:\GitlabRunner\builds\Gq5qA5P4\1\ConcernedApe\stardewvalley\NPC\xTileSource\xTile\Format\FormatManager.cs:line 122
--- End of inner exception stack trace ---
at xTile.Format.FormatManager.LoadMap(String filePath) in D:\GitlabRunner\builds\Gq5qA5P4\1\ConcernedApe\stardewvalley\NPC\xTileSource\xTile\Format\FormatManager.cs:line 134
at StardewModdingAPI.Framework.ContentManagers.ModContentManager.LoadMapFile[T](IAssetName assetName, FileInfo file) in /home/pathoschild/git/SMAPI/src/SMAPI/Framework/ContentManagers/ModContentManager.cs:line 258
at StardewModdingAPI.Framework.ContentManagers.ModContentManager.LoadExact[T]
I can send the other relevant part if needed because the message was too long for discord
!log
Important note: Your computer username may appear in the log. If your username is your full name, please be aware of this before uploading it.
Please share your SMAPI log file. To do so:
- Open this page: smapi.io/log.
- Follow the instructions at the top of the page to upload the log file. (Don't copy & paste from the console window!)
- After uploading, it will show a green box with a URL to share. Post that URL here.
Please do it even if you don't see any errors. This has useful info like what mods and versions you have, what the mods are doing, etc. If the issue didn’t occur in your last session, please load the game to the point where the issue occurs, then upload the log.
Also I'll show the content json portion again
iro, they intentionally only sent the snippet because of privacy concerns
ah, I see
Yay I got my item in game! My first decoration!
the smapi log website anonymises most paths now
i was gonna say i remember reading somrthing about path anonymization
I'm sorry if it is hard to parse through this
so you should theoertically be fine to use it
I only got that notif of the website before I posted the log snippet
I have the other error portion I can send if that helps
There's probably a little bit more information in the Trace for that error
(hit Trace and then look for something about the TMX file on the SMAPI log page)
I followed your exact template in the content json
its the tmx thats the problem, it seems to me
Yeah, the code shouldn't be at fault here, it's the actual Tiled TMX file
something with your tilesheets
Most likely you've got an invalid character somewhere in your tileset source
If I send the portion I edited of the tmx to stop the climbing error would that reveal anything?
Considering that your edit should have removed the path entirely?
It wouldn't have any privacy issues
i assume you'd see if it did
Uh oh
Did you just open the TMX without putting the tileset PNGs in your mod folder? xD
and get all the red Xs?
I think think the portion I thought I deleted is still there...
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.10" tiledversion="1.11.1.1" orientation="orthogonal" renderorder="right-down" compressionlevel="0" width="6" height="2" tilewidth="16" tileheight="16" infinite="0" nextlayerid="17" nextobjectid="135">
<properties>
<property name="Fall_Objects" value="T"/>
<property name="NPCWarp" value="22 8 Desert 18 27"/>
<property name="Outdoors" value="T"/>
<property name="Spring_Objects" value="T"/>
<property name="Summer_Objects" value="T"/>
<property name="ViewportClamp" value="10 0 35 30"/>
<property name="Warp" value="44 22 Town 0 54 44 23 Town 0 54 44 24 Town 0 54 44 25 Town 0 54 65 22 Town 0 54 65 23 Town 0 54 65 24 Town 0 54 65 25 Town 0 54 9 22 Farm 79 17 9 23 Farm 79 17 9 24 Farm 79 17 9 25 Farm 79 17 -1 22 Farm 79 17 -1 23 Farm 79 17 -1 24 Farm 79 17 -1 25 Farm 79 17 -1 26 Farm 79 17 11 6 Backwoods 49 30 11 7 Backwoods 49 30 11 8 Backwoods 49 30 11 9 Backwoods 49 30"/>
<property name="Winter_Objects" value="T"/>
</properties>
<tileset firstgid="1" name="outdoors" tilewidth="16" tileheight="16" tilecount="1975" columns="25">
<tile id="150">
ah
I removed the pathing to the pngs or so I thought
did you remove the image source entirely?
They did
like, the whole line?
<image source="spring_outdoorsTileSheet" width="400" height="1264" />
<tile id="150">```
This is from the vanilla BusStop tmx, you HAVE to have an image source in there
You can repair it by adding that <image source> part back in
I thought I did but this was still there...
<tileset firstgid="1" name="outdoors" tilewidth="16" tileheight="16" tilecount="1975" columns="25">
that is not the image source
and you need that
<image source =...> like in lily's code there
Ok, well it isn't gone yet
So, how do I get it to draw from the vanilla tiles instead then?
In the future, when we say to remove the path from the image source, we mean specifically if you've got <image source="../../../spring_outdoorsTileSheet" then it needs to become <image source="spring_outdoorsTileSheet">
you need to add back what you deleted earlier but without the extra path stuff as lily says
otherwise there is no image at all for your tilesheet
Yep, if you don't have the extra stuff in front of the tilesheet/tsx name, then it will automatically act as a relevant path and look inside Stardew Valley's Maps folder for the vanilla file.
My code blocks shows where it goes exactly
jeez i spent an entire day developing 1 patch of code 😭
<image source="spring_outdoorsTileSheet" width="400" height="1264" /> this goes right above <tile id="150">
so i haven't played Stardew for a while, i kinda dabbled in attempting to do stuff, and now i come back and find that things like XNBCLI aren't as much of a thing anymore? All I want to do is make one singular hairstyle edit, but i have no idea how to use content patcher lmao
Content Patcher has a lot of documentation, and there's also converters that exist!
!converters
These community tools help update mods to newer formats or frameworks:
- Convert to Content Patcher from Custom Furniture, Better Farm Animal Variety (BFAV), Custom Music, JSON Assets, More than Necessary (MTN), SAAT, Shop Tile Framework (STF), TMXLoader, or XNB.
- Convert to other frameworks:
- Other tools:
[Content Patcher] Unhandled exception applying patch: NPC > EditMap Maps/BusStop.
StardewModdingAPI.Framework.Exceptions.SContentLoadException: NPC loaded map 'assets/maps/WSF_BusStopEdit.tmx' with invalid tilesheet path '../../Content (unpacked)/Maps/spring_outdoorsTileSheet'. Tilesheet paths must be a relative path without directory climbing (../).
Still this error, and it added that there were several a boolean errors as well, which likely aren't in the content json
okay, so that means you didn't remove the "../../Content (unpacked)/Maps/" portion of your image source
I'll check again, but I though i did
Also if you are for some reason opening and resaving your map file to a new folder (particularly if you're using Save As), then don't do that
It'll just break it again
I have not used save as on this file
okay
Just making sure, because some people don't realize that it's better to copy/paste your TMX to your mod folder after editing if you are editing within the unpacked Maps folder.
Because saving it directly to the mod folder from Tiled will break all your relative paths.
this is what it was supposed to look like?
<image source="spring_outdoorsTileSheet" width="400" height="1264" />
Yes
That is the edit I made
Then you may have missed one somewhere or you didn't edit the one in your mod folder.
I did edit the mod folder one. I'm not sure what's wrong with the tmx
If you want more direct help, you could send me your TMX -- I can edit it straight in a text editor without needing any of the extra tilesets you may have added, if that's a concern. My DMs should be open.
This is kind of tricky to help solve without the full logs/JSON and possibly screenshots of it in Tiled otherwise, LOL
I'm sorry that helping me with this problem has been so time consuming. I can send over the entire tmx code if you want.
Or the tmx itself i guess
might as well just send the TMX if you're gonna send over the entire code anyway
sure, I'll try and figure that out.
I don't mind taking a closer look, I'm currently bashing my head against a shop code because my brain refuses to remember how to format it. LOL
Coding with brain fog is not the wisest thing I've done, but I'm stubborn. 
I'm not sure how to send the doc over through dm?
should be able to just drag the file into the message window
Oh, let me try that
It will let me upload to mods general, but I don't see to message it to you directly
I should be able to dm non friends?
can't send a file on the first message, gotta open/initiate the DM first. I DMed you to start it off. 😛
I believe we figured out the issue, there was a dupe tileset and that one didn't have the updated image source.
Does anyone know where I can find this in the game's files?
StardewValley.Menus.TailoringMenu::GetDyecolor
thats a C# qualified name that tells you exactly where to find it
I don't speak C# 
in the Menus namespace in the TailoringMenu class, method GetDyeColor
do you have ILSpy?
or your game decompiled?
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
are you on a secret fourth option
Is there a secret fourth option? Like maybe Android?
Cuz the piece of absolute garbage that is my laptop is getting repaired
i wouldnt recommend doing modding work on an android but i guess i cant stop someone
but if theres any options for decompiling and reading a dll on mobile, i dont know it
That's enough to stop me
Same, and I lack the patience to try
Sigh. I hate not having a properly functioning laptop
RIP, I have to release an update for Pelican Valley Loft Apartments because Baldur's Village decided to use the same exact spot as me for their Mountain patch, despite releasing after my mod (BV has been out for less than 2 weeks).
what does them releasing after have to do with it
also entirely unrelated question: are event commands case sensitive?
It means I couldn't code an exception for them earlier because they hadn't released yet.
generally the etiquette in the community is that the later mod adjusts their patch
Also that, yes
but the devs aren't in the EN community, I don't believe
always assume case sensitivity!
the wording just gave me the impression that the thought is they like, shouldnt have chosen that spot or something, is all, but if that wasnt the intent then no worries
I'm not 100% sure but NPC names are, Button.
i would, but im trying to write code that checks event commands, and i wanna know if i need to account for peoples events being in all lowercase
They're also incompatible with the other mod that I already coded an exception for, Button, so it's not just my mod that they've created an incompatibility with.
I mean ideally yeah, but not everyone has neurodivergent memory for map patches 
i get that, but i dont think a mod author really has a 'responsibility' to care?
And people like to go bother me to change my map instead xD
Um... Why?
that's why I called it "etiquette", it's not required but it's polite
idk to me its just the wording of like "theyve created an incompatibility" that seems harsher than it needs to be, like its an intentional act of mod destruction and not just... someone making a mod
it also saves you some headache by not having to deal with "hey X mod overlaps with your mod, fix nao plz"
"An incompatibility has been unintentionally created"
Not intending to be harsh about it, I'm not even mad, it's just a "oh, that's kinda annoying" 😛
like i said, if that wasnt the intent then its fine, its just how it came across when i read it at first
I don't think anyone thinks they did it to spite Lily, I'm sure they don't even know about her mod. But they did create an incompatibility that didn't exist before 
I'm also a little concerned that even if I code the exception, because it's also incompatible with the other mod, if BV goes in and changes it themselves to my alternate location to fix compat with the other mod, we're back where we started with problems. LOL
I doubt they will tbh
I am trying to think how I can make SITW better...
What's SITW? 😅
Ah. Yeah I got nothing :')
I got an idea!
Add warp totems and some types of food to the shop as you get further down in the skull cavern
Does the shop appear in the skull cavern?
okay, the brain fog is real, how do I tweak my When condition for HasMod |contains= to mean either of a specific mod rather than an and?
comma separated after the contains=
"HasMod |contains=holaitsed.foragefruittrees, BaldursVillage.BVCP":true
}``` is this right?
I forgor 
correct
thanks, that'll save me some time.
Does a when entry need a boolean at the end?
it depends
For a true/false.
i believe content patcher will convert a string into a boolean as necessary
so true and "true" both work
okay, so, next question, because I forgot how semver works. For an update that is only fixing a compat issue, is that a 2nd or 3rd decimal increase on version number? xD
I know 3rd decimal is 'bug fixes'
Does enabling compat count? xD
bugfixes are typically the last one
I think you need some sleep lol /lh
I'll sleep when this code is done, LOL
What time is it where you are? >_>
2 am
Same
"fixing a compat issue" sounds like it goes in the "fixed things" decimal to me
but ofc its always just up to you
semver is after all just a suggestion
Oh this is adjusting for BV release? Yeah I would put that in bugfix.
speaking of fixes, as im going thru my own code im realizing that damn, a lot of the event commands on the wiki list parameters as required when they are very much not
makes my work slightly more annoying to do
I fixed some of those when I did my update but I am unsurprised to hear there are more

I also want to check what commands actually do accept string facing directions now because I discovered that the initial setup and advancedMove both complain if you don't use numeric direction. And I expect there are probably more.
isnt advancedMove just a special case bc it has to handle both movement and directions in the same argument space
Move, FaceDirection, WarpFarmers, AddTemporaryActor, and LoadActors accept strings for sure
Probably, but I wouldn't have expected the initial setup to have a problem with them
legacy code 
if it aint broke dont fix etc
all the ones i just listed use ArgUtility.TryGetDirection though
but those are the only ones that do
but those are also the only ones i can see that use a direction parameter at all on the event page
also ignore LoadActors
Late but advance move and move use two different movement engines
Ok cool thanks Button. I just didn't want to go in and add another exception for advancedMove and then find out afterwards there were more exceptions that I could've bundled into one edit.
advanceMove is currently a pain in my ass trying to figure out how to properly parse it
If it ain't broke don't fix it
This is proramming. It's more like
If it ain't broke you're unaware of where it's broke.
Advanced move is the better of the two
i dislike it solely bc its annoying me right now
i need no rational reason for command hatred
I keep having to use advancedMove because move won't play nice for me.
i am probably just gonna patch its command handler instead
I was just trying to have Hiria and my farmer move simultaneously (but with different start times) and Hiria threw herself off a cliff 
was she okay
Oh dear
Yes she's very resilient 😌
am i correct in assuming that advancedMove can have an endless number of groups of 2 ints
Can't speak to whether it's endless, but there's no hard limit that I am aware of.
i return having learned a little bit of coding with one of those annoying errors i hear everyone who attempts programming always encounters.
So i've managed to create the necessary files, but whenever I try to run the game with the homemade mod, it keeps telling me there is no "hairstyles.xnb" file and therefore can't overwrite it. The path I've made for the target is "Character/Farmer/hairstyles" which I... assume is the right one?
!androidsmapi
There is an unofficial port of SMAPI for Stardew 1.6 to Android. Please see the wiki instructions for more information.
IMPORTANT: This is a highly experimental build and may be prone to glitches, bugs, or incompatibilities. We are not able to provide support if you run into trouble or compatibility issues; please use the discord linked on the Android SMAPI github.
Do not harass mod authors to make Android specific compatibility patches.
I download the stardew valley crack game
NOOOOOOOOOO
this server does not support or condone piracy
We will not support pirated copies of the game.
Characters/Farmer/hairstyles2
hello
ohhhh
You're missing the "s" in Characters there.
no money to pay it 
Can I ask why you jumped straight to hairstyles2?
It's the only one I saw
you need the official version to mod the game
I think there's another tho
This is how I did my hairstyle test mod (for adding hair instead of replacing):
"Format":"2.4.0",
"Changes": [
{
"Action": "Load",
"Target": "Characters/Farmer/FRL_Hairstyles",
"FromFile": "assets/FRL_hairstyles.png",
},
{
"Action": "EditData",
"Target": "Data/HairData",
"Entries": {
"86001": "FRL_Hairstyles/0/0/true/86001/false",
"86002": "FRL_Hairstyles/1/0/true/86002/false",
"86003": "FRL_Hairstyles/2/0/true/86003/false",
}
},
]
}```
lol, i did it right in the actual code but not when i wrote it here it seems
I can get it for free?
No.
it's... literally only 10 bucks on steam rn
It's 40% off right now, go buy it.
wait, is the FromFile meant to be the png?
Yes
My example is if you decide to add new hair and not replace the old ones, in case you ever decide to try that route. 🙂
FromFile always refers to a file in your mod folder that you're wanting to add to the game's content
Please don't talk about piracy in the server.
It's $5 on google play I think
6 or 7
that'd be useful. Thanks. If I ever get that far i'll probably try it, heh
I got free play pass for 3 months tho
Regional pricing varies of course, but the game is generally very cheap, especially with the sales, yeah
It's worth the money imo
Price in my country is different
I love my phone and I love Stardew but I cannot imagine wanting to play Stardew on my phone lol
Same
I can't wait to get it on Steam
I bought it on sale myself, in the country I bought it in, it worked out to like... 2 dollars? Which is still very affordable for that country
We love steam regional pricing in this house
I played it for 122 hours I think it's not worth paying since I completed it.
Okay, I think we should switch topics.
I already told you to stop bringing up piracy
Won't be saying it again
Okay, buddy, calm down.
How much insanity am I bringing upon myself if I decide to support the major expansions (SVE, RSV, ES, Sunberry, etc.) for a planned mod where Leah can be commissioned for the 'spouse' portraits even if you aren't married to that NPC? xD
@latent mauve You leveled up to Rancher. That's level 250. Woot!
So much lol
I hope after all that work on your Zelda overhaul you feel like doing one million more years drawing
I have SVE's coded in already, just knocked those out along with the vanilla NPCs
if those expansions come with their own spouse portraits i think probably not that bad? itd just be more of the same but with modded internal names instead, right? unless im guessing the implementation plan wrong
Congratulations on increasing your level
defintely no way to mod the game like that so have to buy it. I bought it on google play and Steam so far. I don't have it on my ipad yet though.
Yeah, it would basically be making a shop for all the portraits accessible from Leah's house, so it'd be finding all the item IDs and adding them to the shop list.
Oh if you're not drawing them, not that much?
I think the next game I'm playing is going to be undertale
only gotta do that once, though
You could not pay me to do that much pixel art after I finished the Zelda mod sprites. xD
So it's definitely gonna be pre-existing portraits only
This channel is for discussion of making mods, off-topic is #town-square :)
just spawn the portraits in with cjb cheats and look at their id with LA
mostly I bought it so I could make android compatibile mods.
You couldn't pay me to do pixel art at all 🤣
oh
I also don't want to run into issues with turning NPC assets from other mods into portrait items if there are closed permissions. Better to just avoid it and use ones that the mods already add in themselves.
is it much difference if I have a mod for pc and will it work yet in android?
Depends on the mod. Most of them probably will
stil haven't attempted since last time it was tmxl toolkit was needed but now that android smapi has been updated has anyone tried making a mod?
At recent count, I have completed 52 portraits and 46 spritesheets for the Zelda NPC mod. I'm gonna be so burned out on character art.
I have 3 character spritesheets to go and 0 portraits to go. (yes, I know the math says I have 3 more characters, but those are gonna get added later at this point)
now i have clipping issues with the pixel art itself because it's too floofy sigh
is it possible to get around that somehow?
I wonder if FarmTypeManager and Spacecore work for android smapi.
I think Fashion Sense allows you to have bigger sprites? I'm pretty sure it does for accessories at least.
how does fashion sense work?
🤷
Follow instructions, end up with FS mod?
ah...
I feel relatively confident that I could make an FS mod but farmer clothing and other bits do not interest me at all so I have never had reason to try.
That's 100% valid
But there are step by step instructions https://github.com/Floogen/FashionSense/wiki/Creating-a-Hairstyle-Content-Pack
Oh, if only I knew how to do pixel art that looks decent 🥲
It doesn't look that complicated 
It's important to note that to make a Fashion Sense mod you're not using Content Patcher at all so I suggest making an entirely new mod rather than trying to edit what you've got so far to fit Fashion Sense.
Even the manifest has to be different.
I stand corrected
Can NPC images be changed by deleting their original images?




