#making-mods-general
1 messages · Page 326 of 1
thats why it is specialized
how many dialogue lines should i have for a romanceable npc? im having 2-3 lines for each heart lvl + day of the week randomized and wondering if im doing overboard
like you can plant paddy crops. on it. and it acts like... theres water
i might be caught up in pendatry again tbh
but the actual patch here is just make hoedirt on this tile paddy if paddy crop
However many you want.
very niche question incoming: how to listen for "chest inventory changed by mp syncing"
net field?
like u dont want it to run on the host but u do want to run it on other ppl somehow?
im just wondering how much is necessary for dialogue to be natural enough? my dialogue is mostly pretty specific so im worried that it might get repetitive
Depends on your player, but a good minimum to aim for is vanilla - which is miniscule, really. Abby has the most of any vanilla character and she has like..70-something non-event dialogue lines.
so context is that
- player one plants crops in aquaponics chest and dumps a bunch of IndoorPots into the building chest
- player two gets the IndoorPots, however the IndoorPot's Location field is not set because it's not synced (usually it's set by it being physically added to a location)
there is no set number, tbh
but what i did, is i did NOT do specific seasonal lines, and did the following
Mon key will have like 3 generic lines, then one specific seasonal one for each season (excluding spring)
six lines per key, and there's 7 day keys per heart level, thats 42 for each heart level
its not too late to go back to map based crop storage is it
and then youve got 2, 4, 6, 8, 10 hearts
that makes sense, thank you
yes it is
something something I'm too far gone to stop
i dont think that would help mind u
42 x 6 = 252. so just as a base if you wanted to do that, you'd end up with 252 dialogue lines
Whew, I successfully added it.
but yea i cant rly think of anything besides netfield bullshit 
you do not need to because that is overkill compared to any vanilla npc
thats just what i did for my npc
thats not even including specific day lines, schedule dialogue, festival dialogue... brrrrrrr
i guess ill build up loose bare minimum dialogue lines and then add more when i get an idea
yeah, my question is which netfield event to listen to (still a noob)
yeah i'd aim for getting 1 for each generic day key and then expanding from there, sugar
heres my piece of overengineered bullshit that atra enticed me into making
thanks for the help, i wasn't sure where to start and how specific i should get
so 42 lines minimum. dont bother doing specific seasonal lines yet, just be generic
so no spring_Mon or anything 🤣 just do Mon
it watches the building chest to update light states
you can do seasonal garbo later 🫡 i believe in u
thank youuu ❤️
I found this approach helpful for thinking about what sorts of things to write: https://stardewmodding.wiki.gg/wiki/Tips_%26_Tricks_from_the_East_Scarp_Community#Daily_Dialogue_Tips_by_Yri
OnSlotChanged? weird, I tried that but for some reason it only fires when the planter dumps the pots into the chest, not when the other player gets them from syncing
ill take a look!
hm i dunno maybe this is just broken in multiplayer 
i have not tested it in several months
the watcher being lazy and disposable might make diff but u need the location a lot earlier right

another approach is to always do everything on host by writing a smol multiplayer message thing
yeah that's my next plan

look if I just fix this one thing then the mod will be complete and I don't have to touch it ever again
cant believe map based storage is looking more attractive every day
i swear i was genuinely joking the first time it was brought up
during development I thought about putting it in negative coords but thought to myself, bleh, if I do the chest thing I only need to sync location/tile in a couple places
a bunch of 1.5 mods did negative coord chests
yeah, horse overhaul still does
for the horse chest
it is decided, I'll fix this one issue, but if I get another MP sync report I'm switching to negative coords and bump version to 2.0.0
"what new features are in 2.0.0" "nothing, but it's a breaking change"
plz have good multiplayer support or I'll be upset
where is the sprite for the special dirt for paddy crops
i dont see it in crops.png so its.... ?? hiding
if in doubt, cursors
cursors or cursors2 in this instance 🤔
ok its not in any cursors
hm hm hmm
its not... hoedirt, is it?
that cant be right
omg it is.
brother
is there currently a way to harvest a plant at multiple stages? I feel like not
what does that mean 
So for example, some plants irl you can harvest a bit early for it to be a bit different (take bell peppers for example) so if you harvested them early, you would get a different type of papper ... technically.
i.e. the growing time of the crop is, say, 5 days, and you CAN harvest it at 5 days, but then if you really wanted to you could leave it in the ground for longer for a (hypothetically) more profitable and different crop
i cant think of a crop that does it but i guess you can use custom bush for it?
you can with spacecore
i think
but it might not work exactly like you are thinking of
spacecore's multiyield feature allows you to set various conditions on harvests as well as set the plant at specific stages after harvesting
Iirc someone was trying to do such things a while back (was it with a berry type of crops?), maybe you could try to find back that bit of conversation and see if they found a solution?
someone SORT OF did this with a “ripe” crop thing if u leave it on the plant for a few days, it increases in price or something
bc its ripe i guess. no clue how it worked
I can't
negative coords it is
(fwiw I didn't spend the last 3 hours on it, I decided to play games instead and made the decision while playing)
pretty funny seeing this message posted by an orange name. Welcome to the club!
I'm so confused
a user has notified me that my custom minecarts aren't working
and the log shows the patches aren't applied because of a missing flag
but it also shows that they DO HAVE the needed flags
Log Info: SMAPI 4.2.1 with SDV 1.6.15 build 24356 on Unix 6.14.7.2, with 204 C# mods and 338 content packs.
Suggested fixes: One or more mods are out of date, consider updating them
Oh updating the schedule debugger to 1.6 was replacing an Add with TryAdd and location.GetCharacters() with location.characters
this is such a busy tile
the tiles to the left were even busier that made the lines so small they became <1 pixel and stopped rendering, so >64 routes tried going on the tile
wait that’s so useful
is there a way to do a full year version?
(I believe the wiki wanted to make an image of all the “safe” tiles in town back in 1.5 and resorted to just covering the whole town with rotted plants and letting the game run for a year lmao)
Do I increase versioning number if the only change I'm making is adding the update key?
Either way is fine I guess, since the game won't notify the users anyway
Yeah. I just wish I had realised, when I made my first mod, that you could get the nexus number before publishing the mod.
Id also say stack more at the top end ie: 8 or 10 hearts so your npc is interesting to talk to at full hearts and note that people can zip through 2-6 hearts pretty fast with birthday gifting.
I dont do all of 2-6 hearts. Actually i just have a template made from Abigail's with all the dialogue removed.
Everyone makes that mistake at first 
whoa that's so useful
The code doesn't simulate any schedule logic, it just visualizes what the pathfinder(s) have chosen, so doing the full year (or n years because desert festival needing bus) would be to just sleep every day, run it again and continue
is there any way to make it mark somehow places where NPCs stop and spend some time?
ah, your answer to iro answers that then
it does its just not well visualised
oh, can you make it be visualised then?
it would be really useful to know that for map patches
the lighter line stops, and then the darker one starts
every time the next section of the schedule begins it gets darker, which works fine in quieter maps, but town is just too busy for the colour pallete to work well
@unique sigil is working on something and asked me if i could make a list of spots where NPCs spend time on on maps, and this would be really useful for that
is there a working version of this anywhere atm?
yep, though i'm more looking for spots NPCs occupy when stopping during schedules, so I don't accidentally put a tile on the Buildings layer where they're standing (not necessarily the paths they take when going through their schedules).
the change of color is exactly that kisaa
also this code is like 3 years old, last change was 19/06/2022 until today reviving it for 1.6
oh i see, i couldn't tell by looking at the image. maybe something like a square outline around the tile would make it easier to parse? but anyways, that would be a great tool 
this is all a 1x1 pixel texture that I'm drawing with, so was limited in what I did
this is still extremely useful can't wait to try it
Also now that stardewui is a thing, I could give it a proper hud to control what is shown
if you release it, I may try making a mod that iterates over all set schedules and runs them consecutively (day by day) or forces their conditions to be true to try to make a (slightly more) complete version
That's the path???
Most seems fine though
well npc's aint walking true diagonal
question: if I wanted to make a trinket that increases your chances of hatching a blue chicken - is that better off being content patcher or C#?
Oh my lort. beautiful. ty!
Also, a way to implement notes before unlocking secret notes? The goal is to have like 6-8 little letters get found and as you find certain numbers of them they trigger events and stuff
Hi, I have another noob question: is it possible to set an NPC's position at half of a tile? I am trying to make an NPC sleep in a bed (2 tiles wide) and it always looks weird whichever coordinates I set.
I assume you're asking about position of an NPC in their schedule, and yes, check the animation field here, specifically offset x y: https://stardewvalleywiki.com/Modding:Schedule_data
Astra the Mod Knower
does anyone have any advice to ensure i dont accidentally place my npcs house into where another (modded) npcs/building structure may Hypothetically be
ive triple checked several mods but i just dont want to be a bother
im aware that its getting a full on the map though so maybe i should think of some alternatives (scratches head)
According to the usual advice about this, you'll be fine if you checked for the most popular mods
thank you so much!
Is it possible to add a tilesheet to a map with a cp patch?
i've checked a bunch of the popular ones and done a bit of digging! its also relatively small tileswise. if it conflicts with anyones game i will cross that bridge if i get there
there's no way to know for sure that you will not have compat issues, because there are basically infinite mods with finite space on the map
thanks!! its my first time using tiled actually so im definitely learning as i go. i appreciate it ‼️
I'm trying to add a tile to a vanilla map that doesn't have that tilesheet already included. I think that the game doesn't like it.
If you wait for someone more knowledgeable than me about the subject, maybe they'll link to a list of popular modified spots as a reference
yes, that would be lovely! sounds great ‼️
Details: I'm trying to add a tile to Elliott's House under certain conditions
[Content Patcher] Can't apply map patch "Older Sebastian > EditMap Maps/ElliottHouse" to Maps/ElliottHouse: MapTiles > entry 1 couldn't be applied: SetTilesheet specifies a 'Maps\townInterior' tilesheet which doesn't exist.
"Action": "EditMap",
"Target": "Maps/ElliottHouse",
"MapTiles": [
{
"Position": { "X": 7, "Y": 7 },
"Layer": "AlwaysFront",
"SetTilesheet": "Maps\\townInterior",
"SetIndex": "1108",
},
],
"When": {
"Relationship:Sebastian |contains=Married": false,
"DayOfWeek": "Saturday",
"Weather": "rain, storm",
}
},
I know for sure that townInterior exists. But looking in tiled, it's not included in the tmx
So I think I have to add it to the map
I was wondering if that might be a map property change, but that doesn't sound right
working great!
didn't realize I wouldn't need spacecore either now if only there was a way to animate it with a pulsating effect...
I did notice a slight issue though: light condition seems to stick around after removing the path and overrides other paths placed there. for example, green floor always glows but yellow path only glows at night, so after placing yellow down, green no longer glows on that tile during the day https://i.imgur.com/W3gwuuJ.gif
Alternative question: is it possible to make a tilesheet bigger with EditImage?
Debugger Development Discussion
oh can u send me the json
only downwards but please dont do that on vanilla sheets
sure thing, expect incoming dm
just send me json link here
ah woops, already sent
ur json looks as expected so this is my bug
Hmmmm. Ok. What about replacing a blank tile on a vanilla tilesheet? There's just one on the Elliott's house tilesheet, but I can make it work
did you patch reload at any point?
Wow thank you! That's very helpful! I would probably never find the detail myself😅
SetTilesheet takes the ID of a tilesheet that's already registered for the map, not a tilesheet asset path. You can use a map overlay instead to make changes which include a new tilesheet, if needed.
Thanks, Pathos! Haven't tried an overlay, but that sounds like what I need
Used those a couple of times before, but I was trying to avoid creating a new version of the map again
I did, yes
(I wonder if there'd be interest in a framework mod which adds a little multiplex building to different locations (accounting for existing mod positions), where mods can house any number of NPC? So you'd click the buzzer, get a menu of NPCs who live there, and they can either talk to you through the buzzer or warp you to their home depending on conditions like your friendship level or whether they're home.)
Another noob question, I am trying to use vanilla arts that's already in the base SDV game to build my custom location map by using these lines in my myLocation.tmx file (I looked at other mods)
<tileset firstgid="1" name="town" tilewidth="16" tileheight="16" tilecount="2304" columns="32">
<image source="spring_town.png" width="512" height="1152"/>
</tileset>
But this seems to work only for *.xnb files in Contents/Maps/, what should I do if I want to use game arts in say like Contents/TileSheets/?
you either use a mod called "Arbitrary Tilesheet Access" or you don't use them at all
secret third option: wait for Pathos to absorb ATA into SMAPI
(/j)
Something like that (though with more features to support conditional NPC logic, like maybe you get a voice message if they're out).
Also similar to the old Elevator mod, which was a similar idea for farmhands.
I see, so for now I should try to limit myself to Contents/Maps/ then... ty!
ideally yeah
At a glance its similar, but technically very different.
Elevator had cabin buildings off-screen, Shared Spaces does not have cabin buildings at all and do the hellish harmony patches with netcode to get the dynamic cabin locations to work without the building
So like fireredlily's apartment mod with a bit of extra fancying for telling you what NPCs are installed?
the apartment is one giant building with multiple floors with rooms, Pathos's thing is a singular outside door that conditionally warps to different locations based on the dialog answer
Oh, I didn't realize there was already a mod for it. The difference would be that it can house any number of distinct home locations, rather than having one interior location which contains up to a set number of NPCs. But there's probably no need for a new framework mod in that case.
apartment mod is a spiritual successor to the older boarding room mod
I kinda want to make that, but I'd only be able to do half the job
I think if it started getting crowded it would definitely make sense to start considering TARDISifying it but so far a lot of people still want to find a way to have their own house squashed in somewhere lol (which I am guilty of haha)
Stardew: a small town with fifteen skyscrapers of npcs
and instanced floor locations
Anywas
modder supplied map patches to decorate their room
I have 2 hrs more to work on this sock
that sorta stuff
considering there are mods that have people squatting in CC, Lewis Manor, Willy's fish shop, and Pierre's shop
having the doorbell on them to warp to their locations instead of weird bigger on the inside second doors
getting the npcwarps to play nice would be interesting and not void warping everyone
I'm still torn on whether to make use of the existing saloon second floor mod or make my own for Hiria. I want to make my own
but it seems silly to do that when someone made a mod for that already.
I think I've already seen somthing like that in here, but an extra street for custom NPCs would make more sense in the context of the game than a tall housing building imo
zuzu 
yeah
incidentally pathos, would it be possible for central station to do NPCWarps automatically?
Hi folks! I was wondering if anyone knows how to make my configuration options only available to be changed on the main menu?
the usecase here is
- I, npc modder, makes some central station only location for my npc's house
- The npc needs to path to town sometimes, but i dont want to 0 schedule always or bonk anyone else's npc warp by mistake
not in content patcher
need to use GMCM's C# api
If you don't want to use C# for this, your best bet is to use the section feature to add beeg text saying "DO NOT EDIT THIS IN-GAME, ONLY FROM THE MENU"
I'm not necessarily opposed, but I'm not sure how it would work. Like would there be an auto-generated NPC warp room with dozens of warps to every custom location which opts in to the feature, somehow laid out to avoid NPCs accidentally stepping on the wrong warp tile on the way to the intended one?
no i think it'd be a Warp that central station pushes onto each location that contains a kiosk
That could get them to Central Station (or the NPC warp room), but what about the warps out from there?
but hm how to branch it 
might be a problem too hard for the current schedule system tbh
a big ol warp room doesn't seem very scalable
at some number of stops the npcs will path funny
I think it would be possible to have a large warp room that's 5xN that's effectively
XXXXX
WoooW
XXoXX
WoooW
XXoXX
WoooW
XXXX
Where X is collision, W is warp, o is walkable space but will have different walk timings
...
I think a better solution would be a new warp property that is a conditional warp from A to B if and only if the pathfinder wanted to go to B, and have the pathfinder data do the teleport rather than the collision
is there not a way to make a warp only work for a specific NPC?
(I know nothing about the subject)
Not without Harmony. The usual approach would be for each NPC or mod to have their own hidden warp room or warp points, which is specifically designed for that NPC/mod's pathfinding.
where can I learn how to make this with the GMCM's C# API? / by doing this will I be able to make even the config options I made using content patcher only available in the main menu or only the config options made with the c# api?
only those done through C# afaIk, there's an option when registering them
so if you were going to do this with C#, you need to expose the settings to your CP by creating content patcher tokens
some mods that do this include DSV and WAG (Cauldron)
before we get into all that though, can I ask what setting you are trying to ban?
see here https://github.com/spacechase0/StardewValleyMods/blob/develop/GenericModConfigMenu/Framework/Api.cs for how to do it
It would be a nice QoL thing if 1.6.16 did the pathfinding change moving NPC warps from collisions to the pathfinder doing the teleports, as it would fix large NPCs and void warping in general, and would allow for tighter packing of warps without worrying that the NPC will accidentally touch the wrong warp
(my books mod also does this if you're looking for a weird reflection attributes way of registering the config tokens too /j)
(A pathfinding/warp rewrite is most likely out of scope for 1.6.16.)
1.6.17 tho...
It's in that weird space where vanilla doesn't need it, but it's awkward for anyone else to fix it (outside of maybe spacecore)
all of them, because my mod requires files to be reloaded and this could cause issues if done mid game
Spacecore already fixes the macro pathfinder to be depth first rather than breath first to get more efficient/direct routes, but doesn't touch the micro pathfinder that just assumes the warp collision will happen.
ScheduleDebugger had to do weird logic to even properly detect it, as the data model doesn't really encode the warps happening.
And can't rely on the coords jumping=warp as it's possible to warp to the same coord but different map
thanks, I'll need to take a deeper look regarding what chuve said about having to expose them with tokens
why would invalidation cause problems
Yeah, I think the pathfinding discussion cured me from wanting to develop the custom NPC building idea
most things u r doing in CP either
- responds to invalidation which happens immediately on config change
- doesn't respond to invalidation because the asset is weird, so you have to wait a day
good meowning modders 🫡 i see the discussion is fruitful today
Is it possible to use CP's When and tokens with my framework, or do I have to make my own?
00:50 💀
Outside of a bundle mod which has bigger problems than just titlemenu vs ingame, and to a lesser extent weather, assets invalidating midday is normal and fine
its 10:50am shhhh
people are just editing your custom asset so yea they can use all the CP things
morning!
Cp exposes a c# API to execute tokens
as long as you implement AssetInvalidate properly so ur things arent stale
Since I got started with Blue Prince, I could turn this evening into a morning, but I don't think future me will like it
I mean in my edit, not other edit. I tried to use when dayofweek to make it, so a channel option only appeared on Wednesday, but it didn't work, so I came here to confirm if it doesn't work on my own custom edits or if I wrote it wrong somehow.
just use GSQ
Ok then
GameStateQuery.CheckConditions(Data.Condition, context)
and then the CP side can put "Condition": "DAY_OF_WEEK Wednesday"
you can do what sinz mentioned, using the condition api
but i personally havent found a point of doing that vs just expose GSQ and handle it
I will just recreate the things I want it's not hard, I just wanted to confirm because it would have saved time if I were able to just use CP.
with this u can also do things like
(not to mention the fact that even with the minor changes spacecore already does to it, it already leads to different pathfinding results in some cases for NPCs between it installed and it not installed. cant imagine the mod author headache if they start getting bug reports about schedules being weird bc they didnt test every schedule both with and without spacecore after implementing this change)
lock a channel behind a mail flag
put it behind some chance
whatever funny custom GSQ other mods make
Plenty of usecases existed back when GSQ didn't exist, and to talk about an item required JA's api or the CP tokens for them, or wanting actually custom content packs to have some of the cp creature comforts
Now, less so
Thanks chu
tbh it would be more useful imo to be able to execute cp tokens in the context of a cp mod
otherwise, meh
yeah, if you can implement a GSQ field in a CP-based framework, it pretty much inherently gives access to anything the condition API does
(FTM's API use just predates it, etc) (though ig it's also not CP-based, so that's the use case
)
There was also the cursed attempts of using event precondition logic to gate things
the ur-GSQ...
that said i think When should work in this case
And if it's the c# side wanting the conditional edit, just wrap it in an if statement with the logic you wanted
assuming you mean something like
- there's a When day of week wednesday edit on the custom asset
- you slept (so that cp did new edit on day update)
- your custom asset implements AssetInvalidated handling
(oh right, I do still have the EPUPreconditions field
but vanilla conditions were always pretty inaccessible)
point 2 is also a point in GSQ favor, it doesn't need to wait for CP update rate
I think shop tile framework also liked using the precondition system as a pre-gsq
(both of those were cherry)
oh, Pathos is maintaining EPU now, so I guess it is still there for a reason
and yeah, it got a lot of use back in 1.4 or so
Needs to still work for the handful of mods still using stf
i am always so curious about the olden days of modding
same, chue
im not. i live in blissful ignorance
1.0 to 1.4 is complete mystery to me
same, chue
1.5 i only have vaguest ideas about
I showed up in the waning era for 1.5.4
Even like 1.5.0-1.5.4 is a mystery for me
and then 1.5.6 happened
annnnyways
I see Pathos is rewriting the scheduler ❤️
yay!
Is there a way to hide an npc's shadow?
I was a Normie user when the rumours of manually messing with the windows install to use monogame instead of xna to be 64bit or something
I wasn't even a user in that era, I think
the NPC's entry in Data/Characters -> Appearance -> Shadow -> Visible can be set to false, it looks like:
https://stardewvalleywiki.com/Modding:NPC_data#Appearance_.26_sprite
the first time i did anything modding related was just as a user too and that was back pre-official multiplayer when my partner and i had to use the mod for it
that was also about the extent of the modding i did back then
I'm pretty sure I didn't know the game existed until, like, 2020
my friend wanted to coop with me
and then i started solo save cus friend too busy to play 8hr a day to build the Empire
twitches
now will they TELL ME if they accepted my qualifier sock
gahhh I hate interaction with people
I think my only solo save is still in like summer y1
[present company excluded]
(meanwhile ive still never played more than 1 day of solo play bc i cannot stand playing games like this alone)
I think I played the game solo a bit in like v1.2? hard to remember at this point
(then did some coop in 1.3 and needed a custom quarry to work -> ??? -> now)
While I have 4-6 perfection saves in multiplayer ranging from vanilla to heavily modded
how will u build the Keg Empire then
come to think of it, I've never played the game properly long enough to get to winter 
the trick is to play with someone who isnt too busy to help you build it
Scheduling it ahead of time, and ensuring you don't end the session without booking in the time for the next session
(I started in Stardew Valley 1.1.1, the era of the XNB mods when SMAPI was a minimal Windows-only API with basically no documentation. The olden days were not golden days, modding wasn't very accessible back then.)
is just like irl olden days then
(I wish our work software had documentation as good as smapi)
I have citations in my work codebase to content patcher
debug commands
Thanks! It worked.
or my favorite trick, grabbing a mostly done farm from upload.farm
debug setupkegfarm when
no u
Although I might go GSQ anyway gives me more control over things. I will leave that for future me 
I wonder if the smart building mod thing can spawn sheds with the contents preloaded, to just spawn sheds with the optimal key layout already present
i thought u gotta SC for that
but hm
u can just use vanilla right
IndoorItems
just write idk 108 entries
I was playing shapez2 recently which is what reminded me of that copy+paste style thing
what about my shed mod compatibility, chu
die
presumably spawn in the sense of doing it as a player, like "have 999 kegs in my inventory and slap them down in the right setup"
you dont sound like a true keg emperor
"blueprints" as a games/mods seem to call them, though I haven't used them much in anything 
just flood fill all y'all are using automate so you don;t need to walk in anyways
update hype
hey some automate mods require path for the junimos
ngl, chue
I kinda stopped paying attention in like 2023
what mods exist now? I don't know
All my saves with automate have had house rules that every machine still needs to be human accessible, along with AutomateChest to ensure hoppers have been purchased to have a time gating and cost for using automate
also have discord forums been breaking for anyone else?
they don't work for me on mobile no more
like, all content is drawn too far down
I wanted to use the Stardio mod, but it wasn't multiplayer compatible, haven't checked in to see if it's fixed yet
support forums look normal to me on app + android + a motorola, fwiw
did u not updoot atra
I did not update an atra
I did not know an atra needed updates
where should I pull updates from, CVS?
commas value separated?
get more fiber by splitting and eating the commas, yes
I love crashes because I didn't realize something could be nullable
(The game is not annotated)
when in doubt, something always might arrive null
Even if it was, nothing stops the serializer or some other modder from putting a null in a place it doesn't belong
Support forums are auto scrolling me down to the second post on posts with multiple replies even if I haven't opened them before, so I don't think it's just you, Atra!
No, the pharmacy
well I looked at a function called "drawTextWithShadow" and thought it would always be passed a non-null text
but I was wrong
We get our updates from the pharmacy right
also, digging into my old EPU history, I forgot I had to warn people use the correct mail flag condition & not the fake booby-trapped one
which is deprecated now
x <letter ID>
For the current player: mark this event as seen, add the specified letter to tomorrow's mail, then return false (so that nothing further happens). Use the format "x letterid true" to send the letter immediately.
(doing this in FTM would mess up the event and also not spawn anything ever)
that function itself even checks for null in it
Anyways
Fun fact harmony prefixing the tmx loader to return null maps caused a lot of explosions, turns out the game assumed maps weren't nullable
What video game are you guys playing
some game you've not heard of
Got it. You're playing final fantasy the actual last one
(funnily enough though, one override checks for null and sets to "" if it is. the other override throws an exception if text is null. wonder why.)
I spent an inappropriate amount of time with Blue Prince open last month, though not actively ~playing~ much
I'm stressing about a sock knitting competition
This is how you know I don't have a personality
Then after lunch I need to get some work work done and also some stuff I promised people two months ago lol
wtt personality for some cool socks
can you finish my docs for me too while you're at it?
one is handed a stringbuilder the other one text - if you're handing somebody a stringbuilder that's null you've probably gone real wrong
while if your goal is just to draw the spritebatch you would just give a null string
presumably
well, i would say if you're handing the "drawText" function null text you've also gone pretty wrong... 
crafting tooltips and cooking tooltips do this
It worked! Thank you!
i just dunno why one is safe to make a blank string and the other just doesnt care to do so
(i wouldnt say a lot of the things CA has done in this codebase are necessarily Right tbf)
also btw I fully decided it was easier to just only do testing on my windows vm and hook createrandom where I'm allowed to, because indeed the same mod works on my windows vm but not my mac computer yay I love inlining. still [the knowledge gained from this allows me to] I can now successfully seed uniquemultiplayeruid [in vanilla] which is excellent
does ur mod work on linux
I mean this is a mod specifically to be used to better understand when the game uses random calls so it's not a general purpose thing, and I have no clue
(because the uniquemultiplayerid is randomized based off of game1.random, and game1.random rarely gets set so I wanted to see if I could consistently control both the seed of game1.random [easy] and the quantity of random calls in [hard] at the moment it is used to make umid)
for use in seeded speedruns, as in version 1.6.4 geodes started using umid meaning they were, until recently, considered unseedable
it's a little sad for me b/c reworking the random of the game was one of the last mods I bothered to work on lol
Hi Lenne
A lot of can of worms got opened during the 1.6 modding alpha regarding random
I love the linear nature of the c# seeded rng it let me make prediction spreadsheets I love my spreadsheets
I am not opposed to people building off the apartment mod, as it is a fairly simple construction and I do not know how to do C# fanciness. My mod also requires the mod authors to set up their NPCs to work with it, so something that automatically pulls NPCs could be an improvement and would definitely help with abandoned NPCs that don't have homes anymore if that's the direction you wanted to go in.
I remember several years ago I looked into uploading mod releases to GitHub and learned that if you have a monorepo, all the mods need to have the same version # and there's only 1 updatekey possible for the repo. So if you wanted to have the mods on different version #s and/or with different updatekeys, you needed a repo for each.
Is that still the case, or is it possible to leverage the update subkeys to have multiple mods on 1 repo on GitHub?
(Fwiw my mods are CP and not C#)
(I had actually considered setting up the apartment elevator to do a list of NPCs that live there for floor selection but did not know how to implement it)
You can use a custom update manifest to do it now.
why not just put it on the github repo itself
what is the level of served required here
well id also put my mod zips on google drive ofc
since i am trying to do the worst thing here \j
The update manifest itself needs to be a file that can be reached by the SMAPI update-check server. But the ModPageUrl can be anything user-accessible.
i dont think a google drive can give you a direct link to something
yea ig itd have to be something curl can fetch at least
also a google drive version sounds like itd be annoying to update anyway
Thanks, Pathos! I'll have a look at this 
having separate repos might be nice for the releases pages to stay separate tho
(Hosting all of my mods on a BBS from now on!)
(Note that update checks are way more efficient for CurseForge/ModDrop/Nexus though. Update checks for GitHub or custom update manifests can noticeably impact update-check performance, so update alerts for those may be delayed in future versions.)
is this because custom update servers/github are usually slower or because they're less streamlined for checking a lot of mods?
I assume because less can be assumed for caching reasons because of the lack of a specific API?
idk why, but it made me think what would happen if someone now did this with their custom update manifest https://en.wikipedia.org/wiki/Slowloris_(cyber_attack)
just force SMAPI's server to make a HTTP request to a server that takes ages to respond
depends on how the timeout is implemented, i guess
Curseforge/ModDrop/Nexus all have a custom API which SMAPI's update-check server can use to fetch every Stardew Valley mod at once. It does that on a schedule, so when you update-check mods on those sites it can just return the result immediately from its cache without needing to call any external servers.
But for GitHub and custom update manifests, the only option is to call the remote servers one mod at a time to get each mod's current info. That currently happens while the SMAPI request is still waiting for a response, but future versions may just queue a cache update and immediately return whatever the last version was fetched for those.
ah i see
I forgot about CurseForge as an option! What's the modding scene like there? We didn't include it on the modding wiki table comparing publishing sites
https://stardewmodding.wiki.gg/wiki/Differences_in_Mod_Publishing_Sites
There are a couple of different sites that are popular for publishing Stardew Valley mods on, so this page aims to document some key differences. Feel free to update it with your own findings!
You may also be interested in Updating Mods for Modders.
hello guy, how can i use command debug object position? such as tile pos
iirc they don't really care enough about theft, and they only really care about minecraft
Is my search of the mod dump correct? I'm seeing one mod using a custom update manifest. 
Quite possible, I don't think it's a heavily used feature.
Oh, wow. That one mod also doesn't even technically use it!
{
"Name": "Moveable Mailbox",
"Author": "aedenthorn",
"Version": "0.2.1-official",
"Description": "Converts the farm's mailbox into a moveable object that you can place anywhere on your farm.",
"UniqueID": "aedenthorn.MoveableMailbox",
"EntryDll": "MoveableMailbox.dll",
"MinimumApiVersion": "4.0.0",
"UpdateKeys": [
"Nexus:7834",
"UpdateManifest:"
]
}
It's actually a little bit sad that it's used so rarely.
(If it's actually unused, I might just remove the feature; I somewhat regret adding it since we got the custom mod site APIs, since there's so many performance and security issues with calling arbitrary endpoint URLs.)
I think you need to write your own, but it's pretty simple (iterate the location.objects and location.furniture)
what custom mod site APIs?
Pathos what if u make a limited version of it
Fetches a specific json at the root of a github repo
The custom APIs provided by CurseForge, ModDrop, and Nexus which let SMAPI's web server fetch all mods at once.
oh those ones
Pathos, any insights you'd like share about CurseForge? :o I saw CP is on there
like, a reupload?
It's just auto sync right
CurseForge has a bad rep because of the modding contest they had where someone just submitted FTM 
MEEP is technically on there, and entirely auto-synced. My thought process was if I don't, my mods are 100% uploadable there by anybody.
(
not just that, but their contest was paid and the marketers actively* encourage uploading open-source stuff)
(which is why FTM technically isn't, now)
relatedly, I think their community manager might be banned here for all the cold DMs? it's been a while
q: are all CP mods considered open source since u can see the files/code directly?
Some random thoughts:
- The site got bought by another company, which addressed many of the previous issues like a lack of moderation. They brought their own issues though (e.g. a cold mod author DM campaign which almost got them banned from the server, a focus on mod packs, and some poorly managed contests). I think they mean well and they're responsive to feedback though.
- They have an auto-sync feature, so you can upload mod updates once to Nexus and it'll auto-upload to CurseForge (and ModDrop if you set that up too).
- Their reward program is very good (better than Nexus' currently).
no
they are source available, which is not open source
source available != open source
(this is a lot worse than i thought)
Nearly all Content Patcher packs are proprietary and closed-licensed currently, which is very unfortunate.

So u can look and peek at all the code u want, ur just not allowed to re-... Whatever the word is
Im not very good with code terms and stuff
Redistribute?
not allowed to do anything with them that the permissions dont tell you you can do
ooooooh
My content packs are licensed badly probably (they inherit whatever code license i put in the same repo lol)
i dont even license mine i didnt know we had to do that
I have no content pack that isn't alongside some code, so it just gets whatever that is.
Mostly MPL 2.0.
...or MIT.
I am protective of my image assets which is the only reason I set permissions, generally.
And even then, ask me and I will probably let you use it, depending on the use case
yeah, I should probably change this eventually 
you dont have to do anything. if you dont, its All Rights Reserved by default
though technically all rights reserved also means no usage
as that's a right you need to grant
(I licensed my mods under GPL)
All Rights Reserved Except Those Granted As A Requirement By Nexusmods
It's fortunate that Content Patcher can auto-migrate content packs, since currently almost no content packs allow others to update them.
(or Forking if GitHub)
my impression is that it's been unclear to most CP devs if/how licensing and rights apply to the json files, though people tend to have rules for the other assets
so all rights reserved means “my oc donut steel”??
Pleased to say that bagged milk is MPL cus 6480 let me
https://github.com/Mushymato/LivestockBazaar/tree/main/[🍁] Bagged Milk
copyright is hard to understand bros 😔
(ill be honest i think you can extend this to most mod authors in a lot of places and not just CP devs and not just stardew, IME)
We've seen the migration code. We've seen the work that goes into that.
As a CP modder, can concur it seemed like licensing was a C# thing til I educated myself and asked here
to clarify on Button's post, in most jurisdictions if you don't say anything otherwise all your work belongs to you and others are not allowed to remix or redistribute it
Having no license can be bad for the original author too. For example, have you ever accepted a contribution to the mod from someone else? If so, you no longer have full control over your own mod; you need the other contributors' permission to redistribute it, make changes to their contributions, etc.
i have seen a lot of licensing practices in other communities that just make me think "yeah no u cant legally do that lol"
ohhhhhh. so for example, my npc — if i allow other people to translate it, what… what is that
Without a specific contract in place, yeah. Which I don't think anyone has ever had in the modding community. 
that counts as a remix right
they own the translations they wrote. you can tell them to not translate your work, but you cannot claim ownership of their translations yourself. you'd have to remove them
oh of course yeah
to be clear they wouldnt own the content. just the translation. like they dont suddenly gain part ownership in your NPC
oh i thought that counted as a remix/contribution
but you as the rights holder reserve the right to determine who gets to translate your work and how a translation is distributed
So right now Lani sbv is not licensed by anything right
except nexus perms, no
Let's say i make LaniAsAStraw portraits for strawdew valley compat and give that to you
You technically need my permission to update Lani now
translations are a derivative work but not a transformative work, i believe a key difference is (disclaimer: i am not a lawyer.)
what if you didnt give it to me, but uploaded it independently
No issues there
chu would need your permission to do that, technically
hoooo i see
This is the ol gpl linking business i think
i think (again. not a lawyer) it depends on how much you based your work off of lanis
But no issue for you to update
what if i specified in my permissions that you can make portraits w/o asking me directly 🤔
assuming you also granted distribution rights, thats fine
thats you making a license
woah this is in depth (and scary)
you can then not revoke that license retroactively later
But yeah if u just had Lani licensed by something i can just contribute and agree to license
Creating a custom license is very iffy, since it's very easy to get it wrong if you're not a lawyer. It's much safer to just choose a license that covers the permissions you want to grant.
However it is true that most code licenses are too broad for the average artist
oooooh, i see. what license would fit best for my situation?
one of the CC licenses
there is n o one size fits all
Depends what you want!
three different answers LMAO
typically though for non-software assets it is a CC license
A CC license is probably the best best for a mostly media based project, though.
one of the CC licenses
I don't really think all rights reserved is wrong answer for npc mods where you might not want me making strawdew valley compat
Which one is the "depends what you want" answer for that.
You should have the right to say no to such things

IanaL hours
we are all lawyers on this blessed day
Anyways. You can also dual license
one thing i do think (emphasis on think) people often get wrong about json licensing and such too though is wanting complete control over anything that could ever possibly touch their mods, including someone else making a patch to their mod that doesnt include any content from them but just affects them (like, say, a TextOperations on a piece of dialogue)
i dont believe you can control that? but this is also where nexus permissions come into play bc Nexus doesnt require you strictly follow a license ofc. Nexus follows your permissions
Many of my more content mods have two - MIT and also one of the CC licenses.
Chue, btw
(does it count as dual licensing if a repo has a section that is MIT and a section that is ARR? is that 1.5 licensing)
How do I know if a Chinese translation is a machine translation
yeah nexus (for all its faults) tend to be very author-sided, so you can enforce whatevs you want and they will comply
(DISCLAIMER: I only started modding last year)
Make me read it
make chu read it
The chinese localization gang is usually like
mtl + human pass though
It's basically impossible to tell in this case, if the human pass is good
i mean makes sense
That is fair
why do many work when machine can do most work and you clean it up
The report I got was that the mtl wasn't very clear
I also see translators call ppl out for trash translations that r just MTL
then you gotta get chu to read it 
(tbh this is why for future content mods of mine im just gonna ask that people upload their translations separately)
And given it's the bundled translation I think I'll remove it if is a bad translation
So yeah overall positive culture i think
Tbh it's less...machine translation and more bad translation
im sure there is a translator gang discord somewhere for sdv mods
There are translation uploaders on Nexus who use machine translation and automation. Finding popular mods with translations, and automating the uploads too.
Allegedly/suspectedly. 
They most likely didn't actually playthrough your whole mod, which is understandable
"allegedly" we found the lawyer /j
I am curious if Destroyable Bushes' zh.json is readable, since it's been updated by 3 people now & it's my longest one 
So the context is lost on them
“allegedly” and its the pt translators who shove out 12 translations a day
i read through lani’s chinese translation the other day and it was so funny, bc some pieces of it got “localized” in a sense
(Have I been machine translated?
)
https://github.com/AlanDavison/StardewValleyMods/blob/master/SmartBuilding/i18n/zh.json
and its like. hell yeah.
(my translations are split up into 5 files is that too annoying)
[eats your full name] thanks for the meal
Welcome! 
aww i missed the license conversation
oh we can always bring it back 🤣
you put it in quotes but that is actually a big distinction when it comes to translation! "localization" is a thing. even got its own acronym, l10n
what's everyone's favorite license and why is it WTFPL
i have an extremely specific licensing question in my backlog of things to ask but. ill ask later
there is a difference between i18n and l10n and its nice when it leans more towards the latter
Alright
Maybe a licensing discussion/recommendation thread wouldn't be a bad idea so Atra doesn't keep being scared off...
See y'all latter 
oh i know its real, i just dont know if… it was intended. but it was funny and i liked it
(tbh i thought we did have a licensing thread)
I have actual work I need to do
im good at specific licensing questions! (cant give 'legal advice' because that requires credentials. but i can share my understanding, which is pretty detailed.)
You're not scaring me off, I need to have (specific code feature) done by Monday
And I spent this morning on a speed sock competition so you know my time management skills are bad
I almost always have license opinions to give.
because one of the dialogue lines is smth like “The sun is out but it’s freezing cold, it’s supposed to be warm” and it got localized/translated as “The sun is out but it’s freezing cold, is there a bug in the weather system?” and i laughed my ass off
because ok, a gamer slay, perhaps
i was like yknow what. hell yeah id say that in chinese
Looks good overall, translator knows what git commit is and choose to leave some terms like parentsheetindex in english
Minor nitpick is water tile got translated to a "water porcelain tile"
I would have picked "water grid cell"
i wouldnt say thats a minor nitpick lmao
seems pretty major for clarification reasons
omg 😭😭😭😭
It's not easy
(if you actually didnt mind chu, i am curious about my translations too, if you ever had the time to give em a scan)
chu, you better start charging a fee 🤣
map shingles...
Ill do button n others after lunch
I am glad i had someone to ask when i was doing cp EditMap translations
(honestly im not against tossing someone i trust who speaks a language a few bucks just to verify the ones i got arent shit)
same, I'll take a proofread if it's an open offer, and throw in nexus points if you can use them 
and chu is a trustworthy and intelligent individual, id trust chus proofreading
for lack of other currency options
bc some translators just. theyre not so good
Yeah, Chu, when I eventually get around to a mod that has a lot of dialogue... are you open to a bit of a translation commission? 
I do it for free cus i am a nerd who look up manga raws to shit on viz's trashfire translations
the only translations i can kinda-sorta-verify ish are the french ones but the others im just at the whims of the translators
me w korean but even then. lmao
Jujutsu kaisen special move names was disaster zone
but the ones in my books mod seem to come from translators who have done translations for a lot of other, bigger mods, so
(someone sent me a vi.json TL the other day, and I was like "this is the one thing I can do myself, but laaaazzzzzzzyyyyy")
(and tbh even the french im still limited to mostly making sure its not completely wrong/sabotaged translations, cant localize them at all/know if theres a better fitting word)
Yeah i do think zh tl circles is better than some other languages
my overly wordy GMCM for bushes: default.json and zh.json
600 mtl mod farms 
(but hey, if you got vi.json you want to verify I can do that much at least lol)
One day I'm going to know enough Māori to translate all your mods into it and you'll just have to trust me that it's correct because you'll have no one else to ask 
Caleb npc got a translation that replaced all sdv placenames with love and deepspace names for uh, reasons
is vietnamese an official stardew supported language? i dont think ive ever gotten a vietnamese translation sent to me
nope
afaik all the official translations are in the list here
https://www.stardewvalleywiki.com/Modding:Modder_Guide/APIs/Translation
that's partially why I dont do vi.json for my own mods
ive seen em in the wild too, was just wonderin if that was perhaps the reason why ive never been sent one but have for i think every other language
a few big translations for others have floated around for a while (though I lose track of them repeatedly)
one day im gonna start bugging my partner to help me include welsh translations in my mods, even though theres not even a welsh translation mod out there yet
I don't know if im good enough at Chinese for this tbh
last i heard talk about a welsh translation mod was last year and they were having trouble with the custom font. dunno if it went anywhere after that
That's y im in STEM
Would you believe that I (very, very badly) self taught myself the tiniest bit of Māori and titled a mod for a game in mod form that somewhere around... 15 years ago? 
In hindsight, it was kind of in bad taste (in that it was just for the title of the thing)... so I will not be repeating that!
what about for tiny amounts of dialogue (/j... unless)
viet, thai, and a few others arent officially supported translations but a lot of mods get translations for it anyways
CMF is gonna need a few translations unfortunately
(well not "need" if everyone who uses it customizes all their strings, but still)
ive seen a couple rogue languages i saw once and then never again
The pack possum has like 4 lines and i agonized over that for 20mins 
I've got a Ukrainian translation in FTM despite never figuring out where the mod itself is, iirc
you're hired
Is it cus the vanilla strings for museum are in funny places button
i reuse all the vanilla strings where i can with LocalizedText
but some things needed custom strings
and even then, some of the ones i did reuse are written with Gunther in mind, so not ideal
I should've done that more in a few places
DB's axe list is pulled from game translations, but that's about it
these are all the translations that CMF needs (though the MissingLostBook can actually use the vanilla string i think, i tossed that in real quick in the middle of docs writing and its not yet fully implemented)
i do not know if it has an Accept
it has "OK"
Strings/1_6_Strings:
"Accept": "Accept",
"Decline": "Decline",```
im surprised it took til 1.6
I did just miss it yay
(If you use the translation summary builder, it automatically handles the known custom language mods.)
mileage may vary on context, too, but ig it exists
what if i wanna handle the UNKNOWN custom language mods....
Toki pona sdv when
Oh, how I wish for LINQPad on Linux. 
(The tool will handle unknown languages by just listing the language code in the table.)
english is so difficult sometimes bc accept/decline works in some instances, but not others. and then yes/no works for some other ones, but not all of them. we must unite and go back to the hieroglyphs — ✅ and ❎
Ok but the game dunhave those either
id be surprised if those symbols were contextually the same in all languages too
Me vs finding a X besides the one in emojis
in asia i know they use the 〇 for yes
The cursor one is fat and the 🚫 implies error
Have you seen the new csproj-less csharp thingy?
specifically japan
...no, but colour me intrigued?
checkmark in jp is “incorrect” but its not like, “No” which is still an X
I've always been impressed we even managed to share number-writing as much as we do 
It makes C# act like more of a scripting language. dotnet run script.cs
the hieroglyphs have advanced too far. we must go back to colors — green and red.
oh come ON
the stonks is red when going up
STOPLIGHTS?
are you people looking at what I buy ?! First Blue Prince, then that!
stoplights r green for go cus westerners yea
one could show a happy face and an angry face for yes and no respectively, maybe
LOL
(to whatever degree it's not ironic, things like color-blindness mean secondary symbols are mandatory anyway)
(especially for red-green)
thumbs up and thumbs down, but i think those have diff meanings abroad as well
oh those definitely do
we fail at every avenue…
id not recommend using those globally without considering it lmao
which means we must invent a new system
insert xkcd "there are now 12 standards"
as an emote spammer, I find 👍 translates well enough these days, but yeah, nothing's universal
this conversation has been fascinating to catch up on and follow - language is hard
new idea — we have a thing as yes, and then NO thing as no. so its blank for no. how about it fellas
if you go the conlang route you can always decide whats linguistically appropriate yourself
alas that won't work for chimpanzee gamers
yes tree or no tree 
cant believe the chimpanzee gamers have a nicer farm than me. what the hell
have you tried? i thought we were able to train chimpanzees to press buttons on screens and stuff correctly
iirc a chimpanzee could play a (somewhat modified) version of minecraft
im sure itd probably work if the face was abstract enough. source: made it up, but it sounds like it could be true
in the Stardew context, the smile emote (
) and the X one seem potentially useful as two sides
you seen that video of a chimpanzee playing that memory game
they're secretly top gamers
LMFAO
theyd be able to do the GI crystal puzzle with ease
(i had to video tape it as it got too fast and play it back slowly 😭)
(still too unclear, I'll just put the "this is not a place of honor" text in all my jsons)
i dont think thatll fit in the text box 😔
very cute translation Pawsitive Reinforcement -> 强化爪爪
nitpicks
Debug.RemoveAll.Book.Description 权限 -> 能力
Dialogue.JunimoScrap.Harvest.5 他是给我? -> 是给我? (remove the "he")
not translated yet
Config.Coffee.Bonus.Name 咖啡时间倍数
Config.Coffee.Bonus.Description “咖啡”和“三倍浓缩咖啡”的效果持续时间倍数
aw yeah i can read this for sure
shi… w- wait thats not wǒ but it looks suspiciously like it
and finally, de
one of the keys DestroyableBushTypes.Desc is a repeat of DestroyableBushTypes.Name
their translation of tea bush is at odds with game
- theirs: 茶苗
- game: 茶树
i have spent literally all of my free time in the last 2 weeks playing blue prince
i've started to dream about it
Why is the prince blue
blueprints
(that makes two translators then who did cute translations of the pawsitive reinforcement book and that makes me very happy
also thank you
)
thanks for checking 
do any of these seem preferable to you? the description changed with each author
"DestroyableBushTypes.Name": "可破坏的灌木类型",
"DestroyableBushTypes.Desc": "允许销毁的灌木丛类型。",
"DestroyableBushTypes.Name": "可破坏的灌木类型",
"DestroyableBushTypes.Desc": "允许破坏的灌木类型。",
"DestroyableBushTypes.Name": "可摧毁的灌木类型",
"DestroyableBushTypes.Desc": "可摧毁的灌木类型.",```
i imagine the 3rd one is just mistek
I finally stopped dwelling on it a week or two ago, it ate too much of my brain for a bit
it's so good though
I figured the copy-paste might be intentional since it's just the header "bush types" and "the types of bush you can destroy", but yeah
i would do this
"DestroyableBushTypes.Name": "可破坏的灌木类型",
"DestroyableBushTypes.Desc": "允许破坏的灌木类型。",
this tl otherwise uses destroy -> 破坏 so its odd to have 摧毁 here
I'll put that in and swap the tea bush names & credit you for the update, assuming you're okay with it
yea sure
(the other updates came in as I added more config settings, so the authors probably just skimmed the existing stuff)
chinese has a term that is more specific to chopping down a tree (砍伐)
but since it says destroyable in english no one picked this
I was never sure how to phrase it to begin with tbh
language is hard
yeah, getting my English original for the default.json is stressful
"choppable" felt weird to keep typing & bushes' internal code says public bool isDestroyable(), so I ended up there
yea i dont blame u at all 
and choppable is not as specific to tree/bush in english
ah ok 砍伐 is hew
which is not verbable lol
"I'm gonna destroy these bushes" also feels weird to say, but conveys the idea in a game well enough 
not a word avg person uses
yeah, Ultima Online is the only reason I remember it
landscapable bushes
thats custom bush 2.0 
capable of being landscaped
well, in theory idk if matt did it yet
Smite them.
I'd get scope-creeped into letting people plant them 
lol
(FTM trigger actions will get there eventually, but I don't care to add more nonsense to DB)
(
VS, why did you just double-slash everything when I copied chu's translation)
\\n\\n
@ivory plume not that open sourced mods are inherently more secure, but it's easier to audit that they are only doing their intended purpose. Could it potentially be info that is shared with users in their logs about whether mods are known by smapi.io/mods and open sourced vs those that are not.
Possibly, but that would depend on smapi.io/mods being updated very frequently. Right now it's mostly updated once per month (right before the monthly stats), so any new mods would get the 'beware not open source' warning right at the most critical time for building their playerbase.
It is an added incentive for mod authors to keep the repo more up to date
opinion/vibe question... is there a good reason for me to pick one way of parsing out a trigger action from a string over another? i.e. using /action with events or %action %% with mail or $action with dialogue? Should I just pick one (I'm leaning toward /action) and stick with it or do all three
I do have two minds on that, personally. I sort of dislike telling people that open source mods are easier to audit, because it can give a false sense of security. There's no guarantee that the public-facing source is what was built into the finished mod on <mod site here>.
I don't think you get to pick?
I mean if I'm making my own 👀
therefore we should make smapi build all mods from source
A field so no parsing is required
I agree, and I'm only thinking of it as an informative message as opposed to a warning. It's like do what you want with the info.
Bonus points make it a list
It's like how SMAPI tells users these mods do patches, but most people ignore it.
Which it could honestly do! I mean it has access to all/pretty much every assembly needed, so...
hm... I am still in beta so it's not a big deal to add a field, true... I kinda like what parsing out allows in some ways, too, though... might not be reason enough to avoid a separate field
Even better would be a way to detect if the copy of the mod you're running is a known hash of an official (or known unofficial) build
Then the answer is gonna depend on what else is in the same field
Doubt anyone really cares as long as it's documented
But i am very lazy and want json net to parse it all for me
so we've reinvented code signing
The other reason to have it as a field is cus cp can edit fields by itself
If u r parsing then off to text operations with thee
(Note that we have a specific thread for the SMAPI security discussions: SMAPI mod security brainstorming.)
forgot about that
Yeah, makes sense
Related question: if a trigger action has two optional fields, how does the user indicate that a provided field is the first and not the second? Like how in C# we can tell a method X: 3, Y: 3 for parameters X and Y or can tell the method just that Y: 3 and leave out X
do you have an example? I wouldve guessed by type
I wanted to be able to have two optional strings, one a player facing string, one a trigger action (or list of trigger actions)
I put a placeholder like T for this
It's not great but makes the parsing part easier by a lot
The srs bsns way is uh, reinvent the wheel called getopt.h
oh, so if the user wants the first to be blank but the second to exist they'd write ... T action for the last two
Yep
it's not bad - in my case no one's gonna have the first be just T
I appreciate the insights
you can also choose to have your function parse the arguments two different ways depending on what it sees in the first argument (if anything)
could check whether or not the first string is a registered trigger action for example and if it is, assume they skipped the first optional arg
this is what the viewport event command does, as well as the museum artifact GSQ, and probably a couple others I'm forgetting
(personally I also opt for the placeholder method though)
most of my console commands do that, but I'm starting to avoid it because my code ends up messy
(though 1.6's arg utilities help in some cases)
pretty convenient if there are simple differences between args, but there might be weird edge cases with gsq string vs other string
yeah it's a lot harder when they're the same type
Is there an alternative to Item Extensions for custom nodes?
i have never seen this happen in normal gameplay 
Just tell the users to use 1.14.1
I thought I broke something the first time I followed a critter around
yeah, I think a few critters like that want to hit specific objects/tiles or they'll just keep going
i did like how
rabbits/squirrels iirc anyway
crabs panik around but eventually decide existing is too hard
if theres no water
man i wanna get frozen yogurt
(Matt, someone's abusing the toolbar icons! /j)
its s&s and yes it is
was there a change in content patcher somewhere?
https://smapi.io/log/562900bec6744c7c840a91ee5ce96fe9 someone sent me this.. i have no idea what the problem is, as their mod looks fine
Log Info: SMAPI 4.2.1 with SDV 1.6.15 build 24356 on Microsoft Windows 11 Home, with 7 C# mods and 1 content packs.
Suggested fixes: One or more mods are out of date, consider updating them
can you share the mod json too
certainly
they are using my NPC creator.. still not updated, but still worked for a while
Custom locations are definitely the old way of doing things to start.
it shouldn't cause an issue though, he probably pasted up there
I'm not super familiar with the npc format, but it looks like that's loading portraits to just Portraits/SantosPerez, but the NPC's ID is {{ModId}}_SantosPerez
yea custom location is not great but still works
he's using a disposition.. I don't know if that's fully out of the picture now
(i've been trying to get him to update that to CharacterData
when no appearances exist and TextureName not set to something else, the game falls back to trying for Portraits/<npc id>
so the load should also be Portraits\FallSpice.AltagraciaMod_SantosPerez
its not a recent CP change just 1.6 Data/Characters
not if theyre using a modern CP format number, iirc
yeah, I'm not sure how dispositions + Data/Characters would work in the current CP format, but the error seems to be that the portraits it's checking are missing
if they were targeting npc disposition, content patcher would have migrated that
{
"Changes": [
{
"Action": "EditData",
"Target": "data/NPCDispositions",
"Entries": {
"SantosPerez": "teen/polite/shy/neutral/female/non-datable/null/Town/spring 7//FallSpice.AltagraciaMod_AltaHouse 7 7/Alta"
}
}
]
}```
u also want smth like this for the sprites schedule and so on, it should all use same internal npc id
I get that.. but in practice, there shouldn't be an issue
as far as I'm aware, CP only does migration for non-existent files like dispositions if the format number is older, predating its removal
no like, game is literally looking for dialogue at Characters/Dialogue/<npc id>
if you dont want to change all that then keep using SantosPerez as the key instead of {{ModId}}_SantosPerez
{{ModId}}_SantosPerez is recommended way in general ofc
im about to update mmap 1.8.0 to nexus fyi, but i did test the particular path light issue myself so it should be alright
regarding animation there's 2 possibilities here
- spacecore animations
- this directly targets your path texture and animates em
- bonus is that they are animated in the inventory too
- TouchAction mushymato.MMAP_ContactTAS
- you can make a temporary animated sprite that appears while the player is on a particular tile
Does anyone know which game file contains the logic for the travelling merchant? Specifically, how it picks random items from all of the game's items?
Hi Miss Coriel 
<.< people are scamming others by saying they can help you/help you learn to mod
I am sad that this is a thing
so the random thing is a specific item query
look at Data/Shops "Traveler"
RANDOM_ITEMS (O) 2 789 @requirePrice @isRandomSale
on discord or on nexus?
discord.. nexus has the unfortunate thing of people trying to put malware into mods
i am happy and quite suprised no one has tried to do that here..
So this is probably a stupid question,
But I've got a C# based mod that makes the ranching branch of farming professions factor into the calculation for the value an animal sells for, I was wondering if it's possible to make said modifiers configurable?
Schedule I mods have to be looked through because people put code in it to do nefarious things DX
certainly.. it's pretty simple actually
if its your mod then you just need to add a GMCM or something
true you can just use config api by itself
Honestly I'm just not sure how to read config data from inside the C# code
indeed.. a little extra work to get it on there.. but the headache it saves is awesome

why are events so complicated
i understand what to do but it just takes so much effort lol
I can make a suggestion on that
There are some programs that make eventing point and click, My NPC Creator might be outdated, but the eventing section is still useable
also i used to use fork, i dont really get goto?
ooh
Goal is basically just to make the animal sell value calculations configurable, with the addition of the profession based bonuses to the calc.
Because 130% of buy price at max friendship just ain't it chief.
goto not in the game yet
i thought goto was just a 1.6.16 thing?
ohhhh ok
im interested in that.. we got stuff on it yet?
(also the NPC creator doesnt use the new preconditions format i imagine?)
what do you mean?
does it still use the old format of just like, singular letters
I updated it to take string IDs but if there is something after that I am unsure
theres also some deprecated preconditions that technically still work but shouldnt be used anymore
no actual public build out take this page as a proposal
like A/NotActiveDialogueEvent etc
Thanks chu!
(the singular letter form of all preconditions is also deprecated)
i don't see how precons work now
theres also just a bunch of new event commands and preconditions as well that may not be present in the creator
It's on the wiki events page
(ive not used it so i dont know if the list of them is hardcoded in or not)
Either way the single letter stuff still work
Backlog changing all that for the full npc creator updoot
i'm still trying to get it to push out the Character data
I got the code.. but I haven't gotten it to push out the thing correctly yet
i think i got all the basics in there.. but
this, i believe covers it all
makes matters worse, i have a cat that has deleted my code by jumping on my keyboard DX
another silly question, does anybody know where information on which profession internal IDs are which lives? mostly need to double check since i wrote this code months ago and no longer know which branch of the logic is which. whole mod wrapped up in this mess of a patch.
internal static void SellValuePatch(FarmAnimal __instance, ref int __result)
{
try
{
int SellValue = __instance.GetAnimalData()?.SellPrice ?? 0;
double mod;
double bonus = Class1.ModEntry.Config.BaseValueBonus;
if (Game1.player.professions.Contains(0))
{
bonus += Class1.ModEntry.Config.RancherValueBonus;
if ((Game1.player.professions.Contains(2) && (__instance.GetAnimalData().ProfessionForFasterProduce == 2 || __instance.GetAnimalData().ProfessionForQualityBoost == 2 ||
__instance.GetAnimalData().ProfessionForHappinessBoost == 2)))
{
bonus += Class1.ModEntry.Config.ShepherdValueBonus;
}
else if ((Game1.player.professions.Contains(3) && (__instance.GetAnimalData().ProfessionForFasterProduce == 3 || __instance.GetAnimalData().ProfessionForQualityBoost == 3 ||
__instance.GetAnimalData().ProfessionForHappinessBoost == 3)))
{
bonus += Class1.ModEntry.Config.CoopmasterValueBonus;
}
mod = (double)__instance.friendshipTowardFarmer.Value / 1000.0 + bonus;
__result = (int)((double)SellValue * mod);
}
}
catch (Exception ex)
{
Monitor.Log($"Failed in {nameof(SellValuePatch)}:\n{ex}", LogLevel.Error);
}
}
}
There's a series of constants for them in the Farmer class, but here's my summary of them from last time it came up (accurate afaik at least)
#making-mods-general message
(I suggest changing the numbers to the constants in your code, like 3 would become Farmer.shepherd.)
... Why I didn't consider that when writing this originally I do not know.
it happens to us all
Fortunately this isn't a released project.
And honestly probably still won't be.
This whole thing is ultimately pointless and a "who cares" kinda deal.
git commit often to ward against code deleting creachers
well.. i can probably work my issue out before i get too far
I use NPCDatum to contain all of the information... I know that I need to patch it in this ```cs
DataModels.PatchModel CharacterData = new DataModels.PatchModel
{
Action = "EditData",
Target = "Data/Characters",
Entries =
};
but I need to make it use NPCName: <NPCDatum> in the entries
that's what I'm trying to figure out
DataModels.PatchModel CharacterData = new DataModels.PatchModel
{
Action = "EditData",
Target = "Data/Characters",
Entries = new Dictionary<string, DataModels.NPCCharacterDataModel>
{
[CharacterId] = NPCDatum
}
};
``` I thought it would work like this, but it's not
sorry cat all over me again xD

so I made a PatchModel Duplicate, and instead put Entries to host specifically this model..
how do i take files from a mod and add them to an AT pack? the files i pull over don't show up in AT
Using "Alternative Textures" and trying to integrate "Elle's Cuter Horses"
You need to name the folder correctly, I don't know how at handles horse off hand
assume I have no idea what i'm doing; which folders have to match?
I recommend looking for a AT horse mod to use as base
Bc i also don't really know the AT setup here
blargh.. i left out calendar
someone already did it!!!
@lucid iron ty, u gave me the right keywords to find it
I'm writing the description on Nexus for my mod and I forgot how much I hated trying to format anything in the description 
you can use markdown via a userscript https://github.com/anotherpillow/nexus-markdown which makes it slightly less horrible
quick question? when it comes to making mods? can i use python? i wanna know cause some schools are doing free programing courses
hm hey it's cool to just link the page right?? it might be a useful resource too
i mean they're from harvard and honestly it might be helpful to know
it wouldnt be related to stardew modding
itd be in #programmers-off-topic if anything
kk!
i did add the mod making part when i asked in the linked area
since i'd love to get better and honestly i find being taught helped my skills in areas like art so i thought i could use that same logic when learning to code
I did it! I finished my first event mod!
Congrats! I know from experience those are intense when you start out lol
Yay!
I feel like I need to both take a break from the computer AND start a new one
has anyone had their mods also be part of course homework??
i'm taking a free course on programing and i feel having a final goal would help me get to where i wanna be
Closest I've got it that Igot credit for fanfiction in highschool for a narrative writing course. (20 years ago)
I think that's a good plan. Double dipping on motivation
yee :3
it really depends on the course too
like programing and graphic design has a decent amount of freedom when it comes to what you can produce so long as you prove you know how to apply it
If the course director/teacher doesn't have a giant stick up their patoot, your product shouldn't matter if the learning process was the goal
I teach gifted kids though, I tell them to do what they want within a set of parameters, and kick my feet up
I'm not a shining example of teachering
I know we get a couple waves of mods that are school projects each year but they're rarely updated or do anything about compatibility because the authors aren't often involved in the modding community
yee! honestly the only time i understood why one professor i had did say to not start with fanart was cause they basically told me i need to understand the fundamentals of the medium before i apply it to other works
I wish there was a way to make Stardew valley content patcher modding more drag and droppy, like scratch or code.org. out my own desire for streamlined laziness
is this how you format a quickquestion in an event? i wasnt 100% sure
quickQuestion \"question\"#\"answer1\"#\"answer2\"#\"answer3\"(break)speak {{ModId}}_npc \"response1\" (break)speak {{ModId}}_npc \"response2\" (break) speak {{ModId}}_npc \"response3\"
You need double \s in there, during quick questions. I can't remember where. Let me find an example that I got working
maybe when you need multiple script lines in a response?
https://smapi.io/json/none/30ccc90bcab945afa7028392888fb0d2
Ignore the error. Just using smapi to share the code. @twin wadi
I used the standard single /s after that, to finish the event
would it help in general for modding to learn any coding language?
if so are there youtube tutorials on it?
maybe i am also used to classroom styled learning
if you want to learn coding to make mods then just skip to the part where you learn C#
I haven't done any coding since 2004, and I was able to pick up content patcher stuff easily. I think finding tutorials on the important of closing brackets might help
hench why i did so much better with my art for example when a teacher was there to teach me
i dunno about yt tutorials but yellow book very recommended
yellow book huh? how much are they?
and what languages should i know for modding with stardew modding?
Hey there people of the Valley, first time modder here, I was wondering, how can I make a custom piece of atire for the character select screen?
the programming language for stardew valley is C#
what kind of attire is it?
I'd say shirt, hat, and pants/skirt, I thought it'd be a good way to get a feel for modding in this game
erase all thoughts of pants and skirt from your mind
here are info about how hats and shirts are defined
!startmodding
Making mods can be broadly divided into two categories:
- Content packs are formatted text files, and don't need any programming knowledge. They can add/edit NPCs, maps, new items, shops, and more. To get started, see the list of framework mods, the wiki tutorial for Content Patcher, and there might be relevant guides on the tutorial wiki.
- C# mods use programming code to change fundamental game mechanics. See getting started with C# modding.
Usually it’s easier to start with making content packs, since you don't need to learn programming.
take a look at the content patcher tutorial as well
out of curiosity how come?
Oh I'm fully ready to do that lol (I don't mind the extra work, helps me learn stuff)
another thing you should be aware of is that many people use fashion sense instead of vanilla system for clothing