#making-mods-general

1 messages · Page 87 of 1

round dock
#

chu, pls let me conduct the memorial aSDVnukeboxdontfeelsogood

#

(also no) eyeshake

lucid iron
#

i think ppl shouldnt let memes be dreams

clever sinew
#

(I'm sorry to interrupt but if my sprites are individual files is the spriteindex then 0)

uncut viper
#

yes

lucid iron
#

yea

clever sinew
#

(okay thank you)

velvet narwhal
#

hmm, who gets the jinx soda

uncut viper
#

(also dont worry about interrupting, muiltiple convos happen in here all the time)

clever sinew
#

(😭 )

lucid iron
#

i wish there was C# verison of partial

brittle pasture
#

partial the keyword? isnt that already a thing

brave fable
#

you mean like partial?

lucid iron
#

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

brave fable
#

oh as in currying. u cant just say curry and expect people to think programming

rancid temple
#

Definitely thought of food lmao

teal bridge
#

(x, y) => x => f(x, y) isn't simple enough?

lucid iron
#

well i was gonna say this is mod author chat but

#

many ppl added curry (food) to game im sure

lucid iron
#

partial does not inherit the closure

velvet narwhal
#

i literally went, "what does a bowl of yogurt curry with a side of spicy curry have to do with code?"

lucid iron
#

for my usecase local method is fine

#

huh its named after a person

calm nebula
#

Yeah!

uncut viper
#

oh, not Tim

#

damn

brittle pasture
#

damn this is like when I realized "gun" was named after a person

uncut viper
#

also another Tim. kinda

brittle pasture
#

yes, gun, as in the term used for firearms. From Gunnildr

calm nebula
#

Did you know that Michelin star chefs is actually frlm the tire company

brittle pasture
#

hah, that I do know, but because I saw the totally factual documentary on the Michelin man rampage

velvet narwhal
#

oh actually y'know that make sense, tires, travel, foodjoints, high rated stars

rancid temple
#

Sorry, forgot to unping

tiny zealot
rancid temple
#

I hate the lowercase i reaction

latent mauve
#

I saw the reactions and immediately thought "what does the Tiled app have to do with this?"

uncut viper
#

maps, innit

velvet narwhal
#

always has been

#

i swear to god if that isn't in MMR i'm gonna cry

rancid temple
#

A reminder for what program you need if you want to add a Michelin restaurant to the game

clever sinew
#

((time to see if my squinting and 28 tabs of documentation did anything))

rancid temple
#

28 tabs may be too few for proper results

sweet sphinx
#

my pc cannot handle 28 tabs

teal bridge
#

Wait, wiki says they're actually owned by Michelin now, so wtf. Replace it with Goodyear then.

lucid iron
#

what is best way to detect chest content change

#

atm i used Chest.Items.OnSlotChanged

brave fable
#

pretty sure that's it hahah

brittle pasture
#

that is indeed what I was about to post

#

alternatively listen on the inventory netfield

teal bridge
#

Could also use a netfield subscription, but that's kind of a last resort.

brittle pasture
#

but ehh

lucid iron
#

do i have to clean it up

#

remove my handler

teal bridge
#

You always have to unsubscribe event handlers.

lucid iron
#

weh

teal bridge
#

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)

lucid iron
#

yea i feel if i dont kill it

#

people will randomly get light when someone put a thing in a mill

teal bridge
#

That, or random crashes and memory leaks.

lucid iron
#

oh is it not a thing garbage collector can deal with

teal bridge
#

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.

lucid iron
#

wait how come we dont have to unsubscribe from smapi events then

teal bridge
#

You would if SMAPI were instanced, but that's all singleton stuff - it's game lifetime.

lucid iron
#

oh so it's more like

#

if the outer object exploded but the event is still there?

teal bridge
#

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.

tiny zealot
#

SMAPI isn't going to be cleaned up, so you won't leak your handlers

teal bridge
#

If the thing that publishes the events is removed, then it can't keep your event handler objects alive.

lucid iron
#

ok i didnt do anything illegal so far blobcatgooglyblep

teal bridge
#

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

brave fable
#

we're all here having a nice time and u bring up orphans with very short lifetimes SDVpufferpensive

lucid iron
#

hm so back to the actual thing i was doing

brave fable
#

being destroyed..

lucid iron
#

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)

teal bridge
lucid iron
#

however i actually did a local method bc i needed some values not available from event alone

teal bridge
#

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.

lucid iron
#

but i think i can change the local method to a static one if i just switch around some value derive, maybe

brittle pasture
#

there is Helper.Events.World.ChestInventoryChanged if you don't want to deal with registering/unregistering handlers

lucid iron
#

i need the building of the chest though

#

this is a mill chest not a regular one

teal bridge
#

Huh. I didn't know that existed. Such a random event to have.

brittle pasture
#

🤔 you can get the tile the chest is on and get the building occupying that tile

teal bridge
#

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.

brittle pasture
#

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

lucid iron
#

what if i just harmony patch update tbh

teal bridge
#

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.

brave fable
#

somebody please. attach an event handler to me

brittle pasture
#

yeah I'm assuming we're registering in ModEntry and we're not keeping any references longer than necessary

brave fable
#

i could be eternal

