#making-mods-general
1 messages · Page 336 of 1
I'm sort of in the process of learning! I've picked up a couple of things as far as the coding goes, but creating my own mods from scratch is something I've barely scratched the surface with, haha
I really just know enough at this point to fix SUPER minor bugs that I come across 😅
!commissions
If you're looking for people who do mod commissions (either art or code), here's a wiki page with a non-comprehensive list of people who do them: https://stardewmodding.wiki.gg/wiki/Stardew_Mod_Commissions
well if you ever have specific questions or want tutorials to follow, let us know! there are good resources out there
or yeah you can commission someone!
But idk what if Harvey is a time lord - a Dialogue Overhaul
Omg
I'd be here for it 🤣
It's so cool that there's a wiki page for the folks that do commissions!!
That would skip the art part so u can just do dialogue bits (compatibility aside)
his clinic IS bigger on the inside…
You're so right.... Gah. You might have just planted a seed in my head 🤣 ♥️
hi! so i've never done any modding or coding or anything before, but i really want to make a mod to recolor the buildings on the farm (shed, coop, barn, etc) and i was wondering if anyone has any videos or advice or anything! so far it seems krita is a good free program. thanks in advance 
!startmodding Welcome to modding! The bot message that appears after this comment should help you get started, that's something you can do with a Content Patcher content pack 
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.
Hi!
To start, you're going to need to download and install SMAPI and Content Patcher, which let you make content packs. Follow their steps exactly, even if it seems unnecessary.
Then you will need to extract the game's tile sheets, which it uses to make silly image on screen. You will need a software that can unpack .xnb files into other files, the recommended one is StardewXNBHack. They will unpack into a folder called "contect (unpacked)". You will reference this folder every time you want to check the original tile sheets.
Then, you will need to import the tile sheets with the tiles you want to edit (in this case, the sheets with the farm buildings) and edit them in your software of choice. You use Krita, I use Gimp.
Then you will need to export your tile sheets into a folder. Inside your "Mods" folder, make a new folder, name this folder with your mod name. Inside THAT, make a folder called "assets".
Then, create two .json files: a Content and a Manifest. Content is where the magic happens. Manifest contains info like your mod title (which you can replace with {{ModId}} in the Content file to make things easier) and version and description and stuff. These are going to be in your mod's folder, not in assets.
In your Content.json, you're going to do some Action: EditImage commands. Action:Edit finds whatever you want (in this case, the tilesheets from the original game) and directs the game to load your tilesheets instead
There might be other things to edit, like changing the image that shows up in Robin's building menu, but idk about that.
Hope that helps you get started. I constantly reference the Stardew Modding wiki, and you need two other sites: smapi.io/json (json file parser so people on here can help you easier) and smapi.io/log (SMAPI log parser to be able to share any errors with people on here.)
youdo not need to do anything with Tiled to retexture buildings
(and i would not recommend creating tsx files)
Okay
will update that
you also do not do any load actions
all they need to do is edit some images and use EditImage
is there a debug command to make an npc play an animation? i need to test some animations for npc sprites but it's hard to trigger them
i just solved a bunch of errors so feeling good 
But Yoba gives the hardest battles to the funniest clowns
in my fantastic sense of order i thought i lost a lot of retextures I did but turned out I did not(my order did not convince the jury)
i used to hate troubleshooting but its been honestly fun (the tmx errors were not fun though)
so i spent the last three hours ordering my data instead of working on my mod stuff 
maybe i could just create a temporary event that triggers all the animations and just run the ebi command
just make a schedule that has all animations, why make a whole event
that works too! it was just easier to trigger events tbh
does anyone know what the sound id for animals eating grass is?
I dont think they make eating sounds?
idk i don't remember exactly lol... but i feel like there was this rustling grass sound when animals ate it
or maybe it was just the sound of animals walking in grass
yeah that's proabnluy it]
dirtyHit
probably that, yeah, there's no sound in the Eat code etc
rip my spelling 
you might be confusing it with pigs digging up truffles
yeah probably
which plays dirtyHit
ohhh okay thank you
(or any animal that digs up produce not just pigs)
also i might have to recode my event
i used advancedmove for some animals running in circles, but i cant time it perfectly so that they stop at a point i want them to... like it changes depending on how long it takes for you to click out of dialogue
wish there was an option to make npcs walk to a specific point by the coords of the destination like in schedules
what's the difference between that and a tile offset?
wdym?
I was trying to figure out where that came into the equation atra 
Tbh actually I literally coded that into smd because of one minor use case
I wanted to have npcs wander randomly but then be able to order them to a specific tile
Is there anything specific I need to do to make a mod compatible with android or will it just work? I didn’t even consider some people use mobile lol
I needed it for a Pam Tries event (penny paces in one.)
fair, but other than that, isn't a tile offset with a known start tile basically the same as walking to a coord?
do you have any c#?
Nope
if you dont have any of your own C# then there is nothing you can do to affect mobile compatibility
honestly you're probably good then
it either works or it doesnt, depending on your dependencies working on mobile or not
yup, that's a more accurate way to put it
Ah ok thank you both 
is there a mod for this?
the mod is called smd but idk if atra released it yet 
that being said, like I said, you can probably achieve this with regular moves/advanced moves and possibly proceedPosition
i could add in a little fade where the msg is like "one eternity later" or smth lol
and reposition everything
I'm confused about what you're trying to do that these commands don't already handle tbh
does proceedPosition work for advancedMoves?
I don't see why it wouldn't
it was just that it was a looping advancedMove, but now i see it might work. ill try it
yeah
they dont know what the starting position is going to be though
bc of that yeah
i presume the animals stop moving with a stopAdvancedMove but the issue is that sugar doesnt control when stopAdvancedMove happens. the player does, depending on when they advance the dialogue and how long they take to do so
yeah...
so the animals may be in any position within that loop when sugar tries to use the regular move command
oh, I see now
Yup, and see what I said about smd last time
I'm late
if the advancedMove has a point where the animals pause in one spot for a moment, is that not enough for proceedPosition?
i dont know how that specific event command works
I wonder how proceedPosition handles pauses in advanced moves
i mean, i could test it
dammit button 
it looks like it just checks if the character isMoving which i think literally just checks if they are currently, actively moving, not set to move
so it may work to wait for them to pause at a known tile
that said dont quote me on it
unless it works
ill test it fs, shouldn't be too hard
wait, do i put proceedPosition after stopAdvancedMove or before?
k thanks
will this work? there's two animals so...
proceedPosition {{ModId_Teddy}}/
stopAdvancedMoves/```
not if the chicken would start moving again before teddy stopped
maybe i should make chicken pause a little more then?
you can, if you're fine with the chicken pausing that long on every loop
the loop ends at the same time for both of them though, the gap shouldn't be huge at least
do they move in the same way?
and do you need to wait for both of them at the same time?
stopAdvancedMove doesn't take any arguments and stops ALL advanced moves so you have to wait for both of them to stop if you wanna be sure of where they'll be
button are my questions even less helpful than usual today /lh
Events scary goodbye
Does counting this question bring down the average?
I'm extremely offended, just so you know /j
most of my event knowledge comes from reading the code for individual commands when someone has a question and no one else is around to answer
there is—does move not work here?
oh wait no because you can’t tell where they’re starting from never mind
i just tested it twice and they both end up at different positions both times
did they pause correctly?
they do pause, but they stop at different positions of the loop
I would try to simultaneousCommand the two proceedPositions
aaaah this event is more complex than i imagined
im not giving up tho
oh that's a great idea!
or use the one that waits for everything to stop
if they're the only two characters moving
(case in point: I had no idea that command existed)
my knowledge of events comes from the same general place as yours but replace source code with the wiki lmao
waitForAllStationary, that's the one
that's better than where the rest of my knowledge comes from which is Mirror Mode experience, which so far science has found no practical use for
Same!
oh, okay, simultaneouscommands won't work in this context, but since you need everything to stop anyway, waitForAllStationary will
yes!!!! it works!! with the simultaneousCommand stuff
oh, nvm
When I'm eventing i have no patience and have c#
i tested it twice with different pacing and it ended at the same position
events work in mysterious ways
its sooo hard but it's really fun
one day I'll have to actually write some and I'm dreading it
c# modders at the tiniest content inconvenience:
this is true
and trigger actions and queries and whatnot
What's your OC, iro
my custom NPC is gonna have so much bespoke stuff
I wonder if goto would help with this 
Tbh chue I've resigned myself that Pam Tries and Science House Rewritten will both never exist
But both will use SMD
you could probably implement a hill climbing algorithm with gotos to navigate to the correct tile eventually
joke's on you atra I actually have an npc mod planned rn it will never be published it's just a proof of concept
I think they should exist the market of
mod is untapped
hardly sounds like a plan. I expect them released by the end of summer, thanks
they'll be released if by released you mean I will throw them in a discord channel and refuse to acknowledge their existence from that point on
I don't
now thay its a more active time would someone be ok with helpping me on this since i havent been able to figure out how to fix this still, if not thats ok i can try tweakimg it myself til i get it right
I don't mean that
@tawny ore** Better Chests** Mod Question:
Hello! I'd love to use your mod but the dependency on Fauxcore is a big problem. From what I read and have seen, Fauxcore is not maintained and non-functional.
- Is your Better Chests mod usable without Fauxcore?
- Is there any intention to patch for the lack of Fauxcore going forward. If this has already been done, please let me know.
Thank you for your time! Please @ me in any response <3
It's a time management issue
yall c# modders are rly cool lol
Better Chests is discontinued
gosh better chests, I miss it, such an awesome mod
Instead of working on mods i joke around about candy at 1am
thank you for replying, I appreciate it!
(also for questions about using mods, you're better off asking in #modded-stardew)
(this channel is for making mods)
guys, I just finally finished a big pack of custom paths, I'm so happy. It's easy compared to all modding out there but this is a big achiev for me 😭
Yeah i expect full nexus page with cover art and nice headers explaining their deal
there will be one singular discord message with a zip file and maybe an emoji
I can't check the structure of the forage field on mobile rn, but have you double checked that it's expecting an object ({ ... }) there and that your target field is correct?
Is the emoji 
maybe
or 
I wonder if there's any custom path mods authors out there that want me to convert their paths to unique items, I'm ina roll XD
but I can't make sprites to save my life
i havent but there shouldnt be any issues since its been mostly repetitive coding so ive just copied the previous things ive written and made adjustments to match what the entry is for, but for some reason once i added the 3rd object the error came up, but when i check the json in visual code studio and json validator they say theres nothing wrong
Tbh if u feel like u want their paths in your game anyways
Just convert and offer files after
i was gonna just rewrite the third object but i figured I'd see if there would be any quick fixes instead of having to write it all again 
but I'd love to convert first to a modder that wants to share with other people
i can take a closer look when im back at my desk in a few minutes if no one else does before me (reading jsons on mobile is a PITA)
alright, take your time, and thank you for helping

i’m back with more questions about hardcoding: would i be able to create an item (magic 8 ball) that could tell you your daily luck? either an object or decor/furniture
does cp have a daily luck token
it does
then you can do something with spacecore's furniture action to show a message
object not with CP alone
oh sick
furniture what selph said also not CP alone
but with just spacecore, or would i need anything else
hmm now i have a different problem... teddy (the cat) is supposed to pause, do an emote, and walk to the farmer. but right now, teddy just runs up the map and goes out of bounds, and the event just stops. is there an error to this specific part?
proceedPosition chicken/
proceedPosition {{ModId}}_Teddy/
endSimultaneousCommand/
stopAdvancedMoves/
pause 500/
emote {{ModId}}_Teddy 16/
pause 500/
move {{ModId}}_Teddy 0 -8 0/move {{ModId}}_Teddy -5 0 3/```
are you certain that the json you sent is the json you had at the time you got that log?
Ah you're getting the other reason I wanted a goto this square command
Move commands after advance moves break unless you reset the actor to a tile first
ohhhh
Or use another advancemove
You just use the game's Message tile action in conjunction with spacecore to add the furniture action
okay, thanks. advancemoves are really hard lol
Another way is, no furniture but usable item with spacecore
(also, it may be easier if you just put all your entries into one patch. you dont need 3 separate patches if you're editing the same asset)
Raise a trigger that shows some messages (spacecore hud message, betas dialoguebox, etc)
a useable item would be awesome! especially since having it be furniture kind of defeats the point when the tv is right there
PH SORRY-
i just double checked the log and mistook the folder 'Dice' for the 'dice' json
i probably should stop staying up til 4 am coding- lemme just quickly check the correct json with the validator 😭
But you won't be able to get the welwick message persay
I think u just get the raw luck number
you can make a dynamic token that changes the text based on the value of the number
Need to do ur own text if u want similar yee
yeah that's fine, i could then use the luck number to define messages to send right? like if luck is < x, then send "outlook not so good" for example
perfect
ill keep this in mind, i was mostly following what i could understand best for adding different items n such 
Use the luck for a dynamic token (or LocalizedText if u wanna go that route)
you could technically use the If action too but id not recommend it
localizedtext would be if i was using i18n, right? since you can't use tokens inside of them or something?
how do you do this?
LocalizedText is only an option if the trigger action action you use supports tokenizable strings
by default, they do not
dont know if spacecore's HUD message does
oh i think i get it, like how you have to reference Strings/whatever if you want your tile action to be formatted text?
(spacecore's hud message does parse tokenizable strings apparently)
you can put any string you want in any asset anywhere
doesnt have to be Strings/
(by that i mean you can make up an asset. cant put it in an existing asset that isnt a string -> string dictionary)
i tried warping but that didn't work, is there a separate way to reset the actor's tile position?
but if you only need this one string its probably easier to just add to Strings/Whatever
got it got it
you'd editdata your entry into Strings/Whatever
and then your tokenizable string token would be [LocalizedText Strings/Whatever:YourEntryKey]
Yee
I think doing it like this might be nice cus u can invalidate it with the betas thing in middle of day
Warp them to the tile they are on
spacecore's ShowHudMessage supports that and all BETAS actions support it, but vanilla actions (not that theyre applicable here anyway) do not support it
(You see now why I wrote my own damn command now)
If u need something that is change beyond just on the morn
(i do have both spacecore and BETAS as dependencies already so that's good)
oh awesome
so like for example the 8 ball reads bad luck in the morning, then you go collect a rabbit's foot, then it changes to show okay luck
i tried it, and for some reason the movement was broken still.
This might work but idk how the luck token in cp is implemented
It could be base luck only
yeah.. advancedmoves are unnecessarily complicated lol
that's fair, and i'm not that fussed about it being exact lol
(wait is there really not a DAILY_LUCK gsq in vanilla)
(i take back what i said about using the If action earlier then)
also i would be surprised if the luck token was not taking straight from the DailyLuck property on Farmer
which handles things like the rabbits foot
I thought there was because Garbage dehardcoding depends on luck
do the LUCK_LEVEL skill GSQs count daily luck?
nope they take the Farmer.LuckLevel
hmm
im assuming the garbage cans use the RANDOM GSQs with the @addDailyLuck parameter
confirmed they do just use RANDOM with that parameter
lmaooooo that's definitely true to life
they dont check the daily luck directly
is there a way in CP then to do daily luck + luck skill = token?
(BETAS has the RandomAction action, you could definitely make a 100% bullshit random 8 ball)
Luck skill?
this?
Luck skill != daily luck
i wouldnt worry about luck level so much
its mostly unused
iirc
oh okay
I vote for 100% bullshit 8 ball
i believe the only time its affected is with food buffs since you cant actually level up luck
without a mod
and tbh yeah just using daily luck is fine with me like i said, i just got overly invested in the math of it all
It'll avoid problem of ppl having the modded luck skill then only seeing high luck msg too
in the show my mod is based on, the 8 ball does indeed tell one character "outlok not so good" every single time she uses it lol
I dont think any of the luck skill mods use the unused luck skill either last I recall?
Oh no we invoked simspsons
actually they do, from a brief source glance
Does the TV use hardcoded logic for the luck channel?
interesting how the luck skill is rather integrated for an unused skill, like it's even used in mastery calculation
yes
Oh interesting. I wonder if those thresholds are arbitrary, or do they have significance
not shown is the full length of that middle one there which is just a triple ternary to handle the upper thresholds
so everything seems fine just doing some additional testing ૮₍ ´ ꒳ `₎ა
I love myself some nested ternaries
the worst part of event testing is that you have to watch them 80000 times. the best part of event testing is that you get to watch them 80000 times
i also just realized is this literally creating a DaySaveRandom and then just.... not even using it.
Does that Utility method have any side-effects?
Well it progress prng right
Bolb
It's almost like the C# optimizer seems to think it's possible for DailyLuck to change to 0 while going through the other conditions
screw using BETAS random, i want to access this random /j
the forbidden random
Well it is a getter
Two things
- C# has no concept of marking methods with side effects.
There is a jet brains annotation and it enforces nothing
- The bulk of c# optimization is done by the jit
You look at the IL and go "oh god why"
Or at least I do
(also i dont think its assuming it can change while going through the other conditions. rather, the other conditions dont check for 0.0 exactly. they also dont return though. so it can still be changed after all the conditions)
I'm just curious what the OG code looks like
like why isn't this just a single set of if/else if/else
or a nice pretty switch statement
Can u use switch with range like that
also i just feel obligated to point out that while this may be hardcoded on the TV you CAN change what text appears yourself using BETAS harmony postfixes—
yes
You can
(I'm not sure the game can)
Filter clauses
not really related but I miss Rust's "almost everything is an expression" thingy so I don't have to use ternaries or the not-as-flexible switches
let x = if plssss
switches are pretty darn flexible nowadays
javascript short circuiting is just as good /j
this but unironically
I hope that when whatever C# version brings the extension method changes, we're able to use that in mods
button no. no crimes
i like javascript
i would say "liking javascript" and "enjoying javascript" are subtly different but different nevertheless
that is very true and intentionally so
Actual answer incoming
Feel free to create it!
But what would it do ...
That's a bug in Stardew Valley 1.6.0+; I just fixed that for the upcoming 1.6.16.
Load mods?
i feel like ive never been more terrified (/lh) in this server than sending that and seeing "Pathoschild is typing..." immediately after
You'd also need to port SDV of course
Can u wasm it
everything SMAPI can currently do, but i can do it in javascript instead
hope this helps
someone already did most of the work, let's go
how do i even use this
is it possible to put the farmer as the npc in textAboveHead? it caused an error in smapi
no
That's the one thing SDV needs, is to be an Electron app
id be willing to be generous and let it be a Tauri app instead
Hi, I made a custom location and I want to exclude it from some NPC's pathfinding, but I want to allow other NPC's to pathfind through it. Can I do this?
if spacecore cant do that then i dont think theres anything that would
and i dont think spacecore can
hi👋 Sorry to interrupt...
asking a question about CP and Appearances
My mod has multiple different Spirit's Eve outfits per character that gets randomly selected each year
but let's say I have two characters who have matching outfits (Penny+Maru as Daphne+Velma), is there a way to ensure that CP checks what Penny is wearing before loading Maru's outfit or vice versa, and then matching accordingly...?
are there conditional warps that could only work for certain npcs? 
you can probably use SYNCED_RANDOM
that's the easiest way I can think to do that pathfinding thing
Would npcs normally pick your map tho
That's a good idea
Like what if u just dont make it attractive to the pathfinder
Penny: SYNCED_RANDOM day costume 0.5
Maru: !SYNCED_RANDOM day costume 0.5
no
whelp, there goes that lmao
I feel like it would be easier to do that than the pathfinding though
maybe, but in this case if you just want to exclude NPCs then its not that great
Yes, I made a new map/location for my custom NPC's to live at, and I've caught Marnie and Shane walking through
and making it a whitelist instead means terrible mod support
I have decided what the missing recipe shall be. Not tea nor mead, but mulled wine. Sent on winter 2 after meeting Alta. perfect
I wanted something like this some time ago lol, to solve the bus warp conundrum
it was discussed again just recently, too
Does ur map lead anywhere intriguing...
I'll consider moving it....
Like is it shorter path to town or whatever somehow
out of curiosity, why not?
are you going to manually iunclude every single NPC, modded or otherwise?
in your conditional warp
hmm, I figured you would be allowed either option depending on which suits you best 
like if you want "everyone but Willy" to use your warp that only allows certain people through, you have to define "certain people"
vice versa just has the same problem but the other way around
so if you want the warp to only be usable by a few npcs you whitelist, if you want everyone but willy you blacklist
so basically, both options
tbf, your original message only said "only work for certain npcs" not "only not work for certain npcs" 
Everyone's invited to this map. Except you Willy, you're not invited.
Is it possible to just use this in the weight field...? or does it go elsewhere
itd go in the Condition field
you'd have two appearances. one appearance uses the positive version of that synced random, the second one uses the negative (prefixed with !)
can anyone point me real quick to where to figure out how to do a conditional warp? I'll try the whitelist thing
two appearances for both of them, i mean. they each get 2
oh I see nvm, got it now. Ty!!
I'm still new to modding, just been following guides
as long as they both have their appearances added in the same order whose conditions are oppositethe others
you cant. its not an option
oh darn
not on a conditional-per-npc basis
How did you add the map
Last time this happened @brittle ledge accidentally left a random extra warp
(we're speaking hypothetically about how it would work if it was a thing)
I'll grap a screenshot real quick
if your map only has one warp it shouldn't happen, but if it has multiple there's your problem
warps that don't work for npcs are a thing, right? or is it just npc-only warps that are a thing?
wow atra, just call out my tiled crimes in public, why don't you 
I edited the forest and bus stop to add a location between the two. But now shane walks to work through it.
Oh the gate is open even though i have it shut in this pic
Do you have spacecore installed
no
hm
Loops are bad in the scheduler
can you just block every tile in that path with an NPCWarp to like
Spacecore fixes one of the ways loops are bad
Ginger Island
No
why not
Because the macro scheduler doesn't even look at how the map is set up
The macro scheduler just links maps to maps using the wrong algorithm
I'll go read about spacecore on github
I don't think this is documented
its not
How do you think Spacecore will help my pathfinding problem again? I want to make sure I understood
I don't know what that means aw
why would a scheduler be using dfs in the first place... strange decisions
I found this paragraph in Spacecore Github page
"Fixes NPCs taking the longer path when there are circular routes. Note that the "length" of the path is determined by amount of warps, not by amount of tiles travelled, so if there are two paths to a location with the same amount of warps but one map is much larger, they might still take the larger map path."
(I wrote that scheduler. Spacecore has a cut down version of the elr macroscheduler.)
(I'm confused, I thought we were talking about the game scheduler)
As someone who has had horrible horrible situations with vanilla's scheduler ... spacecore really does help
(Apparently the npcs love having a party in qi's casino.. because that makes sense 100%)
so Shane's normal route to work requires 2 warps Forest -> Town -> Joja, and he is currently taking my route Forest -> New Map -> Bus Stop -> Town -> Joja
Yes. The game scheduler is dfs. Mine (and spacecore's) is bfs
Anyway you guys have been helpful I'll play with spacecore now
Sometimes its not even just the number of warps, for some reason Willy wanted to go to ginger island through Qi's room (since I put in a warp there to his walnut room) and THAT was a bunch more warps than just going through the boat in his shop .. sometimes it simply do not make sense
"targets": { ".NETCoreApp,Version=v6.0": {}, ".NETCoreApp,Version=v6.0/win-x64": { "Stardew Valley/1.6.15.24356": { // This line "dependencies": {
hey guys, can anybody tell me what does the number after the version codes mean? Will it affect the funciton of mods?
OneDrive is ruining me. I've tried uninstalling it, and it keeps returning like a shitty hydra head. It's restoring old versions of my master mod folder
onedrive my beloathed 😭
im trying to read the game version but I can only just find the only clue in Stardew Valley.deps.json
I think that's the current version of Stardew Valley
have you tried using github? i haven't 100% figured it out myself but it's supposed to be really good for file versioning
I haven't yet. Thankfully I have my two mods zipped, and loaded up to Nexus
What about looking at the game data via steam?
The newest version should be up there too I think
I mean the 24356 after 1.6.15
it's wired
Why do you care about this tho
i haven't seen it before
its just the build version
I'm assuming that's part of the update chain. Versions solely depend on the programmer, so it could be the number of individual changes CA's made on 1.6.15
i dont think its got anything to do with mod
oh thx
while we were having 1.6.9 nightly betas, this number goes up
so normally it should be ignored?
when ppl start smapi it does get logged
[SMAPI] SMAPI 4.2.1 with Stardew Valley 1.6.15 build 24356 on Unix 6.12.32.1
usually no one goes out of their way to put this in the mod manifest tho
im not sure if it even participates in the check
it doesn't seem to be a standard Semantic Version
I'd leave out anything extra that isn't needed. There's enough room for errors and bug report causes
i should handle this situation in my app
sdv doesnt do semver
2024, the 356th day of
It's just the build version
thats why 1.6.9 breaks mods 
I've done this many coding. Let's test it for the first time and see how many errors it throws, and if Smapi quits its job on me.
oh so usually it won't affect the game & mods?
What are you even doing lol
hey what are you working on, im curious
(iirc making a mod manager?)
yeap
You can ignore the build number probably
I'm working on my first NPC too! Let's be troubleshooting buddies
i need to get the version of the game & smapi
aw heck yeah!
oh i cannot find a way to get the installed smapi version
im developing a mod manager actually
so the game version & smapi version are needed for version controls
now it looks simple but im working on it to complete my thoughts
so do anybody know something about that?
that's too advanced for me, I'm sorry
is there a way to code in something that auto reads the folder after user selects it?
I keep getting a error from my content.json
the json validator isn't catching it, but Smapi is uphappy
set your json format to content patcher, it'll point out where the error is!
^ its valid json, but not valid content patcher syntax
oh thank you!
now to decipher "6 ConfigSchema.PortraitStyle.AllowValues Invalid type. Expected String but got Array."
its as it says on the tin. you put in an array [] but you need a string
I don't use my reading skills - I never noticed the format drop menu
AllowValues take a string of comma-separated values
"AllowValues": "Default, Smarmy"
not a list (even though that's more intuitive ngl)
well i wouldnt resort to googling before just checking the CP documentation
I didn't know that existed. I'll look for it. I've been sort of flying by the seat of my pants, using the wiki and looking at how other mod authors did things
you've been making a content patcher mod without knowing content patcher has documentation?
🫠
its linked in its nexus page as well
would you like to give me a hand
not particularly, as what you're trying to do is not something i have knowledge for
You know. I teach young children to read directions, but I don't follow my own guidelines.
on the bright side making your mod should get a lot lot easier now
I saw a facebook comment about someone wanting a mod for Marnie and Marlon, and went 'I can learn that', and jumped in like a doofus.
ty Button 🙂
i don't want to launch the SMAPI exe to get its outputs for resolving the required data, then kill it
you can ping pathoschild with your question
have you looked in the smapi-internal folder at all
I think it's kind of offensive
that is where i would look first, but beyond that i have no idea
i checked the readable text files
to ping pathos?
and found nothing
it's fine, we do it all the time to beg ask for features. as long as you're not being intentionally annoying
well theres a file in there called StardewModdingAPI.update.marker that has the version number in it so id probably look again
i think u just have to grab it from assembly right
How exactly do I load a custom item's sprite? The object data loads fine and 2 of the fish I added even show up in the fish tab of the collections (not sure which ones though)
do a Load and then use that target for texture
reember to spawn new items if u changed sprite index
actually it contains in SMAPI.Installer.deps.json, but its only in the installer folder, after installed, it was not contained
tbh i can't find it
This may help, I will check it later, thx
i have no idea where my file came from then
The way I made it is so that item has its own separate sprite.
changing not 0 to 0 is still change, but if u r still confused then please upload what you have
!json use the validator
JSON is a standard format for machine-readable text files that's used by Stardew Valley mods.
If you need help with a JSON file, you can upload it to smapi.io/json to see automatic validation and share the link here.
When making mods, it's recommended to edit your files in a text editor with JSON support, such as VS Code, Notepad++, or Sublime Text. These programs will check for syntax errors.
(Stardrop?)
i dont remember ever using it, but maybe?
Which also looks at the smapi version I think to update smapi
i still manage my mods by hand and always will
It probably has a whole bunch of other mistakes as well.
Any help?
I manage my mods with visual studio
pls use the json validator
I already used both the SMAPI one and the one built into NotePad++.
you havent posted your json here
we ask for validator jsons so the link can be shared in here
so people can help
It's inside the zip file.
i will give it a try to earn your approve

your textures need to match the target of your load
not the file name/extension
I don't understand how to do that.
put Mods/NotEnoughFish.olm into your Texture:
hm would you even be able to load like this 
also just a heads up, you’ve spelled Wizard incorrectly
yeah i assumed you could only do one at a time but figured maybe this was allowed and i just didn’t know
Do I change the two backslashes to one single forwards slash?
well if u wanted multiple you need {{TargetWithoutPath}}
you cannot load from multiple files at once like that*
{
"LogName": "Load_sprites",
"Action": "Load",
"Target": "Mods/NotEnoughFish.olm",
"FromFile": "olm.png"
},
lets not worry about that n go for this 
after this load you may use Mods/NotEnoughFish.olm in Texture
yeah first change your loads, then whatever target you have in your load, use that as the texture
Also please for God's sake merge your textures
Why?
Two major reasons
is there not a way to load multiple textures at once?
- It increases load time
- Texture switching isn't great for the renderer
the token way chu mentioned yes, listing them out like that you have no
Im trying to edit that map of this farm cave mod cause it bothered me that everything would be on the very top
But when I apply the modified map the game goes back to the vanilla cave
Could anyone help me with this please?
You can load multiple textures and do that but also
to read the DLL version is usable, thx very much
Can you tell me how?
(I could, but since I'm telling you please don't....)
Then is there an easy way to merge textures?
Thank you.
Now how do I add fish to the mines?
The olm is supposed to spawn on floor 20 and the Organism46b knockoff on 60.
edit Data/Locations, TargetField UndergroundMine > Fish to add your own entries
the entry for the olm has the condition LOCATION_NAME Here UndergroundMine20
Thanks.
Didn't know it worked that way.
I thought each fishing floor had its own fishing data separate from each other.
mines are special bois
yeh
and level 100 is the specialest
you cannot add any fish there at all, it's hardcoded to always be lava eel or trash
20 and 60 still uses location data though thankfully
So no bone fish unfortunately.
Gotta take a break unfortunately. Mom wants me to go downstairs.
should we bother pathos for a special "UndergroundMine100" phantom location entry
Also, is the Night Market also hardcoded as well?
the submarine u mean?
Yes, I mean the submarine ride.
i think its just location Submarine?
When I looked at a page list on Stardew Valley Expanded, it had no new night market fish so I thought it was hardcoded.
Trying to fix my schedule.json errors is giving me a massive headache.
There's an extension for Notepad++ that can help with validating JSON files.
Fair.
are they syntax errors or do you mean the behavior in game
Are Desert fish also hardcoded as well? I assume no though.
also no, ur good
if u see regular feesh Data/Locations.json it is usually fine
syntax errors I think. It doesn't like the When Refrienship lines I think
And should I add humorous reactions to when you try to give Organism46b to a villager or should they just call the player a conspiracy theorist?
It won't be called organism46b in game though.
Humorous, with someone unexpected going full tinfoil
like Gus
or Jodi
Kent definitely
instead of "When": for heart level, you can use the friendship keys such as Mon_8
since i don't think that's how you would format the When conditions
and while i'm at it, you have to format the schedule dialogue like so:
i have examples if you need
hey is it valid to directly use nexus mod id as UpdateKeys?
oof I messed up badly then
it's okay, it happens!
needs to be "UpdateKeys": [ "Nexus:XXXXX" ]
that way it knows which website to check
so that's a mistake which i may should ignore in my app?
@idle lantern (also, if you were unaware, when dialogue is coded into schedules like that, the NPC only repeats that line until they move onto the next schedule point, so if you have dialogue at every schedule point, then he won't be able to say his normal dialogue)
the schedule dialogue is usually used for specific things, like "Abigail is playing her flute and doesn't respond" or something like that
ooh
I need a brain break I think.
I'd forgotten how tired your brain gets when learning. I've been torturing my students for years now
you can see more about how to do that here: https://stardewvalleywiki.com/Modding:Modder_Guide/APIs/Update_checks
actually I knew about it
it just happened when i try to read my existed mods' manifest.json
so im thinking if there was a time that this kind of format is valid
as a software history problem
I don't think there's a historical reason people just do it wrong
If a NPC is being introduced during an event, do I need 'Introduction' in the dialogue.json?
Introduction is just the name of a conversation topic which lasts for the first seven days of gameplay, so if you speak to them during normal play during that time they'll say that line
once the topic expires, it won't trigger, so if your NPC isn't available before then, you don't need to bother supplying it (you don't need to anyway; it's only useful if you want a "oh, it's the new farmer who just moved in" line)
tl;dr i wouldn't bother if you're introducing them in a specific way, no
I'm glad you answered that question ichor because I thought Jierishi was asking if Introduction is used in intro events lol
The other thing is that unless you edit your npc into the group dating cutscenes
They only include vanilla npcs
ty!
Also, how do I add multiple fish that each have different conditions to the same area?
Attempted an array but that didn't work.
@calm nebula Here it is in the correct channel.
(I don't answer summons)
Be nice please.
(You're blocked now. Best of luck making your mod.)
Because I certainly am not interested in being helpful
I'll just ask someone else if you're just gonna be an unhelpful toot.
@vernal crest How do I add multiple fish that each have different conditions to the same area?
You're going to get blocked by everyone one by one at this rate
Can you please help me? Trying to add one fish each to floor 20 and floor 60 of the mines and want them to be exclusive to their respective floor.
- having the mod author role doesnt mean they are obligated to answer questions in this channel
- if you keep pinging people out of the blue that's a good way to get blocked
- people have lives, you just caught the channel at a quiet time
- just add multiple objects to Entries, like
"Entries": {
"Fish1": {
//...
},
"Fish2": {
//...
},
}
(also mineshaft fish are hardcoded and aren't in data/locations)
(they do read extra entries from UndergroundMine's location data, so you can add new fish to 20 and 60)
Did I get pinged because I'm high up in the members list or something?
(Also four minutes between asking a question and saying "nobody answered" is wild.)
I think its due to you being the most recent cheeto to send messasges
Is this i18n?
What are all those dialogue keys? They're not standard ones 
I used Shiko's mod as a reference for the new dialogue template
Shiko's super outdated unfortunately
Shiko is very old and still broken, I thought?
this was the schedule version that wasn't working. I've saved everything
damn it all
(Though I am really curious why people keep using the Shiko mod as a template. Is someone out there recommending that?)
I really strongly recommend using the wiki as your source of truth. It's not perfect but it's updated as much as we can manage.
No, I just remembered it was popular.
I feel a bit lost looking at the wiki. Once I see a working example, it makes more sense - but I'm struggling with dialogue
The modding wiki has a full NPC tutorial that's up to date
But also looking at an NPC isn't a bad idea...just not one that was last updated in 2019
Shiko is still top 5 endorsements
Huh
!npc
Keep in mind that making NPCs is a complex process that requires learning many different aspects of Stardew modding.
Here are a few links that can help get you started on all that you need to know:
-
Tiakall has a great tutorial on making a custom NPC for 1.6.
-
NPCs no longer use dispositions, check the wiki page for the new NPC data.
-
Aviroen has put together a template that will allow you to easily create a romanceable NPC.
-
Feel free to jump into the https://discord.com/channels/137344473976799233/1277457201077813280 thread for more interactive feedback and help!
-
Fireredlily has a WIP NPC Builder Please do report any errors you get with it into the NPC thread!
let me go back to the dialogue page on the wiki
unfortunately endorsements don't mean the mod even still works
Use the template from 3rd link if u want a ref
oh ty!
Top endorsed mod for BG3 right now will blow up your game
So my original version was on the right track
(it's the Mod Fixer which the game was patched to not need anymore)
at least I didn't delete it
Yeah idk who told u to change everything
No one. I couldn't get it to work, so I figured I'd look at an NPC that was posted as an example. Assumed my formatting was incorrect
shiko is an old god and i would bet people click the new characters category or search "custom NPC" and it comes up near or at the top so they just go with it, and they aren't in the sauce like we are so it's not obvious how old and broken it is
I also didn't bother to look at last updated
🛸
If the dialogue code says ""spring_Mon": "{{i18n or straight dialogue}}",
can I put my reworked template in a i18n folder, and not rereformat it?
Or is the double brace a stand-in?
The double braces indicates a token, in this case an i18n token.
I'd recommend using i18n so people can easily translate your mod without re-uploading the entire mod themselves.
It just means u should put {{i18n:your.i18n.key}} with matching key in the i18n
Thank you
The alternative is "direct text" but dun do that
Who is shiko?
Incredibly out of date, when I use my reading skills: https://www.nexusmods.com/stardewvalley/mods/3732
Oooh a npc
I was wondering If I should use the npc maker to make my npc or just those templates you listed
Making npc is quite complex but I still wanna make my husband at some point
miss coriel is working on updating the NPC maker, but it's also out of date
do not use coriel's npc maker until further notice. there are a few other templates/resources which are okay to use
The word 'new' in the title probably doesn't help 
coriel's is actively harmful to use at this point. it will do wrong things and teach you wrong things
if/when coriel updates it, the situation may change
Oh well I'm still at the stage of writing dialogs so i doubt I wasted a lot of time
Gosh the documentation makes my head spin haha
there are a lot of moving parts, and you will need to have good working knowledge of content patcher
i recommend starting with something much simpler, like adding a new item and putting it up for sale in an existing shop or something like that
for mapname does 'woods' refer to the backwoods or the secret woods?
or making some edits to an existing item. something to help you start learning how mods are built
Woods is the secret woods
ohh ok, is the backwoods just 'backwoods' then or does it have a special mapname to use aswell?
it's Backwoods, yeah
I already started with something simple. I'm converting some custom paths into total new path items for personal use
Making my husband npc is a loooong term project. As much as I want to play with him xD
will saving files as json5 vs json interfere with loading if i don't change the name?
afaik they're both plain text so it's probably fine (as long as all the json5 you are doing is in spec for newtonsoft's parser)
😬 not sure what the last part means lol i was just using json5 because it doesn't flag comments
sorry. ask a programmer, get a programmer answer (i.e. full of hedges and caveats) /lh
Is anyone familiar with the More Content for Central Station mod? I want to make tourists for the station. I imagine all you need to do is figure out where to place them and have the sprite sheet of the character.
central station has an author guide which describes in detail how to add tourists: https://github.com/Pathoschild/StardewMods/blob/develop/CentralStation/docs/author-guide.md
json5 vs json is purely an editor concept, its just (unicode) text in a file regardless
though I'm not sure if newtonsoft will handle the hexadecimal numbers or some of the other flavors of number encoding that json5 allows
I hate commas.
i think i only use those in one file to do spacecore colored lighting so i should be good
I'm so close.
i'm defining a ring object with a buff. how do i make the duration be "however long you have the ring on"? the default is all day
unless you are using a framework, I don't think editing Data/Objects will do equipment effects
oh :( i'd been following the Edibility section on this wiki page: https://stardewvalleywiki.com/Modding:Objects
oh wait i now see it says when eaten. i can read
spacecore can do equipment buffs
am i reading this correctly? by patching buffs and wearabledata, i could make a health regen ring?
(do rings count as wearable automatically?)
yes
and for vanilla purposes so does the equipped tool, not sure if spacecore does too or not
cool, thank you both
this.CurrentTool,
this.hat.Value,
this.shirtItem.Value,
this.pantsItem.Value,
this.boots.Value,
this.leftRing.Value,
this.rightRing.Value
maybe more if mods edit GetEquippedItems to return extra slots
though this does remind me, don't use CP tokens with non-deterministic behaviour in Data/Buffs
as the underlying buff effects don't fully network, it relies on farmhands to see the buff id, and locally use its knowledge of what that buff does to apply to the other players.
i'm really sorry, could you dumb that down for me? 😓
buffs arent synced, so you have to make sure your buff data is the same for all players
if the buff has data in it that is randomly determined, and this random generation can be different between host and farmhand, then the buffs will be weird in multiplayer
(or just behaviour that is determined differently between host an d farmhand)
okay i think i get it. so hard numbers = good, variables = bad
you can APPLY the buff randomly but what the buff DOES must be the same
between players
(to clarify "buffs arent synced": whether a player has a buff is synced. the effects of the buff are not. the buff is re-created client side for a farmhand to apply it to the host/others)
oh yeah i think i can see why that would be an issue
to use this, would i EditData with Target being spacechase0.SpaceCore/WearableData?
yes
wow i knew a thing! thank you
"an object containing fields"-- is that inside of { } ?
correct
"Entries": {
"QualifiedItemIdOfRing": {
"BuffIdToApply": "buffidgoeshere"
}
}
that's what i ended up with!
thank you
i feel like i turned a corner with my knowledge of CP formatting yesterday, especially after esca explained targetfield and stuff
how do I reload an i18n file?
- Content Patcher pack: enter
patch reload <your_mod_id>in the SMAPI console window. This will reload and reapply all your patches (but won't recalculate theConfigSchemaorDynamicTokensections if you use them). - Translation files: enter
reload_i18nin the SMAPI console window. If it's for a Content Patcher pack, also runpatch reloadafterwards. - C#: see the Visual Studio hot reload or Rider hot reload feature.
yeah its that
is there a way to have an NPC's non-married schedule change after an event is seen or mail received?
you can probably use this in conjunction with GOTO?
ty!
I'm trying to find in th eunpacked files where schedules change after the community center is finished
too*
Clint definitely has a schedule change on Friday
you can also just conditionally change your patches if you're using content patcher
but in vanilla they use a schedule replacement system for inaccessible locations
aha! I managed to look at characters that didn't have it
it only works with specifically hardcoded locations, of which CommunityCenter is one
Ah ty
to be clear im not saying thats the only way to conditionally change a schedule, as nic posted there are some other options
just that if you were looking for the CommunityCenter ones specifically, they will likely use the replacement system
You're right. There isn't anything special to indicate that the community center was unlocked within his schedule. Just a Friday '850 CommunityCenter' etc
for the CommunityCenter specifically, if its not unlocked yet, they just use default if it exists, or spring otherwise
however for JojaMart and the Railroad they will swap out those specific bits of their schedule instead, rather than using a different schedule entry entirely
Hello, all. I'm wondering if anyone can help me out with some confusion I'm having with Fashion Sense.
I'm trying to make a hat that is color-able but has a default color. So I utilized Color Mask Layers, defined the values and the default color.
It works well, the hat is colorable, but it always defaults to the player's hair color.
Does anyone have insight as to what might be the problem?
Kupo!
Kupo! Indeed lol :3
I'm working on a Moogle Pom. Here is a link to the .json file if anyone can help.
https://github.com/Roxoriku/StardewMods/blob/main/Moogle Wardrobe/[FS] Moogle Wardrobe/Hats/Moogle Pom/hat.json
what does the error in yellow mean, "failed converting entry to the expected type"?
log: https://smapi.io/log/7d06ebc158824a28a7ac26b157bedab3
json: https://smapi.io/json/content-patcher/6afcdcab56694c848f40a3b9c0523fae
Log Info: SMAPI 4.2.1 with SDV 1.6.15 build 24356 on Microsoft Windows 11 Pro, with 16 C# mods and 1 content packs.
Suggested fixes: One or more mods are out of date, consider updating them
It means you've entered a string when that field is expecting a list, I believe. That field should have square brackets which your squid egg id is then inside of.
yep, "EggItemIds": ["{{ModId}}_SquidEgg"], should be fine there
https://smapi.io/json/content-patcher/cdc8b138d22d4f2f9c2e9e9db627b3ad This shows no errors, but Content Patch skips the mod because of the 'Format' in it. When I take out the Format, it no longer recognizes 'Not friendship'
Not friendship is not an accepted CP token.
fixed it, not getting that error anymore, thank you! now getting a different one:
[Content Patcher] Can't apply data patch "Dead Boy Detectives > Include data/FarmAnimals.json > EditData Data/FarmAnimals > entry #1" to Data/FarmAnimals: failed converting entry to the expected type 'StardewValley.GameData.FarmAnimals.FarmAnimalData': Can't parse Point from Integer node (path: Shadow.Offset)..
is a point like a float or something?
Are you trying to make that schedule exist only when the heart is not exactly 4?
(also, good morning aba, belatedly)
Trying to write one schedule set from the initial mail seen, then a second schedule after a second mail received. Right now, I have different schedules for different heart levels
Your shadow offset field is formatted incorrectly. It needs to be "Offset": { "X": 10, "Y": 4 } (my numbers are made up)
ohhh x and y, duh. thank you lol
the heart levels are unneeded, I'm slowly realizing. it's very late
I've never used the field and vanilla doesn't either, but yeah, that should be it 
(i'm making a floating squid XD)
"Point" and "Vector2" are basically x/y values, but mods/etc format them in a bunch of ways
I saw it on here https://stardewvalleywiki.com/Modding:Schedule_data#Normal_schedules but beyond the single line for SEbastian as an example, I'm not entirely sure how to use it
I think this may be a future-me problem to tackle. Now-me is running on fumes.
They are unnecessary if you're checking for a mail flag that can only be present at the right breast level, yes. For reference though if you're wanting the schedules to only apply under the heart levels you'd do "Hearts:Rahiel": {{Range: 1,3}} (not totally sure I've got the syntax correct, going off memory on phone)
Let me copy that down and save it. I appreciate your help, quite a bit
You can only use that inside the schedule script itself, not in a Content Patcher condition (which is what the When field is). CP conditions only accept pre-defined CP tokens, dynamic tokens, and config tokens, not any of the game's tokens or GSQs.
should i just do diff files for the diff categories/series of my stuff in optionals section or would trying to set up configs be better?
i kinda wanna do diff files it feels more organized to me
but im uncertain aswell
@ivory plume Debug Mode does not respect zoom. The middle top right image shows the correct tile.
oh, is that why my coordinates were off when i was trying to find festival positions for my NPC 
That explains why it was borked on one save file i was testing with
When i reported it i thought it was specific to the save.
So i didn't look deeper
a lot of mods pre 1.6 will have subtle bugs like that due to the render changes moving stuff from ui space to world space and vice versa
I remember fixing some of them in the pathos family, but don't use debug mode myself
is Shekurika still around? I'm gonna need to ask him a favor when ES 3.0/ESR releases.
(I'm changing the Unique ID so World Maps Anywhere no longer registers us)
Around, yes, not sure about update schedules
I might be able to add it myself since the Nexus page does contain a sample content pack
I basically fixed the spelling and knocked off the .cp so it's just Lemurkat.EastScarp now
Give this version a quick test? Seems to correct it on my end.
@barren surge You want Fashion Sense for doing long sleeve shenanigans
Well, for my boyfriend ocs.
There's an example pack with long sleeves, so you can look at that
Oh you're not making mods
Hmm?
Are you just using them or making them?
I just make clothing stuffs. I just wanna put these to the game
since you have to mod them
Ah you're making them, gotcha
Check the Fashion Sense mod page for an example pack and the link to the documentation
Thank you so much.
What is the benefit or use of using 'early' or 'late' when doing CP priority?
When multiple patches or mods edit the same asset, the order in which they should be applied. The possible values are Early, Default, and Late. The default value is Default.
if you can't find any other way to avoid conflicting with other mods editing the same assets
ty
Fun fact
CP random is seeded
It's deterministic to the unique ID and day
I officially only have one json left to fix before play testing!
the real dark souls starts here congrats!
I'm creating a new save right now to test it, and I've prepared my body for a deluge of 'Why the hell is that happening?'
Still very easy to make cp behaviour that will differ by players like using local mail flags or relationship gates etc
strugglling with my dynamic token. Not sure how to fix it, if anyone has advice
"DynamicTokens": [
{
"Name": "RahielLampUnlocked",
"Value": "true",
"When": {
"Query: {{HasSeenEvent:977001}}": "true"
}
}
],
using this page to try and teach myself: https://github.com/Pathoschild/StardewMods/blob/stable/ContentPatcher/docs/author-guide/tokens.md#dynamic-tokens
GEtting this error: [game] Failed parsing condition 'HasSeenEvent 977001': 'HasSeenEvent' isn't a known query or alias.
[game] Failed parsing condition 'HasSeenEvent 977001': 'HasSeenEvent' isn't a known query or alias.
im not too familiar with dynamic tokens but maybe this is the quety ur looking for?
How do I fix this?
[Content Patcher] Can't apply data patch "Not Enough Fish > Add fish to beach > entry #1" to Data/Locations: failed converting Array value to the expected type 'StardewValley.GameData.Locations.SpawnFishData': Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'StardewValley.GameData.Locations.SpawnFishData' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly.
To fix this error either change the JSON to a JSON object (e.g. {"name":"value"}) or change the deserialized type to an array or a type that implements a collection interface (e.g. ICollection, IList) like List<T> that can be deserialized from a JSON array. JsonArrayAttribute can also be added to the type to force it to deserialize from a JSON array.
Path ''..
[Content Patcher] Can't apply data patch "Not Enough Fish > Add fish to mines" to Data/Locations: the field 'UndergroundMines' doesn't match an existing target
[Content Patcher] Can't apply data patch "Not Enough Fish > Add fish to beach > entry #1" to Data/Locations: failed converting Array value to the expected type 'StardewValley.GameData.Locations.SpawnFishData': Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'StardewValley.GameData.Locations.SpawnFishData' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly.
To fix this error either change the JSON to a JSON object (e.g. {"name":"value"}) or change the deserialized type to an array or a type that implements a collection interface (e.g. ICollection, IList) like List<T> that can be deserialized from a JSON array. JsonArrayAttribute can also be added to the type to force it to deserialize from a JSON array.
Path ''..
[Content Patcher] Can't apply data patch "Not Enough Fish > Add fish to mines" to Data/Locations: the field 'UndergroundMines' doesn't match an existing target
And why does it feel like a ghost town here yet again?
Will you send me your fish file in full and I'll try my best?
I don't think it's minor if it's not doing what you want it to do
I'm not sure why you're expecting it to be hopping in here nonstop lol
try
"TargetField": [
"UndergroundMine20",
"Fish"
]
"Target": "Data/Locations",
"TargetField": [
"Beach",
"Fish"
],
"Entries": {
"NotEnoughFish.Shark": {
"Id": "NotEnoughFish.Shark",
"ItemId": "NotEnoughFish.Shark",
...
}
}
Also, when I look in the fish tab, there is a duplicate bluegill in there but I might have fixed it.
strugglling with my dynamic token. Not sure how to fix it, if anyone has advice
"DynamicTokens": [
{
"Name": "RahielLampUnlocked",
"Value": "{{HasSeenEvent|contains=977001}}"
}
],
Also 977001?
Yep! seems good
I did 973 for my Marnie mod, 977 caught my interest. I number my events by the location they're in
It's better to use properly namespaced events
so, 973001-004 were in the Animal Shop, but when I went to town, I switch the ending to 51-53
switched*
1.6 supports string event names now
If you saw mods using numbers previously is because they had to
Aha!
Oh. Was I using the wrong location name for the seperate floors of the mines?
I'll have to look into that. I think the template or mod example I used was using them, so that's what I had
I believe each lake is named differently, the numbers being the only difference
Yesh, and you're likely stepping on someone else's namespace because that is the old namespacing system
you can use descriptive names now instead of praying no one has picked the number you did
not UndergroundMine20, just UndergroundMine
We used to prepend with the Nexus mod Id to avoid stepping on each other
That was something I was worried about. I tried to use a larger-ish number.
So 9730 belongs to Nexus mod 9730
Was that my mistake?
both mine level 20 and 60 pulls from UndergroundMine, you have to use the Condition field to limit the mine level
I was wrong then. Sorry!
9770 belongs to Nexus mod 9770
Then for when @ivory plume sees this, I can package it up as a quick little PR if you like.
The only thing is that it renders a couple of methods in Pathoschild.Stardew.Common. Specifically public static Vector2 GetTileFromCursor() and public static Vector2 GetTileFromScreenPosition(float x, float y).
I quickly looked at fixing the zoom arithmetic, but remembered that Game1.currentCursorTile exists, and swapped that in place of the call to those methods. I don't want to make the PR without getting your okay to either remove those methods, or render them unused.
Strange that the lake is working properly but the ocean and mines weren't.
you can post what you have at smapi.io/json
instead of 977001, I would use "{{Jierishi.Rahiel}}_EventId"
That's not a token is it
{{ModId}} is the token that becomes your mod id (like Jierishi.Rahiel)
I was replacing the id number in my event folder with the example from the wiki
{{ModId}}_EventId/Time 1900 2300/Friendship Clint 750
No u don't replace anything
The faeries who live in ContentPatcher.dll will do it for you
Thank you, it worked. Only problem now is that the Fried Axolotl has no sprite (I haven't made that sprite yet) and the recipes for Frog Legs and Fried Axolotl are inaccessible.
{{ }} tells them what to swap
Should I leave this dynamic token alone then, as well?
"DynamicTokens": [
{
"Name": "RahielLampUnlocked",
"Value": "true",
"When": {
"HasSeenEvent": "977001"
}
},
sorry to ask so much
And does the ExcludeFromRandomSale flag prevent the item from appearing at the Travelling Cart when set to true?
The problem I've run across with that token, is that CP says HasSeenEvent is invalid, but the CP guide has it - which means I must be formatting it incorrectly
I think so. I think it also stops it from going to the night market too
maybe even Krobus?
I don't know if his shop is random or set
Okay, we need to know how you're using the token
I'm trying to load an interactable object into the Club after an event happens,
Maybe instead of an object, or map edit, I make the display case an NPC- and its 'dialogue' can warp the player
Sure, PRs are welcome (and you can just delete the methods if they're unused). Note that the Game1.currentCursorTile usage was removed in PR 1104 though, so we'd need to recheck that scenario.
Would you maybe prefer the arithmetic be corrected instead? That would be much tidier overall.
Okay
First. Use the version i sent earlier
Sure, either way is fine. If Game1.currentCursorTile works fine then less custom code is always good, but just fixing the method is fine too.
How would I go about making a character's arrival linked to a heart event/overnight cutscene?
Currently I have his existence set to a "has read letter" flag
Also, how make heart event ;c
will do! Ty!
how make heart event please im am afraid
heart events aren't special (from the game's perspective). they're just events
events are tricky but once you get the hang of them it's not so bad
here's the wiki for event script information: https://stardewvalleywiki.com/Modding:Event_data
and here's a tutorial with some grounding examples that looks pretty up to date: https://stardewmodding.wiki.gg/wiki/Events_for_Everyone
There's a PLAYER_HS_SEEN_EVENT gsq
That was my thinking. Plus, fixing the existing calculations would be re-doing what the game's already doing for Game1.currentCursorTile. I'll double check all of the scenarios mentioned in the PR before I submit this one.
thank you <3
man, i hate it when im too smoothbrain to figure out why my texture aint applying EDIT I do know why now
funniest shit to look at each time tho
guess which of the typical silly things every mod author likes to forget it was
The load
A comma
ding ding ding
CP has a token that will load it in the background for you. InternalAssetKey
I remembered a thing! I needed a blank {} Club.json!
there's also something like that in the smapi content helpers too, although I don't think anyone uses it
this what my farmer sees after he drinks a lil too much of Caroline's "special" tea
internalassetkey just uses the SMAPI internal content helper thing
it does not load it in the background for you as that might imply it enters the content pipeline proper
the internal content helper does provide it to the pipeline unfer the hood
but not to be edited by others
or at least it did the last time I looked at it
It gives it an asset path, so it should be editable I think
nope
cannot edit them, can only read them
SMAPI specifically stops you from being able to edit internal assets
any mod can technically already use the asset for things like texture fields and whatnot (CMCT does for it's asset token after all) but you cannot apply edits to them whatsoever, they will always stay as what they are in the raw files
that's unfortunate
it's by design to follow the SMAPI philosophy that only the mod in question can adjust it's own files
yeah, but putting uneditable content in the global asset space seems like dirty pool
it's namespaced to your mod and relies on undocumented internal behavior that people aren't supposed to use (outside of their own content) anyway
I don't think it's super common for Textures to need to be edited necessarily, because you can just as easily replace the Texture in the data model to the same effect as replacing a texture via an edit
Unless you're trying to do layered edits
Hello! I'm learning how to mod SV and I'm having a problem, in the wiki it says that the "Price" of the "Objects" is used when the player sells, but when I edit it the sell price stays the same and the buy price is double what I wrote 😭
you need new items for info to refresh
So if I want to change the sell price of the turnip seeds I have to create a new item? With the display name it works without problems
i think this is about the fact the shop adds a multiplier to the price?
the wording is a bit confusing
It seems so, I tried with a price of 99 and the store sold it for 198 but when I sold the seeds each one was still the default price of 10
try adding IgnoreShopPriceModifiers: true ?
The buy price is still doubled but at least the sell price is now what I've written! Thanks!
testing an event and I'm not sure why this line is getting a mid-word line break. Is there a solution other than changing the wording?
are u using something like Farmer Portraits?
not using that or anything like that to my knowledge
rip, no suggestions from me then
OK thanks for trying 
the wiki is correct, the price is how much when the player sells, not buys. i.e. when they dump it in the shipping bin. all stores by default have a 2x modifier on them to sell things for 2x the cost of the object "Price" field. Pierre has another 2x on top of that, so pierre sells at 4x (with some exceptions that have no modifiers, like vanilla seeds. dont remember if its just those seeds or all "seed items")
if you want to set a specific price for an item in a shop, you edit the price field in the shop entry directly, and it will use whatever price you put exactly
