#making-mods-general
1 messages · Page 446 of 1
I realize one of my mods changes the intro event so the id would be different, would this still work if I just deleted the condition line
just deleting the line should work
is the building ItemConversions option actually used anywhere?
the mill uses it, yes
oh yeah ok, that makes sense
wonder if that would be useful in an animal context at all, hmm
i wouldn't be surprised if various modded buildings did, too. i could see a wishing well doing something if you throw in a goat or something
lol
ok I was a dumbass, it requires fishing level 10,
haha that'd do it
VMV adds a fruit masher building that allows mass conversion of fruit into generic juice
honestly forgot fish could require certain fishing levels
(tbh I do sincerely wish there are more buildings that use the conversion feature, but it's super basic compared to machine data)
@deft pivot you'll probably want to follow ⤴️ this advice to set a new appearance for the Krobus NPC itself while not affecting other places that happen to use his character sprite, such as the original cut-in-half shadow guy from your message a few hours ago.
it might look a little like this:```json
{
"Action": "EditData",
"Target": "Data/Characters",
"TargetField": [ "Krobus", "Appearance" ]
"Entries": {
"MyCustomAnimeKrobus": {
"Id": "MyCustomAnimeKrobus",
"Condition": null,
"Portrait": "Mods/{{ModId}}/anime_krobus_portraits.png",
"Sprite": "Mods/{{ModId}}/anime_krobus_sprites.png",
"Precedence": -999999
}
}
}
which will add a new `Appearance` entry with high priority using your custom artwork with no particular conditions.
this means you can remove your existing `Target: Characters/Krobus` and `Target: Portraits/Krobus` changes and let the game use those for the other shadow guy as usual
you can also change the TextureName in characterdata instead
well yes, but that won't change the portraits
it would if they targeted what they changed it to
and also doesn't leave us room to defer to whichever other sprites, meaning he'll probably be overwritten by the cinema trenchcoat krobus
maybe? i think? probably
presumably youd be changing that appearance data anyway?
i mean if i were changing appearance data anyway i'd just do it wholesale as above
sorry one more small issue, tried to modify their spawning, time seems correct but it still spawns in all seasons instead of just winter like it should "Razor Trout/85/dart/8/14/1800 2600/winter/both/683 .2/2/.99/.5/10/false"
i'm not sure of any cases that would pick texturename and ignore appearance though, which would blow a hole in it
does changing the appearance change the shop portrait though?
probably not 
the social page and calendar i believe
the season in fish data is unused, you want to add "Season": "Winter", to the fish location data
true true
yeah, calendar ignores appearance
(aka where you deleted the condition earlier)
clearly we replace all fields. maybe we replace krobus. maybe we remove him for simplicity
like this?
" Any numbers of buildings can be an upgrade for the same building, in which case the player can choose one upgrade path. " huh neat
could you use it to make it so having an animal in the building makes the conversion happen?
like put your wood in a barn with a charmander and it becomes coal
doesn't seem possible with conversion data
machines though you can use a machine that uses EAC's "current location is an animal house with the specified animal" GSQ
{ "LogName": "Add SVE Razor Trout Fish Data", "Action": "EditData", "Priority": "Late", "Target": "Data/Fish", "Entries": { "FlashShifter.StardewValleyExpandedCP_Razor_Trout": "Razor Trout/85/dart/8/14/600 2600/spring summer fall winter/both/683 .4/2/.99/.5/10/false" } },
couldn't you use that GSQ in the Condition field for the ProducedItems entries (or is the Condition evaluated on processing complete)
not getting spawn conditions -_-
you can, but where are you going to get the reference to the interior in the GSQ
from the next update to EA/MC maybe
thx for all the help, razor carp is now a normal fish, also was able to make him appear in collections
is it bad if i am half tempted to add dog eggs, just because of the hal lab logo
only if you also add dog mayonnaise
if it has an egg it has a mayo
Do I have to change the values (is that the right term) for Id, Condition, Portrait, and Sprite?
how do you pass a token in i18n again? "DocksTalks.0": "It's farmer {{PlayerName}}!",
"{{i18n:DocksTalks.0 |PlayerName={{PlayerName}}}}"
Was this what I was supposed to do? There's an error in my smapi log so I know I'm doing something wrong, but I don't know to what extent
Log Info: SMAPI 4.3.2 with SDV 1.6.15 build 24356 on Microsoft Windows NT 10.0.26100.0, with 20 C# mods and 38 content packs.
Suggested fixes: One or more mods are out of date, consider updating them
No, you need to change all those EditImage patches that are currently targetting Portraits/Krobus etc and change those targets to be Mods/GrimAsKrobus/GrimPortraits (etc). And then remove the .png from the Appearance data edit. The point of these changes (if I followed correctly) is to make it so that you're not actually changing the original Krobus portrait or sprites at all but are instead changing Krobus himself so that he uses a different set of portraits and sprites.
You are also missing a comma after the third } after the Appearance patch
yep ok i'll not do that then lmao
Hi everyone! Last year, I made my own farm map based on the vanilla ones. I still haven't figured out how to create a new farm map separately, and I'm now looking for someone to help me. Can you post a json file of a separate farm by ccmakers and describe the creation process step by step? (Do you have a detailed guide for beginners?)
You can download an existing mod and copy what they have done or even just use the example on the farm data wiki page. If you copy and paste that example into a content.json and add a Format field (and the files according to what's in the FromFile fields), you'll have a working additional farms farm map mod that you will just have to tweak values for.
We do not have a tutorial but the page I linked explains what all of the fields are for
i wanted to make a wishing well, but putting items in it doesn't really fit the theme for me, unless it's a coin (that VMV has... ) but conversion is a bit limited for that (unless i can use query of sort... )
it may not be exactly what i wished for but may be good enough
a building DefaultAction with some Action Message dialogue tricks could be a pretty flexible solution all the same
you couldn't easily check if the player's holding an item, but you could still take money
or with c# and a custom tileaction just do whatever you like, of course
i'm limiting myself to non C# but there's more non C# options out there now than when i considered the idea the first time
see i'm in the opposite situation, i've already done up an easy sort of wishing-well-like map feature but now that the statue of blessings is in the game my main idea is gone haha
a buff is about as vague as 'a reward' lol
just a text toast that says "you did it"
coin in well, junimo cart starts
my god. a wishing well that's just the coin slot to a giant ancient arcade machine
the valley itself is the machine
insert a coin and it launches another instance of the game inside your existing one
damn that'd be a wild mod for like, go to bed and you dream a randomized save day
viewport x y clamp false unfreeze is odd. with unfreeze it snaps to the bottom-right corner of the map regardless of the x y values and can't be moved with viewport move x y duration, but without it the viewport sets and moves as you'd expect
Maybe unfreeze and clamp are fighting each other? If clamp stops the viewport from moving off the sides of the map and unfreeze makes it follow the farmer, it might cause strange behaviour.
is that what unfreeze does
i would've imagined a lot of things but not lock/follow/chase camera lol
TODO: explain other parameters my old enemy
Allegedly. I keep getting overwhelmed every time I try to pull it all apart to explain it properly on the wiki.
it'd absolutely explain why viewport move has no effect (and why the camera is locked to the bottom-right, where the farmer is)
well i'll just write in some good-enough info there for now so i can earn some wiki privileges
Ah so not necessarily fighting with clamp, just unfreeze being confusingly named
I also had no idea you could set viewport with an NPC as its target instead of an x y coordinate. I wonder if it follows the NPC (probably not?)
the farmer/NPC one just replaces the x/y with the position of that character, so probably not, unless viewport does that already
(idk what unfreeze does to the camera either, it's kinda complicated stuff in Game1 and all the event command does is this)
if (option == "unfreeze")
{
Game1.viewportFreeze = false;
}```
note that 1.6.15 has a bug where if you aren't clamping then the fade and unfreeze stuff incorrectly read the same index when on an npc target
oh. well that makes more sense hahah
the default event camera is 'frozen' on the coordinates you set. unfreezing it returns it to the usual game behaviour of following the player
and it doesn't follow, it just grabs their coords at the point in time
and player is a valid npc target
viewport farmer does not work. viewport player does
position = ((!(NPCTarget == "player")) ? @event.getActorByName(NPCTarget).TilePoint : Game1.MasterPlayer.TilePoint);
unless farmer counts as a valid actor?
ah it does nevermind
spouse is also a valid actor. cute
I think the 1.7 wider event refactor standardized npc targets more
actually I still have the last 1.7 build in ILSpy it didn't change it
did fix the index bug though
interestingly enough it partially supports the optional NPC target syntax of appending a ? but it'll just null reference exception when it gets back to the event
i see why nobody only very brave & determined people edit the wiki
it's really amazing how many different kinds of formatting you can apply to a paragraph without ever knowing how or why
or even wanting to
It is a wild and dangerous place
usable? understandable?
Beautiful! My only feedback is that you've used the angle bracket formatting in the description when it should be square bracket (or none)
the dreaded TODO….
what the hell do you mean there's a burger bobber and i can just use it in events as a temp sprite
while i'm making a n event in a hot springs.... a floating burger.....
but we don't have access to the xperiodic and yperiodic args in events to make it bob 
bebber burber bobber
TAS and give it motion?
motion is linear, it'd just fly off into the sunset
you'd need the periodic properties to bob the burger
Just remove it and add a new one going back down then repeat /j
Thx
this bush remove/regenerate trigger action is very handy
@next plaza if i only want to use excluderegions, what should I put for includeregions? the whole map, or null, or something else?
It looks like from the code, it's set up to specifically skip includeRegions if you put null there, yeah.
(Code for context.
)
List<Rectangle> includeRegions = new();
if (args.Length >= 4 && args[3] != "null")
{
string[] rectStrs = args[3].Split('/');
int i = 0;
foreach (string rectStr in rectStrs)
{
string[] rectParts = rectStr.Split(',');
if (!ArgUtility.TryGetRectangle(rectParts, 0, out Rectangle rect, out error))
{
error = $"Rectangle parsing error for includeRegion {i}: {error}";
return false;
}
includeRegions.Add(rect);
++i;
}
}
nice thanks haha
Yeah, when that's null, it just automatically adds an include region the size of the entire map.
Hi hi, i am back! This time cus i cant figure out why tf my schedule won't work
I have checked multiple tutorials and really tried to copy everything letter by letter.
Schedule.json file: https://smapi.io/json/none/263f30cb77b44cb6a2e52265fb41e670
Maps.json file: https://smapi.io/json/none/dbafaecae1584e60a08a5a0a634eee1d
(This one has worked fine, though i haven't tried the ice festival yet but ya'll dont have to look at that one, this is just for context)
I'm getting 0 errors through Smapi's console but i'll include my latest one since the schedule doesn't work
Smapi Log: https://smapi.io/log/ecd61bf034d641c8b13c3de79005dc89
Log Info: SMAPI 4.3.2 with SDV 1.6.15 build 24356 on Microsoft Windows NT 10.0.26100.0, with 7 C# mods and 1 content packs.
My NPC does appear in the right map, i have tried sleeping after each change to make sure it resets as well
He just won't move
Ah and this might be useful? I've marked his most common spots, the ones referenced in his basic spring/default schedule ^^"
Did you load a blank JSON for the schedule?
ah, no? I never quite grasped what loading the blank json does and didn't see it referenced in the tutorials i looked at
this is why I need to finish my new docs
I've been too mentally drained at the end of the day during the week lately to work on much, maybe converting the docs over to prepare for the autogeneration for readme+website would be a good task
https://stardewmodding.wiki.gg/wiki/Tutorial:_Making_a_Custom_NPC
This tutorial shows how to load a blank JSON at the beginning and does a better explanation of why than I'd be able to 😅
Remind me in 3 hours to work on spacecore docs (and also do those PRs finally)
you're in luck, I have one spare egg timer available. I think it's broken but we'll give it try. (#6907251) (3h | <t:1760464759>)
Ah i've looked at that one many times when i was just starting out! Maybe now i can actually grasp what it's doing. Cus i have the blank.json in my folder, it's just never referenced/used. Thank you! I'll see if this makes it work haha
Oh, auto-generation would be great! That might even be feasible for MEEP now I think about it...
Ah-hah!! It works! I think get what the blank.json is used for now, thank ya'll for always helping out 
The purpose behind the blank load is because an asset has to exist before it can be edited. You can load your actual schedule file directly, but then you can't use CP tokens because CP passes the file straight to the game without editing it to replace the tokens with their intended values first. So if you want to use tokens (and we usually do, since the recommended convention for the NPC internal name is {{ModId}}_<Name>) you load a blank json first so the asset can exist, then use EditData to pass the actual schedule data into that asset. Because you've used EditData, CP knows to edit it before passing it to the game and replaces the tokens correctly.
The same thing applies for NPC dialogue and event files for new locations that you made for your mod. We don't do it for things like NPC gift tastes or adding events to existing vanilla locations that already have events in them, because those assets already exist so we jump straight to the EditData part to add our data to it.
Aha! Then it's as i was starting to suspect! But i really appreciate the proper explanation cus now i understand why my tokens had been really messing with my mod when i tried to fix compatibility! Now i can actually make it proper and follow customs ^^ Thank you so much for taking the time to explain!!!
You are very welcome :) Many people struggle to understand blank loads at first (including me) so I like to properly explain them so people can use their understanding to know when and how to use them.
Yeah, when youre beginning it's all very confusing and overwhelming so you just kinda blindly follow everything copy + paste style but understanding is always gonna be more effective in the end. But first you gotta test stuff out and learn how to write and navigate the things :P Then you can mess up, bonk your head against the keyboard and THEN start understanding
Yup pretty much haha
Doing stuff without knowing what it does is a perfectly good way to learn if you're able to go "ok if I don't do X then Y doesn't happen, but once I do X then Y does happen, so X is probably causing Y"
My current idea is to do it all as C# xmldocs, and then generate github markdown + stuff for my website that is derived from that
Examples and stuff would still need to be manually done in the xmldocs, but it'll reduce the barrier a lot (especially since I have two places I want to generate docs for)
Maybe a custom analyser to refuse to build in release mode if I don't have any Feature-derived class documented...
Yes! Trial and error is a frustrating way to learn but its also extra satisfying when it finally DOES work. Only times i get proper annoyed is when the issue is that i added a .json in the wrong place or missed a .json in another, then it's just underwhelming