teal bridge
#

Sorry, don't know you well enough for that.

lucid iron
#

hm what even are event handlers LilyDerp

#

i think i been mostly putting static methods on the right side of += or -=

#

but they r become something else?

teal bridge
#

Events are multicast delegates; event handlers are the individual delegates.

clever sinew
#

((SHE'S ALIIIVEEE))

#

((also yes i was using old PPJA sprites to practice))

#

((anyway ty for the help))

lucid iron
#

do static classes live forever yggy

#

they r like singletons right

teal bridge
#

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.

lucid iron
#

so the methods on there r not live or die then think

#

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

teal bridge
#

Yeah, you're probably fine there.

brittle pasture
#

presumably death

teal bridge
#

AFAIK, locations are unloaded when you return to title, so their event handlers will get deleted implicitly.

lucid iron
#

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

teal bridge
#

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.

lucid iron
#

i had some weird problem with instanced locations i think?

teal bridge
#

Maybe SMAPI doesn't report some locations in that event? I dunno.

lucid iron
#

or i just did it wrong i dunno LilyDerp

brittle pasture
#

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

teal bridge
#

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.

lucid iron
#

you could theoretically hoe in the farmhouse

teal bridge
#

Well, when you use Warped event, there is no explicit warp for your spawn point.

lucid iron
#

some mod that add greenhosue basically

teal bridge
#

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

lucid iron
#

pein but at least simple to fix

#

hm looks like loading the game doesn't raise any Events.World.LocationListChanged

brittle pasture
#

no it doesnt

#

(source: "why is my mod not work raaah oh that's why")

lucid iron
#

aw Events.World.ChestInventoryChanged doesnt work for building chest very sad

brittle pasture
#

(wait it doesn't?)
(fak)

lucid iron
#

this is the mill input/output chest

#

not like a craftable chest in a building

#

so it's speshul probably

brittle pasture
#

welp, to the OnSlotChanged mines you go

hot mesa
#

greetings™️

#

it is no mistake that i am here. i know, this is very shocking

fickle totem
#

Jade the mod maker question mark

hot mesa
#

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

velvet narwhal
#

the sideways and then the object fish like aquariumfish? SDVpufferthinkblob
how are the roe / fishpond changes going to work in 1.6.9 SDVpuffersquint

hot mesa
#

yah those were the 2 sprites i was thinking of

#

ok cool i'll just do those

velvet narwhal
#

reconfirming from springobjects looks like just the two yep

lucid iron
#

u can have more if u wanna animate the feesh

hot mesa
#

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

lucid iron
#

hm idk if they did aquarium sprites actually, but as u can see the swim sprite is optional

velvet narwhal
#

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 SDVpufferpensive

deep light
#

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

velvet narwhal
#

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

ocean sailBOT
velvet narwhal
#

!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

ocean sailBOT
#

Follow this guide to unpack the game's content files in order to see and explore how the game data is structured.
It's helpful when making your own mods, or just to learn about how the game works!

deep light
#

thank u sm this is rly helpful SDViconpumpkin

woeful lintel
#

!vscjsonc if you want to use VSCode

ocean sailBOT
#
How to make VSCode not scream at json comments

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.

lucid iron
#

if i am use ConditionalWeakTable do i still have to manually dispose it's contents

spice anchor
#

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.

velvet narwhal
#

uhhhhh that sounds very involved

lucid iron
#

that's very specific yea u should make it

spice anchor
#

0u0

#

What coding language does Stardew use for mods again?

That's the one I'm going to have to brush up on.

velvet narwhal
#

aren't junimos just critters? they don't actually 'exist'? i don't remember how they work

#

c#

spice anchor
#

Ok, got it

lucid iron
#

well u could draw name tags over them?

#

i assume u dont expect ppl to actual do inputs

velvet narwhal
#

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 SMCKekLmaoDog

brave fable
#

what do you mean junimos don't exist SDVpufferchickhands

velvet narwhal
#

if they're like crows, they don't exist

spice anchor
#

Yeah, I was thinking there'd be an optional default nametag that could also be swapped with a custom image installed by the user

velvet narwhal
#

nothing exists, blueb, it's not your fault

lucid iron
#

it sounds cute wew

spice anchor
#

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

velvet narwhal
#

SDVpufferthinkblob would you have to hook a false farmhand for the internet connection?

spice anchor
velvet narwhal
#

i am blind to multiplayer, i am but a shrimple NPC creator for now

spice anchor
#

Maybe it'd be a custom "druid" farmhand that just wanders around doing nothing, but is there to direct the Juniviewers?

velvet narwhal
#

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

spice anchor
#

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>

lucid iron
#

well as long as u can do the twitch bot <-> sdv interface

#

the rest doesn't sound too bad

spice anchor
#

Yeye, it'd be some pretty simple automated behavior

lucid iron
#

u dont have to make real npcs or anything just draw them and implement damage monster separately

spice anchor
#

It could go pretty wild if the streamer has a large audience, though.

vernal crest
#

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.

ocean sailBOT
#

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

lucid iron
#

i assume streamers have good computers

#

but prob good idea to cap the number of junimos to like 100

vernal crest
#

(Yes I know I have an incredibly messy game lol)

spice anchor
#

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.

spice anchor
#

GRACIAS

velvet narwhal
#

it sure did explode, huh

spice anchor
vernal crest
#

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

velvet narwhal
#

okay, brave really hates your raw trace log SMCKekLmaoDog

spice anchor
#

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

velvet narwhal
#

my internet browser

vernal crest
#

Ah

velvet narwhal
#

it is struggling

vernal crest
#

Yeah sorry I should've trimmed some of the errors out

velvet narwhal
#

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)```
vernal crest
#

I thought that was the problem but it's supposed to be compatible with it

spice anchor
#

I'm gonna see if someone else already made a Twitch Integration framework yet.

velvet narwhal
#

what's at 32/50?

vernal crest
#

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

velvet narwhal
#

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

vernal crest
#

One of the bee houses

#

The errors start when I try to harvest some honey

velvet narwhal
#

delete harvest sync's config?

vernal crest
#

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

velvet narwhal
#

you make up your sins by working in the tech support channel SMCKekLmaoDog

vernal crest
#

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

haughty charm
vernal crest
#

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

ocean sailBOT
#

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

spice anchor
#

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?

woeful lintel
#

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

deep cypress
#

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

Nexus Mods :: Stardew Valley

Eliminate lag in heavily modded Stardew Valley - Struggling with slow load times or performance dips? This mod improves gameplay by optimizing asset preloading and memory management, ensuring smoother

cyan marsh
#

looks hoky to me.. but I never delved into it to make sure

#

but i'm paranoid

deep cypress
#

I am also a little paranoid. Hence, why I thought to ask.

cyan marsh
#

we can always decompile it and see what it does

#

but the user has been on Nexus since 2016

deep cypress
#

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

uncut viper
#

i believe the consensus when it came up in #modded-stardew yesterday was that it was basically bogus

deep cypress
#

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

uncut viper
#

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

deep cypress
#

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?

hard fern
uncut viper
#

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

cyan marsh
#

I will probably look into it when i get back from work today...

deep cypress
#

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.

cyan marsh
#

image is AI driven

#

the sheen kinda gives it away

deep cypress
#

So Clear Glasses is the New Sprite Master. Thanks to whoever mentioned it earlier!

warped spade
#

Afaik Clear Glasses doesn't bring performance improvement like Sprite Master did SDVpufferpensive

vernal crest
#

Yeah that's correct it's just for the blurry look

hard fern
#

Clear glasses just made me lag 😔

brave fable
#

spritemaster's performance improvements are largely incorporated into the base game

hallow prism
hard fern
#

can't wait to test my very barebones npc 💀

#

im expecting like 5 things to break

brave fable
#

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

rancid temple
#

Trade-in?

brave fable
#

give item, get item

rancid temple
#

From what I've read "still haven't tested it" you pay 10k, you get whatever item you've "lost"

brave fable
#

like from a cave death?

rancid temple
#

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

brave fable
#

oh, the collectibles

#

that's alright then

rancid temple
#

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

vernal crest
#

It's too hidden for me, I can't find it

#

I need to get and then lose the soda machine maybe

rancid temple
#

It's on the fallen pillar behind the statue

#

When you get it to show up that is

vernal crest
#

Yup it appeared once I lost the soda machine

brave fable
#

do you have any pictures SDVpufferlurk

#

worried i have to distance my own stupid crows now

#

oh wow that's really simple hahah

#

sure is a crow shop

vernal crest
#

Yup just a crow bobbing next to a little...pottery bottle?

brave fable
#

it's a little carry-bag. with an entire vending machine inside

#

he carried it SDVdemetriums

rancid temple
#

Bag of Holding

vernal crest
#

Drat, the island trader upgrade flag didn't give me the island trader

woeful lintel
brave fable
#

give me smooth, give me silky 😌

hard fern
#

i should just glue the json validator to my head...

vernal crest
#

What do you use it for? /curious
I only use it for sharing my json with other people

brave fable
#

it do validyate jsons

hard fern
#

i keep forgetting commas and {

#

😭

brave fable
#

what text editor do you use?

vernal crest
#

Is there a reason you're not using an editor that checks those for you?

hard fern
#

notepad ++

vernal crest
hard fern
#

It should but idk

#

I can't get it to work

vernal crest
#

I'll download it and have a look

brave fable
#

alternatively, try vscode, which is pretty feature-rich

hard fern
#

SDVpufferflat vscode works but kinda inconvenient

brave fable
#

it's convenient if it works hahah, your alternative is pasting your whole file into a web validator over and over

vernal crest
#

What is inconvenient about VSC?

hard fern
#

:/ i dont like having to boot it up all the time

vernal crest
#

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.

hard fern
#

well i broke something anyways

#

🥲

#

and i fumbled the maps (badly)

brave fable
#

you could always just boot vscode up once instead of all the time. it has tabs!

#

most helpful advice i've ever given

vernal crest
#

Yeah I just keep VSC open at all times lol

#

Plus it only takes a few seconds more than N++ to open

hard fern
#

how do i fix tilesheet climbing issue again?

vernal crest
#

Open the .tmx in a text editor, remove the folderpath/ bits before the tilesheet name under "source="

brave fable
#

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

hard fern
#

err

#

so i just..

vernal crest
#

Remove everything except "townInterior.png" and "paths.png"

hard fern
#

o

#

aha

#

it works

#

ty

vernal crest
#

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

hard fern
#

delightful

vernal crest
#

Is that VSC?

hard fern
#

well these are all of the //

#

so smapi doesnt care about those

vernal crest
#

That just means you need to make your text editor recognise you're using jsonc

brave fable
#

technically comments are illegal, but you can break the law if you know it

vernal crest
#

Lol forwarding the command message instead of using the command

brave fable
#

i wasn't going to risk typing vscodejsonc or vscjsc instead of just searching for jsonc

vernal crest
#

Oh my the default text size of anything is always so tiny

#

It is a clunky command

hard fern
#

aha, illegal methods used.

#

now its not screaming

vernal crest
#

I always have to go into governors mansion to find commands

#

That is such a miniscule screenshot lol

hard fern
#

😭

woeful lintel
hard fern
#

miraculously i only fumbled the content.json

vernal crest
woeful lintel
#

lmao

hard fern
#

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

brave fable
#

you probably want to keep it, it's not hurting anyone

woeful lintel
#

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

brave fable
#

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

vernal crest
#

I have my VSC open as a workspace so I have a bunch of different folders open inside it

woeful lintel
vernal crest
#

Can I get Sublime to have my keys and values in different colours?

brave fable
#

colours are given based on assumed type:

#

which is to say no

vernal crest
#

Sad, so it cannot replace VSC. It may replace N++ for me though

brave fable
#

that's a very specific make-or-break

vernal crest
#

Wa ha!

#

With a lot of options around I might as well be picky lol

silver pelican
ocean sailBOT
#

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

vernal crest
#

Is this a new save made just to check this situation? And does Oji have a schedule?

silver pelican
# vernal crest Is this a new save made just to check this situation? And does Oji have a schedu...

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

vernal crest
silver pelican
#

I havent

#

Nor for any of the NPCs :'>

rancid temple
#

What about warps?

silver pelican
silver pelican
woeful lintel
#

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

rancid temple
#

Are PC and mobile saves compatible? I thought 1.5 was pretty different architecture

woeful lintel
#

don't know, but someone was saying that it was possible to manually move saves between devices

hard fern
#

rughhrh i spent 5 minutes looking for a " i was missing

vernal crest
woeful lintel
#

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

rancid temple
#

Yeah, I wouldn't even know how to find the place where saves are stored on mobile lol

ocean sailBOT
rancid temple
#

That was the question I believe lol

iron ridge
#

no but I think there is an app

#

no idea what exactly it does or where the saves go but

rancid temple
#

Says between Android devices

silver pelican
#

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

iron ridge
#

oh

rancid temple
#

Also wow, this thing has a really low rating lmao

vernal crest
silver pelican
silver pelican
vernal crest
silver pelican
fickle garden
#

does anyone know if letters that dont stay in your mail inventory still count as flagged for hasflag tokens? Like passedout mail for ex

teal bridge
# hard fern it came up 3 times too! each time someone said it really didnt do anything and t...

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.

hard fern
#

🤔 interesting...

teal bridge
#

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

woeful lintel
#

is it necessary to report the mod on Nexus?

teal bridge
#

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.

tiny zealot
teal bridge
#

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" };
tiny zealot
#

putting on my generous hat, unloading assets is probably trying to reduce memory footprint, but calling that "optimizetransition" is bold

hard fern
#

SDVpuffersweats i think my poor npcgot stuck somewhere

teal bridge
#

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.

tiny zealot
#

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

teal bridge
#

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.

silver pelican
hard fern
#

oh i just warped myself to them

#

bc i figured they got stuck in the backrooms

tiny zealot
teal bridge
#

It does appear to be really good at showing lots of HUD messages about how very optimized everything is.

calm nebula
#

Every map is loaded at save load

teal bridge
#

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.

calm nebula
#

no, the task run is only safe because it does nothing

teal bridge
#

Oh, haha, that would explain it then.

calm nebula
#

it does nothing because what it tries to load is already loaded

woeful lintel
calm nebula
#

because the game expects all maps and all tilesheets to always be loaded

teal bridge
#

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?

tiny zealot
#

i thought it was trying to load the maps before opening a save

calm nebula
#

augh, firefox wants a restart, the code you want to look at is smapi's propogateOther or propgate maps, can't recall

tiny zealot
#

(i haven't looked at it myself, i ain't downloadin that)

teal bridge
#

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.

calm nebula
#

some assets are special

#

smapi will immediatley load them again if you invalidate

teal bridge
#

There's not much question that, overall, it's making everything much worse. I'm just curious about the Task.

tiny zealot
#

lmao incredible

calm nebula
#

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

next quarry
#

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
        }
    },
]
}
teal bridge
#

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.

tiny zealot
#

i know back in 1.5 i used a thread to load music files at game launch, but that's something else i think

calm nebula
#

I could actually design and build a ModContent.LoadAsync (includ for textures)

teal bridge
#

You can load a file asynchronously but not an asset.

calm nebula
#

it's GameContent.LoadAsync which is dicey at best

teal bridge
#

Yeah, game assets are a regular dictionary.

vernal crest
next quarry
teal bridge
#

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.

tiny zealot
#

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

calm nebula
vernal crest
teal bridge
calm nebula
#

discovered that one the hard way

teal bridge
#

Is that right... thanks MonoGame.

next quarry
calm nebula
#

"what do you mean I can't getdata off a rendertexture)

acoustic summit
calm nebula
teal bridge
#

Placebo effect is and always will be real (to @acoustic summit )

calm nebula
#

and before you ask about transpiling that OUT

acoustic summit
#

Maybe, but I dont think that is the whole explanation

calm nebula
#

monogame is very much married to static state

teal bridge
tiny zealot
#

clear glasses (which does not improve performance) also claims repeatedly to improve performance, and many users seem to believe it

hard fern
#

😭 it lowered my performance actually

teal bridge
#

Yeah... Clear Glasses definitely reduces performance, I just like the look better.

hard fern
#

the game took like 5 mins just to load the console

acoustic summit
#

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

teal bridge
#

How could any upscaling mod claim to improve performance? That's nutty.

hard fern
#

and extremely long load times inebetween days

teal bridge
tiny zealot
acoustic summit
teal bridge
#

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.

acoustic summit
#

though I got rid of it since tbh I like my base sprites too much

ocean sailBOT
#

@acoustic summit You leveled up to Cowpoke. You can now speak in our voice channels and share images in all channels!

teal bridge
#

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.

acoustic summit
#

Yeah that makes sense too, you use a mod and start to notice the lucky loads and better days

#

Drawing false connections

teal bridge
#

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.

hard fern
#

...aaaand my npc is stuck and won't go anywhere

#

🤔

teal bridge
# calm nebula

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.

hard fern
#

Im not quite sure why my NPC is just standing there in the void doing nothing

tender bloom
#

The nexus comment section is absolutely not a source of truth

#

There’s some signal but also a lot of noise

teal bridge
#

And there's surely going to be a lot of users who want to believe that this works, and you can always sell hope.

hard fern
#

Oh my god this is my fault i forgot to actually load the schedule

tender bloom
#

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”

hard fern
#

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

tender bloom
#

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

calm nebula
#

Probably

tender bloom
#

Maybe I’ll tell the mod author then

hallow prism
#

in case of doubt, remember : "null, c'est nul" (null is lame)

tiny zealot
#

using "null" instead of null is likely to cause problems in many situations

tender bloom
#

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

gaunt orbit
calm nebula
#

Giant crops be of any size now

rain basalt
#

Any major mods mess with the north farm exit path? I’m working on something and just curious 👀 if there will be any conflicts

calm nebula
#

No special c# here

lucid iron
#

2x2 water melons DokkanStare

#

backwoods changes from sve and rsv

rain basalt
#

Any others?

lucid iron
#

jorts & jean? (think these 2 arent not sve compat though)

calm nebula
#

J&j worked with sve last I checked

#

No special compat but also worked fine

gaunt orbit
# calm nebula No special c# here

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

lucid iron
#

oh cool but yea i think they put thing in backwoods

calm nebula
#

Did they? I thought it was Mountain

rain basalt
#

I can use CP to overlay my addition so just need to check there positions and add dependencies to load last

lucid iron
#

it was kind of similar shape

vernal crest
lucid iron
#

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

gaunt orbit
vernal crest
rain basalt
gaunt orbit
#

The code does account for varying-size giant crops already. Apparently I knew that and just forgot

rain basalt
vernal crest
gaunt orbit
#

Should we tap in lumi for this?

tender bloom
#

the medium crops are also giant crops yeah

gaunt orbit
#

Then yeah if they overlap that will be what's causing the error

vernal crest
tender bloom
#

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

gaunt orbit
#

Might be a vanilla bug then?

#

Let me check ilspy

vernal crest
#

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.

tender bloom
#

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

gaunt orbit
#

Wow interesting the game doesn't check resourceclumps at all when placing giant crops

tender bloom
#

O.o

gaunt orbit
#

It only checks terrainfeatures

tender bloom
#

So this could have happened in vanilla 3x3 crops too?

gaunt orbit
#

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

calm nebula
gaunt orbit
#

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

vernal crest
#

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

drowsy pewter
#

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

gaunt orbit
#

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

vernal crest
#

Overlap?

drowsy pewter
#

dont think so

#

layering issue, yes

#

but its clearly the non-collision part of the lower poppy

rain basalt
# drowsy pewter layering issue, yes

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

hallow prism
#

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

drowsy pewter
#

Yeah lol

vernal crest
#

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

gaunt orbit
#

It shouldn't let you plant on a tile occupied by a giant crop though, so that shouldn't cause overlap

vernal crest
#

Yaaay I caused the error again!

hallow prism
#

VMV has no special code for giant crops, so i'm not sure if it's something on my end to change

vernal crest
#

I don't know if this area is causing the error because my ENTIRE farm is poppies

#

But it sure is overlapping a lot

calm nebula
#

Do you have a mod letting you plant while ignoring collision

#

There is nothing special in vmv code for big crops

vernal crest
#

I don't think so.

#

Let me grab a log

hallow prism
#

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

vernal crest
ocean sailBOT
#

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

gaunt orbit
#

How the fuck did you even do that

rain basalt
vernal crest
#

debug spreaddirt, debug spreadseeds 453, debug growcrops 7

tender bloom
#

Abi shows us one picture: huh, that’s weird
Abi shows us the whole farm: wtf happened here??

vernal crest
#

You too can have a giant farm of mutating poppies!

tender bloom
#

Maybe debug growcrops is weird?

calm nebula
#

Yeah

vernal crest
#

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)

gaunt orbit
#

Debug commands do tend to be a bit jank

#

Anyways, it might act a bit funny but it won't crash anymore

hallow prism
#

thanks 🙂

vernal crest
#

Thanks Wren!

#

Odd - I just did it again but without the beehouses and there are no overlapping ones

rancid musk
gaunt orbit
#

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

vernal crest
#

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.

gaunt orbit
#

Maybe spreadseeds doesn't check for tile collisions

#

And it's planting underneath existing giant crops

vernal crest
#

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

rancid musk
#

I think spread seeds might only check for hoedirt? It has been a while since I looked

vernal crest
#

Well I should stop growing giant melons all over my farm now too and go do something else lol

rain basalt
vernal crest
#

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

rain basalt
#

lol

vernal crest
#

Now it's time to learn to make furniture instead

rancid musk
ivory plume
rancid musk
#

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

calm nebula
#

It's okay. Every asset it wants is already loaded, and will be kept loaded by the smapi asset propagation system

brittle pasture
#

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)

rancid musk
#

Yeah, it'd have to be the case.

calm nebula
#

Hey Pathos, apparently leah is now trying to walk into the ocean 😛

rancid musk
#

I kind of want to register a Data/ObjectInformation now just to break that mod

calm nebula
#

I would make a joke about....hmmm

eternal mortar
#

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)

ocean sailBOT
#

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

calm nebula
#

Would make a joke about rewriting the pathfinder but I suspect with t minus three days it wouldn't be funny

rain basalt
lucid iron
#

your mod's Data/Location patch is not valid so the location never loaded

rain basalt
#

I’m on phone and the data isn’t pulling up for me

teal bridge
eternal mortar
rancid musk
#

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.

teal bridge
#

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.

rain basalt
teal bridge
lucid iron
#
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
eternal mortar
#

alright uh how do i make the data/locations valid

teal bridge
#

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

lucid iron
#

this is the error that is happen i think, do u have some funny business on 2 41 of the tmx?

eternal mortar
#

whats 2 41? sorry

lucid iron
#

like tile 2,41

eternal mortar
#

I think my Tmx is fine? i can check if i know what im looking for

eternal mortar
lucid iron
#

another thing to try is new save, see if error still occur

vernal crest
lucid iron
#

the DefaultArrivalTile is 2, 46 though

vernal crest
#

Yeah I thought perhaps they had had it as 2 41 earlier and then changed it

eternal mortar
#

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)

vernal crest
#

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?

hallow prism
#

this list of number is perfectly in theme with halloween

eternal mortar
vernal crest
#

Huh there is a map property to add trees

#

I always just do it with the paths tilesheet and paths layer

lucid iron
#

maybe u had duplicate 2,41?

vernal crest
#

Seems easier to see where they will be than a giant list of numbers

eternal mortar
#

yeah i have path mapping them out then i put in the location

rain basalt
#

Ctr+F 2 41 2 or 1 and search for duplicate combo

vernal crest
#

That might be the problem then - using the paths tilesheet on the paths layer already does add them

lucid iron
#

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

eternal mortar
#

no i used the question mark one which just maps out everything i think

vernal crest
#

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

hallow prism
eternal mortar
#

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

vernal crest
#

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.

eternal mortar
#

kk ill do that first

lucid iron
#

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

eternal mortar
#

thank you guys sm!

vernal crest
#

Thanks Chu SDVpufferheart

hallow prism
lucid iron
#

i have some idea for fixing it but i also think it will be messy DokkanStare

brittle pasture
lucid iron
#

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 blobcatgooglyblep

woeful lintel
brittle pasture
vernal crest
brittle pasture
#

FUCK WRONG REPLY PING

#

(that was meant for chue)

calm nebula
#

Nope

woeful lintel
calm nebula
#

Leroy is now in the hot seat

#

This is how it works

vernal crest
#

You needed a distraction Leroy, here it is!

woeful lintel
tiny zealot
brittle pasture
#

yea it did SDVpufferwaaah

woeful lintel
#

Well, I'm just procrastinating "sleeping" right now, I have no intent to work on FF before tomorrow anyway

vernal crest
#

The temptation to just make image variants instead of rect variants is strong

woeful lintel
#

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

vernal crest
#

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?

lucid iron
#

hm i dont think registering a game tile action would be able to fix multiple ids

woeful lintel
lucid iron
#

cus it'd be like DropBox id1 then overwritten with DropBox id2

tiny zealot
vernal crest
woeful lintel
#

oh my god, you're in for a loop...

vernal crest
woeful lintel
#

maybe it would be smart to get a python script to merge them into spritesheets

lucid iron
#

however i could slap a data fixer in

vernal crest
#

Tea is working on that part, yes lol

lucid iron
#

to coerce overlapping dropboxes into having same id

brittle pasture
#

ah yeah

lucid iron
#

wouldnt fix ongoing orders though

vernal crest
#

I just wanted to know which way I should focus on learning right now. Sounds like rect is the way to go.

lucid iron
#

why is there so much snake case around this code...

#

nothing against snek just feels weird

brittle pasture
#

nah, ||fuck python||

woeful lintel
vernal crest
#

snake_case my beloved

lucid iron
#

no in the special order code

#

from game decompile

tiny zealot
woeful lintel
#

My habit of python runs so deep, it feels wrong to write methods and members with any capital letters, only class names get capitals

vernal crest
#

I just find snake case so soothing to read

tiny zealot
#

i thought forwards showed the speaker. shoulda been a reply, oh well

lucid iron
#

is podunk also mod author promotion or someone hired

woeful lintel
#

also, I find camel case hard to read on longer, more explicit names

tiny zealot
woeful lintel
#

like, r/ProgrammerHumor is hell to me

patent lanceBOT
lucid iron
#

wow

woeful lintel
#

don't link to reddit, it's not a good place

#

bad bot

lucid iron
#

i dont have anything against any naming scheme in particular, but my brain gets a delay when they r inconsistent

brittle pasture
vernal crest
#

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

teal bridge
#

I think Paint.net has a plugin to generate tilesheets from files.

lucid iron
#

u can do it with imagemagick probably

vernal crest
#

Oh yeah I forgot things like that exist haha

teal bridge
woeful lintel
#

I'm bookmarking that

vernal crest
#

Sweet thanks

tiny zealot
#

densely-packed sprite atlases from games which care enough to use them are fun to behold

teal bridge
hallow prism
tiny zealot
#

(even stardew has a few; go check out the sprite font files)

hallow prism
#

(then of course others joined pathos, casey and myuu)

teal bridge
#

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

tiny zealot
#

(chanting) cursors madness, cursors madness

vernal crest
#

Uniform will make it so much easier to figure out indexes too

hard fern
#

maybe i should take a vacation in cursors and make a UI modSDVkrobusgiggle

woeful lintel
#

FF doesn't work with indexes, so you're good to go with placing stuff how you want

teal bridge
#

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.

vernal crest
#

How will I figure out the numbers I need for Source Rect Offsets?

teal bridge
#

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

vernal crest
#

Yeah but that's a lot for 400 things instead of using maths

lucid iron
#

i wish there was a vscode plugin that let me select rects and find coords on png files

teal bridge
#

Sure, if it's a uniform tilesheet then just divide the row/column by the tile size, if you know the row/column.

lucid iron
#

no idea what such a thing would be called

woeful lintel
vernal crest
#

Hence the desire for a uniform tilesheet even if I used the wrong word "index" when I apparently should've used something else lol

teal bridge
#

Stardew sprite sheets are super simple, they don't even have padding or offsets.

teal bridge
vernal crest
#

Ah yes I follow now

#

This is not a good time of day for me to be starting this project lol

vernal crest
woeful lintel
#

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.

calm nebula
vernal crest
#

I did not get very far into python before having to give up my masters

latent mauve
teal bridge
#

I did not get very far into python before having to give up my dignity.

gaunt orbit
#

Python is evil

#

I get why people like it but it's still evil

vernal crest
teal bridge
#

Not familiar with Krita, but good to know.

woeful lintel
#

that's what I started coding with, so I wouldn't call it evil, more like kinda stupid

ivory plume
gaunt orbit
#

It just has so many incongruous conventions, and it has these weird gaps where basic features are missing

faint ingot
#

Is there no way to hide the farmer's shadow in an event?

woeful lintel
#

except it hasn't been updated since 2022, but what can we ask for

tiny zealot
woeful lintel
#

patching Farmer.Draw it is

lucid iron
hollow vector
#

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?

lucid iron
#

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

hollow vector
#

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

vernal crest
#

Yup you can have both

hollow vector
#

incredible thank you guys sm!!

lucid iron
#

for future ref if you aren't making a mod, the correct channel is #modded-stardew

vernal crest
#

Or editing someone else's mod! Including for personal use!

hollow vector
#

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

woeful lintel
#

sigh... I'm going to wake up to this tomorrow, I already hate myself...

teal bridge
#

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.

lucid iron
#

If it feels bad to work on a thing take break n do something else

next plaza
#

I mod for fun but dread docs

teal bridge
#

Yeah, docs I totally get.

next plaza
#

Hence why I don't work on the new better docs more often

teal bridge
#

Docs are the tradeoff for the fun parts. If the fun parts aren't fun, though, then something's wrong.

sweet sphinx
#

what mods are yall making that needs docs? /gen

lucid iron
#

Mods for other people to make mods on

teal bridge
#

Framework mods always need docs.

sweet sphinx
#

ahh

lucid iron
#

You been reading content patcher docs yea?

#

It's that kind of thing

teal bridge
#

AFS and Radial menu were also arguably complex enough to need some docs (not nearly as much as StardewUI, obviously).

sweet sphinx
lucid iron
#

A tier below docs for other people DokkanStare

teal bridge
#

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)

next plaza
# sweet sphinx what mods are yall making that needs docs? /gen

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

sweet sphinx
#

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#?

vernal crest
#

I am going to need extensive docs for Hiria lol

next plaza
#

CP can't do that at the moment I think - though there might be a framework that allows it?

sweet sphinx
#

ahh

next plaza
#

I was thinking Extra Animal Config might but I don't see it in the config

blissful panther
#

I think STF still has custom animal shops?

brittle pasture
#

for now Marnie still has a monopoly on animal selling

finite ginkgo
#

Marnie just knows how to capitalize on the rules of the simulation /j

lucid iron
#

I'm going to work on it physically once I get my 1.6.9 updoots done

next plaza
#

I read that as psychicly

finite ginkgo
#

I wish i could work on mods psychicly

latent mauve
#

Oh no. I'm gonna have to make a doc for my Zelda NPC overhaul mod because of all the changes, aren't I?

lucid iron
#

Well you probably want to have cheat sheet of who's replacing who

latent mauve
#

That, I at least have

lucid iron
#

Besides that maybe list of changed events?

#

Just stuff make debugging a bit easier AquaThumbsup

tiny zealot
#

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)

next plaza
#

Hot reload, my beloved

sweet sphinx
#

oh?

vernal crest
#

Hot reload is to C# mods what patch reload is to CP mods

tiny zealot
#

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)

vernal crest
#

A true hero of the people

faint ingot
#

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?

lucid iron
#

I am a dummy and often restart game just to reload content patcher mod LilyDerp

teal bridge
#

(My hot reload is even better though, nyah nyah)

sweet sphinx
#

Guess Who Forgot Bananas

lucid iron
#

I am a dummy there too and keep building over the edited sml

teal bridge
#

Haha, I'm sure I'll figure out a way to implement some QOL for that problem... somehow... eventually.

lucid iron
lucid iron
brittle pasture
#

do the build and then symlink after, should work

lucid iron
#

Yeah I just forgor sometimes, so it'd be nice if it's a thing I can stick in csproj

tiny zealot
calm nebula
#

And ogg

lucid iron
#

But I would have to setup regular hot reload to make the most of it

brittle pasture
lucid iron
#

Atm I still gotta build if I change the ui context anyway

teal bridge
teal bridge
#

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.

lucid iron
#

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 DokkanStare

teal bridge
#

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

lucid iron
#

Well it's better than not having it at all surely

teal bridge
#

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.

tiny zealot
#

maybe i'll make a github gist. that's a thing kids like to do, right

lucid iron
#

Yeah, or throw on modding gg wiki

#

I'm not sure which one is less SEO friendly

teal bridge
#

Instagram

tiny zealot
#

no idea. but i already have a github account and i don't have one for gg, so friction is on github's side

lucid iron
#

But u will get Pinterest eventually

#

Gist is fine we can just link it in all the relevant places

next plaza
brittle pasture
#

Put your guide on AO3, maximum reach trust

sweet sphinx
#

XD

#

ya know there's a functioning doom game on AO3?

finite ginkgo
#

Of course there is

#

if it exists it can run Doom

next plaza
teal bridge
sweet sphinx
#

ok, so the mod is done. . . now what?

finite ginkgo
teal bridge
#

Since ModBuildConfig will deploy those files to the mod directory, force-aliasing them back to the project directory doesn't feel awesome.

next plaza
teal bridge
#

(which is not a criticism of your method or anything, I'm just being careful and thinking about long term cohesion of this framework)

finite ginkgo
next plaza
#

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

finite ginkgo
#

Is this why Desty's log was meowing that one time

next plaza
hard fern
#

Meowing...?

calm nebula
#

Meow

next plaza
calm nebula
#

(Have not backread at all.)

teal bridge
sweet sphinx
#

how do I publish a mod?

teal bridge
#

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.

lucid iron
#

I was just going to add post build to link the assets directory when building debug

gaunt orbit
sweet sphinx
#

yes

gaunt orbit
lucid iron
#

It doesn't seem like thing that need to go into actual framework

sweet sphinx
#

json

teal bridge
#

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.

hard fern
#

You zip it up, and find where it says on nexus to upload a new mod or whatever (?)

sweet sphinx
#

mk, thanks

hard fern
#

The nexus menuing takes you through all the steps

gaunt orbit
# sweet sphinx json

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

sweet sphinx
#

thanks

hard fern
#

It can sometimes take a bit for the mod to be "up"

gaunt orbit
#

yeah, it can take anywhere between 10 minutes and an hour. if it takes longer than that, I would contact support

sweet sphinx
#

mk :3

gaunt orbit
# sweet sphinx 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

sweet sphinx
#

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

gaunt orbit
#

hmmm I wonder how hard it would be to make a content pack linter

next plaza
#

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)

calm nebula
#

Could do a schema

next plaza
#

I made one for the spacecore stuff recently

calm nebula
#

If you really loved regex

gaunt orbit
#

ah I just meant a CLI tool to go through and check for stuff like potential misuse of Entries, unknown items/locations/etc

lucid iron
#

could you merge a schema exported by newtonsoft.json into a bigger schema think

calm nebula
next plaza
lucid iron
#

dunno if there is smart way to do that

next plaza
#

Writing the VSC extension and language server was fun

calm nebula
#

(By that I mean OnionNinja)