#making-mods-general
1 messages · Page 87 of 1
i think ppl shouldnt let memes be dreams
(I'm sorry to interrupt but if my sprites are individual files is the spriteindex then 0)
yes
yea
(okay thank you)
hmm, who gets the jinx soda
(also dont worry about interrupting, muiltiple convos happen in here all the time)
(😭 )
i wish there was C# verison of partial
partial the keyword? isnt that already a thing
you mean like partial?
i forgor hat i looked it up already and learn once again that i should just use a local function
no partial as in curry
it binds arguments to a function and give u a new callable
oh as in currying. u cant just say curry and expect people to think programming
Definitely thought of food lmao
(x, y) => x => f(x, y) isn't simple enough?
well i was gonna say this is mod author chat but
many ppl added curry (food) to game im sure
it's a style thing, but there is scoping implications
partial does not inherit the closure
i literally went, "what does a bowl of yogurt curry with a side of spicy curry have to do with code?"
Yeah!
damn this is like when I realized "gun" was named after a person
also another Tim. kinda
wait really
Did you know that Michelin star chefs is actually frlm the tire company
hah, that I do know, but because I saw the totally factual documentary on the Michelin man rampage
oh actually y'know that make sense, tires, travel, foodjoints, high rated stars
Doesn't get more apt than naming a weapon that causes so much conflict after two words that mean war/battle
Sorry, forgot to unping
i learned this one a while ago but much more recently than i would have liked
I hate the lowercase i reaction
I saw the reactions and immediately thought "what does the Tiled app have to do with this?"
maps, innit
A reminder for what program you need if you want to add a Michelin restaurant to the game
((time to see if my squinting and 28 tabs of documentation did anything))
28 tabs may be too few for proper results
my pc cannot handle 28 tabs
They can get away with it because they're actually a French company. No one's gonna rush out to eat at the BFGoodrich Star restaurants.
Wait, wiki says they're actually owned by Michelin now, so wtf. Replace it with Goodyear then.
pretty sure that's it hahah
that is indeed what I was about to post
alternatively listen on the inventory netfield
Could also use a netfield subscription, but that's kind of a last resort.
but ehh
You always have to unsubscribe event handlers.
weh
The only time you don't have to unsubscribe an event handler is when you're going to be destroying the event publisher.
(and even then, it's still safer)
yea i feel if i dont kill it
people will randomly get light when someone put a thing in a mill
That, or random crashes and memory leaks.
oh is it not a thing garbage collector can deal with
Event handlers are probably the #1 reason for memory leaks in GCed runtimes.
GC can detect when an entire graph is orphaned, but by leaving dangling event handlers, you are preventing your part of the graph from ever being orphaned.
wait how come we dont have to unsubscribe from smapi events then
You would if SMAPI were instanced, but that's all singleton stuff - it's game lifetime.
If you added your event handlers in SaveLoaded (as I sometimes do, though not commonly), then you'd want to remove them on return to title screen.
SMAPI isn't going to be cleaned up, so you won't leak your handlers
If the thing that publishes the events is removed, then it can't keep your event handler objects alive.
ok i didnt do anything illegal so far 
You don't need to unsubscribe stuff when your subscriber has a longer lifetime than the thing you're subscribing to; most obvious case is when you're a singleton like a ModEntry, but could also be that you're just subscribing to something with a very short lifetime that you know you'll outlast. (For example, something you actually own yourself - like creating an internal list of items, and subscribing to events on those items, without ever exposing those items to external code.)
we're all here having a nice time and u bring up orphans with very short lifetimes 
hm so back to the actual thing i was doing
being destroyed..
i need to subscribe to some chests's buildingChest.Items.OnSlotChanged when i enter a map
and unsubscribe those when i leave a map (which i can do in smapi's Events.Player.Warped)
Hey, I am the doctor here, where else am I going to get spare parts?
however i actually did a local method bc i needed some values not available from event alone
Just make sure you also hook returning to title screen, which won't trigger a warped event.
It might not matter because the chest probably leaves scope anyway, but you never know.
but i think i can change the local method to a static one if i just switch around some value derive, maybe
there is Helper.Events.World.ChestInventoryChanged if you don't want to deal with registering/unregistering handlers
Huh. I didn't know that existed. Such a random event to have.
🤔 you can get the tile the chest is on and get the building occupying that tile
Still might have to unregister though, it depends on the lifetime of the thing being registered.
If the handler is in ModEntry then yeah, no need to unsubscribe.
not really? It's a SMAPI event, it only fires when it's needed, and the chest it's fired on is part of the event args
what if i just harmony patch update tbh
It doesn't matter whether it's a SMAPI event or how often it fires, it matters where the handler is.
If you attach some random transient object to a SMAPI event handler, it will be kept alive forever.
If the handler is in ModEntry then you're fine because mod entry points also live forever.
somebody please. attach an event handler to me
yeah I'm assuming we're registering in ModEntry and we're not keeping any references longer than necessary
i could be eternal
Sorry, don't know you well enough for that.
hm what even are event handlers 
i think i been mostly putting static methods on the right side of += or -=
but they r become something else?
Events are multicast delegates; event handlers are the individual delegates.
((SHE'S ALIIIVEEE))
((also yes i was using old PPJA sprites to practice))
((anyway ty for the help))
Depending on your definition of "live".
Static classes don't have any instance. They are not exactly like singletons.
Technically, a static class is both abstract and sealed, meaning it can never be created.
so the methods on there r not live or die then 
here is the actual thing i did warped event handler +/- on
https://github.com/Mushymato/StardewMods/blob/main/MiscMapActionsProperties/Framework/Terrain/HoeDirtOverride.cs#L30-L38
dunno how i would unsubscribe this in ReturnedToTitle since it's tied to location
if all locations get destroyed what will become of terrainFeatures.OnValueAdded and its subscribers
Yeah, you're probably fine there.
presumably death
AFAIK, locations are unloaded when you return to title, so their event handlers will get deleted implicitly.
ok im not ruining ppls games with my dirt then
but yea this building stuff i'll just use the smapi event since the slotchanged one doesnt have enough info
I didn't realize it was a static class, so yeah, as long as you're not capturing any external state into that handler (doesn't look like it) then you probably don't even need to use warped, you could just hook every location in LocationListChanged.
i had some weird problem with instanced locations i think?
Maybe SMAPI doesn't report some locations in that event? I dunno.
or i just did it wrong i dunno 
for completeness' sake I must point out you need to register on save loaded to get the non-instanced locations
but yeah I expect that to catch the rest
Yeah, I've run into that every time with warped, there's always a bit of extra logic to do on game load as well.
You're not hoeing in the farmhouse obviously, but I'm not sure how it works with tent kits since I've never used one.
you could theoretically hoe in the farmhouse
Well, when you use Warped event, there is no explicit warp for your spawn point.
some mod that add greenhosue basically
Warp is only for transitions between maps, so whatever you do in Warped, you generally also need to do on load.
(Maybe this also applies to instanced vs. non-instanced locations. That's outside my wheelhouse.)
pein but at least simple to fix
hm looks like loading the game doesn't raise any Events.World.LocationListChanged
aw Events.World.ChestInventoryChanged doesnt work for building chest very sad
(wait it doesn't?)
(fak)
this is the mill input/output chest
not like a craftable chest in a building
so it's speshul probably
welp, to the OnSlotChanged mines you go
Jade the mod maker question mark
to make a fish mod there are only 2 sprites you need right?
i just thought it'd be fun to get started on the art before i think about the... c...content patching
but i didn't want to jump in and oops turns out i have to do very specific things
the sideways and then the object fish like aquariumfish? 
how are the roe / fishpond changes going to work in 1.6.9 
reconfirming from springobjects looks like just the two yep
u can have more if u wanna animate the feesh
that would be nice! tho i'd love to actually finish a mod and not get overwhelmed so i think setting my bar to simple is the best bet
here's a recent content patcher fish mod https://www.nexusmods.com/stardewvalley/mods/28447?tab=description
hm idk if they did aquarium sprites actually, but as u can see the swim sprite is optional
oh, yeah it doesn't look like there's aquarium sprites
i can't live without putting the cowboy hat on the sea urchin though 
hello I had a question,
I’ve been wanting to make a mod that just alters dialogue & adds extra heart events or even cutscenes that relate to said dialogue, would that be a pretty hard process to get into ? especially with 0 mod knowledge lollll
you can easily add extra heart events, you can make the dialogue trigger an event but it's an involved process
adding dialogue is probably one of the easier things to do, events are more... midgrade i guess?
you would use content patcher to be able to change the game's dialogues
!software you'd be using json syntax, which is a form of language that content patcher reads, highly suggested programs are visual studio code, as it has a json validator built in
Here's a list of software for pixel art and JSON text editors we recommend: https://gist.github.com/ishanjalan/c8efb21afa21f74a052293176db107f7
For making SMAPI (C#) mods, see the Requirements section here for which IDE to install https://stardewvalleywiki.com/Modding:Modder_Guide/Get_Started#Get_started.
!unpack once you've settled on a text editor of your choice, you should unpack the game's files to see where/what things are, unpacking the game's files does not affect your actual game at all, it is simply for you to view the data
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!
thank u sm this is rly helpful 
!vscjsonc if you want to use VSCode
In Visual Studio Code, go to File -> Preferences -> Settings, then search for "associations", and in the "Associations" setting, click the Add Item button to add an item with key *.json and value jsonc (see image).
If you are making a content pack for Content Patcher, you should consider using its json schema so that VSCode can tell you if your patches are valid, you simply have to add
"$schema": "https://smapi.io/schemas/content-patcher.json"
at the start of your content.json file.
Is there a Twitch Integration mod that allows chat to help on the farm as Junimos named after themselves?
If it doesn't exist yet, I'm considering making it.
uhhhhh that sounds very involved
that's very specific yea u should make it
0u0
What coding language does Stardew use for mods again?
That's the one I'm going to have to brush up on.
aren't junimos just critters? they don't actually 'exist'? i don't remember how they work
c#
Ok, got it
well u could draw name tags over them?
i assume u dont expect ppl to actual do inputs
oh true, you could just do that, if you wanted them to actively be able to move though that's uh, A Very Involved Process 
what do you mean junimos don't exist 
if they're like crows, they don't exist
Yeah, I was thinking there'd be an optional default nametag that could also be swapped with a custom image installed by the user
nothing exists, blueb, it's not your fault
it sounds cute 
What I had in mind was a few "modes" that the Juniviewers would take, so sort of like bots that each viewer can use chat commands to steer
So like, "water plants" mode, "harvest crops" mode, "pet animals" mode, etc
It could potentially load up a locally-hosted view of the farm that viewers can look at when the streamer isn't at their farm, but that sounds hard 0-0
would you have to hook a false farmhand for the internet connection?
I'm not sure, although it wouldn't be hard to bump up the farmhand limit to 9 or add Unlimited Players compatibility if needed.
i am blind to multiplayer, i am but a shrimple NPC creator for now
Maybe it'd be a custom "druid" farmhand that just wanders around doing nothing, but is there to direct the Juniviewers?
actually thinking about it, if you wanted the chat as a "collective" like that one pokemon thing where they all fight for inputs, you could somehow translate twitch movements -> gamepad movements
then just have a second instance of the game up, join your own hosted game, and just watch it struggle to leave the farmhouse
Nah, I figure it'd be more functionally similar to Rusty's Retirement in that their little personal bots have modes to choose from
So chat could use !water or !pet or something
potentially !guard to follow the streamer into the mines and help them fight.
Although they would have low attack and defense, and would have to go on a respawn cooldown if they died.
Alternatively, it could be set up so that channel points can be used to spawn one, but to respawn it you have to spend the channel points again.
BUT! If their personal Junimo/bot manages to defeat a monster, it would grant them more channel points as a reward >u>
well as long as u can do the twitch bot <-> sdv interface
the rest doesn't sound too bad
Yeye, it'd be some pretty simple automated behavior
u dont have to make real npcs or anything just draw them and implement damage monster separately
It could go pretty wild if the streamer has a large audience, though.
This is a terrible time of day to ask this, but does anyone have any thoughts about why my Better Beehouses has exploded on me today? https://smapi.io/log/fe053916f71045f99b97fb1499021461 It's been working fine for the past in-game week or so (which is how long I've had it). In addition to the repeating errors, there are no bees buzzing between the flowers and the beehouses and when I go to collect the honey it just disappears.
Log Info: SMAPI 4.0.8 with SDV 1.6.8 build 24119 on Microsoft Windows 10 Home, with 132 C# mods and 334 content packs.
Suggested fixes: One or more mods are out of date, consider updating them
i assume streamers have good computers
but prob good idea to cap the number of junimos to like 100
(Yes I know I have an incredibly messy game lol)
Can anyone recommend a Stardew modmaking tutorial that isn't reliant on Content Patcher?
The only ones I could find are specifically for making Content Patcher mods.
GRACIAS
it sure did explode, huh
Or add a config that changes the requirement/cost for spawning one.
It really did. And I'd woken up that morning to Mateo having redecorated my farmhouse living room (not happy, Mateo!) so I spent ages setting that back to rights only to go outside to broken beehouses.
I'm going to try turning off the bee visuals and see what happens
okay, brave really hates your raw trace log 
I know there's a way to hook into a channel point redeem and change the cost of that redeem separately, but if a big streamer wanted it to rely on bits or subs instead, I could work that into an optional config
Brave?
my internet browser
Ah
it is struggling
Yeah sorry I should've trimmed some of the errors out
is harvest honey sync not boding well with better beehouses
ArgumentException: An item with the same key has already been added. Key: {X:32 Y:50}
at System.Collections.Generic.Dictionary`2.TryInsert(TKey key, TValue value, InsertionBehavior behavior)
at BetterBeehouses.framework.FlowerFinder.GetAllNearFlowers(GameLocation loc, IEnumerable`1 tiles, Func`2 extraCheck)+MoveNext() in C:\Users\Wren\source\repos\BetterBeehouses\BetterBeehouses\framework\FlowerFinder.cs:line 22
at System.Linq.Enumerable.TryGetFirst[TSource](IEnumerable`1 source, Boolean& found)
at BetterBeehouses.patches.Utilities.preCheck(GameLocation location, Vector2 startTileLocation, Int32& range, Func`2 additional_check, Crop& __result) in C:\Users\Wren\source\repos\BetterBeehouses\BetterBeehouses\patches\Utilities.cs:line 44
at StardewValley.Utility.findCloseFlower_PatchedBy<tlitookilakin.BetterBeehouses>(GameLocation location, Vector2 startTileLocation, Int32 range, Func`2 additional_check)
at HoneyHarvestSync.HoneyUpdater.UpdateLocationBeeHouses(GameLocation location, HashSet`1 readyBeeHouses)
at HoneyHarvestSync.HoneyUpdater.AddLocation(GameLocation location)
at HoneyHarvestSync.HoneyUpdater.<>c.<RefreshAll>b__24_0(GameLocation location)
at StardewValley.Utility.ForEachLocation(Func`2 action, Boolean includeInteriors, Boolean includeGenerated)
at HoneyHarvestSync.HoneyUpdater.OnDayStarted(Object sender, DayStartedEventArgs e)
at StardewModdingAPI.Framework.Events.ManagedEvent`1.Raise(TEventArgs args)```
I thought that was the problem but it's supposed to be compatible with it
I'm gonna see if someone else already made a Twitch Integration framework yet.
what's at 32/50?
Oh but I just remembered the config settings for the honey harvest sync one went all wonky and wouldn't even save so it probably is that
Uh let me check
it looks like that's the tile your logs are mad about
yeah it looks like it starts there and the rest of the endless loop is because of it
delete harvest sync's config?
The honey disappears but the beehouse still keeps its "I am full of honey" appearance
I am going to disable honey harvest sync entirely and see what happens with my errors
Now for the loooong wait to get in game again
This is why I usually don't bother trying to fix errors in my play game lol
you make up your sins by working in the tech support channel 
Yes it's very much "do what I say not what I do" in there lol
Okay, Honey Harvest Sync was not the culprit.
I'd better do a mod incompatibility check before I take it to Wren I guess
Ah interesting it was objecting to my giant poppies

But only one of them
Poppies can't normally be giant I see so I wonder what mod is causing that
Okay it's VMV
And disabling honey from giant crops stopped the error
Hooray!
Thanks for accompanying me on my journey Avi
@gaunt orbit I think I have found an incompatibility with Better Beehouses and the medium giant Poppy crop added by Visit Mount Vapius (maybe because it's 2x1 tiles instead of 2x3?). When the medium Poppy is present, honey disappears when harvested from the beehouses and I get errors for Better Beehouses in the console. Turning off giant crops as a honey source in the Better Beehouses config stops the problem. I have reported it to Lumi in the VMV server and wanted to let you know as well. Let me know if you want me to make it a bug report on your mod page or something. https://smapi.io/log/fe053916f71045f99b97fb1499021461
Log Info: SMAPI 4.0.8 with SDV 1.6.8 build 24119 on Microsoft Windows 10 Home, with 132 C# mods and 334 content packs.
Suggested fixes: One or more mods are out of date, consider updating them
I don't feel like signing into the wiki, could someone update the mod compatibility list to show that Stawdew Vawwey is no longer compatible as of 1.6?
My huge rework for CP compatibility is finally done, now I have to test it (after writing a debug command)
I have hope for it to be done in time for 1.6.9, I would hate having to upload a patch for 1.6.9 before this new major version
Has anyone tried this mod? I thought to ask about it, as I don't recognize the modder:
https://www.nexusmods.com/stardewvalley/mods/28950?tab=posts
I am also a little paranoid. Hence, why I thought to ask.
we can always decompile it and see what it does
but the user has been on Nexus since 2016
Let's give it a spin on the old Violin!
(What would be funny is if this were a mysterious CA sock puppet, something I would totally do if I were CA!)
i believe the consensus when it came up in #modded-stardew yesterday was that it was basically bogus
(Also. literally everything I am doing it Pathological Demand Avoidance centered around updating to 1.6.9, which NEEDS to happen given that PolyamorySweet uses getfarmer...)
Thanks Button! I had a feeling it might could be (Or that the programmer was a secret genius!)
iirc it just calls things to be loaded early (including things that no longer exist after 1.5...) and manually calls the C# garbage collector at times
I know there a few legit speeding upping mods like that one sprite fixing mod, did that one ever get beefed up to 1.6?
it came up 3 times too! each time someone said it really didnt do anything and the ai generated cover is not making it look any better
yeah its not a good look
i imagine its trying to do the same thing that happens in the minecraft section on curseforge, where fake optimiszation mods (that sometimes are viruses) get posted to try and farm downloads
I will probably look into it when i get back from work today...
I was a bit nerbous about viruses or it banshing the save, cause it seemed weird. The cover picture initially intrigued me, in major part because I have a migrain and cannot lool too closely. I went back and looked and it is rather insettlingh.
So Clear Glasses is the New Sprite Master. Thanks to whoever mentioned it earlier!
Afaik Clear Glasses doesn't bring performance improvement like Sprite Master did 
Yeah that's correct it's just for the blurry look
Clear glasses just made me lag 😔
spritemaster's performance improvements are largely incorporated into the base game
(my hypothesis is that since it's possible to have several giant crops for the same product, the mod may not like having two different poppy crops)
if this new crowshop thing from the latest update is a trade-in i'm going to make a high-pitched whining noise and disappear completely
Trade-in?
give item, get item
From what I've read "still haven't tested it" you pay 10k, you get whatever item you've "lost"
like from a cave death?
Specifically it's things like the joja soda machine
Stuff you get only one time in a playthrough and have no way to recover if you got rid of them somehow
Supposedly it shows up when you're missing an item, which makes me wonder if that's just hardcoded
It has a Data/Shops entry, but that won't be worth much if it only shows up when specific items are missing lol
It's too hidden for me, I can't find it
I need to get and then lose the soda machine maybe
Yup it appeared once I lost the soda machine
do you have any pictures 
worried i have to distance my own stupid crows now
oh wow that's really simple hahah
sure is a crow shop
Yup just a crow bobbing next to a little...pottery bottle?
Bag of Holding
Drat, the island trader upgrade flag didn't give me the island trader
Give me, warm. Give me, soft.
give me smooth, give me silky 😌
i should just glue the json validator to my head...
What do you use it for? /curious
I only use it for sharing my json with other people
it do validyate jsons
what text editor do you use?
Is there a reason you're not using an editor that checks those for you?
notepad ++
I have been told this plugin does json validation: https://github.com/NPP-JSONViewer/JSON-Viewer/releases/tag/v2.1.0.0
I'll download it and have a look
alternatively, try vscode, which is pretty feature-rich
vscode works but kinda inconvenient
it's convenient if it works hahah, your alternative is pasting your whole file into a web validator over and over
What is inconvenient about VSC?
:/ i dont like having to boot it up all the time
When I did this with a missing comma on line 23 it popped up with an error about it. But it's not doing syntax highlighting (though that might be a symptom of my particular N++ theme) and it's not as useful as VSC's since you still have to remember to run it.
you could always just boot vscode up once instead of all the time. it has tabs!
most helpful advice i've ever given
Yeah I just keep VSC open at all times lol
Plus it only takes a few seconds more than N++ to open
how do i fix tilesheet climbing issue again?
Open the .tmx in a text editor, remove the folderpath/ bits before the tilesheet name under "source="
if you want something less-IDE and more text editor, sublime text is basically n++ but better, prettier, with real-time json validation, and occasionally asks you to buy it
i love sublime
i'd buy it if a license wasn't 99 USD
thankfully it only asks you once in a blue moon, so 100% worth the time
Remove everything except "townInterior.png" and "paths.png"
According to my N++, every key in my json is a number
I shall try Sublime
The N++ JsonTools plugin also offers validation, though it is similarly clunky as NPPJsonViewer
delightful
Is that VSC?
That just means you need to make your text editor recognise you're using jsonc
technically comments are illegal, but you can break the law if you know it
Lol forwarding the command message instead of using the command
i wasn't going to risk typing vscodejsonc or vscjsc instead of just searching for jsonc
I always have to go into governors mansion to find commands
That is such a miniscule screenshot lol
😭
how would you name it?
miraculously i only fumbled the content.json
The same xD
lmao
do i need to remove that "$schema": "https://smapi.io/schemas/content-patcher.json" from the content.json once im done editing
or can i just leave it
you probably want to keep it, it's not hurting anyone
did you see how to open folders in VSCode? It has a file explorer integrated so you don't have to go in the file explorer to open each file individually
keep that
yep, Open Folder doesn't open every file at once, it just brings up a nav panel with all your files scoped to that folder
I have my VSC open as a workspace so I have a bunch of different folders open inside it
yep, that's pretty useful when you have to switch between files
Can I get Sublime to have my keys and values in different colours?
Sad, so it cannot replace VSC. It may replace N++ for me though
that's a very specific make-or-break
how are some npcs appearing here when their specified home location is somewhere else. It's working for other NPCs but them. For this instance, the guy with brown hair (Oji) is supposed to be at Custom_North map.
(no npc or relevant errors) but here's my log: https://smapi.io/log/f09edb9cc34b49949a8044073c350a66
disposition: https://smapi.io/json/none/28cad92113224c0da85520a5fd339a36

Log Info: SMAPI 4.0.8 with SDV 1.6.8 build 24119 on Microsoft Windows 11 Pro, with 26 C# mods and 13 content packs.
Suggested fixes: One or more mods are out of date, consider updating them
Is this a new save made just to check this situation? And does Oji have a schedule?
i think i made this save yesterday or the day before just to test stuffs. and yes, oji has a schedule.
{
"LogName": "Oji Schedule",
"Action": "EditData",
"Target": "Characters/schedules/Oji",
"Entries": {
// 0 up, 1 right, 2 down, 3 left. Default down.
// time location tileX tileY facingDirection animation(optional) dialogue(optional)
"spring": "1500 Custom_InsideSupplies 22 8 0/ 1600 Custom_InsideBoutique 7 29 0/ 1700 Custom_North 16 23",
"Mon": "1500 Custom_InsideSupplies 22 8 0/ 1600 Custom_InsideBoutique 7 29 0/ 1700 Custom_North 16 23",
"Tue": "500 Custom_InsidePastry 28 5 0/ 1600 Custom_InsideCafe 13 18 2 / 1700 Custom_North 16 23",
"Wed": "1500 Custom_InsideSupplies 22 8 0/ 1600 Custom_InsideBoutique 7 29 0/ 1700 Custom_North 16 23",
"Thur": "1500 Custom_InsidePastry 27 5 0/ 1600 Custom_InsideCafe 13 18 2 / 1700 Custom_North 16 23",
"Fri": "1500 Custom_InsideSupplies 22 8 0/ 1600 Custom_InsideBoutique 7 29 0/ 1700 Custom_North 16 23",
"Sat": "1300 Custom_SunnyfieldShops 70 11 2/ 1500 Custom_InsideBoutique 32 18 0/ 1700 Custom_North 16 23",
"Sun": "1300 Custom_SunnyfieldShops 70 11 2/ 1500 Custom_InsideBoutique 32 18 0/ 1700 Custom_North 16 23",
}
},
lmk if you prefer the json url
Have you changed Oji's home since making the save?
What about warps?
i wonder if having their schedules changed affects this stuff?
warps, i didnt particularly change warps but added warps and lockeddoorwarp
Hey, did anyone ever try to make a tool/mod to sync saves on PC and mobile? I just saw someone asking about such a system on the subreddit
Are PC and mobile saves compatible? I thought 1.5 was pretty different architecture
don't know, but someone was saying that it was possible to manually move saves between devices
rughhrh i spent 5 minutes looking for a " i was missing
How many times have you slept in game since making changes?
also I feel like it would require some sort of server to host the save if we want true steam-like save sync. Otherwise, it'd still be possible to make something with a button to "send file to phone".
Yeah, I wouldn't even know how to find the place where saves are stored on mobile lol
isnt there some app for it
!saves
Use this guide if you want to find your save file or transfer it between platforms:
https://stardewvalleywiki.com/Saves.
That was the question I believe lol
no but I think there is an app
no idea what exactly it does or where the saves go but
Says between Android devices
@vernal crest @rancid temple idk what or how it happened. I made a new save and apparently, the NPCs are at their correct spawn points. i havent changed their names except added warp points and updated their home location but the game recognized the X Y except their new home. 
oh
Also wow, this thing has a really low rating lmao
Ah, when I said "have you changed Oji's home since making the save" I meant have you changed it in Data/Characters, which it sounds like you did.
Ah, im so sorry, yes i did indeed.
It makes sense now.
Thank you so muchh btw! Ill be moving on to events now 
No worries! BTW sorry if you have already been told this but if you're planning to release this mod you should make your NPC internal names more unique because right now they are very generic and you have a risk of conflict with other mods.
Ah! You're right. xD i'll change it as I go through the files :> Thanks for the catch!
does anyone know if letters that dont stay in your mail inventory still count as flagged for hasflag tokens? Like passedout mail for ex
I was curious so I opened it up in ILSpy (of course it's not open source). The memory management part is total garbage, just calls GC.Collect when memory gets high which is going to cause lagging/thrashing at random moments. The asset manager does something interesting which I thought @ivory plume said last week was not allowed:
await Task.Run(delegate
{
if (!AssetExists(asset))
{
_monitor.Log("Asset does not exist: " + asset);
}
else
{
if (asset.StartsWith("Maps/"))
{
_helper.GameContent.Load<Map>(asset);
}
else
{
_helper.GameContent.Load<object>(asset);
}
_loadedAssets.Add(asset);
_monitor.Log("Successfully preloaded: " + asset);
}
});
Now, I'd asked specifically about async methods, but I had the impression that SMAPI's asset loader was designed to be single-threaded, so either it is actually thread-safe underneath it all, or this code is going to crash.
🤔 interesting...
Anyway, IMO it's mostly nonsense, doing horrible stuff like aggressively unloading major assets even when they don't need to be:
private void OptimizeLocationTransition(GameLocation location)
{
// ... snip
_assetManager?.ClearCache();
string mainMapAsset = "Maps/" + location.Name;
base.Helper.GameContent.InvalidateCache(mainMapAsset);
_assetManager?.PreloadAssets(new string[1] { mainMapAsset });
IEnumerable<string> additionalLayers = GetLocationAdditionalLayers(location.Name);
if (additionalLayers.Any())
{
_assetManager?.PreloadAssets(additionalLayers);
}
// snip
So nobody should use this mod, it's more likely to make things worse than better. But I really would like to know if there are situations in which the async loading is permissible, because StardewUI already knows how to monitor assets and respond to changes (and therefore respond to async loads).
is it necessary to report the mod on Nexus?
No no, it's not abusive or anything. It doesn't break any rules. I meant "not allowed" in a technical sense, it's against SMAPI's design or so I thought.
i hear it also tries to load assets which aren't part of the game anymore (like Data/ObjectInformation). did you find that part?
Yeah, that's the "EssentialAssets".
Since everything's wrapped in a try/catch block it probably won't do anything other than waste cycles.
private readonly string[] EssentialAssets = new string[5] { "Maps/Farm", "Maps/FarmHouse", "Characters/Farmer/farmer_base", "Data/ObjectInformation", "TileSheets/tools" };
putting on my generous hat, unloading assets is probably trying to reduce memory footprint, but calling that "optimizetransition" is bold
i think my poor npcgot stuck somewhere
It's not the worst attempt to optimize I can imagine, but it's definitely in the top five... aggressively loading and aggressively unloading everything.
if this mod turns out to reveal that async loading is safe to do, it will probably ultimately be a net good, but not in this form
Real, across-the-board async loading would solve almost all frame drops. Of course, it would also break nearly every mod and quite a lot of the vanilla game. So I hoped for opportunistic async load, but was told even that was basically a hard "no". Hope Pathos can clear it up.
try doing debug whereis NPCName TuT mine hid so well lmao.
as if we needed more smells, this lists farmer_base as essential but not farmer_girl_base
It does appear to be really good at showing lots of HUD messages about how very optimized everything is.
This is safe for stupid reasons
Every map is loaded at save load
Yes, that part is safe (albeit ineffective), though the previous part with the Task.Run (i.e. not on main thread) load has me more curious - and doubtful.
no, the task run is only safe because it does nothing
Oh, haha, that would explain it then.
it does nothing because what it tries to load is already loaded
log("loading...")
wait(10000) // decrease number when paid to optimize
load()
log("loaded!")
because the game expects all maps and all tilesheets to always be loaded
I thought that too, but hadn't gotten as far as digging into the game code to verify.
So when this mod tries to invalidate the map in cache, it's also going to do nothing?
i thought it was trying to load the maps before opening a save
augh, firefox wants a restart, the code you want to look at is smapi's propogateOther or propgate maps, can't recall
(i haven't looked at it myself, i ain't downloadin that)
It tries to load "essential assets" early on and then does the aggressive map unloading/"preloading" on location change on location transition (warp).
I was thinking if it explicitly unloads (invalidates) an asset, and then tries to load it again in a Task.Run delegate, it would actually attempt to load that asset on a worker thread even if Stardew/SMAPI had previously preloaded it.
There's not much question that, overall, it's making everything much worse. I'm just curious about the Task.
lmao incredible
I'm trying to find the spot that async task loads break
I think Ameise once tried to do something with schedules with async once
Do you guys think there is a smarter way to go about "turning off" vanilla events? (this way you can't really turn them on again)
{
"Format": "2.3.0",
"ConfigSchema": {
"TurnOffVanillaEventsWithLeah": {
"AllowValues": "true, false",
"Default": false,
"Description": "WARNING: if you turn this on and start a save, all of Leah's pre marriage Vanilla Heart Events will be marked as 'seen' and you won't be able to undo this for that save."
},
},
"Changes": [
///Trigger
{
"Action":"EditData",
"Target":"Data/TriggerActions",
"Entries":
{
"Miihau.LeahEE.TriggerAction.MarkVanillaAsSeen":{
"Id": "Miihau.LeahEE.TriggerAction.MarkVanillaAsSeen",
"Trigger": "DayStarted",
"HostOnly": false,
"Actions": [
"MarkEventSeen Current 50",
"MarkEventSeen Current 51",
"MarkEventSeen Current 584059",
"MarkEventSeen Current 53",
"MarkEventSeen Current 55",
"MarkEventSeen Current 52",
"MarkEventSeen Current 54"
],
"MarkActionApplied": true
},
},
"When":
{
"TurnOffVanillaEventsWithLeah": true
}
},
]
}
I mean, nothing I saw in SMAPI is protected by locks or concurrent data structures, so I'd expect real async loading to break.
I asked Pathos about adding opt-in async loading and he said even that wasn't under consideration. So, yeah.
i know back in 1.5 i used a thread to load music files at game launch, but that's something else i think
so, you can load files yourself async
I could actually design and build a ModContent.LoadAsync (includ for textures)
You can load a file asynchronously but not an asset.
it's GameContent.LoadAsync which is dicey at best
Yeah, game assets are a regular dictionary.
Can't you just do another trigger action that marks them all unseen if the config is set to false?
but that way people that have seen the events would re-watch all of them
It's interesting that this is by no means a low-effort mod. It's not Herculean effort, mind you, but it's not a 1-line wonder either. So the author clearly went to a lot of trouble to write and test this... just had entirely the wrong idea about how game assets actually work.
okay, i checked out what i did back then and no assets were involved. once the files were done i slapped them directly into Game1.soundBank
it's fine, it's not the default
You could have a third config option called "reset all events" or something so people only pick it if they want to mark them all as unseen? I don't know why you would want to be able to turn them on again if people didn't want to watch them.
As long as that last step is done on the main thread then it's fine. It's the *ContentManager classes that are (assumed to be) single threaded.
your other problem is that texture2d.get/setdata are ui thread only
discovered that one the hard way
Is that right... thanks MonoGame.
okay that's smart, i'll work with 3 options instead of true/false 
thanks
"what do you mean I can't getdata off a rendertexture)
It seems to be doing well, with people giving high praise, so even if ineffective it is likely doing something
Placebo effect is and always will be real (to @acoustic summit )
and before you ask about transpiling that OUT
Maybe, but I dont think that is the whole explanation
monogame is very much married to static state
It absolutely is the whole explanation.
clear glasses (which does not improve performance) also claims repeatedly to improve performance, and many users seem to believe it
😭 it lowered my performance actually
Yeah... Clear Glasses definitely reduces performance, I just like the look better.
the game took like 5 mins just to load the console
Someone notes a 15s reduced load time with 554 mods in the posts, could be bs but they seem to feel the difference. I guess its something to wait and see on if it blows up
How could any upscaling mod claim to improve performance? That's nutty.
and extremely long load times inebetween days
That mod changes absolutely nothing that could positively affect load time. If anything, it tries to do more work during load events.
spritemaster (which clear glasses is forked from) actually did, but it wasn't the rendering part. it just included some rewrites of core functions that are now part of the base game
Sprirtemaster worked for me too
Do not underestimate the ability of users and even developers to fool themselves when it comes to performance. This industry has a long and steady track record of it.
though I got rid of it since tbh I like my base sprites too much
@acoustic summit You leveled up to Cowpoke. You can now speak in our voice channels and share images in all channels!
I remember Raymond Chen once joked that they were going to add a setting called PlaceBOs because people kept obsessively trying to "tune" settings in Windows that were deprecated and literally did nothing.
Part of the problem is that performance isn't always consistent, and when things seem random (like frame drops often are), and users get random reinforcement, that breeds superstition.
Yeah that makes sense too, you use a mod and start to notice the lucky loads and better days
Drawing false connections
Even the processor affinity trick is far more shaky than people realize. There is a real thing going on there, but the solution of blindly blocking out logical cores 0 and 1 isn't necessarily going to solve anything.
This is funny, so SetData is actually safe to call from a background thread (even though it is still a blocking call) but GetData is not? That's mental.
Im not quite sure why my NPC is just standing there in the void doing nothing
Yup!
Anyone who’s spent a while reading nexus comment sections (especially of popular mods) understands this
The nexus comment section is absolutely not a source of truth
There’s some signal but also a lot of noise
And there's surely going to be a lot of users who want to believe that this works, and you can always sell hope.
Oh my god this is my fault i forgot to actually load the schedule
It happens!
There’s like 12 billion reasons NPCs just stand there
Most of them are “invisible blocking tiles on buildings”
But some of them are “oops no schedule”
😭 "why wont my npc go anywhere?"
{
"LogName": "NPC Schedule",
"Action": "Include",
"FromFile": "assets/data/schedule.json"
},
is MISSING
😭
success! ahaha....
(thank you abby for graciously donating her sprite for testing)
and immediately gave them a coconut (one of their hated gifts)
Anyone here know offhand if setting the harvest tool to be ”null” instead of null or omitting it would be the root cause of auto grabbers not working? I had this theory and implemented it with success but I haven’t dug into game code to see if this is why or if it’s a mod interaction
Probably
Maybe I’ll tell the mod author then
in case of doubt, remember : "null, c'est nul" (null is lame)
using "null" instead of null is likely to cause problems in many situations
It was really hard to spot 😆
The comments on the mod seem to indicate it works though so my theory is that maybe it works when spawning on the floor but doesn’t work in autograbbers
But maybe it just doesn’t work
Thanks for the heads-up! Normal giant crops are hardcoded to be 3x3, so it's possible vmv is doing something funky with c#. I'll look into it.
No longer the case in 1.6!
Giant crops be of any size now
Any major mods mess with the north farm exit path? I’m working on something and just curious 👀 if there will be any conflicts
No special c# here
Any others?
jorts & jean? (think these 2 arent not sve compat though)
Oh, huh, didn't know that
@vernal crest
There's still something weird going on, but it looks like an issue with the bee flower paths feature based on the log. Disabling that should fix it in the short term until I can figure out what's causing it
oh cool but yea i think they put thing in backwoods
Did they? I thought it was Mountain
I can use CP to overlay my addition so just need to check there positions and add dependencies to load last
urite i made it up 
it was kind of similar shape
Disabling the bee paths did not fix the issue, unfortunately! I am trying to recreate the problem now in a cut-down mod setup and - frustratingly - I can't lol
i think as long as you do your change as overlay and make it easy to patch into different spots as needed then u will be fine
Looking into the code now and it seems like you have a giant crop sharing a tile with another giant crop somehow
Coal Point Farm changes the left side of the backwoods map a fair bit
Yah just didn’t want to work hard and then have conflicts with major mods and scramble to patch lol
The code does account for varying-size giant crops already. Apparently I knew that and just forgot
I’ll take a look at that as well thanks
Could that be due to the fact that a medium and giant crop overlapped?
Are the medium crops also giant crops? If so, that would do it
Should we tap in lumi for this?
the medium crops are also giant crops yeah
Then yeah if they overlap that will be what's causing the error
Yes they are also giant crops. I popped a bug report into the VMV server so Lumi is aware of the error but not that the overlap is why.
why do they overlap?
is this something fixable in the data?
did they appear at different times, abi?
pretty sure lumi's giant crops are all data-driven
Yes, the big one appeared first and the medium one appeared on the day I got the problems.
The MediumPoppy giant crop is 2, 1 in size and the big one is 2, 3 in size.
so maybe the game "sees" tiles with giant crops as fully-grown poppies somehow??
that doesn't seem right though since in vanilla I don't think the normal 3x3 ones can overlap
Wow interesting the game doesn't check resourceclumps at all when placing giant crops
O.o
It only checks terrainfeatures
So this could have happened in vanilla 3x3 crops too?
I think normally you can't have crops iverlapping giant crops
Hold on let me check something
I might be using the wrong fields for width and height
They are one tile shorter for collision
Yeah that's almost certainly the issue
I think I'm using sprite size instead of bounding box and I didn't notice before because the names are ambiguous and on most resourceclumps they're the same
No wait though, occupiesTile uses width and height
Hmmmmm
How does vmv change Collison size?
Giant crop data can't do that
I might have contributed to the problem because when the giant crops were made it left spaces where I could plant poppies again so I did
giant crop sprite is always 1 tile higher than the bounding box specified in giant crop data
I dont see in the screenshot where they overlap so please draw boxes if you think there are collision overlaps
I can stop it from crashing by changing add to tryadd but it may still cause other less obvious problems
Also if I do that then it will only count the first giant crop it finds on a given tile. Not a big deal but worth noting
Overlap?
dont think so
layering issue, yes
but its clearly the non-collision part of the lower poppy
If don’t say those cursed words lol making buildings when 1.6 first dropped took me hours of tinkering to do fade behind and collision data correctly
hmm, what is strange is that the giant poppy on the left is over a poppy, which i don't see how it could happen
Yeah lol
That is probably because I planted a poppy there after the giant poppy formed - but I'm not completely sure because I wasn't really paying attention when I did that because I didn't know issues were looming
I just know I used noclip mode to wade into my poppy garden to plant more poppies after the giant ones formed
It shouldn't let you plant on a tile occupied by a giant crop though, so that shouldn't cause overlap
Yaaay I caused the error again!
VMV has no special code for giant crops, so i'm not sure if it's something on my end to change
I don't know if this area is causing the error because my ENTIRE farm is poppies
But it sure is overlapping a lot
Do you have a mod letting you plant while ignoring collision
There is nothing special in vmv code for big crops
i don't remember ever seeing overlap with giant crops (in general) including when i test them with high value to be sure they exist
Oh yeah that'll do it
Log Info: SMAPI 4.0.8 with SDV 1.6.8 build 24119 on Microsoft Windows 10 Home, with 27 C# mods and 3 content packs.
Suggested fixes: One or more mods are out of date, consider updating them
How the fuck did you even do that
Are you secretly a drug dealer
debug spreaddirt, debug spreadseeds 453, debug growcrops 7
Abi shows us one picture: huh, that’s weird
Abi shows us the whole farm: wtf happened here??
You too can have a giant farm of mutating poppies!
Maybe debug growcrops is weird?
Yeah
I only have VMV, Better Beehouses, their dependencies and mods I use for testing
I wouldn't be surprised if it is weird but my original error came from a normal farm with them grown the normal way
(Albeit with like 500 mods - but none that affect crop growth as far as I know)
Debug commands do tend to be a bit jank
Anyways, it might act a bit funny but it won't crash anymore
thanks 🙂
Thanks Wren!
Odd - I just did it again but without the beehouses and there are no overlapping ones
This reminds me of the nonsense I created when working on both:
- Giant Crop Tweaks
- The trigger action in Cloudy Skies that grows giant crops.
Also yes I should mention this- better beehouses scans all giant crops across the entire farm, not just ones near beehouses, because resourceclumps are stored in a list instead of a vector dictionary like everything else
No, adding beehouses back in didn't make it go funny again. I wonder if the difference is in staggered growth.
Looks like it is about staggered growth - if I already had some giant crops and planted more poppies around them, the new poppies formed into giant crops which overlapped the existing ones.
Maybe spreadseeds doesn't check for tile collisions
And it's planting underneath existing giant crops
Then how could it have happened in my original game? (To be clear here I am not actually asking Wren to answer this, just wondering how spreadseeds could be the cause of the overlap issue I originally reported when I did not use spreadseeds in that game.)
I didn't use spreadseeds there
I think spread seeds might only check for hoedirt? It has been a while since I looked
Well I should stop growing giant melons all over my farm now too and go do something else lol
Show a pic wana see if it’s as bad as the poppies
Sorry I already quit. I hadn't upped the giant crop chance for melons so I didn't have many
And Wren's already made the change she needs so I should move on haha
lol
Now it's time to learn to make furniture instead
(Just checked the code. spreadseeds does only care about hoedirt and not check for collisions.)
Yes, Stardew Valley and SMAPI are both single-threaded. There's no issues with async methods that don't touch shared state (e.g. SMAPI's update checks are async), but anything which changes state like content loading introduces race conditions and concurrency issues (e.g. game/SMAPI/mod code may randomly crash with 'collection was modified' exceptions).
(Not only does that mod use threading to load content, but it also attempts to load an asset with the type object rather than a proper type? I guess if the asset doesn't exist that might be okay but otherwise... oof.)
It's okay. Every asset it wants is already loaded, and will be kept loaded by the smapi asset propagation system
the reason it doesn't messily explode is likely because any assets it attempts to "preload" either is already loaded or doesnt exist (Data/ObjectInformation, oof)
Yeah, it'd have to be the case.
I kind of want to register a Data/ObjectInformation now just to break that mod
I would make a joke about....hmmm
Hi! I asked for help on this yesterday, but still don’t have it figured out. ive been working on a mod for a while, and my town map (labled MMItown) was working fine until now, as now the game cant seem to find it. It states its a key issue and im not sure how to fix that. sorry if this is a stupid question but id love some help to fit this. here is my log (Ignore all the character errors and mods i need to update): https://smapi.io/log/047035264519406f982a26ad5ba1b341 and here is my content JSON: https://smapi.io/json/none/bb91742cfdd147c2a62f7214b8605dd3 and here is my location data: https://smapi.io/json/none/cdab7c982e6c435db2c239df80a247b8 (please ping me)
Log Info: SMAPI 4.0.8 with SDV 1.6.8 build 24119 on macOS Unix 13.5.0, with 40 C# mods and 37 content packs.
Suggested fixes: One or more mods are out of date, consider updating them
Would make a joke about rewriting the pathfinder but I suspect with t minus three days it wouldn't be funny
Two quick questions you testing in 1.5 1.6 1.6.9 beta and second did you add to data/locations or custom locations with CP
your mod's Data/Location patch is not valid so the location never loaded
I’m on phone and the data isn’t pulling up for me
I do this in StardewUI - it's sort of OK because the asset loader is actually extension-based, not type-based (despite taking a generic type arg).
to be completely honest idk and im not sure what im doing, but it is a CP mod, i have the map in a maps folder? sorry if this is stupid lol. would you mind explaining what you mean? sorry
I thought I remembered some code in that pipeline that did care about the type 🤔
Well, it has been a while since I did content loading stuff.
It cares about the type in the sense that using the wrong type will invalid-cast.
If you use a totally wrong type you'll get an exception, but if you use object then it goes by the extension.
Choo said your data/locations was invalid so I’d start there like I said I’m on mobile and the sdv version is related to game files
I want to say these are less pathfinding issues and more "physics/collisions aren't actually real" issues.
Couldn't create the 'StarKOdoll_MMITown' location. Is its data in Data/Locations invalid?
ArgumentException: An item with the same key has already been added. Key: {X:2 Y:41}
at System.Collections.Generic.Dictionary`2.TryInsert(TKey key, TValue value, InsertionBehavior behavior)
at StardewValley.GameLocation.loadObjects() in D:\GitlabRunner\builds\Gq5qA5P4\1\ConcernedApe\stardewvalley\Farmer\Farmer\Locations\GameLocation.cs:line 18082
at StardewValley.Game1.CreateGameLocation(String id, CreateLocationData createData) in D:\GitlabRunner\builds\Gq5qA5P4\1\ConcernedApe\stardewvalley\Farmer\Farmer\Game1.cs:line 7804
alright uh how do i make the data/locations valid
I realized that when doing the AFS hacks... NPCs will happily clip into buildings, oceans, whatever if the pathfinding says they should, there is no logic in the regular event loops that checks "can this object actually be in this location".
this is the error that is happen i think, do u have some funny business on 2 41 of the tmx?
whats 2 41? sorry
like tile 2,41
I think my Tmx is fine? i can check if i know what im looking for
let me check
another thing to try is new save, see if error still occur
When I looked into it last night chu I thought maybe it was referring to the default entry position. When I got them to do a patch export of their data/locations the StarKOdoll_MMITown location did exist - but it didn't have that entry position listed so then I was lost lol
the DefaultArrivalTile is 2, 46 though
Yeah I thought perhaps they had had it as 2 41 earlier and then changed it
ok so im not sure, but it could be a problem with my trees (idk after i coded in the trees it all messed up so thats probably it but i really dont know)
Its entry in data/locations didn't look wrong to me but maybe I missed something
What has that list of numbers got to do with trees?
Are you doing this in text
this list of number is perfectly in theme with halloween
they spawn in trees on tiles and type of tree according to the after number
Huh there is a map property to add trees
I always just do it with the paths tilesheet and paths layer
maybe u had duplicate 2,41?
Seems easier to see where they will be than a giant list of numbers
yeah i have path mapping them out then i put in the location
Ctr+F 2 41 2 or 1 and search for duplicate combo
That might be the problem then - using the paths tilesheet on the paths layer already does add them
oh lumina since u r here, i tested the donate box thing yesterday and it seems like the main problem left is that you have to complete the donate special orders in certain order
no i used the question mark one which just maps out everything i think
Oh yeah the question mark doesn't do anything
But that is much more work than just using the tree tiles
But anyway, try searching for duplicates like Celestia said
in what sense? that it's the only problem left in a mod solving that, or currently it's the only existing issue?
ok there is more 2 41s but they aren't actually tile 2 41, their like two different tiles, for example 5 63 2 41 26 2
i probably messed up somewhere on the typing
ill just re type it or use the tree tiles like Aboogaianye said
A quick test is to just copy and paste all those numbers into notepad or something (as a backup) and then delete the map property and then test in game. If you don't get the error you can fix the trees. If you do still get the error, you won't have wasted a lot of time trying to fix them if they weren't the problem.
kk ill do that first
no mod involved just vanilla behavior
what i tried was
- give myself 2 special orders with donate, one is 80 hardwood and one is 80 moss, with same box position
- both orders had same box id
- attempt to complete them
result was - needed to complete 80 hardwood first, then 80 moss
- but i am able to do so as long as the special order is completely done
i think what can happen still is that
if you had a long term special order that took prio tha then it could block the short term special order
like if i couldnt complete the 80 hardwood in this scenario, then i also wouldnt be able to clear 80 moss
yup it worked it was the trees!
thank you guys sm!
Thanks Chu 
yeah ok, i don't think it was said otherwise, that was always the blocking part?
i have some idea for fixing it but i also think it will be messy 
(to add, the intended workaround is to tag all special orders that use drop boxes with !dropbox_DROPBOXID so they don't become available if the drop box they want is already in use)
mostly cus i been told that switch cases r pein to transpile
maybe its time to sin and do a skipping prefix on GameLocation.performAction
wait maybe i can just register "DropBox" action over the vanilla one 
feel free to ping me about it, I have FF code to do this week-end so I'll need distractions to keep my sanity.
since you're here I'm conscripting you into also fixing the "multiple mods edit the map to add their own drop box but they use different IDs so the last one wins" issue
have fun
Thanks! I've just cracked open the example pack and started reading the docs just now
Nope
no problem, I knew it wasn't for me
You needed a distraction Leroy, here it is!

did the message move right when you clicked? i hate that
yea it did 
Well, I'm just procrastinating "sleeping" right now, I have no intent to work on FF before tomorrow anyway
The temptation to just make image variants instead of rect variants is strong
the idea I had when I saw the discussion about the dropbox would be to somehow keep a list of quests using the same dropbox (or even tile?) and somehow make one dropbox accepting any of the requests. But that seems like a pretty big overhaul. Maybe the work of a Framework
Is there going to be the same performance problem with FF in having lots of individual files as there would with a CP furniture mod?
hm i dont think registering a game tile action would be able to fix multiple ids
like, a lot of "included files" or a lot of images? It should be fine either way, but a few spritesheets is always softer on the game than a bunch of images from what I know
cus it'd be like DropBox id1 then overwritten with DropBox id2
almost certainly, but just like with CP i wouldn't worry about it until you have, like, dozens of individual sprites
Images. Looks like one of the mods I want to convert has more than 400 individual image files >_<
oh my god, you're in for a loop...
I well and truly am considering more than dozens here lol
maybe it would be smart to get a python script to merge them into spritesheets
however i could slap a data fixer in
Tea is working on that part, yes lol
to coerce overlapping dropboxes into having same id
My best idea to fix this involves modifying the special order data to make every order that references the same location use the one drop box id that's available on the map
ah yeah
wouldnt fix ongoing orders though
I just wanted to know which way I should focus on learning right now. Sounds like rect is the way to go.
why is there so much snake case around this code...
nothing against snek just feels weird
nah, ||fuck python||
in mine?
snake_case my beloved
My habit of python runs so deep, it feels wrong to write methods and members with any capital letters, only class names get capitals
I just find snake case so soothing to read
i thought forwards showed the speaker. shoulda been a reply, oh well
is podunk also mod author promotion or someone hired
also, I find camel case hard to read on longer, more explicit names
he worked for CA on a previous update, but i forget which one. 1.4 or 1.5, i think
like, r/ProgrammerHumor is hell to me
wow
i dont have anything against any naming scheme in particular, but my brain gets a delay when they r inconsistent
(I half expected the bot to jump scare me with r slash inconsistent)
Tile that shiet.
I am hoping that Tea will be successful in automating that process
Otherwise I will be putting up with AT instead lol
This is just for a personal project so I can avoid using AT in my game
u can do it with imagemagick probably
Oh yeah I forgot things like that exist haha
Gimp definitely has one. https://github.com/BdR76/GimpSpriteAtlas
I'm bookmarking that
Sweet thanks
densely-packed sprite atlases from games which care enough to use them are fun to behold
This is ancient, I don't know if it still works: https://forums.getpaint.net/topic/31670-png-sprite-sheet-matrix-march-31-2015/
PNG Sprite Matrix V1.0.1 A simple File type that will take all images in the PDNs Layers and arrange them into a Matrix as close to equal height and width as possible. V1.01+ allows you to manually set number of columns Hidden Layers are ignored. Tip: use Menu : Layers - > Import From File... ...
1.5, 1.6 before pathos take the relay, i don't remember for 1.4
(even stardew has a few; go check out the sprite font files)
(then of course others joined pathos, casey and myuu)
(The advantage of that one is that it uses uniform tiles, which is a deficiency if you want it to be densely packed, but a benefit for Stardew because they have to be uniform unless you do Cursors madness.)
(chanting) cursors madness, cursors madness
Uniform will make it so much easier to figure out indexes too
maybe i should take a vacation in cursors and make a UI mod
FF doesn't work with indexes, so you're good to go with placing stuff how you want
In Cursorsland, "index" has no meaning anyway, only coordinates.
Index is wherever you, personally, choose to place that in your list, assuming you even have a list.
How will I figure out the numbers I need for Source Rect Offsets?
All the image editors (paint.net, aseprite, gimp, etc.) will tell you the coordinate your mouse cursor and/or selection rect is on.
So the easiest way is just to draw a selection around it and then note the coordinates.
Alternatively, you can use Math (tm).
Yeah but that's a lot for 400 things instead of using maths
i wish there was a vscode plugin that let me select rects and find coords on png files
Sure, if it's a uniform tilesheet then just divide the row/column by the tile size, if you know the row/column.
no idea what such a thing would be called
source Rect Offsets is a position in the sprite-sheet, so a point (X and Y)
Hence the desire for a uniform tilesheet even if I used the wrong word "index" when I apparently should've used something else lol
Stardew sprite sheets are super simple, they don't even have padding or offsets.
No, you used it right, I was just pointing out that if you did non-uniform (like Cursors) then Index wouldn't even make sense.
Ah yes I follow now
This is not a good time of day for me to be starting this project lol
Okay so if I use a uniform spritesheet then I can still use maths to figure them out rather than manually checking for each image
yep
I would even ask python to spit me out the json so that I just have to copy-paste it
by the way, the more I think about the format change I'm currently working on, the more I think of including a python script to migrate some stuff.
Podunk, mostly
I did not get very far into python before having to give up my masters
Tragically, Krita appears to be an exception to this and you have to do a workaround to get the selection size of the area before your desired point
I did not get very far into python before having to give up my dignity.
It does still work! Exceptionally easy to use, too.
Not familiar with Krita, but good to know.
that's what I started coding with, so I wouldn't call it evil, more like kinda stupid
I don't think there are any major changes to NPC pathfinding in 1.6.9, so that's probably a pre-existing issue. Unfortunately it's too late to look into non-critical issues at this point, since tonight's beta patch will be the final release candidate for 1.6.9.
It just has so many incongruous conventions, and it has these weird gaps where basic features are missing
Is there no way to hide the farmer's shadow in an event?
I found this extension : Tyriar.luna-paint (paste in the extension search bar), it looks actually pretty good
except it hasn't been updated since 2022, but what can we ask for
i'm not sure there's even a way to hide it period
patching Farmer.Draw it is
oh neat, it is more than what i need but i'll try
hi! not sure if this is the right place to ask but whats the difference btw fashion sense and content patcher in how they appear/function in game?
fashion sense is a special framework for adding clothing only
the clothes added need to be used via the hand mirror item
content patcher is the general way of adding more things, including hat/shirt/pants/boots, they appear as actual items
ooh okay i see.. is it possible then to have both fs and cp clothing mods? i have this one mod with clothes i love but its cp only i think
Yup you can have both
incredible thank you guys sm!!
for future ref if you aren't making a mod, the correct channel is #modded-stardew
Or editing someone else's mod! Including for personal use!
thank you! its been awhile since ive been on here and everythings moved around so i didnt even see that channel, will move to there for general non-creator mod q's!!
sigh... I'm going to wake up to this tomorrow, I already hate myself...
This is supposed to be something you do for fun...
Or, I don't know, to stay sharp or something. Definitely not to dread waking up in the morning.
If it feels bad to work on a thing take break n do something else
I mod for fun but dread docs
Yeah, docs I totally get.
Hence why I don't work on the new better docs more often
Docs are the tradeoff for the fun parts. If the fun parts aren't fun, though, then something's wrong.
what mods are yall making that needs docs? /gen
Mods for other people to make mods on
Framework mods always need docs.
ahh
AFS and Radial menu were also arguably complex enough to need some docs (not nearly as much as StardewUI, obviously).
ahh
But those would be note to self kind of doc right
A tier below docs for other people 
With AFS, it seemed important to clearly document all the configuration settings.
And for Radial Menu, the Custom Menu is kind of clunky to set up, especially for regular users who don't understand how rectangles work.
I'd say most mods require at least a bit of docs, even if it's just a short readme and some feature/config explanations. You can maybe get away without them if all you are doing is adding content (new NPCs, new maps, etc. - just adding extra content using existing game mechanics, without any novel mechanics or new config/UI)
Like others mentioned, mostly frameworks. SpaceCore has A Lot ™️.
But also the Sword & Sorcery alpha (and more in the dev builds) has a lot of stuff, which is why I created the in-game guidebook system, and that has ended up being pretty extensive, even if the guidebook is only half way done. I'll likely do another guidebook for MMR too, since it has a lot planned.
If you're doing new NPCs docs can still be useful - often people want to know how to trigger events, so an event guide is useful
ahh
oh, btw, no one answered if one can buy animals from places other than Marnies? like is that smth CP can do, or is it C#?
I am going to need extensive docs for Hiria lol
CP can't do that at the moment I think - though there might be a framework that allows it?
ahh
I was thinking Extra Animal Config might but I don't see it in the config
I think STF still has custom animal shops?
No, chue was working on it (spiritually)
for now Marnie still has a monopoly on animal selling
Marnie just knows how to capitalize on the rules of the simulation /j
I'm going to work on it physically once I get my 1.6.9 updoots done
I read that as psychicly
I wish i could work on mods psychicly
Oh no. I'm gonna have to make a doc for my Zelda NPC overhaul mod because of all the changes, aren't I?
Well you probably want to have cheat sheet of who's replacing who
That, I at least have
finally living the hot reload lifestyle we all dream about (endlessly fiddling with the hecking numbers on my danged particle effects and seeing the change immediately)
Hot reload, my beloved
oh?
Hot reload is to C# mods what patch reload is to CP mods
i was told it didn't work on linux. then i tried again and got it working, after working around a couple quirks (maybe bugs)
A true hero of the people
What are the best content patcher conditions to use so that my sound file is only loaded when it's needed for a single event?
I am a dummy and often restart game just to reload content patcher mod 
(My hot reload is even better though, nyah nyah)
Guess Who Forgot Bananas
I am a dummy there too and keep building over the edited sml
Haha, I'm sure I'll figure out a way to implement some QOL for that problem... somehow... eventually.
I think you could condition it to not load if player had seen event
Something i do for cp testing mods is to symlink the folder to mod dir, rather than copy, I will see if I can set that up for asset dirs in a C# mod too
do the build and then symlink after, should work
Yeah I just forgor sometimes, so it'd be nice if it's a thing I can stick in csproj
if it's really important to only load it when necessary, try making it an ogg file and setting StreamedVorbis to true. AudioChanges is a weird asset for reasons i don't fully remember so i expect weirdness if you try to be clever with it
Just use streamedvorbis
And ogg
But I would have to setup regular hot reload to make the most of it
I was about to mention that also, with the addition of "pls dont because what if the person (me) building your mod uses a different OS"
Atm I still gotta build if I change the ui context anyway
There are workarounds, which is why I haven't really put a priority on it. But at some point I could probably implement a "write-back" system.
Because of descriptor cache?
If that's something people are doing really often, I can add a trigger or command to clear the descriptor cache. Didn't think it would come up much.
Well I don't always think of everything to expose to ui at the start
But hm is prop/field changes even a hot reloadable thing
But yeah I will try ichor's steps 
Depends on the change. You can add a property. Can't change its type, name, etc.
.NET hot reload is great until it isn't. Can't change a generic type, can't rename a property, can't change an access modifier, can't add a parameter, can't do this, can't do that...
It surely is, in the same sense that a tiny space heater is better than no heat at all when you're freezing to death.
i still have to actually document what i did
let me know if you need anything
maybe i'll make a github gist. that's a thing kids like to do, right
no idea. but i already have a github account and i don't have one for gg, so friction is on github's side
But u will get Pinterest eventually
Gist is fine we can just link it in all the relevant places
Not sure if this is a solution since you go through the asset pipeline, but maybe you could do something like I do for my debug builds of MMR?
https://github.com/spacechase0/StardewValleyMods/blob/develop/SpaceCore.Content.Engine/ContentEngine.cs#L133
Abusing [CallerFilePath]
Put your guide on AO3, maximum reach trust
For reference, I use that method like this:
Content = new PatchContentEngine(ModManifest, Helper, "assets/content.spacecore");
Content.AddSimplifyFunction(new MeowifyFunction());
#if DEBUG
Content.OnReloadMonitorInstead("assets");
#endif
Content.Reload();
Yes, most likely. I just:
(a) want to avoid any surprising behavior that users didn't necessarily ask for
(b) try to prioritize the features that are going to give the most bang for the buck, and this didn't seem that high on the list.
ok, so the mod is done. . . now what?
MeowifyFunction, yeah that sounds like a casey debug function
Since ModBuildConfig will deploy those files to the mod directory, force-aliasing them back to the project directory doesn't feel awesome.
It is not remotely a a debug function, it's an actual feature
(which is not a criticism of your method or anything, I'm just being careful and thinking about long term cohesion of this framework)
close enough, sounds like a Casey feature
The actual function in SC content is called via "MeowifyIfNeeded", and it converts the given string to meows (and purrs occasionally) if you haven't seen the wizard cutscene where you get the forest potion
Is this why Desty's log was meowing that one time
That's fair I guess. I like it because I won't ever be manually updating the files in the deployed folder anyways, I want to make all actual edits in the VS project folder like normal hot reloading
Meowing...?
Meow
I can't remember but I doubt it, it's part of MMR not S&S and isn't for logging
(Have not backread at all.)
Yep - you implemented the feature for you, and for possible contributors, which makes perfect sense. I'm doing this for random users of the framework doing it for their mods, so the tradeoffs are a little different.
fair enough
how do I publish a mod?
What I think might be better in this case is having a DebugPath for the assets (i.e. behind a [Conditional(DEBUG)]), since it's all convention-based registration anyway.
I was just going to add post build to link the assets directory when building debug
you mean like, posting it on nexus?
yes
is it a c# or json mod?
It doesn't seem like thing that need to go into actual framework
json
Well, that's another reason I'm not rushing into a solution, because there aren't enough users yet to triangulate the common use cases.
You zip it up, and find where it says on nexus to upload a new mod or whatever (?)
mk, thanks
The nexus menuing takes you through all the steps
okay, that's easy then.
- put the folder for your mod inside a .zip.
- go to nexus and click upload > upload a mod
- select stardew valley from the games list
- Go through the form and fill it in
- when everything is ready to go, press publish
nexus makes it pretty easy for the most part, there's just a few things that are in weird spots
thanks
It can sometimes take a bit for the mod to be "up"
yeah, it can take anywhere between 10 minutes and an hour. if it takes longer than that, I would contact support
mk :3
OH and I should mention- once you've filled in the initial stuff for the mod, before you publish it, check out the mod id in the url and use it to add an update key to your manifest before publishing, so people can actually get update notifications
I mention that because it is something I frequently forgot/messed up when I first started modding
ahh thanks!
I was wondering how I was gonna do that part
ah, wait, I just realised I never made a recipe for the gold plater itself
hmmm I wonder how hard it would be to make a content pack linter
You'd "just" need to make a language server I think
Though I'm not sure how you could tell VSC to do it for content packs and not a particular extension (ie. all json files, even non content pack ones)
Could do a schema
I made one for the spacecore stuff recently
If you really loved regex
ah I just meant a CLI tool to go through and check for stuff like potential misuse of Entries, unknown items/locations/etc
could you merge a schema exported by newtonsoft.json into a bigger schema 
Our dear local teapot has been working on this for a while
VSC Extension: https://github.com/spacechase0/StardewValleyMods/tree/develop/spacecore-content-tools
Language server: https://github.com/spacechase0/StardewValleyMods/tree/develop/SpaceCore.Content.LanguageServer
(The first requires the second built, which requires the engine and parser in that repo built as well)
dunno if there is smart way to do that
Writing the VSC extension and language server was fun
(By that I mean OnionNinja)






