#making-mods-general
1 messages · Page 43 of 1
Yes, that was exactly it; I typed it wrong.
are you trying to make it pull something up entirely different?
cause if you want them to be interconnected you can do it like this:
"Name": "FacialHairStyle",
"When": { "Facial Hair": "Mustache" },
"Value": "Mustache"
},
{
"Name": "FacialHairStyle",
"When": { "Facial Hair": "Beard" },
"Value": "Beard"
},
{
"Name": "FacialHairStyle",
"When": { "Facial Hair": "Stubble" },
"Value": "Stubble"
},
{
"Name": "FacialHairStyle",
"When": { "Facial Hair": "Beard Combo" },
"Value": "Beard Combo"
},```
where the 'name' is the same, so you can just do a flat `{{FacialHairStyle}}` and it will then pick based on what the when conditions are
hm. the id for the bed isn't in the list of items in the template house furniture, but there's definitely one in the farmhouse when it loads. I wonder if beds are just automagically put in, and I don't need to worry about adding one myself?
how would i add context tags to object data with c# 😭
the OnAssetRequested thing didn't work
private void AddStarterFurniture(Farm farm)
{
base.furniture.Add(new BedFurniture(BedFurniture.DEFAULT_BED_INDEX, new Vector2(9f, 8f)));
string[] fields = farm.GetMapPropertySplitBySpaces("FarmHouseFurniture");
if (fields.Any())
{
...
yes bed is hardcoded to be added at 9,8
awesome, not something I need to worry about, then. thank you for verifying that for me!
nevermind it totally does
i just needed to invalidate the flower cache before the editing. for some reason
I have a question about creating custom maps. I'm just a bit confused.
I have layers Buildings and Buildings1 (Buildings1 being on top of layer Building), yet when the map is rendered in the game, items in the Building1 does not have any collision or that is completely passable. I kind of assumed that items in Building layers would be automatically non-passable (or idk if I need to set the property to Passable 0).
Buildings is the only layer with collision
Any iterations on that layer won't get them
Buildings2 electric boogaloo is just layering capabilities
even if set with passable to false?
Passable is used on Buildings to make it passable or Back to make it impassable
is passable one of those ones where it doesnt care the value it just checks existence
The true or false doesn't matter in either case, it's just a value for you to remember what it does
And also it has to have any value
very cool
i had this corundum my first time making a map, it's hardcoded to be buildings specifically
this is so saad aaa :'>
okii then
i'll have to think over how to map these other buildings kwkwkw
I'm not sure why you would use Buildings2 to layer something if you didn't have something on Buildings that would create collision though
Like if you don't have something on Buildings then you don't need Buildings2
For that tile
i do have. for some of the other items. and they'd 'cut' each other. xd so i thought creating a second layer of it would have the same thing (collision)
If there was something on the Buildings layer, even if it was invisible, there would be collision though
So that makes it seem like you're somehow losing whatever you put on Buildings or are setting Passable on the TileData
im wondering on what to do with this particular instance where the fences are in Buildings layer and the other one (highlited) on Buildings2
The seat part should be on Buildings and the top part on Front I believe
Basically that for all of them
The bottom tile would be buildings, that would create collision and the top part would be on Front or Buildings2, since they have fence behind them
Front is good for if you don't have anything behind them so you can walk behind them properly, but not necessary here
ahh i see!
If all that fence is on Buildings, you should probably make it only the bottom tile of those too, with the rest of the fence on Front
thats brilliant. i'll give it a go rn.
then, what is the purpose of doing layers of BuildingsX if it wont create collision?
Generally, so you can have stuff on the same z layer
hmmm 
It's kind of a niche use case
Like it's not very common that you would stack stuff on top of each other like that in such a way that you can't just use a different layer or would definitely need to use a different layer
I guess anything you're placing on like a wall next to the ground is a good example
You don't want it on Front or AlwaysFront because then it can cause bad clipping when you're walking next to it
And you can't put it on Back because it'll be under the wall that's on Buildings
So you put it on Buildings2 so that it renders above Buildings but still behind the player
Z depth can be a difficult concept to contend with in 2D games
I think it's funny how many wall tops inside houses are just on Front, so if you walk next to them with a hat on it clips really badly all over the place
thats interesting, i guess i could try to explore this one via mods with their own tilesheets and uses layers of it. this is very useful information
Front only renders in front of the player if their Y position is higher than I think the center of the tile
sshhhh!
theyll hear u!
Otherwise you render in front of it, but with a normal player sprite you can't tell, but big hats stick out far enough to clip in front and behind over and over
i have gone a little crazy in my own Buildings2 electric boogaloo, i have a lot of transparent tiles in buildings because of tight corners 
Yep, I tend to avoid Front quite a bit unless I specifically need the front/back aspect of it because it causes weird clipping.
time to test with a hat it is xd
Lol, it's an easy way to make your characters model wider than it usually is
I can't seem to find the ID of this Seasonal Plant on the ID Github. is that because it's got a different appearance with every season?
that looks really pretty
ooohh they look lovely!! interesting... interesting..
I have a buildings-1 in one of my maps. Not sure why haha
hey, the kitchen is clean, and that's where all the real magic happens
@velvet narwhal put those flammables there! jk
i think i quite literally went
"Buildings is impassable, okay, gonna make this all transparent tiles then so i don't have to think about it later"
Are you looking in the Big Craftables tab? (BC)200
A shame if you decide to change it though
ahhh, the seasonal plants are in BigCraftable (for some weird reason)
thank you so muuchhu!
i havent really thought of putting it that wayy xd so much to cut and paste
no, no I was not, because I thought that was all machines and not furniture, lol
There's also chests in there
and scarecrows!
The tilesheet is TileSheets/Craftables FYI
is that useful enough to include into betas, a scarecrow increment 
a what
a trigger anytime the scarecrow gets a +1
oh
Like crows it scared?
ye
i dont know how they actually work
i think those things all just happen on day start anyway
(i do not know for sure)
that bag doesnt seem so trashuspicious right? is it me? 
i know you made an (action) make a machine ready, but what about the opposite, a trigger for the machine ready? 
although yknow probably a bad idea
how it's supposed to look, vs 'why is my seasonal plant a 🚫??'
that would happen a lot i think
seeing the images in modded-farmers with their ridiculous amount of machines is asking for trouble
yeah
something about the item ID
or actually maybe a bad texture load? quite unsure without seeing the code
seconded 
the item in question is (poorly) circled so it stands out a little more. do I need to append it with (BC) since it isn't an actual 'furniture' item?
the fact that the others dont need qualified IDs makes me wonder if its hardcoded to add (F) automatically
Yeah, it's probably trying to do F
it does hardcode the (F)
I do not know. I think it appends the F automatically, though, since none of the others need to have an F in front of them
it only creates Furniture types
There isn't a (F)200 so it's an error item
even if you write (BC) it uses ItemRegistry.Create<Furniture>
darn, so that means I can't have the pretty seasonal plant for the starting farmhouse. oh well, I'll just pick another plant, no big deal
you can probably shove it into the welcome bundle
oh, the rug didn't change either, need to fix that
Or mail it
"Have this beautiful seasonal plant as a housewarming gift"
*the name is smudged out and the ink is strangely... warm?*
where even is the edit for the welcome bundle
...that's really sweet XD
you can add the seasonal plant into the starter gift as a compromise?
also, this looks great!
thank you :D
....i just had a horrible idea
spill
tell me!
i don't know if i can implement it though
letting mod authors spawn animals out of huge crops being broken 
that would be hilarious
i guess free animal(s) xd marnie would go broke
well the very first thought was popping a baby out of the big crops but 
as in like if you break a giant pumpkin a chicken will pop out??
50 huge crops to be harvested
that would be hilarious bc theres a local folklore with that exact concept here. except it was a baby, not animals
WAIT. WHAT!
afaik animals are bound to their coops and barns. How would you solve that?
What folkloooree
brain was thinking of "momotaro"
yeah like momotaro. except im not japanese haha
i'd probably figure some way around getting the player to select a building
i'm just thinking of more chaos to put into customfields 
also @unique sigil, thank you for letting me peek at your farm's stuff to figure out how to make config files. it was very, very helpful :D
BETAS can probably do that better, in terms of like the breaking... of a large crop? idk
glad to help :) if you ever want to try out the AdditionalFarms format, you can check out my latest farm map (cliffside cove)
breaking a giant crop wont count as harvesting a crop for BETAS trigger purposes
is it the same effect as chopping a tree down
¯_(ツ)_/¯
Atra has a mod or two revolving around giant crops you could look at
I'm using the additional farms format right now! :D
oh damnn nice! soon you'll make custom farm caves too i hope?
which reminds me i should probably eventually make a farm cave bundle
{
giantCrops = GiantCrop.GetGiantCropsFor("(O)" + this.indexOfHarvest.Value);
return giantCrops.Count > 0;
}```
this is the only thing i see the object for so iunno
repurpose the ones ive made for my mods at least
hooray! I was able to add it to my starting gift!
eyyy congraaats!
I would, but the farm cave map I have right now is so cute and cozy, and it has a hot spring in it! >.> it is perfection, I cannot improve upon it!
understandable. i use aimon's right now, but i enjoy adding customized farm caves to my recent farms
...this is weird, I can't seem to find the one I use on the nexus anymore. not by searching for file name, not for searching by author, and it doesn't have update keys
Maybe they unlisted it, Nexus search is also pretty bad
maybe. that's bizzare
you can actually use the CP harmony feature of BETAS to postfix GiantCrop.TryGetDrop() since that is only called when the GiantCrop is destroyed (assuming the giant crop is not a custom one that has nothing it drops at all for some reason)
to create a makeshift custom trigger
actually it does also get called before the giant crop is destroyed if the farmer has the shaving enchantment on their axe
so not perfect
but not that bad
so betas can do it
back to the drawing board of what i put in my -core
well, BETAS can let you run an action when (mostly) a giant crop is destroyed, but thats it
everything pretty much has a customfield huh
...wait
public override bool IsVillager => false; how much chaos can i sew by changing this to true in the child.cs
a lot most likely, and thats if that isnt inlined into something you can't patch
hm... is a greenhouse that holds 8000 crops truly ludicrous, or should I aim higher? XD
Im creating a mod to collect data from stardew, any idea how I can get the details of the fishing activity? Like the how far the bait landed, bar progress while fishing, time taken, if there were rewards boxes in it?
by finding the relevant functions in the game code and tracking that stuff manually with various code and harmony patches
for fishing stuff specifically id explore the FishingRod class
Hmm so harmony patches guide is the the wiki?
there are pages about harmony on the wiki and i think there might be some guides on the modding specific wiki but i dont remember
Atra was gonna rewrite the harmony guide tomorrow I think, not sure exactly what they're wanting to change
i think it's because the example of postfix is written... in... reflection...?
Something about unnecessary reflection
Ohk then I’ll wait for the update ig
Is there a harmony patch mod i can look at the code?
i also dont know what atra wanted to change or understand what they meant by unnecessary reflection
and there are probably hundreds of mods that use harmony
Yeah no idea which guide, they didn't link the specific issue lol
tbh i have had no luck looking by example cause there's a multitude of things going on that isn't harmony
https://github.com/rokugin/CustomLocksUpdated/blob/main/Patches/GameLocationPatch.cs
This is my mod that heavily uses transpilers, somewhere in there is still the example Abs0rbed sent me that helped me get started with transpiling
Also does harmony patches cause frequent crashes?
The game itself shouldn't crash, but your mod might
Harmony can break shit real good though
Using harmony assumes you know c# unless you get handheld like me 
Yeah I already have a working mod with c#
But I don’t want the mod to crash because of harmony
it only crashes if either you write code that doesnt work or someone else writes code that breaks your code. and the second can happen whether you use harmony or not
because other people are using harmony whether you're using harmony or not
harmony itself does not cause crashes
https://github.com/rokugin/NoIndoorDismount/blob/main/ModEntry.cs
Super duper basic postfix, the problem with harmony is that there's just a lot you can do with it and the examples are fairly specific
(OH I can delete that one line from my code
)
Best bet is to check out the site Avi linked
I see also stupid q but what is harmony, is it a code injector?
This one right
Harmony will modify the method info of functions you tell it to in order to run harmony patches alongside (or within) then
so, sort of
Button says trigger words and I immediately pull up the harmony website 
Aside from transpiling, most of my harmony knowledge has come from that site and seeing how others do things
Yeah now time to have an llm summarize that website for me
Good luck with that I guess
Be more useful to just blindly slap your keyboard in a C# script
This is not just for fishing but other stuff too right?
Harmony is for everything
Like any general source code of the game
https://stardewvalleywiki.com/Modding:Modder_Guide/APIs/Harmony
There's also this page. I really need to go through that tutorial on the modding wiki to see what it covers some day
Important to make sure you're enabling Harmony through SMAPI and not installing a separate package for it, since SMAPI ships with a specific version of Harmony that you have to use
First of all, there's only one decompiled repo that's allowed and it's invite only
Don’t use source code repos.
it's NOT okay to put out the source code like that.
!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
Second, that one is for 1.5.6, so you should decompile the code yourself to the latest version
ohh mb
this annoys me
Yeah, the whole thing is insane
ty
also is the stardewvalley.dll in the same folder as the exe (windows and steam setting)
I would delete that link to that unauthorized decompiled code. I think people could use that to recompile the game and thus own it without buying it
I would actually be surprised if it recompiled and worked lol
you'd still need the content files anyway
Re: harmony not causing crashes
Harmony also isn't exactly child safe
While you can (mostly) avoid crashes if you know exactly what you are doing, you have to know exactly what you are doing
Good luck have fun making chatgpt do that!
currently having a sensible chuckle at this line of code:
this.ReloadTextureIfNeeded(forceReload: true);
wait people are trying to get LLM's to write harmony patches? lmao
I barely trust it enough to name my silly mods with heavy supervision, let alone write some of the most alien C# code possible
oh yes they do, saw at least a couple case posted here myself
someone asked ChatGPT to write code that reskins the tractor into a tank while hiding the player sprite, it spat out some impressively mind boggling code that patches TractorTool's draw code
selph is there any mod using emc extra outputs atm
(spoiler alert: there is no TractorTool)
well yeah Tractors are horses, duh
there's the Beebox, though last I heard it was somewhat buggy (for reasons not entirely related to EMC)
I wonder if the LLM only has Shovels code as a reference and as a result all harmony patches for stardew must involve tools
oh that's a very silly thought, i like it 😄
going a little crazy here. i checked this so many times over and copy/pasted it from ones that work, but this bit just isnt working in game. maybe there's something small im missing? idk. his sprite keeps being invisible and portrait is the default one.
You've overridden the default entry completely, so it only has what you've given it, aka a precedence and no sprite nor portrait, as for the other ones they should work, i don't see any obvious mistakes with those
(though the default should be fine since none defaults to the default sprites and portraits)
i have some for all seasons
it's just refusing to acknowledge the summer ones. maybe the fall ones too. i can check rq
i checked the file placement too and the spelling and its all correct
!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.
I've been getting much further than expected, but I'm stumped on this error
can't find it anywhere either, but I think it's a very basic mistake I've made Cx
Error (active) CS1061 'ModEntry' does not contain a definition for 'Config' and no accessible extension method 'Config' accepting a first argument of type 'ModEntry' could be found (are you missing a using directive or an assembly reference?)
recommend running patch summary in the SMAPI console when you see the wrong graphics before uploading a log here
whats patch summary? i have the log tho
https://smapi.io/log/c74a1ce4b909489abdacd9845c2e53db
Log Info: SMAPI 4.0.8 with SDV 1.6.8 build 24119 on Microsoft Windows 10 Home, with 21 C# mods and 12 content packs.
Suggested fixes: One or more mods are out of date, consider updating them
you're trying to reference ModEntry.Config but your modentry class does not have that defined (does not contain a definition for 'Config'). either you typoed your reference or you forgot to define what Config is
when your game is running, type patch summary in your SMAPI console window and hit enter. this generates detailed output of which Content Patcher patches were or were not applied, and gives reasons. full of extremely helpful information for debugging exactly this kind of problem
okay
your log already has some helpful errors and warnings though, so that's a start
yeah what i saw was tmx stuff which im saving for last x__x
here's with the summary
https://smapi.io/log/1546ae8beec242b3bcb9ea1c53037135
Log Info: SMAPI 4.0.8 with SDV 1.6.8 build 24119 on Microsoft Windows 10 Home, with 21 C# mods and 12 content packs.
Suggested fixes: One or more mods are out of date, consider updating them
The useful part is
NPC Elliott can't load portraits from 'Portraits/Ralo.GothFriendlyElliott_Fall' (per appearance entry 'Fall' in Data/Characters): Microsoft.Xna.Framework.Content.ContentLoadException: The content file was not found.
You've got some sort of disconnect with the name of the portrait you loaded and the one you're telling it to use
Your patch summary shows you're never loading Elliotts new portraits and sprites, are they in a file you forgot to include?
your comments aren't closed above the patches for his portraits
yes. ;o so i dont get it
this one. you need /* your comment here */
but you have /* your comment /
ooh good catch, yeah looking at it they're open multiline comments
let me see if that makes a difference then
did you turn off syntax highlighting in your editor?
it will extremely make a difference
Can we have like, a giant undismissable banner on this channel that says "Use an editor with syntax highlighting"?
(I'm joking. Maybe. Kind of.)
definitely a joke. doing so will not solve the problem
It does look like it has syntax highlighting, it just, doesn't know how to handle mutliline comments, which is not ideal for an editor
I definitely didn't define it, as I'm very unsure where I'm supposed to do that and how. VS suggests private ModConfig Config; but this gives a different error
That would be correct, as for the dereference of a possibility null value or whatever the warning is you can safely ignore it
Including this one?
Non-nullable field 'Config' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the field as nullable.
Yes
Obligatory "I don't know anything about coding"
I'm unfortunately trying to have my cake and eat it too.
The Yaks mod for 1.6 says you should be able to milk the yaks and they drop fiber overnight. Right now they're dropping both milk and fiber.
I'd like to be able to milk them while the fiber drops overnight, looking into the file I /think/ it's set up to do so but it's just.. not working in game?
update:
[PolyCarts C#] This mod failed in the GameLoop.GameLaunched event. Technical details:
NullReferenceException: Object reference not set to an instance of an object.
at PolyCarts.ModEntry.<PolyConfig>b__2_2() in \PolyCarts\PolyCarts C#\ModEntry.cs:line 144
at GenericModConfigMenu.Framework.Api.AddSimpleOption[T](IManifest mod, Func`1 name, Func`1 tooltip, Func`1 getValue, Action`1 setValue, String fieldId) in C:\Users\space\Programming\StardewValley\StardewValleyMods\GenericModConfigMenu\Framework\Api.cs:line 519
at PolyCarts.ModEntry.PolyConfig(Object sender, GameLaunchedEventArgs e) in \PolyCarts\PolyCarts C#\ModEntry.cs:line 140
at StardewModdingAPI.Framework.Events.ManagedEvent`1.Raise(TEventArgs args) in SMAPI\Framework\Events\ManagedEvent.cs:line 101```
looks like you tried invoking a null somewhere
how familiar are you with Content Patcher?
yeah but endertedi just told me to ignore that
This might be a different null then. What's the code on line 144?
getValue: () => this.Config.SimplifiedCarts,
It might be best that you somewhat familiarize yourself with its syntax first
!cp
Content Patcher (https://www.nexusmods.com/stardewvalley/mods/1915) is a mod which loads content packs to change the game's images and data without replacing XNB files. If you want to make mods using Content Patcher, start at https://stardewvalleywiki.com/Modding:Content_Patcher.
public bool SimplifiedCarts { get; set; } = false;
(Also I just recalled our earlier convo in modded-farmers, so what you want is an EditData patch on the custom asset added by Extra Animal Config)
(The guide to do so is a bit advanced and assumes familiarity with CP, and CP custom asset editing beforehand)
so if this.Config is null (a possibility, per the warning), then this will barf as seen.
are you setting Config earlier on, say, by calling helper.ReadConfig in your Entry method?
yeaaah this is what i've noticed 😵💫
I'll give it my best shot.
this is my code, might be easier
try adding
this.Config = helper.ReadConfig<ModConfig>();
to your Entry method
that, seems to have done the trick!
(your homework is to discern why /lh)
I guess the class where I define the options stores them, but then the private void I use doesn't know that and this let's it know they exist?
okay, now that I've got this to work, can I actually use the configs I set using C# in the CP part of my mod?
As I replied over in ES, the best way would be to add CP tokens that reflect the value of each config option
maybe I don't understand what you mean then
So by default configs can only really be read by the mod that add them, this is especially true for CP mods
That said, since you're making a C# mod for the configs, you can use the ContentPatcherAPI to add a cp token that reflects the value of the config, so for example there's your SimplifiedCarts config option, what you'd do is add a SimplifiedCarts CP token that outputs true/false based on the config option, and then in the CP part you'd access that config by using the token, for example {{C# Component modid/SimplifiedCarts}} (custom CP tokens are automatically prefixed with the modid that adds them you can't change that part)
oooh dynamic tokens CAN be shared across mods?
They're not dynamic tokens, they're just tokens
oh gotcha, fair point
It's the same way Season is a token, just instead of being added by a different mod Season is provided by CP by default
it's never been useful at all before so this section had been deleted from my memory
I forget, can tokens be used in speech for dialogue and events, or just dialogue?
CP tokens? They can be used anywhere
But if you mean things like @ in dialogue turning into the player's name, they work in event dialogue but not textAboveHead
Update: Drugs make me smarter and I figured it out and now my sights are set on making my game recognize yak milk as milk
I can make an omelette with quail eggs but yak milk is a step too far >:T
Category milk should make it milk
try using lookup anything on the yak milk
you can fiddle with the config of lookup anything to get it to show a lot of info
!vsc
When creating content mods, it's useful to have a program that will check the validity of your json for you. We tend to recommend either VSCode https://code.visualstudio.com/download or notepad++ https://notepad-plus-plus.org/downloads/
okay I get the concept, but directly following the instructions in CP's documentation gives these errors:
did you copy the content patcher api
gotta change the namespace in there
Adding custom tokens
https://github.com/Mushymato/TrinketTinker/blob/main/TrinketTinker/ModEntry.cs#L73
if u dont need the ParseConditions/ParseTokenString u just delete those from ur copy of the api
did you change the namespace and usings
Man alive it is difficult to google information about github
what r u looking for 
what namespace do I need to change into what? this all seems incredibly unintuitive to me 😅
I want to know if there's a way to stop github yelling at me about comments when I am looking at a json file
as in github's integrated vscode?
did you look at my version of IContentPatcherAPI.cs?
yes, but I don't understand how it's different from either mine or what I copied from CP's docs
ah then maybe it's wherever you are using IContentPatcherAPI 
it'll help if you can paste the full error message
CS0234 The type or namespace name 'Framework' does not exist in the namespace 'ContentPatcher' (are you missing an assembly reference?)
Maybe? The code viewer when you click on a file in a repo. Is that VSC? I didn't know GitHub was Microsoft.
yes! and it's not but they've heavily teamed up
do you have using ContentPatcher.Framework somewhere?
yea get rid of that u dont need it
okay gg I hate C# documentation so far xD
if you compare to my version of the api interface, i only have using StardewModdingAPI;
this aint really standard C#, it's pintail 
okay now I'm trying to register tokens, but I'm not sure how to set the value of a token
it needs to be a string, but the GMCM API uses a bunch of different things and I can't jsut plug a bool into the register function
you are not registering a string
instead you are registering a delegate that returns a string
(list of strings actually)
that is what Func<IEnumerable<string>?> means
okay that's good to know
you know what delegates/lambdas are right 
I was unsure what the () => {} actually meant
I have no idea! I did like 2 chapters of C# on codecademy which was awful
short & cute little function declaration
so I just started, which has massively been easier lmao
yea pocket functions go
so in my example here
CP.RegisterToken(
ModManifest, "EffectClass",
() => { return [typeof(TrinketTinkerEffect).AssemblyQualifiedName!]; }
);
() => {} is the delegate, it takes no arguments (hence ()) and returns a IEnumerable<string>
i could omit the {} actually 
() => [typeof(TrinketTinkerEffect).AssemblyQualifiedName!]
That could be written as ```cs
CP.RegisterToken(
ModManifest, "EffectClass",
() => [typeof(TrinketTinkerEffect).AssemblyQualifiedName!];
);
mabe i had more stuff here b4 
its fine if you just want to give it a constant, but it still gotta be written as a delegate
like () => ["my const string"]
I got this far before, now I got stuck on how to put my Config.SimplifiedCarts here
is config a field on your ModEntry?
yea then just like this (in a game launched handling method on ModEntry)
CP.RegisterToken(
ModManifest, "SimplifiedCarts",
() => [Config.SimplifiedCarts];
);
if its not a string then do .ToString()
assuming this is bool, then in CP component you can do
"When": {
"polydot.csharpModId/SimplifiedCarts": true
}
dont use the cp mod's id
man, don't you love it when you add a location the other suddenly doesnt exist anymore...
i didnt even touch that locatipns code except add a warp to the new location to it 
no I got that haha
still getting an error
CS8936 Feature 'collection expressions' is not available in C# 10.0. Please use language version 12.0 or greater.
Oh u need lang features
I normally put latestMajor
If u don't want to do that then u need to use new instead
new string[] { stuff }
Why are you making your config a c# mod atra asks
submenus
Ugh
I have like 150 settings, with many more to come, and most of them are useless to most players
Tbh maybe just don't make a content patcher mod 
I don't want that to be just one big scroll page
Do it all in c# asset pipe lol
no I would die
Why do u have 150 settings
and the stuff here wouldbe the config.bla.tostring
It's probably too late to ask but that's a lot
my mod's a minecart overhaul
each minecart is optional
has an option for a custom name
and in a bit they'll have a simplified version as well
guys, big quiestion: why can i still right click my door when i just have a simple addwarps that goes with touching the warp 
you still have it as a door which is not multually exclusive from a warp on touch
I don't know how to do step 0
Edit your csproj file
oooh
Makes a mod named "simplified carts"
Mod has its own dedicated config mod with 150+ settings
I would want something more interactive then 
(Tbh it feels like going through CP at all is overcomplicated)
Like maybe some extra menu on minecart interaction
Yeah
the simplified carts is an option, not the mod hahaha
Float a little pencil near the Minecart menu
CP is super easy tho, C# is a nightmare
that'd be dope ngl
maybe I'll get there once
Assume that 98% of users will never look at the config menu. Simplified should probably be the default.
noooo c# is so funnn
I do, I'm making the config menu nice for me and the few others that care
C# is a programming language of all time.

yeah but how do i not have that....i never made it as a "door" and it doesnt happen to other warps
its a map patch to GI
Although I feel the structure of cp config isn't very conductive to this I've wanted ability to preview textures in cp config before
i used to have a different warp but i got rid of the old one
you can do that wit the smapi part
it has image support
Some mods like Gwen's craftables have a lot of texture options
and when i look it up with lookup anything it just gives me my one warp
does the original contain a door
What, really? I love going through configs! I scroll through gmcm (in my game) every few days to see if there's a mod I feel like looking at the options for.
either in the tile properties, in an object, or in the map properties
Can you preview a particular rect on a texture tho
yes
Or rather, a target in game 
in fact, you can only do the full iamge by specifying the full image as a rect
The horse texture
wdym?
There's a CP horse mod that let you build a horse from parts
a door as in my own asset yes but not a vanilla door from a vanilla tilesheet
i also dont get my other map warp to work wth
So the preview needs to show the final horse
besides making thousands of images ofc
you should be able to use the parts as overlapping textures
not sure if you can have it update live when selecting the config
Yea that's a thing which need custom draws with gmcm api
that's really cool btw!
what a wonderful mod name.
Link your jsons? And show screenshot of your map patch in tiled?
I do kinda feel like it would be easier to make it an html5 page that zips your final selection into the mod, as most poepl will only ever pick one skin and keep it that way
Warps: https://smapi.io/json/content-patcher/0a516bbf1b66446a8890e249b2cafcfa
content.json: https://smapi.io/json/content-patcher/18f6a3469e0b4c26a711a855dffd4809
screenshot of indoor map(LowerDeck) not wanting to have the warp at all and screenshot of the door that isnt a door LookupAnything info idk let me know if you need more
also tried 7 3 (hence the walls on the buildings layer) but also not working
now for that ladder that right.click warp might be good but idk anymore after that door that isnt a door
I think I am missing something because your Lookup Anything is of the Island South map, but your map patch is of an indoor space.
How are you patching an indoor map onto an outdoor one without making everything weird?
oh yeah that was just from the other issue with the rightclickable warp there
whcih was my other problem
Okay, I'm going to think about one at a time or I will get them mixed up
yeah sorry i jsut thought id include it since i mentioned both
So can you share a screenshot of the door that is meant to be a TouchAction warp but isn't? The one that's on the IslandSouth map?
the funny thing it is touch like it should be. But it is ALSO right-clickable....
Are your object layers hidden in Tiled?
no?
map also has no warp in it via tiled
I USED to have a map warp in there but thats long gone
Hmm. Try doing a patch export of Island_S and see if anything shows up in Tiled for it
You can view github repos through a web version of vsc
https://vscode.dev/github/MizuJakkaru/Cornucopia
hm
what right name would island_S be tho cuz smapi is yelling at me
oh wait i forgor folder
HUH
ok i forgot i had lnhs island overhaul enabled and was like wth are all those tildedata but anyway
why this here
i deleted those warps, huh
Patch summary time?
Ooooooh! Stupid question time because I don't want to risk googling it and freezing my laptop for the fourth time tonight - how do I get to this from a different repo? Or tell it to go to a different repo?
AH
So u see the MizuJakkaru/Cornucopia
It's the last 2 parts of the repo https://github.com/MizuJakkaru/Cornucopia
So u can just replace github.com with vscode.dev/github
i disabled lnhs island overhaul and that pesky warp is gone so its probs from lnh testing to have the overhaul compatible with fishmonger
so i guess we can scratch that issue for now...
back to the warp that doesnt wanna work then, hm

Thank you!!!! This is going to be so much nicer to deal with than github's normal thing 
Okay so this one is the one inside your boat? Which one exactly? Upper deck to outside, upper deck to lower deck, or lower deck to upper deck?
LowerDeck to The Upper deck aka the original inside map
I can go from the top to lower deck but not the otehr way around
You're trying to add warps that go to a map called VoidWitchCult.CP.TheFishmongerNPC_Fishmonger_GI_Inside but according to your other code that map is actually called VoidWitchCult.TheFishmonger_Fishmonger_GI_Inside.
you can also just do github.dev
Are your maps and locations name the same?
i named the lowerdeck map wrong tho
my lowerdeck target is wrong
and no i am dumdum and changed them halfway at some point :B

it works now
That will be why I wasn't sure which was the issue - I can never remember if it's the location name or the map name that matters in any given situation because I always have them identical. And since I couldn't see your location json I wasn't sure what you'd called them.
now I broke my cjb warps tho when I added some wrps to it while waiting lmfao anyway
yeah i didnt realize i didnt share that json
now onto fixing the halfasses warps i added to my cjb 🤔
ah, a forgotten comma ofc
You're welcome, btw 😉
yeah, thanks! tbh i am really glad this channel exist cuz my always confused ass gets so lost in the sauce it gets hard to find the issues sometimes 
So it goes! It's usually easier to spot someone else's typos or mismatches than your own because you get so used to just looking at the same code over and over again when it's yours and you stop really reading it.
Nothing out of the ordinary here lol
thats what one extra letter does lmao
anyway, theres a reason why i prefer the art part of making a mod lol
That seems to be the way. I don't know if I have seen anyone say they enjoy both parts equally (or nearly so). I wonder if 6480 might 
that said, I DO enjoy when it comes together so I accept the suffering xD
That is how I feel about the art side haha
its odd how i got attacked to this mod tbh, it all started with a "oh i wanna try making a random npc" and picked a character design i made years ago but never used for any story
attacked?
attached lol
Lol
Hi, yes, there are people who enjoy both, prime example, me
Nice!
I mean there is questionable stuff yes but I would not agree with "outdated"
Published my Fast Forward mod for SDV 1.6! Useful for impatient modders and users alike 
https://www.nexusmods.com/stardewvalley/mods/28198/
Yaaay!
congrats on the update moe, it's good to see you are back 🙂
dont think its an update
Haha, thanks! This was actually the first step in getting back to modding - It's impossible to play-test without it 😩
good catch 😄
I'm sticking with "unofficial unofficial update" 
ahah, atra helped me getting some solutions when i wanted to test events and schedules 😄 it's indeed a must have for some of the testing
It does?
so I prob switch over, ty :3
No one told me
I think yeah 😆 its fine it breaks nothing
i mean, it just means atra's work exceptional, right?
I mean I find it near uncontrollable tbh
Also don't expect me to clean it up and post it to Nex7s
(that's because i'm shy and it didn't break anything and i didn't care because i have the solution i needed so... )
I just couldn't get atra's one to work at all :( I was obviously doing something wrong
(also you don't have a lot of free time, why bother you with harmless errors?)
I've sent out a handful of builds to people
if i add a tile data with invalid property game will just ignore it, right?
Yes
I was just scouring in here downloading everything I could and hoping, lol
Oh I see
I know the issue, will be fixed
Remind me in 28 hours
Botto
Remind me in 28 hours to fix the obvious disposal error
[blinks] what now? yeah uhhh sure thing boss (#6266860) (28h | <t:1727563667>)
cool, i want to reuse the "do not cut" property of VMV in another mod (since it's a small mod that doesn't really need a whole C# component just for one tree. if players steal tree, well, so be it)
It occurs to me
That you don't necessarily need to give the tree a valid sapling
Just make it any random object like coal or something
do you just have 2 versions of the tree then
I actually counted and it's not that bad yet, including the new style options I now have 120 settings!
so im not sure why but my custom map that was working yesterday is just... not working now. it doesnt say an error or anything, it just isnt in the game anymore. its still in the files, still in the json, it just doesnt show up for some reason
I’ve used leeks before to test things on custom trees
And green tea
best thing to do in this case is a patch summary
that gives you a bunch of info on what CP did/didn't do
Really interesting that this exists, I wish I'd seen it a month ago. How did you handle NPC pathfinding?
!patchsummary
Can you do these steps to provide more info?
- Load your save and view the content that should be patched.
- Type
patch summarydirectly into the SMAPI window and press enter. - Upload your SMAPI log to https://smapi.io/log (see instructions on that page).
- Post the log link here.
How do we go about numbering beta versions?
thank you!
I didn't have to change it. All the mod does is calls Update multiple times per tick, rather than the usual one time.
Ah, I see... yes I suppose that's one way around it.
Speaking of VMV, and since you are online... chu/e said something about VMV having a modified and/or bespoke mechanism for spawning fishing bubbles? Is it very different from the default ten-minute-update version?
yes, i think i discussed the idea with atra before vanilla decided to make bubble more stable and reliable
(normal bubble may happen in VMV too, they are just rare so i wanted extra. MORE. MORE...)
So normal bubbles do still happen? Hm, the incompatibility chu mentioned seemed to indicate that bubbles weren't showing up at the predicted times, but maybe it's because the random state is changing due to other things going on the 10m update.
Sounds like I won't get to the bottom of that one without a source dive.
Hello! I would like to either make or download a mod that changes professions, Ive read the wiki on how to make a mod and watched some tutorials on youtube, mostly focused around assets, how would I be able to edit something like profession buffs? ive searched on nexus and there doesnt seem to be alot of balancing mods around.
So, how can I edit professions or is there a mod that already balances them? thanks!
hmm, i'm not aware of that, or i forgot, when/where was it mentioned?
No no, it's not a bug in your mod, the report was that AFS was mis-predicting bubbles in MV. (Since I just released it a week ago, and since chu only reported it a few days ago, you would not likely have heard of it.)
Editing professions, as far as I'm aware, is firmly in C# territory
Have you ever programmed before?
I was merely trying to get a high-level understanding of why that might be the case.
yes, I do mods for other games, never done for stardew
In C# or some other language?
Mostly Lua but ive seen some C# on unity
Ok, so Stardew is in C#, so you'll definitely need to be/get familiar with C# specifically
!decompile this is one important resource
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
Basically, you'll want to read/reference the source code around professions
https://www.nexusmods.com/stardewvalley/mods/24355 this is one of the more popular mods that touches on professions
https://www.nexusmods.com/stardewvalley/mods/14073 this one adds a new skill (binning)
thank you very much, ill take a look at it
both of these I believe have source code you can look at to get some idea of the scale involved and clues as to which parts of the source code are relevant
https://www.nexusmods.com/stardewvalley/mods/28103 another one that adds a new skill to the game
when i am play again ill give a more detailed bug report
Thanks, I appreciate it, though I am not sure a more detailed bug report would point me to the root cause unless we weren't clear on the exact issue (missing bubbles vs. spurious bubbles).
(feel free to let me know if something can be changed to accomodate stuff in VMV, i can always ask Sheku to take a look if needed)
Will do, thanks. I probably will not know what kind of change (if any) would be helpful until I figure out why the predictions are off, aside from the very general sense of "vanilla vs. not-vanilla".
the thing i recall is the train station (on vmv side) having a bubble timer with really long duration
without visible bubble anywhere
Blue or green duration?
damn, got to a blockage again in my journey to over-complicating a config menu
https://smapi.io/log/0bfb2b22d42b497986c255e6ec106489
the menu crashes when I get to my nulled strings
Log Info: SMAPI 4.0.8 with SDV 1.6.8 build 24119 on Microsoft Windows 10 Pro, with 19 C# mods and 17 content packs.
Suggested fixes: One or more mods are out of date, consider updating them
Hmm, who knows if it's even a bug then. Blue means upcoming so it's not a long bubble duration, it's a long wait until the next bubbles.
oh then i misinterpreted 
Which, given what we've discussed about VMV doing moar bubbles, is likely erroneous - but nevertheless a different issue from it thinking that bubbles should be there now and not disappearing for another 7 hours or w/e.
Hmm, I don't think GMCM's UI support null strings - can you use empty strings instead? Or do I need to fix that?
the documentation says this
/// <param name="allowedValues">The values that can be selected, or <c>null</c> to allow any.</param>
I can try, but I fear if I use an empty string it'll use the empty string as the custom name
Ah, I was thinking you meant for the main value
are you returning string? values in your cp tokens?
maybe I am actually!
Can you show me that line?
might want like Config.NullableStr ?? "" instead
I think the fundamental question (and I still have not looked at the source code) is: does VMV's moar-bubbles feature interact with performTenMinuteUpdate and fundamentally change how the bubbles are generated, or is it a sort of standalone thing that runs in parallel to the vanilla 10m?
If it changes the random check threshold, that'll definitely throw off predictions. However, even if it uses some separate method to spawn bubbles, if it lets the GameLocation know that those bubbles are the current splash spot (which, normally, only one splash at a time is allowed) then that would still throw off predictions because the intervals at which AFS is checking for "should vanilla bubbles start" is really an interval for "should custom bubbles end" (it's the same random used for starting vs. ending checks).
(Anyway, probably TMI, as I said before I'll just have to source-dive)
ur saying if I try "" instead of null it might work
oooh maybe I need this?
the cp token is expect a list of non nullable strings as the return value yea
I don't know what the nullable thing is really
so it'll get confused if u throw a null at it
the ? in string? makes it nullable, but hm maybe u turned off the nullable warnings if this didnt give you yellow lines
it did, a LOT of them
well yea u should handle it then 
but someone said to ignore the null warns
or just use empty str ""
and it works fine everywhere else
like many things it's not a problem until it is 
it also says this as a sollution for new green lines
and personally speaking i believe in handling warnings, especially if im new to the language
I do too haha, just not when I don't understand and someone experienced says ignore them Cx
what other programming langs do u know 
Who said to ignore them?
i ask so i can pick right words to describe
wow none of these r oop 
I won't say all of us, but many of us use <WarningsAsErrors>Nullable</WarningsAsErrors> and I really highly recommend doing so.
oop?
endertedi I think
Well... don't ignore them. If a type is specified as non-nullable, then you shouldn't pass in a null value.
That's why the system exists, to prevent buggy code from passing in invalid null values where they aren't expected.
so ModEntry is a class which can have instances, and you can use this. to access stuff on the current instance of ModEntry
yeah see there lies the issue with learning C#, nothing here means anything to me
yeah I get that
no but I get you
so its just the linter is telling u to use this. for style reasons
Yeah I meant specifically for the ‘private ModConfig Config;’ line (since we know it’s not going to be null) not for everything
no it says to remove it here
same idea, just linter being hung up about it
makes sense lmao
this is ignorable but i am unsure what setting it is to disable
for example the private ModConfig Config; also says Non-nullable field 'Config' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the field as nullable., but it's that way in all mods I looked at for reference
see you won't be able to obtain config until Entry, which is not the constructor
aaah so it's just a heads-up, more than a warning
so i usually just use nullable mod config like this, which i properly fill in Entry
private ModConfig? config = null;
and i can access it like
config!.whatever
the ! is you saying trust me bro its not null to the compiler
oooh that's kinda cute
does it also make it so that if it IS null it'll just perish?
No
You would get a exception at runtime if it was null there
That happens regardless of whether you use the !
There's not much difference between doing this vs just ignoring the warning but it conveys intention
also no warning looks nice
(I did VMV c#. It is not different but can suppress the ones the game would have spawned otherwise.)
Remind me to link you the repo. We have one.
hmmmm
I don't know bout this one, cause it indeed CAN be null
as seems to be intended by GMCM
no wait that's just for the allowedvalues
Because the field itself can be null, even if the config is not.
One second
(isn't the repo private however?)
Solution: don't make the config fields nullable.
yea i think empty string is more useful here 
Feel free to copy this as the gmcm api interface
It is? Sorry!
That may be the second possibility I mentioned, then - that when VMV spawns its own splash spot, the ten-minute update loop shifts into the state of checking whether that spot will be removed, which implicitly skips whatever vanilla spot might have been generated during that time.
Yes
Ok, that definitely adds a challenge if the repo is private... I just assumed it was not.
VMV fish spots are also not determined on time alone but also on what the player does
It only spawns additional fish spots on maps the player is on
is this not the same as the official one?
Well, AFS only does its splash spot predictions when you enter a map location, so at least that part is OK.
Tbh I have no issue with you looking at the code (and I wrote it so I think only my opinion of that matters here.)
I can send you files later tio
Up to you folks. I can live with it being incompatible. I assumed it was just Lumina's mod, didn't realize it was some major collaboration.
It has the null annotations put in
(i have no prob with that, it was more an info about current state of it)
why is this the only one of 120 calls that has a null warning? (it's the first one)
Haha major collaboration is overselling my contribution
(sadly i don't do C#)
It's 99% lumi, I'm just the contract c# person
(well, C# is probably grateful i don't do C# so it is a question of point of view 😄 )
Yes but there was a 3rd name mentioned earlier, I forget who.
sheku is official maintainer if annoying problem happens
although vmv C# isnt really framework for general use, is there a list of things it does somewhere
(In my experience it’s not just that one, it’s all of them but only showing on the first one, I’d do a check for tokens being null first, and then adding the tokens)
Right. So, complicated. Either way - if someone wants to point me to the code, using whatever mechanism is appropriate, then I can try to sort out what's happening and see if it'll fit with the prediction mechanism. Otherwise, I'll just report that it's incompatible.
(and i'm very grateful for some of the C# features especially the chest ones that are contributing to make stuff enjoyable a lot)
how do I do that?
Put all of those inside an if (tokens != null) block
atra, is it as simple as copying the PanningAndFishingSpotManager.cs in something like (forgot name that is used by json parser) thing and share it with focustense? if yes, i can do a copy paste 😄
like so?
Yes
from memory : feature to prevent cutting tree, to prevent shaking tree, to plant fruit trees in grass outside of farmhouse, to spawn more artifact spots, to spawn more bubble, to add drops to monsters based on GSQ, including some GSQ for selecting the monsters, some GSQ to select undonated (artifact or gem?), and the shared chest feature
okay so the big hopefully bugfix is that I used "" instead of null this time
let's see
Yes
also I really appreciate all of you for helping me out so much <3
Yes
Also make sure to have CP listed as a dependency for the mod otherwise CP won’t let the tokens get added
That would very likely answer the initial questions. It's possible I might need to know other things to actually put in compat features, like knowing the location type, which methods to hook, etc. (Just depends on how complicated it ends up being, whether it's a few extra random calls or involves a whole bunch of private state.)
But yes sure, if it's a self-contained file then it'll probably at least answer the "why" if not the "how".
Log Info: SMAPI 4.0.8 with SDV 1.6.8 build 24119 on Microsoft Windows 10 Pro, with 19 C# mods and 17 content packs.
Suggested fixes: One or more mods are out of date, consider updating them
I have!
Usually I go the other way
private ModConfig config = null!;
Then just read the config in Entry
Question about cp randomization, is it like a function signature where if there's more indexes in the random the pinned key won't understand? Or is it just, "pinned key? OK boss"
hey if i do a dialogue thing with i18n in the format
{{i18n:name{{Random:{{Range: 1, 10}}, 17, 18, 19, 20, 21, 22, 23}}}} do the numbers outside of the range only show up after the numbers inside of the range have all been seen??
they're all given a fighting chance if they're used outside of the range
effectively you have 17 indexes that all have a chance to get chosen
sorry...what does this mean? so its the same as if i wrote each number individually (no range), yes?
it's the exact same, yes
range is the same as typing them all out individually, it just reduces the amount of text
is there any way to do multiple ranges?
i have tried before, but it always gives me an error so i assume im doing it wrong
i haven't tried but you could maybe attempt {{Range: 1, 10}}, {{Range:17,23}}
if that's what you were aiming for
{{i18n:name{{Random:{{Range: 1, 10}}, {{Range: 17, 23}}}} like this?
just make sure your }}s are lining up
so you need an extra }} after the four of them, for a total of 6, cause you're closing out that last range, the random, and then the i18n
oh so {{i18n:name{{Random:{{Range: 1, 10}}, {{Range: 17, 23}}}}}}
okay yes thanks
it gets very messy 
"{{Season}}_{{Weekday}}{{Hearts:{{Marlon}}}}": "$query {{HasMod|contains=FlashShifter.StardewValleyExpandedCP}}#{{i18n:Marlon.CharacterDialogue.{{Random:{{Range:72, 85}}}}}}#$e#{{i18n:{{Season}}_{{Weekday}}{{Hearts:{{Marlon}}}}_{{Random:{{Range:0,5}}}}}}|{{i18n:{{Season}}_{{Weekday}}{{Hearts:{{Marlon}}}}_{{Random:{{Range:0,5}}}}}}",

there's definitely cleaner ways to do this, but this makes sense to me and i can parse the smapi log if i've missed a }} anywhere
I got some issue. I tried to replace slime hutch with my edited tilesheet, but the game doesn't load it. SMAPI had no issues to read/load it though.
!patchsummary
Can you do these steps to provide more info?
- Load your save and view the content that should be patched.
- Type
patch summarydirectly into the SMAPI window and press enter. - Upload your SMAPI log to https://smapi.io/log (see instructions on that page).
- Post the log link here.
lmk if you need someone to talk 
its working!!!!
although i swear some lines are way more common than others? 😭
shouldn't be, they should all have a fighting chance, but you are set to a seeded random per day
yes i noticed, on the same days you get the same lines regardless of reloading. but even so if i change the year...😭 i know technically that isnt the case but really some just come up 3x more? 😭 well ig it is random
it also depends on what you're putting the i18n token to, dialogue-wise
like if it's just "spring_NPCNAME", and if you have other dialogues inside of spring, they will fight each other if the conditions line up
there is a priority system for what dialogue key gets chosen
I see a bunch of errors but I don't understand what's wrong
Log Info: SMAPI 4.0.8 with SDV 1.6.8 build 24119 on Microsoft Windows 10 Pro, with 27 C# mods and 6 content packs.
Suggested fixes: One or more mods are out of date, consider updating them
UseableSlimeHutch 1.0.0 by Rat | for Content Patcher | Finally some use to it.
Is my mod
!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"/>.
Omg it works now! Thank you so much!!
so i did everything the tutorial im using said to and im getting this, i understand none of it can someone help please? https://smapi.io/log/d7b4996c837a4a0f979b46e005d1ecb9
Log Info: SMAPI 4.0.8 with SDV 1.6.8 build 24119 on Microsoft Windows 11 Home, with 2 C# mods and 1 content packs.
you have a content.json and a manifest.json alongside your assets folder yeah?
yes
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.
Is everything in your content? Any includes?
What is dispos.json?
what tutorial are you following?
another file the tutorial told me to make https://stardewmodding.wiki.gg/wiki/Tutorial:_Making_a_Custom_NPC#Introduction
So, you're interested in creating a new character for Stardew? Good news: with version 1.6, creating a character is easier and allows for more flexibility than ever. However, NPCs are one of the more complicated things to create for Stardew, as they have a LOT of moving parts. This guide aims to provide a basic but thorough walkthrough for ea...
It looks like you set up your character in your content, but as I recall that's normally in the dispos.json for that tutorial
So what's in your dispos?
i wasnt sure so i put it in both
do not do that
beyond that, you have a bunch of content patcher actions listed in your characters Home list for some reason
No worries. We're here to help!
Yeah, missing a lot of brackets in this content lol
those should be written at the same level as your other "Action" stuff, like beneath your Load and Include action at the top of your file
alr thank you ive just been copying and pasting things in and changing them around and hoping for the best so far
so far it has not been going very well
everything in content patcher needs to follow a specific structure or syntax
things cannot just go anywhere
so load should go first and then action?
Load is an action
if you're doing the content.json with everything in it, you don't have to include any other files
yup i realized as soon as i sent that
The order doesn't really matter, it's what they're a part of
In this case you want them to be part of Changes but not inside of the other Actions
Each Action in Changes is it's own little block of what you want CP to do
im sorry im not quite following what i need to do then
(also you're doubling up on characters/dialogue, it needs to be characters/dialogue/marriagedialogue{{NPCNAME}})
basically an action block is just that
{
"Action": "An Action Block"
}```
ooh ok
I guess the first thing you should do is decide if you want to keep following the format of the tutorial or if you want to just have everything in content? Typically when following a tutorial I suggest sticking to that format so you don't have to translate into what you're actually doing
yeah im trying to but im having issues knowing exactly what to do
i can tell the broad of it, but exactly where im putting things is where im having issues
For the tutorial, most things are broken up into their own json files that are included in the main content, which allows you to just have better organization
Better might even be generous, it's just different organization
so do i need to keep any of them or just do it all in content?
that's up to you
You can do either, but you can't do both
do you want to have everything in your content.json or do you want them all in different files
were you skipping ahead or only looking at the code examples in the tutorial? because the formatting of a lot of your stuff does not match it
You can even split some things and keep others in content, just can't have copies of the same stuff in both content and split out
ok that makes sense
i was reading everything and trying to follow it but, clearly, im not very good at this lol
it's just, a lot of moving parts and it's not suggested for beginners
I think it's fine for beginners, just gotta be careful is all
especially for the concept of code blocks, if that just wooshes over some people's heads, it will definitely be a headache
yeah i know i shouldnt but theres nothing else im interested in doing first so id never have the motivation of actually learning
i quote myself back when i was aspirant of helping people create as many npcs as they wanted, but my rose tinted glasses are gone now that i've written a tutorial 
(as an unrelated side, i feel like the tutorial should probably use {{ModId}} more often
)
(mine does but it's higher end)
i thought you just had a template, not a tutorial
i had some descriptors in there, but i was planning on throwing my entire custom npc github into that tutorial i made 
are you talking about this page? https://stardewmodding.wiki.gg/wiki/Npc_template
Jorts and Jean are older NPC's ported up to 1.6 right?
i would not call this a tutorial, i would just call it a template. thats not a bad thing im just saying the word tutorial implies like, guidance and steps
(idk the answer to the jorts and jean question)
that's true, i just didn't want to overstep on tia's so i didn't feel necessary to add the steps that tia's already goes over (same)
There's mentions of "you should use {{ModId}}" on here but I don't know if Tia actually uses it lol
theres mention of it, but the rest of the tutorial does not actually use it except for in i18n
It's one of those "don't be like me" but also "I'm not changing it now, that's too much work"
I also wonder if it would cause issues with people who already have the mod installed
Obviously the guide could just kind of slap it in the right places to give a good example
oh you can just use formernames if you've already released
since using it for something like e.g. the NPC's internal name is pretty important
But I think most of the tutorial is kind of just edited copies of the mod
well, yes, but that doesnt mean it cant be updated to use modid in the tutorial itself
the tutorial does not need to match the actual mod
Sure, but also I'm not about to go editing it or fixing all the mistakes in my tutorials any time soon :P
Tutorial: okay, so this is a pointer
i mean im not saying anyone has to, im just saying that if the intent is to guide someone on how to do something and is already an opinionated tutorial anyway (not opinionated in a bad way i mean it in the software sense) then it should probably also guide on the best practices yeah?
Yes
esp if its used as like, the NPC tutorial to use
tbh my own git doesn't use {{ModId}}
it does have a small section on i18n at least, but i do still agree there too
If I actually made NPC's I would feel better positioned to edit this tutorial, but I only conceptually understand it so I'm not confident in making changes to it
i don't wanna step on tia's toes or i would
i can always edit my own 'template' though 
You could also just make your own full tutorial, there's nothing wrong with having more than one source for information
all im sayin is that if we're always telling people to use {{ModId}} f or their item IDs and whatnot we should also be telling them to do it for their NPCs, is all. its not a major gripe or anything, just a random aside thought i had when looking at the tutorial
No shade to Tia, but their guide is only "the guide" because there aren't really any others lol
Otherwise we could compile a list of guides and use that as the link in the command
can someone tell me where in the unpacked game files I can find mine stuff (ore nodes, stones, ladder)?
thank you I will look

dunno about the ladder though
.choose more c# digging, flesh out the npc template
Choose result: more c# digging
Ladder is not an item no
i am absolved
what r u dig for
looking into making a customfield for if this object can glow or not
theres a few non-items in springobjects anyway
Ladder is Maps/Mines/mine.png
object like an inventory item?
unless im mistaken and you can actually get a chunk of meteorite in your inventory if you spawn it in
Both the kind stuck on the wall and the kind that spawns on the ground
or chunk of big stump
(technically it's because i want to make my one wildtree glow at night, so i'm effectively trying to make it parse the string, string into the "magic" that i'll do)
"Aviroen.Glow": "" color values maybe in the second string?
i'd add radius
yeah i gotta initially figure out how to "create" said glow 
Light source I'd guess lol
i was gonna make it bool/color/radius/brightness
i recommend you holding off on this until 1.6.9
What's the bool for?
there's a big api change
Yeah, 1.6.9 broke light sources
ignorable time/color/radius/brightness
And by broke I mean, added a string ID lmao
i can learn how to set up my core then, i only managed to separate them into their own .cs but i don't know if anything will break if i shove them into a folder (unless i can just throw them into the using space in my main)
If you're using VS22 I can see how this might be confusing though, because if you make a folder in your project and then a script in that folder, it automatically changes the namespace to match
Please for the LOVE OF GOD
Make your namespaxes match your filepaths
Please
For my poor sanity
yea i was gonna follow up with "but you should make em match"
vs22 did it for me you don't have to die
i also third this sentiment
dies anyways
Out of curiosity is that just a preference thing or is there some kind of benefit to not just using the main namespace?
For SDV I've just been letting VS handle it for me, but in Unity I don't even get namespaces made so it's not something I'm actually familiar with
I have another issue 
The FloorID seems to work, but WallID doesn't in my mod. I'm clueless what to do.
it would make finding the file it belongs to easier if they match
technically also if you have a different namespace you can make a class with the same name as a class in another namespace too if you need to
looks at esca pointedly
(idk the esca context)
It's actually a good thing you said something though, my crane game overhaul is completely busted because I did all the separation after the scripts were made so they didn't get new namespaces
i don't actively remember how the floorid/wallpaperid works
I even looked into different mod doing exactly same thing as I do, yet mine doesn't work at all.
How are you doing it?
are you slapping down new wallpaper/floor when you update
Adding TileData per one square on back layer with custom property WallID - Wall
You definitely named the object TileData?
Not sure what do you mean?
In game flooring works, but wallpaper dosen't
Yep. Everything is TileData
Copied and pasted name from vanilla map to make sure
You also need to add the new WallID/FloorID to the Map Properties from what I recall when I did it.
Yeah, unless you're using one of the vanilla ID's
And the initial wall and floor tiles you put in as a placeholder need to come from a tilesheet named walls_and_floors
Where do I change Map Properties?
Yes i've put vanilla walls_and_floors
I appended mine to the map properties using Content Patcher, there's a code block somewhere if I can find it
On the map in Tiled, click Map > Map Properties
There's also that. 😛
Is your WallID supposed to be vanilla also?
Just to check before you do extra work
does anyone know if unlockable bundles has a public beta version?
I'll see to edit that Map Properties because for sure its missing WallIDs there
Yeah, if you're adding a new decoratable location, then it won't have any of the properties that allow for that
If you're patching onto a farmhouse then you actually need to add to the map property already on the farmhouse
they're patching the slime hutch 
Are those decoratable?
They are now
Neat
The floors are for sure
is the slime hutch just a fancier shed
1.6 I think
It's like a shed that can hold slimes I guess lol
I dunno if fancier shed is really an accurate description lmao
is fancier to me, it forces the health bar to pop up
Bigger slime hutch would be cool
Just make a transpiler that makes the health bar always visible
you can only get them slime balls in slime hutch