Too bad you can't make one to refuse to build if the existing docs haven't been updated when they need to be...
Not easily at least! I suppose you could have it look for a custom XML doc tag pointing to the generated docs, then it could compare what it would generate against that?
🪨 The item ID for Stone is 390.
Oh, well that's a million times spookier.
Just make an ai do it
Hello
That they recommend me to draw a complex interface,
I want to make a list on the left and according to what you select, another list will appear on the right.
The doc method body thing or the !stone
For complex interfaces I think the current best thing is StardewUI, but I don't think the person maintaining that is actually around lately
I basically just update docs whenever I make a thing
And then do the deploy once I am actually ready
SpaceCore has some stuff for easier UI as well, but for really complex stuff it's still not ideal
I'm gonna rework it... eventually...
That said I think xmldoc structure is not very good for actually describing what modders need to do so I manually write all that
Well, that'd be great if:
- I had been doing it from the start (current docs are more of a reference - I want something more extensive)
- I wasn't wanting it in two spots (github and new website) (github would auto-include to releases as well)
it took me 3 days to write the initial docs yes 
Including it on gh and new website seems not so hard though
Ah, but consider: your mod isn't the size of spacecore
If it's a straight copy yeah, but I want the website to be better since I have more control over layout and such there
i use docfx and have a simple shell script that deploys (commits) to this branch on the repo https://github.com/Mushymato/TrinketTinker/tree/gh-docfx
And this is the branch used for the gh page here https://mushymato.github.io/TrinketTinker/
Fair. I'm mainly just thinking xmldoc because the code and docs are all in one place, reducing the barrier (as well as my likelihood of forgetting it)
You can be fancy and use react or whatever too
If it is just static webpage no server backend gh pages is perfectly adequate
Hmm I hadn't seen docfx before
I'll check later if it can do what I have in mind
Speaking of StardewUI it uses mkdocs
the xmldoc part isn't built-in for that one though, psure stardewui has specialized stuff just for that
What is the UI for?
The XML docs is one of the key parts I want
Yeah then docfx
That also would mean any docs for fields on a data model are available in C# as well
I uh, have been ass about documenting stuff in newer version
I mean so far I've been thinking of just parsing the XML docs myself 😛
Inside the xml docs i mean
C# makes it easy to load XML after all
So that section is somewhat useless
I also still need to do my C#-generated content pack idea...
(Sorta like how datagen in modern MC works, actually)
Otoh the harmony xmldocs is very helpful for finding niche features of codematcher
It also uses docfx iirc
(Basically, my qualm with json is the quote madness and lack of compile time safety, but my qualm with doing it straight in asset requested is that its tedious for large amounts of data)
I think my problem was that my mod is content facing so a C# method existing means basically nothing 
(I talked about it some in one of the secret crime threads)
It is presumably more useful for stuff like spacecore skills
Yeah, I just kinda hate having to have a separate CP content pack for a C# mod. I want it self contained
Not that this works around that
Unless I commit code crimes against SMAPI
I did think it would be nice if I could like
Call some cp api and give it the patch records
Instead of packing content pack
Pathos has been against the idea when I asked before.
It is still not exactly compile time safe tho
The "create fake content pack" API is only available for your own helper
Well, my idea is a bit more complex than simply passing a pack to CP
No, but that's basically what I had in mind. Though I was envisioning using reflection to hijack the create fake pack methods on Helper
By not exactly compile time safe i mean like, it's still possible to do bad edits to fields that don't exist or have different type and you won't know until game launch
Idk how that could be solved tbh
It's more like:
public class Mod : StardewModdingAPI.Mod, IGeneratesData
{
public void Generate(IGenerationContext ctx)
{
if ( ctx.FrameworkId != "Pathoschild.ContentPatcher" ) return;
var cp = (IContentPatcherGenerationContext) ctx;
var objects = cp.Dictionary<string, ObjectData>("Data/Objects");
objects.Add( "MyObject1", new() { Price = 123, /* ... */ } );
objects.Add( "MyObject2", new() { Price = 456, /* ... */ }, conditions: cp.Conditions().Add( "Season", "spring" ).Add( "Weather", "rain" ) );
objects.Add( "MyObject3", new() { Price = 789, /* ... */ }, priority: Low );
objects["(O)0"].DisplayName += " Honey";
var dt = cp.DynamicToken( "variant" );
dt.SetValue( "default" );
dt.SetValue( "spooky", conditions: cp.CreateConditions().Add( "Season", "spring" ) );
cp.Replace( "Maps/Forest", $"assets/Forest/{dt}.tmx", exclusive: false ); // custom interpolated string handler, by the way
cp.Replace( "Maps/Town", $"assets/Town/spooky.tmx", conditions: cp.Conditions().Add( dt, "spooky" ) );
}
}
(Except with a bunch more convenience methods and constants and such)
When you build your mod it will start up a bootstrap process to run that method (or maybe just have it generate in debug builds when you run the mod? if I go pack injection route), and then use the things you called to generate a pack based on it
like that^
This would only work for vanilla things or hard reference then 
The reason it's IGenerationContext instead of CP directly would be for mods that aren't accessible via CP but have their own pack. (And also C# generics don't work like Java ones, nor do we have C++ template specialization)
True! But that's all I care about for C# mods
Also
It doesn't have to the same type
Just an equivalent one
I guess it's ok if u make a placeholder class if you are bothered
Since it doesn't go through vanilla content system
Yeah, exactly
Just copy+paste the data model from your dependency into your mod if it's not a hard dep
Finally my weird ass choice to use BuildingData for furniture will pay off 
Everyone loves duck typing
Another thing to figure out would be config stuff though
I guess I could add something to simplify generating mod tokens for your C# config
The other option would be more invasive patching CP to make it pull directly from C#... which @ivory plume might hate me if I try
Ok I ll try it
Thx
@next plaza: work on spacecore docs (and also do those PRs finally) (3h ago)
I went ahead and made my old launch scripts into a setup script that lets you customize them for yourself! :D
hey everyone, quick question here. how would i add two conditions to a drop chance? i'm trying to add a season condition to a trashcan drop in my mod but i dont think i did it right, as one of the items for the other seasons showed up in my drops
https://smapi.io/json/content-patcher/c09c2e6bf34b45dc87a36aa40e181619 around line 2138 is where the code im trying to fix starts
i'll give that a shot, thank you!
DEMDBOb
lol
yo, quick question but if I want to edit a schedule to add to it after a specific event has been seen do i do it like this? https://smapi.io/json/content-patcher/0d6db2340616433ca0a24e1bbb2a14f8
I assume this is windows only?
It is currently, sorry I forgot to update that part of my mod page template
Are you on Linux or Mac OS?
I usually use linux, I was just curious 
Can someone tell me If i need to config a Path on my own for custom npc when settings their schedule or so they find the best suitting Path their own?
pathfinding is handled by the game automatically, you just tell it schedule points and it does its magic
Yeah, it'll at least try to the best of their ability
Hello can anyone help with spacecore?
I'm making a mod that spawns monsters. In the spacecore documentation it says: "(C# mods can register additional types with the SpaceCore API.)" Can someone create an example of this with the magmasprite so that I can understand how it's supposed to be written?
Background: I'm working through Microsoft's C# class but it isn't really connecting to writing stardew mods yet. Currently in the looping logic "do-while" module. My mod is listed on Nexus as "The Arena"
asking just in case, do you want a custom monster class with custom behaviors/pathfinding/etc?
No at the moment I'm just trying to add the magma sprite as a monster class that I can then update my CP to summon it
the vanilla magma sprite is just a reskinned bat
🤯
Do you know how to use the texture override option? I tried to use it like the monster name option but it didn't work
it takes an asset name so you can just point to the magma sprite path right
do you have code of what you tried?
also, hmm, it doesn't seem like SpaceCore actually supports spawning a full featured magma sprite
(it is a bat reskin, but one with a few extra bells and whistles on top, which SC doesn't seem to allow you to set)
Haha I just put
"MonsterTextureOverride": "Sludge",
To try to make my red slime use the red slime skin instead of the rub values.
Unfortunately it seems slimes textures are the most complex so I ended up getting burned out and took a break
...really? I thought you could just use the proper name (since Bat checks that I thought) and then use a texture override
I may be wrong (likely) but looking at Bat.cs it only uses the mine level, and if it's -555 then it spawns a magma sprite
Hmm, guess I assumed from seeing the parseMonsterInfo
Anyways, this is the way you'd register a new monster type with SpaceCore's API: https://github.com/spacechase0/StardewValleyMods/blob/develop/framework/SpaceCore/Api.cs#L106
The function you pass to it takes in the position (in pixels) and a Dictionary of the spawnables MonsterAdditionalData, and should return the monster instance
All of the default spawn functions being defined at: https://github.com/spacechase0/StardewValleyMods/blob/develop/framework/SpaceCore/Dungeons/SpawnableImpl.cs#L542
(I realize this may not be super helpful since you mentioned you're still working through learning C#, but for future reference)
I just don't fully understand what I'm supposed to do with it. Do I copy it into visual studio and remove all the public sections that aren't relevant?
I just can't translate what I'm learning into anything tangible
I don't think it helps here unless you want to make a new monster class that just subclasses Bat but with the extra fields set to true
actually I guess we dont need the subclass
Sorta, yeah. It would be using this: https://stardewvalleywiki.com/Modding:Modder_Guide/APIs/Integrations#Mod-provided_APIs
Haha this worked like 75% (they have no face). I can't believe i didn't think to try a path since it's for a texture. Thanks for that.
Once you got the api instance you'd just do something like:
spacecoreApiInstance.RegisterSpawnableMonster( "MyMonsterId", FunctionReferenceThatMatchesRequiredSignature );
Anonymous function example (which will probably be very confusing looking if you don't know what those are yet):
spacecoreApiInstance.RegisterSpawnableMonster( "MyMonsterId", (pixelPosition, customData) => new MyMonster( pixelPosition ) );
It might be missing a face because of some special variables Bat sets otherwise.
Not sure that you can affect it with content patcher mods
or a pr to sc
Yeah thanks for this. I'm screen shotting for when I have the mental willpower to slam my head against the wall again. Maybe this weekend
(a little late, but Sword & Sorcery also adds a Magma Sprite SC monster type if you want a code reference, also has a small extra thing to allow it to be 'magma sparkler'-like instead, because those are also a thing in this here game apparently)
Hello! I am having issues with my NPCs either not showing on their Patios or not standing on the path spot. If they show up, they will stand on the spot below the red dot and not using the animation set up sometimes. Nothing but the red spot on the path layer is on the tile
Oh, didn't realize S&S was open source now
Been for a while now (~6 months if going by when the license was added to/readme last updated in the repo)
Hello! It's my first time modding and I wanted to make a custom NPC, but I've been getting this error [Content Patcher] Data patch "Freya NPC > EditData Data/NPCDispositions" reported warnings when applying runtime migration 2.0.0. (For the mod author: see https://smapi.io/cp-migrate to avoid runtime migrations.)
[Content Patcher] Can't apply data patch "Freya NPC > EditData Data/NPCDispositions > entry #1" to Data/Characters: failed converting entry to the expected type 'System.String': Error reading string. Unexpected token: StartObject. Path ''.. Plus I don't think she's loading properly because I can't see her in the in game NPC list. Can somebody help me? I can share her config file if it's necessary
!npc are you following a tutorial? NPC dispositions is an outdated method of adding a new NPC. we recommend using any of the following resources:
Keep in mind that making NPCs is a complex process that requires learning many different aspects of Stardew modding.
Here are a few links that can help get you started on all that you need to know:
-
Tiakall has a great tutorial on making a custom NPC for 1.6.
-
NPCs no longer use dispositions, check the wiki page for the new NPC data.
-
Feel free to jump into the https://discord.com/channels/137344473976799233/1277457201077813280 thread for more interactive feedback and help!
-
Fireredlily has a WIP NPC Builder Please do report any errors you get with it into the NPC thread!
My friend used to make mods for herself, I followed her steps. Thank you for the links
❤️
Multiplayer?
split screen
Yes
but then it started working
i was testing something unrelated 
weh
i assumed onwarp would be safely after its set
the smapi event i mean
well thats ok tbh
im doing a CWT.GetValue in there so firing twice is not a problem
the location being null is a problem
Hello! Got a question for y'all. I'm currently tinkering with a personal edit of Beams Color Change and PIF to get them to play nicer together.
Currently PIF rooms are only changed when "OtherHouses" changes are active, causing the rest of the town to change as well. I'd like to make them change with the FarmHouse instead so the rest of pelican town doesn't look weird with my darker edit of the "Darker Brown" beams/walls and normal everything else.
The way I'm reading this:
"LocationName |contains=FarmHouse,Cellar,IslandFarmHouse,Shed,Big Shed,Greenhouse": "false"
is that it says "If its not FarmHouse, Cellar, Island FarmHouse, the sheds, or Greenhouse then its an OtherHouse and it should be changed" vs FarmHouse just targets the FarmHouse LocationName.
I looked through the PIF documentation about the LocationName/MapName/FTM Compat stuff and thought perhaps I could swap the LocationName": "FarmHouse"
out for something like "LocationName |contains=FarmHouse,DLX.PIF_MINE_": "true" or "LocationName |contains=FarmHouse,prefix:DLX.PIF_MINE_": "true" but neither of those appeared to work. I'm a bit tired and still very very new at all this so I feel like I'm missing the obvious answer and discord search is abysmal. Does anyone have any ideas or know where/what I might look into?
(sorry for the wall of text)
PIF is not Farmhouse
I think you can safely bail if newlocation is null
I know. That's why I'm trying to add it. So that it targets both farmhouse AND all the pif rooms.
And you'll get an event with the real location when it shows up
But tbh I dont like the whole null currentlocation thing
I genuinely don't think there's a way to do that rn
I tend to want to use e.NewLocation and I genuinely don't recall why
It's a pain. Use a Query tokeb
Yeah i also use e.NewLocation normally, this one was just copypasta mistake in the end
Is just weird it bork at all y'know
"Query: '{{LocationName}}' LIKE 'Delix.Pif.Mine*'" : true
But use the correct prefix
(It probably should be documentation on wiki.)
Not it!
Hmm what would you recommend searching for on the wiki to understand this better? Like, where I'd put it, how it works, etc. I don't wanna bother y'all with a million newbie questions when it's already out there. Just need a direction.
Query token on the CP docs
Got it. Thank you!
someone didnt study the shadow realm docs enough
its too dark in here to read
"When a farmhand warps to a location, the game fetches the real location from the host player before the warp completes. For a short while, the farmhand may have a null currentLocation field while they're between locations."
but then is e.NewLocation safe
my confusion partly comes from inability to reproduce the issue
well its shadow world stuff (or at least in the same ballpark) so ofc when you try to shine a light on it, it goes away
Just be like me
like the heisenberg principle
And pretend multiplayer doesn't exist

i cant pretend that bc i exclusively play in multiplayer
literally never played the game singleplayer
(mod testing doesnt count as playing)
sigh i guess i will put up a patch version just for this rip 1.1.1
I'm joking...mostly
I did make a point to do proper multiplayer support back when I did actually bother to maintain....anything
i never play in mp but i do support cus button and sinz only play mp 
mods that dont work in MP get a scathing review in my monthly columns
What about mods that dont work in single-player
i wouldnt know if they do or not bc i dont play singleplayer
What about mods that dont work at all
as long as they dont generate bug reports on MY mod pages they can not-work as much as they want
tbh i think mp support for the 2 machines case is not so bad
split screen is worse by A Lot
no :)
i have a multiplayer only mod that i dont even support splitscreen for
but see i implemented this whole thing to cache unchanged values https://github.com/Mushymato/MiscMapActionsProperties/blob/main/MiscMapActionsProperties/Framework/Wheels/PerScreenCache.cs#L4
and the actual tto difference is essentially nothing as far as i can tell 
🎉 Changing "LocationName: "FarmHouse" to "Query: '{{LocationName}}' = 'FarmHouse' OR '{{LocationName}}' LIKE 'DLX.PIF_MINE_*'": true worked like a charm! Thank you!
i did it anyways cus it feels better emotionally and thats what hobby coding is all about 😌
what do u propose atra
Array with bitmask for validity
fancy
something else that confuse me is that
why does relaunching the game gets you into a state of screen 0 + screen 2
why not just reuse 1 
But also hook into game instance dispose to clear screens
New quote added by atravita as #6688 (https://discordapp.com/channels/137344473976799233/156109690059751424/1427815199460561017)
heya, someone reported a severe bug in my mod that's either a random [de]serialization problem or a random mod conflict, which means i'll be cheating and skipping a bunch of days and have to create a new farm to test with the other mod i think
is there any guide on best practices to avoid messing up my own account?
like, disabling achievements and stuff
i guess, a guide to testing in general
hnhngngn rider lost config and it's been soo long i gotta learn everything again
for some reason, opening the project for the first time in months made rider forget about all types even after updating the ModBuildConfig package 💔
Fixed by setting the gamepath manually in the csproj 👍
just make a separate testing save
make a new save and do whatever on here gets you to what you want to see https://stardewvalleywiki.com/Modding:Console_commands
i do lots of direct testing, by e.g. spawning in objects, directly playing my events, etc.
but then i also test whether each given thing works by debugging in the prerequisites and triggering it "normally"
so say i have an event that triggers on a given day with X friendship with Y person, i slice through the universe with debug commands to line up the conditions and make sure it starts when i expect
got it got it
thanks!
my mod apparently has been deleting hats
which is terrible

replacing them specifically with the Cowboy Hat actually, which still baffles be as to why that hat specifically
is there any form of centralized handling of attachment slots? To avoid having two mods use the same slot
what is an attachment slot?
the slot on a fishing rod for bait, for example
when an item has a popup with a slot inside
I'm currently doing this to add a slot to a item which has none:
private static void Constructor_SetSlotCount_Postfix(Pan __instance)
{
Index = __instance.AttachmentSlotsCount++;
}
realistically the standard is going to be whichever mod becomes the most popular, thus dictating that lesser mods be written around it
I tried to make a funky workaround to work with any mod
/// <returns>The hat attachment slot index or -1 if for some reason it is not registered.</returns>
public static int GetAttachmentIndex(Pan pan) => Indexes.GetValueOrDefault(pan, -1);
private static readonly Dictionary<Pan, int> Indexes = new();
private static void Constructor_SetSlotCount_Postfix(Pan __instance)
{
Indexes[__instance] = __instance.AttachmentSlotsCount++;
}
but this is obviously brittle
this was meant to make sure I always have the last index available, but because this is not persisted in any way, adding or removing a mod would break it anyways
I might just assume no mod adds attachment slots to pans and simplifiy this stuff
I don't think it is currently causing issues, but it wouldn't avoid conflicts anyways (i think)
and maybe this funky persistence is related to my deletion of player hats 💔
So far the only mod I know of that does this is modular tools, which has a ton of its own bugs
I think the state of things right now is just "nobody's really doing this so it's the wild west"
I would make it work for now and add compat later if you need it and it's not too tricky
You can always just say "x is not compatible with y"
howdy! just dropping by to ask a quick question
is there any way I can make it so that a shirt replacement sprite that is dependent on the player being male or female (using contentpatcher atm but maybe there's some other thing i should be) that would also show up correctly on multiplayer? atm what i have just displays the male/female variant on all players depending on what the client player's gender is which isnt quite right
Just add your own netfield to the item! and painfully hook into the attachment slot code manually
ah wait sorry if i interrupted something
Don’t think so. Vanilla has separate items for those cases
ah, i see
Nope, I’m apparently 20 minutes late after the conversation already ended 😂
lmao
hmm. is there any way to circumvent that without having to make custom items and then cheat them in for the defaults (was making fully custom character stuff for me and my partner for our umptillionth stardew playthrough)
eh probably not
I think tailoring recipes migjt have a field for giving it to you based on the current player gender
It’s been ages since I’ve looked at that code though
So I’m not entirely sure
tailoring stuff does yeah but i more meant for the default clothes so we dont have to use the cheat console lol
ig i could just only modify the ones i know will be used by us actually i dont know why i didnt think of that
🥀 im smart i swear
For that matter, in whatever code you have generating the item already, you could just use a condition to change which item is given based on the current player gender
im not generating anything atm i was just modifying the default shirt spritesheet
Oh you said default clothes
yea
Oh, editing default shirts too, not just new character customization default choices for new game?
Yeah you’re probably out of luck in that case
yeah i assumed so
You can add new shirts to the new character page apparently
But if you don’t want to make the actual items
No way around it
(With just CP anyways)
i mean i can just make them actual items but i realized that since we're going for matching ocs as our characters they're really only ever gonna wear like 2 things lol
so i can just only "Gender" the matching items
i was overcomplicating things
I mean a couple new items is really lightweight as far as Stardew goes
But if that works for your use case, then it works, no need to do more
/me disappears into dreamland
so real
(And not the Kirby kind)
damn not the kirby kind? thats the best kind
Gotta wait for Kirby Air Riders to come out for that 😔
(If that even takes place in dreamland…)
Hmm, apparently my NetRef's internal value isn't being set properly when loading a game
I thought XmlType + XmlElement + spacecore registering would be enough to serialize NetRefs?
[XmlType($"Mods_{ModEntry.ModAuthorName}_{nameof(HatWrapper)}")]
public class HatWrapper : Object
{
[XmlElement(nameof(_internalHat))]
private readonly NetRef<Hat> _internalHat = new();
public Hat InternalHat => _internalHat.Value;
public override string TypeDefinitionId => ItemRegistry.type_hat;
public HatWrapper()
{
}
public HatWrapper(Hat hat) : base(hat.ItemId, 1)
{
_internalHat.Value = hat;
}
protected override void initNetFields()
{
base.initNetFields();
NetFields.AddField(_internalHat, nameof(_internalHat));
}
}
// MOdEntry.cs
helper.Events.GameLoop.GameLaunched += RegisterSerializableTypes;
//...
private void RegisterSerializableTypes(object? sender, GameLaunchedEventArgs evt)
{
var api = Helper.ModRegistry.GetApi<ISpaceCoreApi>("spacechase0.SpaceCore");
if (api == null) throw new($"{ModManifest.UniqueID} requires SpaceCore!");
api.RegisterSerializerType(typeof(HatWrapper));
}
I’m not entirely sure on this, but it might be that even with xmlelement that private stuff isn’t serialized. I feel like it would be that way. (Vanilla private fields that need srializing usually have a public property with get and set, I think)
Going to bed for real this time, but it might be worth trying
That or turn your property into a get/set instead of => .Value
[XmlElement("hat")]
public readonly NetRef<Hat> hat = new NetRef<Hat>();
hmmm it is public in the horse class
i'll try that
(I recently did some very extensive stuff with the vanilla netfields and properties, and I’m pretty sure that was the case for just about everything)
Hope you can get it working!

im kirby
i love kirbyyyyyyyyyyyy
: D
thank you soo much!!!! this seems to be it!! issue closed for now!
Nooo they forgot to save
finally, I'm free
It's too late for a w now...
I didn't catch this earlier because visual stuff seems to be serialized separately. So it looked like the netref was being saved, but just the sprites were
@lucid iron i missed this completely. THANK YOU. ;-; (DitR is so old it probably won't be too useful now but i'm adding the migration anyway just in case)
it's technically correct to merge the viewport move info into viewport given it's just another format of the same command, but i'm not sure this is the best way
oops lost my linebreaks in the optional args
they seem distinct enough to justify splitting, imo
and end is a pretty big precedent for not merging by technical command 
mmm it's a tricky call
page is here of course if anyone wants to compare/refresh
https://stardewvalleywiki.com/Modding:Event_data#Event_scripts
if you do merge them, i would not put the <> brackets around move, since the argument is the literal word move and not a value that you sub in
how would you then format the optional arguments clamp and unfreeze 📝
which are also string literals
unsure (viewport is a nightmare), but those are a slightly different case (optional trailing arguments)
Quick question, if any of y'all know: does the FashionSenseOutfits framework mod have compatibility with split-screen co-op? Like being able to target players by name or something? I think it probably doesn't, but thought I'd ask y'all just in case.
I'd like to make a split-screen content pack for it if so, and if not, then I guess it's just one more thing that pushes me towards learning C#. I feel like most of my mod ideas require it 🫠
sadly cannot help, but out of curiosity, what are your mod ideas? /gen
The ones so far that require C# are just this outfit thing, making pets not lose friendship if they don't have their own bowl (I tried mods that turn off friendship decay, but they didn't seem to stop the "no bowl" loss), and a map including fruit trees for an NPC mod that I'm slowly trying to learn how to make... I feel like I had another one at least but now I can't remember it RIP me thinking I don't need to take notes lmao
ooo that's so cool :)
Thank you!
Really? Then I guess the person who told me that was just mistaken
Thank you!
hellooo uh where can I find the in-game audio files to edit? I do have soundboard
Hello, is there a way to tell smapi ignore my mod that doesn't have update key because I want to only keep it for personal use?
add ["nexus:???"], then smapi only complains that it can't parse the number in trace logs (which is invisible by default)
Ok thanks 
in your config.user.json (in the smapi-internal folder), you can add a field called SuppressUpdateChecks which turns off update checks for any mods listed in it (see the config.json for example)
Ok thank you very much 
Ok. I need to know if there was a better way of doing this limiting the options to CP
I changed the demetrius event on my farm to be the dwarf. However understanding the dwarf is tied to the translation guide flag. So what I did was give the translation guide flag on day 1, and it clears the flag after they have seen the "Demetrius farm cave" event. It WORKS, I just feel like it could have been done differently with less chance of issues for players. Thoughts?
you could lock the event behind the translation guide flag
changing preconditions is a bit weird since it's part of the key, so you have to null out the event and then replace it at the new key, but it's an option
Yeah, I could. But would it be silly to lock what should be an early game event behind a late game trigger?
speaking for myself, i prefer it to the solution you described above
you could also just leave it as-is and let the dwarf speak dwarvish if you don't have the flag
if people complain you can just "git gud" at them /j
I dont know a ton about events so pardon the ignorance on this (I know I should read the wiki and I will), Can I tie an event to a player getting a specific flag?
Wait
nevermind
You already said yes. Just in a different way
Can I bundle an exisiting physics library for my pinball iMinigame implementation or am I going to have to write this up from scratch?
hello im new to modding how can i make my npc show up in game? theres no errors yet the npc wont show 🙁
!json if you show your code, we might be able to point out something you've missed
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.
do i just copy the code and paste it here or ss?
Can you share your Data/Characters entry in the json validator at the link? Also is this character meant to be social (can be talked to, gifted, etc.) or nonsocial?
You should have a URL in a green box once you put the code in at that link and click save & parse
It's easiest to share that
I believe you can with BundleExtraAssemblies
look at ModBuildConfig's documentation
Ah, you are using outdated character code, NPCDispositions isn't a thing anymore
ohhh
!npc
Keep in mind that making NPCs is a complex process that requires learning many different aspects of Stardew modding.
Here are a few links that can help get you started on all that you need to know:
-
Tiakall has a great tutorial on making a custom NPC for 1.6.
-
NPCs no longer use dispositions, check the wiki page for the new NPC data.
-
Feel free to jump into the https://discord.com/channels/137344473976799233/1277457201077813280 thread for more interactive feedback and help!
-
Fireredlily has a WIP NPC Builder Please do report any errors you get with it into the NPC thread!
Might have been on an outdated page, mind telling us which one so we can make sure to add a note to it?
this is the part at issue:
{
"LogName": "NPC Manifestation",
"Action": "EditData",
"Target": "Data/NPCDispositions",
"Entries": {
"SilverKnight": "adult/polite/neutral/neutral/male/datable/null/Other/fall 20//BusStop 22 5/SilverKnight"
}
},```
That's the updated tutorial, so not sure where you got the Data/NPCDispositions target and slash delimited string from
im so dumb sorry ToT
you're not dumb! it's confusing if you're new to it
The tutorial mentions Data/Characters and has an example block, that is what you need to use instead 🙂
ohh
i was following an old tutorial on yt
It's a fairly recent change that swapped the NPCs to data models, so it's easy to overlook!
ah that would do it
It's way easier to understand the values in the new way
The part ichor posted needs to be changed
YT tutorials tend to get outdated quick, unfortunately
instead of that patch to Data/NPCDispositions (old data asset, no longer in use), you should be patching to Data/Characters in the manner of the tutorial you were reading
you don't have to put it in a separate file (dispos.json) if you don't want to. the important part is the format of this part:
{
"Action": "EditData",
"Target": "Data/Characters",
"Entries": {
...```
Also, since it's early, consider adding {{ModId}}_ in front of your NPC's internal name and portrait/sprite targets!
looping back to the chorus! once more with feeling!
It helps prevent future mod compatibility issues if someone else makes a mod with the same NPC name later.
🎵 always prefix your thiiiiings 🎶
ok i did what you guys said i think.. but now theres another problem 
Okay, so you need to change the slash delimited string part to a series of key and value pairs.
Lemme get to a computer so I can explain it more clearly
which slash
Honestly, converting from the old dispositions model to the new Data/Characters model is probably one of the best use cases of my google sheet NPC Builder xD
huhuhu
You already know all the values, you just need to attach them to the new Fields in the data model. 😄
data model whats that?
alright, computer booted up
so, this is a slash-delimited list: "adult/polite/neutral/neutral/male/datable/null/Other/fall 20//BusStop 22 5/SilverKnight"
because each value is separated by a /
the new format uses a data model, which has code that looks more like this as an example:
"Target": "Data/Characters",
"Entries": {
"{{ModId}}_NPCName": {
"DisplayName": "MyNPC",
"BirthSeason": "Spring",
"BirthDay": 5,
"Gender": "Male",
"Age": "Adult"
}, //Close NPC model
}, //Close Characters Entries
}, //Close EditData Characters Action```
adult is a value for the "Age" field, so you need to use "Age":"Adult" with the new format, and so on.
so i replace the old format to this??
yep, you're gonna use that type of entry.
You should have a block like that in tiakall's tutorial as well, but the fields are all listed on the official wiki on the Modding:NPC_Data page
okii tyy
I'm kind of explaining it broadly, so if you have any specific questions, feel free to ask!
Try having a look at Lily's NPC builder, it might make it easier like she said: https://docs.google.com/spreadsheets/d/11botrgeisuyBDAfzRWnm5K7IR9umaqT3Z9xX3re13Yo/edit?gid=1549783#gid=1549783
(thanks Aba, it felt awkward to point them there myself after they were already looking at Tia's tutorial)
I did specifically build it while migrating a 1.5 character to 1.6 though, so it should work well enough for this. 🙂
Having trouble targeting any sprites in this mod, something updated but I can't seem to figure out what, the path of the objects.png file is unchanged and the UniqueID for the mod is the same as well: https://www.nexusmods.com/stardewvalley/mods/20340
Any ideas?
"Target": "Mods\\Cornucopia.GrowableForage\\objects",
sample of one of the editimage actions:
{
"Action": "EditImage",
"Target": "Mods\\Cornucopia.GrowableForage\\objects",
"FromFile": "assets/seeds/{{Seed Packet Variant}}/seeds-growable-forage.png",
"FromArea": {
"X": 0,
"Y": 0,
"Width": 16,
"Height": 16
},
"ToArea": {
"X": 64,
"Y": 16,
"Width": 16,
"Height": 16
},
"Priority": "Late",
"When": {
"= Disable Entire Mod": "false",
"Seed Sprites": "Enabled",
"Growable Forage": "true"
}
},```
what does patch summary asset Mods/Cornucopia.GrowableForage/objects show
Game1.dialogueFont = Game1.content.Load<SpriteFont>("Fonts\\SpriteFont1");
Game1.dialogueFont.LineSpacing = 42;
...
Game1.smallFont = Game1.content.Load<SpriteFont>("Fonts\\SmallFont");
Game1.smallFont.LineSpacing = 28;```
why, mr ape. why would you do this to me
Sorry its so long, the end should be the helpful part I think
Didn't wanna omit anything important
I think I'm going to endup writing a python script to pull values out of this to prevent it taking forever
(can you put the entire log on smapi.io/log? thanks!)
Log Info: SMAPI 4.3.2 with SDV 1.6.15 build 24356 on Microsoft Windows NT 10.0.26100.0, with 46 C# mods and 47 content packs.
Suggested fixes: One or more mods are out of date, consider updating them
Theres lot of other errors with SSS, im just currently updating it and working thru all the issues mod by mod
I downloaded the mod to check, and the texture name is just Cornucopia.GrowableForage/objects
there's no Mods/ prefix
That was it! How did you figure that out?
For most mods I've been targeting I've been using that path formatting
Example that is working for east scarp:
"Target": "Mods\\Lemurkat.EastScarp\\esobjects",
What?
The format above used to be working for this mod as well, so I'm confused what changed
(I admit I should have done that first before telling you to run the command, my apologies lol)
The Mods/ prefix (and just whole target path in general) is arbitrary, the game doesn't actually know or care that it's coming from a mod, the target is whatever the original mod provides, if it was working before, then yeah it was using the target Mods/Cornucopia.GrowableForage/objects, but an update to the mod clearly updated that to remove the Mods/ prefix
ah that could be the reason
though actually I downloaded the March 2024 version and the target's always been like that?
But yeah, the target Mods/<mod id>/whatever is neither a requirement or a real standard, never assume that's what the target will be, always check the original mod
Weird, I swear it used to work but maybe Im tripping, anyways, thanks its all working with mod now
Onto the next 😅
Clearly a Mandela effect /silly
Got curious and went to check GitHub, the first ever commit for growable forage (in December 2023) also doesn't use the Mods/ prefix for the textures (it does however use 6480 in the mod id instead of Cornucopia!)
is NetList actually used anywhere or is it all NetCollection
hmm according to the code they have it if they have entries in Data/Machines
so cask and tapper yes (the latter's empty lol), crab pots no
(it seems like the tappers' Data/Machines entries is solely to set HasOutput to true so they have the machine_output tag)
crab pots my nemesis
evil bastard item
incidentally, incubators count as machines, they just do cursed things to turn items into animals
side fun fact, heaters' winter wobbling animation is identical to a machine's working effect, and is achieved by setting it to process a phantom item that takes 9999 minutes

Still have a long ways to go, but i have a good chunk of the physics for Stardew Arcadium's pinball update done !
The phantom item is laws of thermodynamics
Ah yes, Game Design Spaghetti
I am reminded of the infamous Fallout Train Hat and the skrim mannequin people
No need to write a whole new feature when you can just mangle something you already have into doing what you want
(to be clear this is humorous and not critical. I have been there myself.)
Does anyone know how to use the item categories, like the Eggs and Milk in the Home Cook's Bundle, as an item in the default bundles? When I try to use either the category name or ID, it shows up as an error item.
Should be like -5
i did that, and it showed up as an error item
For eggs or are you trying with something else?
It may be limited to specific cases
Showing what you did may help
It is limited to specific cases ys
im trying to transplant some remixed bundles into the default set. Im using editdata on the bundle fields, swapping one of the bundle's data with this:
"Bulletin Board/32": {
1: "O 201 5",
2: "-5 10 0 -6 10 0 246 100 0",
3: "5",
4: "3",
6: "Home Cook's"
}
am currently checking if i need to make a new save for the edits to apply, gimme a moment to validate
lol okay cool i was right and it wasnt getting reflected without making a new save. I do have a separate question though, is there a way to use the remixed bundle icons on the default ones?
i know the bundle key has an index for the bundle icon, but the remixed bundle format is completely different, so i dont believe swapping the index with LooseSprites\\BundleSprites:7 would work
hii, is it possible to set a relationship requirement or bracket to change a dialogue entry?
You can use When conditions
The base game dialogue keys also have some more limited friendship conditions
first day coding anything, how do i use #$b# within $c (which i have been told doesn't work)
you have been told that bc it doesnt
no
ohh, thank you, i was planning to use a When condition, but didn't know what the condition would be called :<
is there a way to randomise between 2 dialogue lines other than with $c in which i can have click breaks with #$b#
i tried searching through this channel and on the wiki for any hints, and the only thing i could find was on event data with friendship; would that work within the When condition?
if you want to do things with Content Patcher's own systems, you need to look in Content Patcher's documentation, not solely the wiki
content patcher has tokens to get the players relationship/friendship values with an NPC
you would use these tokens to decide when to change/add dialogue
oh, thank you :>
Is the BusStop not a valid location for NPC schedules?
They seem to arrive at the map, and then just stay at the warp in tile
it should be valid. are you testing with a minimal mod setup? they might be running into a buildings tile or another warp
Yeah, no SVE or anything else that changes the BusStop map, afaik
I'll double check. Tried with two different NPCs and got similar results
and you're not trying to path them into a building tile, just to make sure?
Just out onto the path. But those are good things to double-check, thanks. I'll try a different tile
Changing to a different tile didn't work. CP reports only Data/Events/BusStop as being modified, nothing else. Very strange
I'll probably revisit later. Can't let this be a block for what I'm currently doing
you could send the schedule here too just in case anyone else has a brain blast about it
!npc there are tutorials and resources here--in my opinion, it's almost easier to create a whole new NPC than to replace an existing one if you want to do that. if you're determined to edit penny to become your girlfriend, though, you would just make sure that your edits target penny
Keep in mind that making NPCs is a complex process that requires learning many different aspects of Stardew modding.
Here are a few links that can help get you started on all that you need to know:
-
Tiakall has a great tutorial on making a custom NPC for 1.6.
-
NPCs no longer use dispositions, check the wiki page for the new NPC data.
-
Feel free to jump into the https://discord.com/channels/137344473976799233/1277457201077813280 thread for more interactive feedback and help!
-
Fireredlily has a WIP NPC Builder Please do report any errors you get with it into the NPC thread!
If you only want to edit the portrait and sprite with no other changes, that's a very easy and straightforward thing to do and way, way easier and faster than making a new NPC. To do that, I'd recommend just finding an existing mod which replaces the textures of the NPC you want to edit - ideally one released after March 2024 so it's for the current game version - and then replace the images with your own (and obviously don't share that with other people). If you want to put a more fleshed out version of your girlfriend into the game, then the links that nic shared are a good approach.
does anyone know how long the CC conversation topics last? an NPC just commented on removing the glittering boulder after being unlocked for the first time
despite the glittering boulder being completed a long time ago
do you have a mod that makes them longer or something
And if you have the Lasting Conversation Topics mod, the answer can sometimes be "forever"
no, just these
unless one of these does and i wasn't aware
wrong one here
(not my save, someone else's that i've been trying to investigate for days now)
the length of a CT is saved to the farmer itself
so if they EVER had a mod activate that CT for super long, its like that forever
if they had Lasting Conversation Topics when they broke the boulder but uninstalled that mod a year ago the CT would still last however long Lasting Conversation Topics set it to
and ofc other mods can reactivate the CT whenever they want manually
i assume they never installed that, because they learned how to install mods last week XD but overall it was just a curious moment where i went "wait why is she saying that the first time you meet her"
{{ModId}}_Faegate < in this, {{ModId}} refers to the unique id, correct?
yes as found in the manifest.json
danke
hi is there someone to help me point out the problem?
Content Patcher fills it in for you
and what to do with it like example what to change
You've tried to put the content of your dispos.json file inside your content.json, including the Changes field, but you can only have one Changes field per field. You also have to decide whether you want your Data/Characters patch to be in dispos.json or in the content.json, because right now you're telling Content Patcher to go get what's inside the dispos.json and then adding the same thing (the Data/Characters patch) directly to the content.json right below that.
So to fix this I'll start with a question: do you want your Silver Knight character data to be directly inside the content.json or do you want it to be in a separate file?
inside the content.json
Okay, then you need to add a comma after the } on line 51, remove lines 17 and 18, and remove lines 52 and 53. What text editor are you using?
notepad+++
Be aware that the errors might have gone away, but that doesn't mean you definitely did fix it. Everything has to be in the right place for it to work, not just have no errors.
oh
Okay, you can install a plugin called JSON Tools and then use its "Pretty print" option to fix your indentation which will make it easier to read.
I'm not saying it isn't fixed - it might be! But you can't just randomly add and remove brackets and commas for it to be right. Things have to be at the right level for it to work in game (meaning they have to be inside the right number of brackets). You can share it again if you want help checking if it's all at the right level.
@mental wyvern Oh, you also need to remove the patch that's on lines 12 to 16
When you add a dependency, but required is false, that's just like saying "You don't have to have the listed mod, but if you do, this mod here should be loaded after it"?
the mod written in the dependency will be listed before your mod
loaded* not listed
otherwise you're correct its optional and just defines the load order
also if you specify a version in that optional dependency, and it is loaded but is a older version, your mod wont load at all
that i did not know and it seems weird to me that it works that way but good to know
that is what I meant, I just used a confusing sentence to illustrate. Thank you for confirming 🙂
I think you are going to need to learn a bit about how JSON works so you can understand what the brackets and commas are doing, which will let you understand what ones to use and where. Try having a look through this tutorial: https://stardew.button.gay/tutorials/json
Hello can CP add new hats, pants and shirts without replacing the vanilla ones? Is there any references I can use for that? I don't want to use FS
Yes, it should be able to, but I don’t know offhand of many references. You might take a look at visit mt vapius as I believe it adds new hats.
In addition, the best resource is usually the unpacked game files
!unpack if you haven’t already
Follow this guide to unpack the game's content files in order to see and explore how the game data is structured.
It's helpful when making your own mods, or just to learn about how the game works!
Most of the time, you just need to use content patcher to add a new entry in the data file for each thing
my mod has a CP content pack that adds a new shirt and pants, hats are pretty simple too 
https://github.com/b-b-blueberry/DesertBus/blob/master/[CP] DesertBus/assets/base.json
Ah, that’ll be better then, since VMV is a pretty big mod
Less to dig through if yours is just pants and shirt
Also wow pants 👀
this one's pretty big and adds tons of new items, but they're just almost-duplicate hats, pants, shirts, hairstyles, etc
https://github.com/b-b-blueberry/SailorStyles/tree/master/SailorStyles [CP]/assets
no other gameplay features or weird stuff like in desertbus
desertbus just adds a copy of Baggy Pants that uses pam's colour palette lol
Thank you very much both of you 
pants are pretty ridiculous but they're not hard, just repetitive. helps a lot if you use a program like photoshop where you can underlay the farmer base spritesheets alongside another set of pants as reference
You were actually pretty close here, just forgot to remove the closing ] and } from your dispos file before your portrait block: https://smapi.io/json/content-patcher/4150767ec88e4ef2baf0be353760cda2
a lot of frames are duplicates, which saves some time, and for not-very-form-fitting pants you can duplicate a bunch more too if you're not fussed. but you do also need to make a tall male version and a short female version which have some frame differences other than overall height
god thank you i was so confused huhuhu
The nice thing about the JSON validator is that you can click the brackets to see where the open and closing pairs are
So if you have too many, they won't match up
The reason I sent you the link to the tutorial is because you're going to have lots more of this to do for making an NPC and the more you understand what is happening with the syntax, the easier it will be to make progress without continually having errors that slow you down.
In this case, I feel like the error was entirely from copy/pasting the dispos file in it's entirety rather than just the action block, but I agree that it's still good to get a grounding in how the lists and data models work 🙂
My mod got flagged suspicious files, i uploaded again but still… what do i do?
wait patiently
nexus staff will sort it out before long
What file type did you use to upload it with? .zip, .rar, .7z, or something else? Also, did you click the link that says "How can I fix this?"?
Zip
Theres no link saying this
Oh, interesting, there is for me when I look, I wonder if that's only for people who don't own the mod page. Here's where the link goes to though, it tells you some reasons it might have been quarantined that you can check for and if none of those apply it has instructions for how to contact them to unblock it faster: https://help.nexusmods.com/article/117-why-has-my-mod-been-quarantined
@vale isle Please do not solicit for commissions. Advertising is against server rules. Thank you!
Mybadddd, I apologize 😗
does portraiture still work well in the current SDV version or is there a better alternative now? I keep seeing posts about it where they get errors
portraiture still works in the current sdv version, but if you’ve seen specific errors I’d be interested in seeing what they are
I sent an email thank you!!!
what kind of mod was it? c#?
using content patcher?
Yep
weird, wonder what they “caught”
Probably an ini file i forgot to delete after i unsuccessfully made a c#
I cleaned the folder from unused files now
Hi @dusk terrace, I just wanted to ask. I'm trying to make a dialogue display format that has a 75x100 portrait. But every time I boot up the game, I get this error:
[Content Patcher] Can't apply image patch "mono's Portraits > EditImage Portraits/Linus_Winter" to Portraits/Linus_Winter: target area (X:0, Y:0, Width:150, Height:384) extends past the right edge of the image (Width:128), which isn't allowed. Patches can only extend the tilesheet downwards.
I've edited the Linus_Winter.png of the mono's portraits to have 75x100 portraits but content patcher won't allow it.
You'll have to Load the image in rather than use EditImage since edit image doesn't allow for expanding horizontally
Ohh I see, I'll try it out later. thank you!
I don't think I did it right. I got this error:
[Content Patcher] Error preloading content pack '(CP) (DDF) Advanced'. Technical details:
Newtonsoft.Json.JsonReaderException: Can't parse JSON file at D:\Program Files (x86)\Steam\steamapps\common\Stardew Valley\Mods[CP] [DFF] Advanced\content.json. This doesn't seem to be valid JSON.
Technical details: After parsing a value an unexpected character was encountered: {. Path 'Changes[0]', line 10, position 2.
at StardewModdingAPI.Toolkit.Serialization.JsonHelper.ReadJsonFileIfExists[TModel](String fullPath, TModel& result) in E:\source_Stardew\SMAPI\src\SMAPI.Toolkit\Serialization\JsonHelper.cs:line 86
at StardewModdingAPI.Framework.ContentPack.ReadJsonFile[TModel](String path) in E:\source_Stardew\SMAPI\src\SMAPI\Framework\ContentPack.cs:line 76
at ContentPatcher.Framework.RawContentPack.TryReloadContent(String& error) in E:\source_Stardew\Mods.Pathoschild\ContentPatcher\Framework\RawContentPack.cs:line 80
at ContentPatcher.ModEntry.GetContentPacks()+MoveNext() in E:\source_Stardew\Mods.Pathoschild\ContentPatcher\ModEntry.cs:line 453
This was how I wrote it:
{
"Action": "Load",
"Target": "aedenthorn.DialogueDisplayFramework/dictionary",
"TargetField": [ "default", "portrait" ],
"Entries": { "h": 100, "w": 75 }
}
I'm really new to modding so I'm sorry if I misunderstood
hi, if you still need help,
please upload your log and content.json there:
!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.
!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.
alright give me a second
which mod are you using? the framework or the furniture mod?
If you're making the mod, please upload the content file (see above)
if you're just using somebody else's mod without making your own then
!mh
For help with modding issues, please ask in #1272025932932055121! When asking for assistance there, sharing an error log will help others identify your issue (see https://smapi.io/log for instructions).
do I just upload here?
I'm using the dialogue display mod
that last part was directed towards someone else 😅
i've been editing it to match how i want it to look
oh sorry!
@dusk terrace https://smapi.io/log/c36cc738afd7443eb4c24a73bf01f705 here's the log
Log Info: SMAPI 4.2.1 with SDV 1.6.15 build 24356 on Microsoft Windows 10 Pro, with 21 C# mods and 30 content packs.
Suggested fixes: One or more mods are out of date, consider updating them, SMAPI is out of date, consider updating it
!json pls upload the json here
JSON is a standard format for machine-readable text files that's used by Stardew Valley mods.
If you need help with a JSON file, you can upload it to smapi.io/json to see automatic validation and share the link here.
When making mods, it's recommended to edit your files in a text editor with JSON support, such as VS Code, Notepad++, or Sublime Text. These programs will check for syntax errors.
it has a built-in validator
I'm sorry I posted in wrong channel!
@dusk terrace https://smapi.io/json/content-patcher/30c05999ac224feeb5ec27e3156a2225 here you go!
ah, yea looks like you forgot a comma on line 9
also the first patch isn't correct either, you can use the first example here to start https://github.com/MangusuPixel/DialogueDisplayFrameworkContinued/blob/main/docs/api.md#examples
Port of aedenthorn's Dialogue Display Framework mod. - MangusuPixel/DialogueDisplayFrameworkContinued
which afaik you just need to change the action from Load to EditData
it might also need to be moved after your main patch, or to be set with lower priority... I forgot how exactly DDFC works in that regards
So I tried this (with the HD portrait code above then tried it with it below) and what happened was it ignored all my changes too. It just retained the default setting of the game's dialogue
I updated Content Patcher and it sort of works now but it's not showing me the portrait that I made
it's showing the default one
Also, just noticed you could just merge both patches since you have the same target
(sorry, just woke up...)
In your main patch just add in the h/w fields and remove the smaller patch:
"portrait": {
"xOffset": -248,
"yOffset": 0,
"right": true,
"h": 100,
"w": 75
},
You'll also need to add a patch to load your image file now.
It sounds like you had such a patch when you mentioned me earlier, but was using the EditImage action instead of Load (as mentioned by EnderTedi)
I tried this before too but the same thing happened as the image above
Got into a flow state last night, i think pinball will be done sooner than expected 🙂
What to do when the unequip trinket command doesnt work?
That's awesome!
impressive
how are you thinking of handling ball runs and long surfaces? always had me wondering when i'd think about pinball games in a sprite game, not sure how i'd define surface vectors for bouncing and rolling along
especially curves. yuck
I kind of cheesed it a bit, curves are actually multiple short segments of circle which the ball resolves with damped restitution. For slopes, the ball just reflects velocity and restitution so gravity makes it "slide" but its actually repeated contacts
that is so cool! is it just me or is the hitbox for the ball a bit too big though?
(could definitely just be me)
It is, tis one of the things I am working on today 😛
Yup, just havent bothered because the ball has been its square rectangle placeholder up until an hour ago
ah, a lizard
oh the patch you mentioned was just the HD portraits patch from the github but I only changed EditImage to Load because I wasn't sure what to load
not sure what you mean... but your content.json should have 2 patches:
- Your edited image with the
Loadaction - The combined DDFC patch with the
EditDataaction
hellooo is there a console command for setting daily luck value? I wanna set up something so that dialog is different on max luck days
there is this command but I'm not sure how i would use the luck value
That is not daily luck, it's player luck
Oh, like the permanent luck stat increase that comes with the lucky charm?
No, like buffs you get from the lucky ring or eating luck foods
Actually, I don't know if that's even that or if that's just the unimplemented luck skill
cause buffs for other skills are a thing
Either way, not daily luck
I don't know of any console commands for daily luck, I just debug sleep a lot and then use debug summary full dds to view the daily luck value (dds being my fake mod id so no mod patches are actually shown)
huh, okay!
I just tried seeing if debug dayupdate would affect daily luck but sadly it did not
Yeah but that doesn't necessarily mean there's a console command associated with it
oh
You could make one yourself by scraping the code from CJB and assigning it to a debug command though, I imagine
...I'll try to use CJB-
@dusk terrace I finally figured it out! I just had to put my portraits in the same folder. So I guess if I publish this mod, the format and the portraits itself has to be combined?
Anyways, thank you for assisting me! I really appreciate all the help!
Made you a very tiny mod that just adds a console command set_luck <value> (no debug in front). It lets you choose what value to set daily luck to using the same code that CJB uses. But CJB just sets it always to 0.115, while this allows you to choose. Use set_luck 0.115 to set it to the same value that CJB does for max luck or set_luck -0.115 for terrible daily luck, etc. Use Lookup Anything on your farmer to confirm it's worked.
aaa thank you so much Aba! 
No problem! I'm a real amateur with C# so let me know if anything funky happens.
Whynis my custom npc stuck at pierre’s on Wednesday when its not even in the coding

Have you slept since changing the code?
First stop of "why is my NPC pathfinding weird" is to try to sleep a day in game in case something changed
That or just "sdv path finding horrible"
I thought you meant sleeping irl
because I often find the answer to my code problems after a night's rest too
SAME omg-
The answer is no 
Found it
i think the sleep animation was glicthed i fixed somehow
oh god go to bed if it's late 
Released the mod yesterday more than 300 ppl tagging me 
I was trying to fix all bugs quickly
noo take your time 
Trying to fix them all quickly increases the risk of new mistakes, please breathe and get some rest if you need it!
Users will be users and they will still be there after you have gotten some sleep
yeah, can confirm the "must fix quick!" often ends in "now the entire mod isn't working because of a missing comma" or other similar things
Hi people that know things 🙂
I joined to ask this quick question - is it possible to make an building (specifically the farmhouse) animated via CP (animations) or AT? I havent managed to get it working so far but I've never seen a mod that does this so idk if I'm wasting my time..
if you need an animation that vanilla buildings can't handle, my understanding is that CP-A is end-of-life and you should use spacecore to animate textures
Happy Sebtober! I just released v1.4 of Older Sebastian
https://www.nexusmods.com/stardewvalley/mods/31574
This update adds a new post-marriage event that allows Sebastian to finally stop smoking. I've also added several other post-14 heart events since the last time I posted here, so there's a bunch of new content to for your next Older Seb playthrough.
Making good progress 😅
vanilla and 9 mods down, 17 to go
how in C# would I go trying to find an asset path? So I can then use that path in content patcher
if its your mod you're the one defining what the asset path is
i want to check other mods that are loaded and vanilla
well vanilla asset paths are the content folder
modded asset paths are arbitrary. if its your mod, you're defining it. that also means if its someone elses mod, theyre the ones defining it. you look at their source code
If you have a asset requested handler it triggers anytime someone loads an asset
the SMAPI log may also say if a mod edits an asset, but only if its requested, and if you dont know what to look for anyway, you may not recognize it
I feel like this is not what you want tho, can u describe the goal here
I want to be able to have a code block, in which I can use to figure out asset paths without having to go diving into source codes or the content folder
that will send a message to the log with the asset path.
That sounds like you want list of allcontent patcher patches
If it's personal use I'd just fork n make cp print that
Patch summary is also essentially that
Things get complicated when ppl have unbounded tokens in the Target
Is there any map property (incl added by an extra framework/extension mod) that can define a map as always nighttime, for the purposes of keeping nighttiles or other light sources on at all times?
I scoured the documentation but clearly missed it 🫠 point me in the right direction please?
u just gotta put them all to like 0600
mmap was my first thought, haha
should work 
nifty thank you!
otoh if its like
supposed to be always nighttime anyways
and it is ur map
just paint on the night tiles?
u need mushymato.MMAP_WoodsLighting if its outdoors but vanilla lets u set ambiant lighting for indoors
Map editing isn't my goal; I want player-placed lamps to be always on.
(Full disclosure: It's really just me going crazy trying to decorate Sylvanlight with literally any light source prettier than torches)
yea then this map prop should work
cus it changes the time being checked for furniture lights
Appreciate it 
hello friends im wondering if someone can help me with a reoccurring error ive been having with my mod :)
apparently when people have one of the translations installed, it does this. However that specific index has 'true' (as it is a boolean.. i cant believe i actually know what that word means now) and the translation only touches the tokens I supplied
Json with the specific mentioned quest but it happens with the others too - also important to note this doesn't happen regularly
well you should probably send the translation if the issue is with a translation
with a string asset like this, you will have to try patch export
oh yeah i was going to do that sorry i got distracted
see if the actual in game string has right number of / delims
Why would the translation cause an error here? 
That's what I'm wondering :L I have no clue why
it could if they added a / for some reason
I remember checking to see if they did that and afaik they did not
"Aos.QiMonsterSlayingQuest2.objeasy": "已斩杀大型史莱姆:0/30",
is this supposed to include the slash?
Huh I wonder how I missed that, I could have sworn I didn't see anything before
they did the same for the other 3 quests
I will bring this up with them thank you <3
that extra slash pushes every field after it back one index
Honestly even if I did notice it I probably didn't think it would affect it since it's within the token but it makes sense
Oh yeah, that makes sense
as always one must remember that the game has no idea what a token is
and it never sees a token
First time seeing i18n translations causing errors tbh
@indigo yoke pinging over here to ask about the editimage thing 
are you trying to expose a image target for void to edit?
kind of
I use Birbcore for setting up my assets for a long time since it made setting everything up easier.
are you doing something along the lines of this
Birb core says it alredy exposes the assets
/// <summary>
/// A single asset. This property is synced with what is in the content pipeline, and can be used directly.
/// This asset can be overriden by other mods, and those changes will be reflected in this property.
/// The path of the asset will be "Mods/<ModUniqueID>/<Property>", for instance the following property
/// <code>
/// [Asset(Path="assets/my_texture.png")]
/// public static Texture2D MyTexture;
/// public static string MyTextureAssetName;
/// </code>
/// could be located at "Mods/drbirbdev.BirbCore/MyTexture" in the content pipeline. Other mods could then
/// load this texture to use it, and this mod can just use the MyTexture property directly.
/// An optional string property sharing the same name, but ending with "AssetName" can also be included.
/// This property will be set to the "Mods/<ModUniqueID>/<Property>" value, which is required for some methods.
/// </summary>
public static void OnAssetRequested(AssetRequestedEventArgs e)
{
if (e.Name.IsEquivalentTo(TrinketColorizerTexture))
{
e.LoadFromModFile<Texture2D>(TrinketColorizerTextureFile, AssetLoadPriority.Exclusive);
}
}
wow the accursed automagics
Nay, something like this
namespace WizardryManaBar.Core
{
[SAsset(Priority = 0)]
public class Assets
{
[SAsset.Asset("assets/manabg.png")]
public Texture2D ManaBG { get; set; }
}
}
well birbcore does indeed do what i mean
just automagically for you
im not really sure if using GetInternalAssetName like this then passing it to content pipeline is legal 
internal asset is for internal usage as name suggests 
moonslime do you have a log with ur mod handy 
Log Info: SMAPI 4.3.2 with SDV 1.6.15 build 24356 on Microsoft Windows NT 10.0.19045.0, with 25 C# mods and 8 content packs.
Suggested fixes: One or more mods are out of date, consider updating them
did u successfully load texture in this one?
yea i was hoping to see what the internal name ended up being
did this log load into save 
but anyways idk if dr birbdev is active these days, my rec is to just try doing it the manual way like this
Log Info: SMAPI 4.3.2 with SDV 1.6.15 build 24356 on Microsoft Windows NT 10.0.19045.0, with 25 C# mods and 8 content packs.
Suggested fixes: One or more mods are out of date, consider updating them
here is one that loads into a save
the 2 variables in this sample are just const string like this
public const string TrinketColorizerTextureFile = "assets/trinketcolorizer.png";
public const string TrinketColorizerTexture = $"Mods/{ModEntry.ModId}/TrinketColorizer";
this log also doesn't have a line about loading assets/manabg 
Log Info: SMAPI 4.3.2 with SDV 1.6.15 build 24356 on Microsoft Windows NT 10.0.19045.0, with 25 C# mods and 8 content packs.
Suggested fixes: One or more mods are out of date, consider updating them
heres what im filtering for btw
Ngl, I'd probably do everything in my power to not use a framework, whose author is not at least barely active in this server 😅
they were active when I started /cry
i have specific dislike for personcore when the person is not me 
and (opinion) this kinda automagic should just be shared project stuff
i dont trust other people with critical automagic
if my mod breaks i want it to be all my fault
anyhow besides changing away from the automagic to doing the asset requested urself
(not that its "broken" here but i mean in general)
(tbh it does look pretty neat but it's barely fewer lines than doing it manually + dependency on another person's mod just for that)
(heck you can just replicate that in your own mod)
It's easier to say "Welp, it broke cause of sdv update, wait 2 years", than "Oh, requirement/framework updated, I have no clue what's wrong" 
wren source gen thing soon trust
do you have an example of calling a CP texture in C#? or a link to one
its exactly the same as calling one you put in your own asset requested event
no examples off hand cus i always pick doing it in C#
what you put in the Target in the CP Load action is what you load with your content helper
in terms of actual usage it is just Game1.content.Load<Texture2D>(whateveryouwrote)
or the games content helper or whatever
Btw Slime, would you consider maybe adding the event unlocking the skill to be in the content pipeline too? (if it's not already)
I eventually want to make it from a C# event to a CP event, slowly updating the old mod.
New quote added by atravita as #6690 (https://discordapp.com/channels/137344473976799233/156109690059751424/1428522813828108288)
It always felt too... "robotic" to me? As in it basically breaks the 4th wall, thought I might mayyyybe give it a makeover sometime hah
Or if you'd like to change it yourself I can send some suggestions
xD I mean it was/is a really old event. It does need updating. Like the dialogue boxes about the controls should be changed into square boxes.
i usually make some kinda lazy loading thing for these
though if it is always there then it prob doesn't matter much
textures are also special case invalidation wise bc smapi doesnt give u a new Texture2D ever, just copies pixels over
Yeah, it always felt like a system tutorial and not something that would actually happen in the world of sdv 😅
This part is hilarious tho 
ngl, when ever I played through this cutscene. I always just saw like wizard doing the saltbea pose and sprinking sparkles on you
Oh, also.. 
newest version of wizardry has a config, you can change the bar position with an X and Y offset
or lower it
Oh, nice
Throws a bucket full of pixie dust on you
pulls it out of his robe
okay yeah, went to check Binning skill with this (just to see if I personally was doing something wrong)
{
"LogName": "Texture swap test",
"Action": "EditImage",
"Target": "Mods/drbirbdev.BinningSkill/SkillTexture",
"FromFile": "Assets/skill_texture.png"
},
Since that's what it says to use on their mod page
Patchable Content
Mods/drbirbdev.BinningSkill/SkillTexture - Contains skill UI textures. See here for sprite layout.
Mods/drbirbdev.BinningSkill/GarbageHats - Contains hat textures.
Mods/drbirbdev.BinningSkill/Items - Contains BigCraftable and Recipe textures.
Mods/drbirbdev.BinningSkill/TrashCanTilesheet - Contains texture for tilesheet including trashcans.
Mods/drbirbdev.BinningSkill/AnimationCopper - Contains texture for animating trash can searches. There are also Iron, Gold, etc variants.
No work. sadness.
im guessing the trick of using internal asset name like this used to be ok, and is no longer ok after some smapi update
yeah, SMAPI has updated a lot since last birbcore update
though from smapi pov it was fixing unintended behavior rather than changing api 
this code has been here for at least 7 years
Also the internal asset name is SMAPI/smth




Now... I don't actually know