#making-mods-general
1 messages · Page 328 of 1
thank you so much! I'm a total newbie at this i just finished reading through the wikis and tutorials. what setup commands are you referring to? would that be the continue/-1000 -1000/farmer 0 0 0 NPCName 1 1 0/skippable/pause 1000 i see on one of the wiki pages for the event starter template? I will also try changing the name to something unique. would kailee.SebastianMountain or something like that work instead of the numbers?
i dont know what event starter template you mean. are you looking at the modding wiki or the official wiki? im not so familiar with the event pages on either of them.
https://stardewvalleywiki.com/Modding:Event_data#Event_scripts
this tells you what the script should look like
as for IDs, its recommended to use your mod id as a prefix, often with the {{ModId}} token
as its guaranteed to be unique across all loaded mods
but as long as it can fulfill that uniqueness requirement it doesnt matter what it is
(when it comes to functionality)
French
But that might be too old
She was in charge of the smapi website for a moment iirc ?
I've been following this tutorial: https://stardewmodding.wiki.gg/wiki/Events_for_Everyone. I just looked at your link and I'm so sorry but i'm still a little confused what im missing in my json 🙈 . I see speak on the wiki but is that not considered a setup command?
This guide attempts to provide a more in-depth explanation to modding events as a reference for both beginners and experts.
yall is there anyway i can create a mod with close to 0 experience in coding 😔
Depending on what you're trying to do you can get by some stuff with near 0 coding, and if you do need to it's very well documented
it isnt, no. the very first section after the spot on the wiki page i linked to says what the setup commands are that every event must start with
im trying to make a new npc
😭
it probably says so somewhere on that guide page too, but i wouldnt know where
!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!
NPCs are a lot to do, but all of it is very doable
Well I'm gonna let the new blood handle that cause my modding knowledge is 6 years old lol
to make a npc you need art writing and some content patcher stuff
THANK YOU SO MUch
the content patcher part not too hard n theres templates
Hm I might be misremembering Zoey's name I'll have to ask pathos lol
i can draw and i can write i just cant code
!anyonecancook
you can
are you looking for zoe as in the mod (zoe.txt)
its by no means the only way to make an NPC. but if you prefer it, you can
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 wiki tutorial for that for some context
the google docs thing just helps you make your json stuff
help i did i can barely understand anything
same way you can write a book using notepad or you can use something like Word
or some other fancy book writing software that has bells and whistles
okay okay
to make a mod, you have to put a bunch of text (and some pixels, sometimes) into a bunch of different files in a folder on your computer.
the npc thing you showed a screenshot of is a tool to help you format the text in the files
ultimately the first step is to try and understand the things. it may be difficult at first but theres not really any good way to make an NPC without understanding what you are doing, and what you will be doing really is just all laid out on those pages, no tricks or anythin. its a learning process! bit by bit is the way to do it, and its often recommended to start with a smaller mod than a full fledged NPC simply bc of how many moving parts there are
C# is the language to use for actual game/mod code, but you don't need to touch that for most mods
oh TYSM
so uh
should i just go try and understand the wiki instructions?
yeah, i would start with the wiki's content patcher tutorial
do something small and simple, like change or add an item or something, get it into the game and look at it, and start getting used to how CP mods work
as you get comfortable with adding patches and changing different stuff, you'll get more confident and absorb knowledge about all the game's systems and so on
I'm so dumb I just needed to scroll up hahaha. Okay great I see those now! So I tried adjusting the json file accordingly. I still wasn't able to get it to trigger. Does anything else look obviously wrong now? thank you so much by the way { "Format": "2.6.0", "Changes": [ { "Action": "EditData", "Target": "Data/Events/Mountain", "Entries": { "mountainSebastian.Minesevent/f Sebastian 1250/t 0600 2300": "none/ 10 20/ farmer 8 20 2 Sebastian 12 20 1/speak Sebastian \"Hey @, the cut scene is working!\"/end" } } ] }
at the start of the script, you want
"none/10 20/farmer 8 20 2 Sebastian 12 20 1/
(it's three separate commands with slashes between them)
@lucid iron FYI I rebased your Chinese Content Patcher docs PR to remove the merges from the Git history; I suggest resetting to the latest branch before making any changes. (I'm slowly going through the PR, might take a few days.)
With the edit that I just made that would align with what you are saying, right?
yeah, that looks better. see if it plays now
i expect you'll see the dialogue box pop up while the screen is still black, but it should work
yea at one point the rebase was failing to auto merge every single time so i switch to regular merge 
that will be a huge step in the right direction for me so I'll take it haha I will let you know how it goes thank you so much!
future PR will be less messy i hope
No worries! I'm aiming to include this in this month's update wave, so there shouldn't be any further merge conflicts for this one.
oh pathos i thought en.json is broken is that fixed
yay its working!! thank you all so much i so appreciate it. are there any guides for finding out where on the map you are? like the tile location
It's fixed in the upcoming SMAPI 4.3.0 (it was just a bug that it didn't work before).
there's a mod called Debug Mode which can help, or the console command debug ppp (print player position), or opening the unpacked maps in Tiled
yep that console command works perfectly. awesome im so excited to get started thank you!!
how do you come up with dialogue lines? im running out of dialogue line topics to write..
i dont want dialogue to be generic but its hard coming up with stuff
i am having the same question with you but i managed to finish seasonal dialogue for different weeks(including heart different)
i let my npc to talk about builings,people,crops,their views on plays,and temperature...and so on
if they have special background stories, you can also include related factors in the dialogue
it was helpful to me to avoid rushing the writing process and let lines come to me as they will. sometimes i would go several days without getting a good line down, then i'd get several a day for a while, then a big chunk all at once
This is exactly what happened during my dialogue writing process also

ooh those are good topics
thank you ❤️
haha im teaching my dad how to mod and he just made a little test fish mod after hours of yelling at smapi ❤️
aww
@ivory plume I have a local build of FastAnimations that handles the "Hit" and "Perfect" text animations when fishing. Before I PR that, which option would you prefer for config to control these new behaviors:
- piggyback off an existing config setting (e.g., the fishing treasure config)
- one new config setting for "fishing text"
- separate config settings for the "hit" and "perfect" text
And related followup: Does new i18n text "need" translations in all the supported languages, or just a new entry in default?
I think we can reuse the 'fish' option (which affects "how fast you cast and reel while fishing") for now; we can see if there's any requests to split it when it's released.
Every i18n file should have a copy of the new text (with a // TODO), but I can handle that part if needed.
Reusing an existing config option means no new i18n text, so less work 🙂
I have a question,if i use $q in a dialogue,
the following answer can only use two id?
i prepared three answer and made different follow up for them,can this work?
- If you mean the response IDs immediately after the
$qtoken: those are used to skip the question if it's been previously answered, and you can list any number of IDs (e.g.$q A/B/C/D/E. - If you mean the
$ranswers: you can list multiple replaces separated by#.
i think you can have more than two answers
No no they were definitely french and almost exclusively involved in the modding stuff
thanks!
also um this is random, but how do you get started with translating stuff? i like translating things so i wanted to translate mods, but i cant find where to start

oh sorry bother again i also want to ask is this same for $p,i saw it use |
Yep, the same applies to $p; you can have any number of |-delimited values.
This has some good info: https://stardewvalleywiki.com/Modding:Translations
In addition to the description there of using GitHub, I know some translators also just share files using https://smapi.io/json/
There's a page on translations in the modding wiki, wonder if there's a dedicated governor command to summon it
🤝
I checked the command list and didn't see anything
But yeah, that link Cam posted is it
oh i found it!
thanks
The tl;dr is some mods support i18n format where you just have to translate one file containing all the mod's strings and give that file to the mod author, and for mods that don't you can ask permission to make a separate translation mod that acts as a file replacer for the main mod
Mod authors have different desires for how they want translations to be handled for their mod, so always best to ask first
thank you!
uh... i have a question while translating: does this line mean that the key makes it so that you dont get kicked out of the menu after building, or that you dont return to the menu? because iirc, you exit out of a build menu everytime you build. (mod is anythinganywhere)
"Config.AnythingAnywhere.BuildModifier.Description": "When held while placing, destroying or upgrading a building you won't exit back into the build menu.",```
korean
so... you get kicked out of menu with the modifier, or you don't get kicked out?
when you hold the key down while doing things, you don't get kicked out of the menu
oh, interesting! there are already a few people who upload Korean translations but iirc a lot of them are machine translations so I'm sure people will really appreciate human translations instead
i really enjoy translating stuff (idk why lol, its just fun) so i thought id translate some mods haha
I get you, I used to do that when I first moved to the UK haha, there's something fun about it
im not perfect at korean even though i speak it every day, im not really good at grammar because i dont write it often lol
welp gotta go sleep, its midnight at my time zone... i just love staying up late doing random stuff lol... bye thank u sm for your help!
This looks really useful. The event id I believe no longer has to be numeric though, I think?
Please dont make new events with numeric ids. There's no reason to now
I think itd be helpful if the tool used the {{ModId}} token
The tool I’m making is following the wiki at the time I made it, haven’t updated it if it’s been updated
The wiki has definitely been updated a lot
But i think the idea of the tool sounds super useful!
I just made it for my own lazy ass 
I should probably clean it up, add more functions and make sure it’s updated with the wiki
I remember that I messed up the facedirection
Would be nice to have a queer support charity to set as DP target on Nexus
events are also getting all sorts of updates in 1.6.16 so you may want to look at the page for upcoming changes too
Kinda surprised they dont have any
Also preconditions should use their names rather than their legacy aliases
turns out they only have like 6 options
Huh?
(and negative preconditions are deprecated and replaced with the ! operator)
Rather than "w Sunny" it would be "Weather Sunny" iirc
I’m just using what the game uses itself
I would guess most people don't direct their DP towards charity, so they never added more. I'll try to maka a forum post about it
I suppose if I actually wanted to make a donation it'd make more sense for me to donate directly anyway
This is from Data/Events/Beach
Old vanilla events didn't switch for backwards compatibility reasons, but the newer 1.6 native events should be
Where do you read this? The event wiki page has the alias as well
same page
[[Modding:Event_data#Short_aliases]]
Strange, when shortform still works
Deprecated != Removed
it still works for backwards compat like sinz said, that doesn't mean it should be used
I'm aware
The modpocalypse for 1.6 was already quite large, having every event key (both id and precondition) also change would have broke even more
1.6.16 is ripping some of that bandaid off with mandatory / even for legacy numbered events, and with the removal of vanilla relying on duplicate events sharing the same id but with different preconditions
Wonder why so many big mods haven't updated it
probably same reason why SV didn't change all the event keys?
Most mods are pre1.6, and changing the event id without a companion trigger action to migrate the eventseen over is just unneeded complexity.
Newer events should follow best practices though
Made a Nexus forum post about what I talked about earlier: https://forums.nexusmods.com/topic/13516833-adding-queer-supporting-charities-to-the-donation-point-system/
Hi, as a mod author, I was planning on making a small Stardew Valley mod promoting Queer mod authors and it would make sense to enable DP on it to send to a charity to support Queer folks. I don't feel confortable setting the beneficiary to myself and manually convert the DP into money to be sent...
I suggest giving them examples (including UK-based ones). The Trevor Project is a common one
It's a forum post, so feel free to propose those you know.
As a queer, I love this initiative
Also, I updated the event helping tool with the feedback from earlier: https://littlepippi.github.io/SDVevents/
https://www.nexusmods.com/stardewvalley/mods/29284
I clearly am not very good at naming... I don't know what combinations of words I can use to accurately and concisely describe my mod. No more than 5 words if possible.
I'd appreciate any help and feedback.
Also, since my mod covers a lot of aspects, does putting a keyword for each aspect in the title help players in finding them through the search bar in Nexus itself or on Google search?
At the moment, it's not very clear what your mod does just from the name and blurb alone. The search keywords are kind of cluttering the name, too
If you want a suggestion for how to name it, I'd go Combat Overhaul - Improved Equipment and Mine Rewards
For the blurb, maybe something like this?
Overhauls the combat system! Balances vanilla monsters, buffs weapons, rings and boots, and overhauls the mine rewards system. Designed for use with SVE and RSV.
With these, you'd be setting the stage for the detailed description you've written (great job on the main description by the way, it's extremely comprehensive!)
Overuse of SEO terms can be overwhelming for people browsing, so I suggest keeping the title simple
I hope this kinda answers your question, hope the suggestions are helpful!
It is very helpful! Thank you so much.
Also, off-topic but your pfp + discord bio is fire 👌🏼
Are there any mods that save the accessibility settings to the game itself, external to the farm save? I am slowly losing love of the game due to having to turn off/down music, ambient, enable tool hit location and all those things every time like i am highkey shocked this is even something I have to do... is it a mod that could be causing this?
You may want to ask in #modded-stardew
This should be how it works as of 1.5.something
The startupprefs file
!startupprefs
If your game doesn't launch or the resolution is messed up, your startup_preferences file might be broken. You can just delete it and the game will recreate a clean version.
To do that:
- On Windows, press
Windows+Rto open a 'run' dialogue. Enter%appdata%/StardewValleyto open the folder, and delete the file there. - On macOS, go to your desktop. In the menu bar, select Go -> Go to Folder and enter
~/.config/StardewValley. Delete the file there. - On Linux, open a terminal and run
rm ~/.config/StardewValley/startup_preferences.
thx!
should i turn game off first?
No, don't do those instructions
I'm just telling you where the file that saves the options should be
oh ok
hello! i'm trying to make a contentpatcher mod to add new cat breeds as a gift for my partner, i have everything set up and have decompiled the game and unpacked assets, but i'm a bit stuck on how to add the new breeds themselves. i don't want to overwrite existing cat breeds, just add new ones. i've found a mod that adds new pets to the game but not one that adds breeds to existing pets. any help appreciated
thank you!
Anyone use the item bags mod? I am trying to generate a couple bags using the category generate_category_modded_bag command and I am getting an unhandled error on string input when it matches the stated parameter guidelines
i've found the cat spritesheet, i can't seem to find the cat icon though, where should i look?
nevermind! answered my own Q
.q 6218 LooseSprites/Cursors
Syntax: .quote [#|nick|add|edit|remove] [#|"quote"] [- nick] | On Discord? React to a message with 💬
.q 6218
It's not in Cursors
There's no way it's in Cursors
... it was in Cursors
- @tiny zealot (Jump)
dang you can't combine a quote call with more info
but, don't patch your new breed's face icon into cursors. just provide your own asset
Take a look at this mod
It's a dog but it's simple example for breeds
yet another example at https://www.nexusmods.com/stardewvalley/mods/20557 if you need any more, or if you simply want my cat
thanks i'll have a look, i found the cat icon in cursors (i have never made a stardew mod so no idea what to expect lol)
I enjoy the genre of "a modder's personal pet"
Very much
Someone coughing should make a recommendation list
(Tia?)
the 1.6 added cat breed with the void is CloseEnough™️ for me
Void pics plz
@ kailey onyx when
I don't think I've seen Wednesday in a while
I feel left out for not having pet sometimes
Gotta add my childhood goldfeesh somehow
Is there a way to test a .json without running smapi (I'm trying to frankenstein 2 mods together to fix an issue). -noob
found it in the pinned!
I’m looking for some info about how patch_reload works and i didn’t find it in content patcher’s readme, can anyone direct me to some?
A subpage on this discord?
it unloads and rebuilds the patches of the specified content pack
iirc there are some limits when it comes to config/dynamic tokens/aliases due to CP really liking to know them all statically up front, but its open season for the actual changes
Ok, so it does infact ask for a specified pack. Does it reload everything, including jsons that would affect schedules and dialogue?
within the limits of what the asset pipeline normally can affect
So, I'm making this mod where the first 3 events and their choices lead to one of three story path variations : there's basic, blush, and brat. therefore setting up the events the player will see from there. Which gives me like, 27 possible combinations. Is there a good way to assign number values to each option to then calculate the total of at the end of the third event and if it's within a certain range that sets the event path? or something? or am I just crazy
I found the subpage on content patcher’s github repo. Thanks this is the jnfo i was looking for!
patch reload isn't going to do anything more powerful than a OnTimeChanged update rate
Use a stat to track brat points
Change it to mail flag once you want to lock in brat
That would be a C# thing yes? I am embarrassingly less familiar with C# but I am willing to stare at wikis until I can make it happen haha
That’s what i am looking for, yeah. I am mostly looking to see if asset and schedule changes work as expected.
Has anyone done custom c# buff effects in 1.6? If so, how did you go about it?
oooooooooOOOOhhh okay. I actually have that page open I'll go check it out
i have considered converting lacey's hidden value, which i track manually, to a stat, but i haven't bothered yet since the existing thing still works
MousePoints
Hatcoin
(it's for when you choose the really mean dialogue options in her events)
Thanks, this will cut down a lot of time shutting down and reloading the game repeatedly!
So, if by the third event they have enough brat points to qualify for the path, have it send a mail and then use that as the trigger for the resulting path events etc? Then would I also set mailflags for the other two paths?
there's a little C# tutorial at the bottom of Modding:Buffs that seems appropriate for 1.6; below is how I handle one when it's applied by a custom monster, though it's a bit sloppy because it's ported from 1.4 or so
Buff debuff = new Buff("13"); //create a new buff effect based on the "Slimed" debuff
debuff.glow = EffectColor; //use this monster's effect color
debuff.effects.Speed.Value = -2f; //drain less speed (original value: -4)
Player.applyBuff(debuff);```
(although I guess that doesn't quite address custom effect handling, my bad )
I suppose I'd still resort to things like this in a typical SMAPI event, or whatever else the buff affects
```cs
if (Game1.player.buffs.AppliedBuffs.ContainsKey("My_Buff_ID"))
// do ongoing effect stuff```
@lucid iron yeah, the three paths are totally separate. The first three events that have the point value set which path the player gets from that point on
so like low point values take you to the 'Basic' and then mid range is the 'Blush' and then the high bracket is the 'Brat' path - each one has a different tone and pacing to how the story plays out
patch reload often makes schedules go chaotic for the day, so if you have to check a schedule change, do the patch reload, then change to the day before and then sleep to see its proper effect.
You would do only 1 stat then
That u check n lock into mailflag once ready
IncrementStat can do negative but stat itself cannot go below 0 so you want to initialize it to a decently high value on mod install
it can't go below 1
I was gonna do 0-8 = Basic 9-18 = Blush 19-27 = Brat
(small difference that may or may not actually matter)
oooh so 1-9 10-19 and 20-28?
you would just check for a minimum of 8
okay cool cool coool :3
and then a minimum of 18, and so on
just can't check if the value is between 0 and 8 because if it's 0 that'll be false since it's non-existent
sweet, this was super helpful. Thank you!
Can someone look at this and tell me what I've done wrong? https://smapi.io/json/none/517263d6e1774f778327c5c64746d4c4
I don't absolutely recall Wren but I don't think buffs are fully synced
Need to look but I recall looking and thinking that it was safe to subclass
You have failed to close the Changes block and then the entire file properly. You require a closing square bracket and then a closing curly brace. Edit in case you don't see my later comment: You also didn't close your ConfigSchema, so you need a closing curly brace before the Changes line too.
never closes dynamic tokens block, never opens a change block (or close it)
or closing the outer most object either
I see both a close for the dynamic tokens and an open for the change block
Although now I look again, the config schema is not closed either
oh its include patches inside dynamic tokens
but the error the validators complaining about is the last block never being closed, nor the outer most object
Yup
I closed the config schema, changes block, and file (outer block) and the errors went away
oh shoot, can you show me what you did?
I added a closing curly brace before the Changes line, and then right at the end I added a closing square bracket on line 1277 and a closing curly brace on line 1278 (I created the new lines for those).
it does look kind of selective; Farmer syncs BuffManager's net fields specifically, rather than the whole object, and that includes AppliedBuffIds and the net fields from inside CombinedEffects (BuffEffects)
whereas in 1.5 and earlier, the whole thing was barely synced at all, iirc
Also need to move a bunch of patches out of dynamic tokens into changes
so I guess a Buff subclass should still be safe if that's the goal
Oh right sorry I didn't follow when you said that before. Thanks ^_^
For the purposes of buffs it should mainly be the local player doing it to themselves which can subclass, but for other players it needs to run off the buffid alone and can't rely on the buff instances
Like SinZ spotted, you also have a whole bunch of patches in the wrong place - inside DynamicTokens instead of inside the Changes block. All the Seasonal Character Includes and also the Cuter Extra NPCs patches need to get moved.
Which is fine for a lot of applications tbh
yeah, other clients have never really had control over application either, but I imagine most buffs would want to be handled locally anyway
(can you harmony prefix an instance constructor to have it return a subclass of itself instead?)
also buff does have customFields for tacking information on, though idk if that part is synced offhand
Other than a light buff
No
expected but sad
Harmony patches on a constructor can't return a different type
The constructor is actually an initializer
The types already made prior to the constructor running, and there's an order of precedence regarding static constructor, instance constructor, property/field initialisers and their subclasses stuff
Superclass*
what's the use case? I know Furniture actually uses a "GetOne" method
the use case was letting the Buff constructor return this subclass buff instead if it matched an expected buff id
The usecase is for being able to hotswap all initialisation at once rather than playing whack a mole at all the places a class might be created
oh ok
(though the behind the scenes usecase was me just furthering my harmony knowledge)
(or well, general C# knowledge i guess too)
Also harmony patches on constructors can get out of hand real fast, particularly if it was parameterless, as it will happily just harmony patch the super classes version instead, up to and including object if no one in the chain wanted to do anything interesting in their parameterless constructor
I asked this a while ago but I don't remember the answer, so how are the specific of serialization of a custom subclass? If I make a CustomFunriture : Furniture class, does the game try to save it as CustomFurniture? Is there any (easy) way to tell it to just save a Furniture?
the serializer understands specific types and those specific types only
telling it to just save a normal instance is basically what spacecore's serializer stuff does, iirc
My main thought about subclassing though is that it prevents you from combining the effect with other modifiers.
The second you are doing other types you need spacecore to mess with the serializer on your behalf
you could also just do the snorlax method as well, but if you want to qactually save the furniture itself you do want spacecore
Technically can do it yourself but no one wants the yellow warning of shame that spacecore takes on so no one else has to
(the snorlax method being "replace the furniture with something inoccuous on saving, restore it on finished saving/save loaded)
Although now that I think of it, I'm not sure if you can do that with the fancy vanilla buffs either
tbh i have wanted to serialize stuff myself and dont mind having the warning... but i just dont know how to 8')
(standalone serializer mod when)
(there's also the alternative of "save info yourself and despawn your stuff everywhere before the game saves", but I regret ever going with that
)
So the game will just ignore any CustomFurniture when saving if I don't do anything about it, right?
the game will freeze at save and spam red
The serializer mods clash if not explicitly cooperating, which used to happen with spacecore and pytk
right, i just want the serializer to be its own mod and not pull in all of spacecore
lmao, that's better imo
does that require cooperation on both parts or could a standalone mod just add compatibility for spacecore and spacecore wouldnt have to do anything?
Tbh it probably should be a smapi thing, but pathos frowns on it too much
I mean with fast enough harmony patches and an arms race you can always force at gunpoint to have spacecore cooperate
as things are, I'd probably recommend tagging your custom furniture with something in customFields and patching some methods to make it do whatever you need (assuming it doesn't touch an infeasible number of methods)
or y'know, spacecore
the ideal outcome in my case would be to just save CustomFurniture as vanilla Furniture, so that I can simply put them in the custom sub-class again when they are loaded. It would also have the advantage of not freaking out with unknown save data if FF is uninstalled. Is that even possible to do with spacecore?
I do have an already perfectly fine solution that just patches all required methods, and grabs data from a <furniture key : custom data> dictionary everytime, but it would make the code cleaner to subclass
so the main question is how dirty would it be to handle the serialization of this subclass
before putting any work into that
I haven't worked with it myself yet, but it seems like spacecore can be told to serialize CustomFurniture for you; you'd just use CustomFurniture in-game the same way as anything else, and spacecore automatically handles serialization (basically doing the Furniture swap-out back and forth for you)
handling it yourself would either be re-implementing whatever that involves, or doing the "find and replace all CustomFurniture in the world" thing while personally saving any instance data you might need (customFields, etc)
ig you might be able to use whatever XML serializer the saves do? I never looked into it since FTM's use case was just "keep the spawn data"
it's basically a choice between reinventing the wheel and potentially missing instances -> causing a save error at end of day, which isn't fun for users 
other mods can occasionally move or store instances in fun new ways
Did my explanation help you figure out what to fix?
tried to look at spacecore's code, and yeah, I'm not doing whatever's happening in there.
Spacecore overrides the xml serializers iirc
I was under the vague impression that it saved vanilla placeholders & kept customization data in its other files, but I haven't checked in years
to the point that I might be thinking of JA 
That's pytk
Tbh I've been digging around in serializer black magic for a while
(Not to do with subclasses)
More because I think the stardew save is obnoxiously verbose
Part of the issue is ofc xml
i was gonna say that's just xml, lol
But even on top of that it's insanely redundant
A lot of default values get serialized
yeah, I always get lost when I bother to save edit something
Which isn't technically a problem for the save but already causes issues in MP sync
(Again, don't expect me to get an actual mod into production)
Serializer scary i would absolutely do the Furniture -> CustomFurniture and back
hi there, i'm not really familiar with modding and programming in general... i want to make an event that occurs after the player changes gender in the shrine of illusions. is it even possible? i haven't found a single mod like that. (which is a shame)
It's really not if you're comfortable with emit code
That's a load bearing statement atra
You might be able to detect the menu change via that BETAS trigger
CustomFurniture would only have a single extra data field (with the data parsed from Furniture Packs) as well as override a bunch of methods, and I can even omit the extra data field if it's too annoying
Why isn't it just read from asset then
Don't forget the entirety of game1.player being the 'mini save' for the save selection screen, so a bunch of fields are on farmer that's there for that instead but also means a decent size of the save is both in the mini save and the full thing
not sure what you mean by that
(forgot to mention: no instance specific data)
Yo, sorry for interrupt, just want to update project a bit
currently i sync game renderer + 3D Farmer
and in next step i should test sync with other object such as Crops, Block, Furniture
thanks, i'll look into it
If all you need is non specific data just use qid as key to some custom asset is how I'd do things
That's how i did trinkets for instance
yeah, that's what I do right now, the part that bothers me is patching each individual method when I could just override them
Yeah i hold opinion that patching individual method is better in this case
hence "I can even omit the extra data field if it's too annoying"
having gone through similar with CMF i second chu's opinion that patching the methods is better
But still it's probably fine to do iterate all items and swap during the Saving event, put em back in Saved
ye
(also, have you checked that all the methods you're patching are even virtual in the first place)
nah
Subclassing can often have the unintended side-effect of making your mod incompatible with other Furniture mods
well, itd really put a damper on the overriding plan if you cant even override them
This is more fragile than you think it is
Xmlser is also used for MP sync....sometimes
I think most of them are already override from Item
nah I'm fine, I'll just continue doing Harmony patches
It's so easy to fuck up if you try to do it yourself
If your subclass doesn't even have custom states, then it's a bit pointless to even bother with subclassing or spacecore
I fundamentally care less about the save size
And more about the fact that in mp sync the game blows past the steam packet size
(can confirm, I'm just going with spacecore if I ever finish my overhauls and still need them
)
(most of it's vanilla or Harmony-able now, but yeah, swapping all instances safely is a mess)
It sounds like your Furniture is just vanilla furniture with custom (model) data
Like, that's the entire reason I'm poking the serializer in the first place
Just seems kind of overkill to worry about save serializer stuff if there's nothing about the furniture you need saved
I very briefly considered subclassing horse before I realised that there’s quite literally no reason to because it has no virtual methods (and also even pathos doesn’t subclass it for tractor)
This looks so cool! Is this a current mod? Is it for 3rd person view or just VR?
yes that is mod, but you need to install my app AR *(unity)
also it will support for android device, and web i'm not sure
yeah, the whole point would be to just be able to override the methods and have direct access to the FurnitureData as a field instead of a shitton of patches that all call a static method to fetch the FurnitureData from a big ass Dictionary<ItemID, FurnitureData>
tbh that's fine, that's what the game does for data
the big ass dictionary being stuff like Game1.objectData
There are definitely some convenience factors. It makes it more comfortable to work with. The trade off is that other mod are unlikely to create instances of your custom type without specific (hard-depdency) compatibility being created
yeah, FTM would need an API (or you could patch it yourself, like Item Extensions) to be able to spawn those FF items in the right class, if it comes up
subclassing is fun but has a ton of caveats for synced things
yeah, I guess it's fine
well, I still would patch Furniture.GetOne (or something, I don't remember exactly) to instantiate them anyway, and I'm pretty sure it's the only way to get any vanilla Furniture subclass properly.
the game still uses new Furniture occasionally, but ItemRegistry.Create("(F)" + ID) is pretty common (and what I currently use), which seems to route into Furniture.GetFurnitureInstance -> new Furniture/new BedFurniture/etc, without touching the get methods
which are apparently GetOneNew and GetOneCopyFrom for furniture, fwiw
although I guess the Item one isn't virtual and just works for everything?
not my area of expertise really
yeah GetFurnitureInstance is the one I'm postfixing
I never saw new Furniture anywhere, I kinda want to check if I have to worry about that
GameLocation and Town still do it for two specific IDs, along with some save migrator stuff and the GetOne/GetOneNew methods
i did some research and got stuck. where do i find the names of menus? in the code only?
that and all the farmhouse bed generation, ig
I don't know if it's because VSCode can't find them, but it seems like Furniture.GetOneNew is never actually used, only overriden
Item.GetOne calls this.GetOneNew(), which would apply to the overridden version if it's ever used on furniture
I... think all the specific instantiations might cause issues in very specific cases, but let's hope nobody overrides these with FF
Do you know why item extensions has to patch ftm
oh yeah, ofc
but yeah, I'm not super familiar with who calls what in the 1.6 item rework
I actually am not sure why tbh
I think it was to do with spawning custom nodes? they went with patching before I became aware of the mod, so FTM only uses the API for clumps, iirc
If you spawn it it is caught by object list changed or whatever the smapi event is
is there a guide out there for how to convert old Custom Furniture packs to either CP or something else? c:
in the C# decompile, yes. that menu is called CharacterCustomization
@worn coral does your tools handle this?
Also from what I remember from the last time this was asked, you might need FF if your Custom Furniture aren't possible with CP
good catch, I'll double check that.
i do have FF, though these are just some png retextures that haven't been updated - not interactables or animated or anything ^^
No, mine (wip) was only for AT <> CP - but I'm pretty sure there was converter for the older formats somewhere, I think there is a command for it, let me see, I'm sure I saved it somwhere
!converters
These community tools help update mods to newer formats or frameworks:
- Convert to Content Patcher from Custom Furniture, Better Farm Animal Variety (BFAV), Custom Music, JSON Assets, More than Necessary (MTN), SAAT, Shop Tile Framework (STF), TMXLoader, or XNB.
- Convert to other frameworks:
- Other tools:
(idk if that's on here but this is our list of converters made by various mod authors)
yup that one, just dug out my commands list but Iro is always faster than me
hehe, has it on speed dial 
You have to check decompile yea
I don't know off hand what the character edit menu is called
So i guess they need a event that triggers on that (spacecore) and also checks if u r wizard basement
okay so fwiw, IE adds "mistyspring.ItemExtensions/IsFTM": "true" to every non-subclass forage object FTM spawns, including not-IE ones; as far as I can tell, it just uses it to skip its own "remove overnight/after X days" check, presumably to let FTM's version of that take priority
it may have also been handling spawn stuff in earlier versions, but currently it just patches FTM to add the modData
https://github.com/misty-spring/StardewMods/blob/main/ItemExtensions/Patches/Mods/FarmTypeManager.cs
https://github.com/misty-spring/StardewMods/blob/main/ItemExtensions/Events/Save.cs#L259
naw you had it right the first time, you can just use BETAS for it. check if they closed that menu with the BETAS trigger. check if the gender is different than it was when they woke up (use PLAYER_GENDER GSQ to set a mail flag at some point prior)
(probably better to check if the gender is different from when you walked into the basement, i guess, but "when they woke up" catches other instances of players changing gender that are non-magical)
But they wanted to start an event based on that
oh i forgor that part, i didnt realize thats what you meant by event oops
Wizard basement check is just in case people bring up the menu from debug

i think i missed a step LOL
my guy he is right there
attempt 2 we can do this
did you select the option to add it to the path when installing?
you can add it manually but it's kind of a pain
hold on, can you try running it through "cmd" instead of powershell?
(just search cmd in the windows menu)
(at least that's how I did that 3 years ago)
try using python3 instead of python maybe?
i had just downloaded the one it sent me to, linked on github, says it's python 3.something
Try py or python3

yes, I mean typing py or python3, like atra said
oh, i apologize, i misunderstood
so now it's a different error ahaha
unless i'm just, supposed to fill out ALL tags and i'm not
but it said optional
put quotation marks around your mod's name
if the answer is that easy LOL
we could have told you that earlier too, but oh well...
i'm not too familiar with coding and scripts, this is my first python experience
and i kinda feel like

for it being that simple a fix lol
i was just copying how it had put it in the guide ha
it's more of a bash issue than python issue
thank you all for your help, i really appreciate it 
no problem, command line interface is scary when you're not used to it
(that's probably one of the things that should be taught in high-school computer science or whatever it's called now imo)
Tbh I've been thinking that trigger actions and gsq could do with a more bash like parser

why were you thinking that
Optional parameter are annoying
didn't Khloe do that for Cloudy Skies?
anyone know how i can spawn pets in to test stuff? cat console command doesn't seem to exist
You probably want the optional breed argument as well if its a custom cat breed
thank you, works. didn't realise i had to prefix with debug lolol
How can you edit the hover text (description) for an item on the toolbar?
Any food item. I want to display the gold to energy ratio of an item on hover, but I'm having trouble accessing the hover text if the inventory isn't open.
Are you in C#?
Yeah
Patch hovertext then
watch out for all the other people patching item hover text related functions too 
hoverText exists on GameMenu but not Toolbar
drawHoverText is but not the hoverText field. Maybe I can still make it work
Yeah that's why everyone's transpiling this one 
(i should probably double check that the route i went works with all those...)
If you're fine with plain text you can patch its description
(oh good, i dont need to double check anymore)
i am one of the description patchers lol
Hello world, anyone have idea how to get uniq entity ID of game object
such as furniture object, crops, debris
Do you need it permanently or per session
per session
should i hook ctor class Furniture & make entityID Counter?
likely Instance Object ID
furniture.GetHashCode(); it's works but it just 32bit id, and that not guarantee
Guid?
do anything but buildings have guid
transpiling drawHoverText was a nightmare so I tried this and it works! thanks!
@ivory plume is it impossible for lookup anything to check for planted fruit trees when you're in a shop checking how many saplings you already own? It's a nightmare trying to remember everything you already planted when you have a billion mods 
It'd be pretty slow
doesnt LA already do something like that for "You owned X of this item" (EDIT: I didnt see that part of hadi's post lol)
well there are probably more terrain features than chests and inventories
It should be unique, just not globally. For pass-by-reference values like furniture, the usual implementation for hashing is hashing the memory address, which naturally can't overlap.
(you might still get hash collisions, and the hash will change between program runs, but still. It's not a terrible idea.)
thanks, but currently i use guid, i think it should works fine
guid is fine if you only care about uniqueness and you don't need it to be deterministic
Ok
I love the madness of seeing Unity in this channel, and it being perfectly on topic.
lol
Is there a way to create an event when you don't know which NPC will be in it? Like a conversation between the farmer and a random townie? The lines would all be the same.
Would like to avoid creating a dozen versions of the same event
maybe with tokenizable strings? i think those get parsed before the commands themselves. maybe
just gotta store the names in a localizedtext accessible location maybe
shrugs
worth a shot!
Alright. Haven't used localizedtext stuff yet, though I've seen it mentioned. Sounds like a start at least
I could maybe also kick off an event with C#?
You could probably maybe a dynamic token with randomized names and then use it for event commands?
Unless I misunderstood what you want to do
Well if your doing c# you could literally str.replace
What I want to do is have a "default" event that can be triggered with an NPC that you're dating that isn't one of the vanilla ones
So that the mod I'm thinking about can support custom NPCs in some fashion
I might have to do C# for this, yeah. Haven't tried kicking off an event with C# before but I guess there's a first time for everything
What if Farmer is dating more than 1 tho 
That would be a problem xD I would choose whoever is at 10 hearts, and if more than one just choose the first
So if I have events queued for Elliott, Harvey and customNPC, the event that started would be whichever one the player found first. So if Elliott is at the docks and Harvey in the clinic and custom NPC at the Railroad, that would be the event that gets used
But all custom NPCs would have the same event at the Railroad
So if more than one are at 10 hearts... I guess I randomize or something
Hmm no clue if it can be done with CP then with support for all custom NPCs😅 Sounds simple enough with C# tho (maybe)
That's what I was afraid of. I'm going to double check the movie and summit stuff, see if that has separate versions for every NPC
If so, then I guess I'll try to figure out how to do this with C#
Unless there's something that adds something like {{Spouse}} for dating, but doubt it
I could definitely see other use cases for it
Agreed. Thanks for the idea. That's probably at the top of my list to try now
Might end up being a separate mod
they yearn for the foreach
If u r in C# anyways what if u just add some kind of event command to put in the spouse actor
Or the dating actor
if you're in C# you can just do str.replace like atra said
an event is just a big string after all
Anyone know if the sound cue heavyEngine is used for anything? Aside from the blacksmith, which seems to only every play 1% of the time.
Want to make sure I'm not just irresponsibily switching out sounds.
You can try looking through decompile
Not entirely sure how ambient sounds placed in the world work. Whether it's something you add to the map or it's hardcoded in.
I'll do that.
I found one on GitHub by just searching text but I'm not sure how recent it is.
I'm fairly certain it is not used outside of the clint ambiance context
I'm familiar with this, yeah. The ambient sounds seem to be broken down based on proximity (brooks, waterfalls) and playing in place of a music track (night ambience, seasonal ambience, etc).
The blacksmith one is stupid because I can never get it to play when I want it to.
Constantly jumpscared by this noise...
I feel like every time i stand outside the blacksmith, the track plays
do you have your ambiance turned down in settings?
If u ever need to disambig between some cues i do have mod for it
Nope. Just on my game I can never consistently get it to play. This isn't really my issue though, I can get it to play enough.
I just like to complain...
I'd be interested for sure.
Unfortunately it's not a true framework
I would actually have to go and add new alt cues and this is by design
wdym cracked game?
how many channels did you message that in?
@gentle rose only 2
@twin wadi a hacked version from a website. I didnt buy the game from Google Play.
oh. well, its literally only 5 dollars as a mobile app... i cant help u with that
consider not going to a public server and saying "I have done Crimes"
The mods already told you not to ask in this server
I have done crimes ||jaywalking||
Gasp
technically sent that before i verballed them, anyway dont worry about it 
1000 yrs jail for atra
That seems like cruel and unusual punishment chue
1000 years, but only simulated in your mind so it's actually just a few hours IRL
1000 yr jail but you get infinite yarn and free food
(I hope this is the right place) Does anyone know where the Sebastian sprite is for the motorcycle heart event? I'm trying to find it but I can't seem to find it...
when in doubt, check Cursors
LooseSprites/Cursors here, if that's the right one (haven't seen it myself)
Ah, thank you! I'm really new to sprite modding so I didn't think to check there.
that one's the go-to for a lot of random images
I like the big brown arrows because they were useful for Custom Tracker 
Who'd have thought, a random sprite was on Cursors
I'll tell you my least favorite: the fish/animal menu buttons
yes I'm still sore
Fair enough, I just wondered
I'm gonna need a to do list mod then lol
I think my fave would be the WHO AM I graffiti
Just finished my first couple mods! (Yayyyyy) I'm working on completing all craftables but after that I'll need something else to waste my time retexturing :0
I still don't know where to share them thoo
If you would like a #mod-showcase people can post to there on your behalf until you qualify for the role
I recommend posting to #modded-stardew either way
if you attach the links to the mods and share them in #modded-stardew, I can showcase them for you
Is there a way of changing the chance of custom ore nodes spawning with FTM? They're listed as forageables so I'm struggling to find a definitive answer
Ooh thank youu!
If you're using an FTM pack to spawn them, then there are a couple options. If another mod is causing them to spawn, FTM can't affect them
Yep I'm using FTM to spawn them and item extensions to create the custom ore nodes.
and done! congratulations on the release!
Yayy! Thank you again!
Alright, so a couple options:
GameStateQueriescan use a few randomization options to allow/deny an area's spawns each day, e.g."GameStateQueries": ["RANDOM 0.5"]- Objects in a forage list can have a chance to not actually spawn if they get selected, e.g.
{"category": "object", "name": "pizza", "PercentChanceToSpawn": 50} MinimumSpawnsPerDaycan be set to 0 or less. It picks a random number between min and max each day, and if that number is 0 or less, nothing will spawn. So for example,MinimumSpawnsPerDay: -4, MaximumSpawnsPerDay: 5would have a 50% chance of spawning nothing each day.
Thank you! This is really helpful c:
so if I wanted to make a seasonal farmer portrait mod and edited all of sophia's portraits from a portrait mod to look like my farmer (including all the expressions) how would I do that? or is it not possible to have expressions for the farmer?
btw? how can i allow a config? i wanna allow users to switch between hair colors for my portrait mod
here's the content json i'd like to know how to change it to allow for either the platnium blonde or the strawberry blonde
and this goes on the top??
it goes in your content.json
also, is "cherry oak village" too generic? idk, just second guessing the name
above in the content json right?
If that's the name of your village then it better have a massive cherry oak in town square
how do i fix this? there's gonna be two options
platinium blonde and strawberry blonde
Are you using an editor like VSCode?
The issue with your json would be indicated there
You have Changes, and then you have more Changes nested under an Action: Load which Content Patcher does not support
If you use Format Document in VSCode, it's easier to tell
how do i do that?
shift+ctrl+p then type format document, and it'll automatically adjust the indentation of everything
Format Document won't fix your errors. It just makes them more obvious.
this what my code looks like and the 1st image is my errors
You still need to learn what to look for
Note the red {} are the ones that are mismatched
You need an extra }, to end the previous action
The } you have there only ends the "When"
https://smapi.io/json/content-patcher/c5e97a01ab674c999f6a4f0d814377d6
(Or validate a new file.)
crap forgot to delete that last part
Another tip, VSCode can validate the same way that smapi.io/json does if you paste the schema into your file
After the first { in your content.json file add "$schema": "https://smapi.io/schemas/content-patcher.json"
and which line is this?????
It should look like this:
If you do that, you'll get validation errors like this
That is telling you that your "When" is wrong.
"Strawbery Blonde" is a string, but "When" expects an object, which means it needs something like "When": { "Key": "Value" }
Tried replacing the "cavedrip" sound with Content Patcher, but when you do this it no longer resamples (pitches it upwards or downwards). Can't seem to find any documentation on this or whether or not its supported.
I'm aware Sound Tweaker exists but I don't know if it works for 1.6.
ok so only error im seeing is that is the String does not match the pattern
should i even include the 1st set?
"Key" was just an example, but not an actual value that means anything. You need to make sure you are writing a when clause that actually does what you want it to do.
Yeah it's weird tbh.
so should i change the key to haircolor??
You shouldn't need sound tweaker anymore but the asset handles certain things like pitch oddly
Yeah. My mind just went to Sound Tweaker because with that mod you could set the min max velocity/pitch.
Take a look at this example https://github.com/Pathoschild/StardewMods/blob/develop/ContentPatcher/docs/author-guide/config.md#examples
That example shows you two ways that your config can affect what you Load. Do you notice what's different from that example compared to what you're trying to do?
Material and Material are spelled the same?
the thing is the target is two images from the original
Also you spelled Strawberry Blonde differently in two place
Content Patcher needs things to be exact. There is no fuzzy matching. It's either exactly what the player selects or it won't match at all.
So if a player selects "Strawberry Blonde" then your condition, which checks for "Strawbery Blonde" would fail.
the issue too is i wanna make sure when they pick between platnium or strawberry? it stays that during spring and winter
I do not understand where I've gone wrong here
I've defined the rules for the sodas, no errors anywhere in the SMAPI console or in the error panel of VS codium, and yet, when I produce the bloody things, they don't actually appear as intended.
Instead of my specialised output, I'm getting generic output
i recommend using shorter token names
Even weirder, after correctly producing an item once, producing it again results in the generic item

quill can u check ur machine with mcp
it sounds like some kinda rule ordering problem
I'll shut down the game to add it real quick
to be clear, they're artisanal soda maker's machines, I'm just adding items to it
did you moveentries
anyone mind reviewing my code i think i fixed it
This is probably another problem. Since you're using {{Strawberry_Blonde}} in the FromFile, it expects that to be a token. So unless you've defined a token named "Strawberry_Blonde" that is supposed to get replaced by an actual value, then this probably isn't trying to load from where you're trying to load from.
no, should I have?
yea the rules need to go first
heres an example of why
the 2 🗒️ rules are the generic egg_item -> mayo
I love my error mayo
if i want my EGGFAULT to become erronnaise instead of regular mayo it has to go first
I see it now
so what should i put if i want the player to pick platnium blonde or strawberry blonde

Into the documentation to find out how to do the moveentries I go
for u, move to top should be sufficient
https://smapi.io/json/content-patcher/78daf971dd664e2db2427c9752eff513
will this work or nah
need to know so i don't upload something broken
"MoveEntries": [
{
"Id": "{{ModId}}_Erregg",
"ToPosition": "Top"
},
{
"Id": "{{ModId}}_EGGFAULT",
"ToPosition": "Top"
}
]
theres details about what this does in the edit-data.md part of cp docs
Reading it rn
ok.... anyone wanna test this for me
dm me for the file! ya just need essentially this mod. i also reccomend nyapu's portraits too for consistency
https://www.nexusmods.com/stardewvalley/mods/33082
please i am begging.
heeey quick question about using context tags in recipes. So I know from searching in here that you gotta have spacecore to do it and you target the cooking recipe overrides in a new file but uh...whenever I do that it doesn't work. Like, the object still shows up but the recipe doesn't. Smapi isn't giving me errors either.
Trying to make a toggleable override for cross-mod compatibility because it was requested. So when the toggle is off you just use the vyrannity butter, but when the toggle is on you can use any item that has the context tag butter_item
Original recipe: https://smapi.io/json/none/321039df93dc4e6e8962b365cf06fbdf
Override recipe: https://smapi.io/json/none/095d0121987e4c38a8b383799c21b2a2
Simply release it and make the users report bugs 😌 nothing could to wrong
Honestly if you've thoroughly tested it yourself I think its ok
Its hard to be perfect
i've tested the previous version
not this version this one has a config to switch between hair colors
Well I mean test ur new version thEn pray
Don't release something u didn't even try on ur own machine lol
@lucid iron
"Action": "EditData",
"Target": "Data/Machines",
"TargetField": ["(BC){{ASMID}}_ColaMaker", "OutputRules"],
"MoveEntries": [
{ "Id": "{{ModID}}_AlbarinoCola", "ToPosition": "Top" },
{ "Id": "{{ModID}}_CabernetSauvignonCola", "ToPosition": "Top" },
{ "Id": "{{ModID}}_ChardonnayCola", "ToPosition": "Top" },
{ "Id": "{{ModID}}_GewurztraminerCola", "ToPosition": "Top" },
{ "Id": "{{ModID}}_GrenacheCola", "ToPosition": "Top" },
{ "Id": "{{ModID}}_GrunerVeltlinerCola", "ToPosition": "Top" },
{ "Id": "{{ModID}}_IceGrapeCola", "ToPosition": "Top" },
{ "Id": "{{ModID}}_MerlotCola", "ToPosition": "Top" },
{ "Id": "{{ModID}}_MoscatoCola", "ToPosition": "Top" },
{ "Id": "{{ModID}}_MuscadineCola", "ToPosition": "Top" },
{ "Id": "{{ModID}}_NebbioloCola", "ToPosition": "Top" },
{ "Id": "{{ModID}}_PinotGrigioCola", "ToPosition": "Top" },
{ "Id": "{{ModID}}_PinotNoirCola", "ToPosition" : "Top" },
{ "Id": "{{ModID}}_RieslingCola", "ToPosition": "Top" },
{ "Id": "{{ModID}}_SangioveseCola", "ToPosition": "Top" },
{ "Id": "{{ModID}}_SauvignonBlancCola", "ToPosition": "Top" },
{ "Id": "{{ModID}}_SchiavaCola", "ToPosition": "Top" },
{ "Id": "{{ModID}}_SyrahCola", "ToPosition": "Top" },
{ "Id": "{{ModID}}_ViognierCola", "ToPosition": "Top" },
{ "Id": "{{ModID}}_WhiteZinfandelCola", "ToPosition": "Top"},
{ "Id": "{{ModID}}_ZinfandelCola", "ToPosition": "Top"}
],
"Entries": {```
Like this?
yea assuming u r adding all these in the same edit
yep
the whole brady bunch gets added in the entries list
and then rinse and repeat with different output in separate files for the other 3 machines
....why do i not have one? brb adding one now 
Any reasons why a map patch would be invisible when applied?
many reasons
I've done a patch summary and it's saying it's been replaced soooo
you could be patched over, you could be using wrong patch mode, we really dont have the info to even guess
i feel like ive committed a major crime by not adding a big tree in a village named after a tree
I'm using replace to patch it - what info do you need?
what's the actual issue exactly?
so like
if I have the toggle on
the original recipe vanishes like it's supposed to
but the new recipe doesn't show up so it becomes impossible to cook
So you remove the recipe from Data/CookingRecipes entirely?
Don't do that, SpaceCore Overrides always need a base recipe to, well, override
Nono it's still in there
it's in with all the other recipes cause I don't know when the person's gonna turn the toggle off, y'know?
is your map actually that big 
so it's not showing up when the toggle is on? even though you don't remove it from Data/CookingRecipes?
anything in your logs?
Yea, the map is 120x100 c:
The map has patched and the collision is there, it's just the object is invisible
Nothing, this is the log from the most recent run: https://smapi.io/log/b0591ee0526949a9a7c7f2c02899b933
Log Info: SMAPI 4.2.1 with SDV 1.6.15 build 24356 on Microsoft Windows 11 Home, with 22 C# mods and 15 content packs.
Suggested fixes: One or more mods are out of date, consider updating them
Something is still wrong, I think 
All the MoveEntries are done, but only partial success this time (the two on the right are my items, the two on the left that look different stylistically are the generic items again)
omg soda maker pack 👀
yesss
my old wine sodas
you updating ASM was a godsend
could revive my first major mod
but yeah no errors or warnings related to the cooking_replacements.json file selph
what do the rules look like
for the ones that became generic
Hang on, lemme send you the jsons directly
just send here
I tried looking at how Culinary Delights did it, as far as I can tell it's doing it the same way I'm trying to do it, but no dice, and the validator isn't catching any goofy syntax
the only other thing I can think of is that you used -5 for one of the slots, while IIRC SC's overrides only support item ids or context tags
I could be wrong tho
I tried doing it with the context tag "category_egg" too and got the same result
lemme restore and send that version hold on...
just to clarify, the recipe stops showing up in the cooking menu at all?
can you post your content.json just in case
{ "ID": "{{ModID}}_AlbarinoCreamSoda", "ToPosition": "Top" },
{ "ID": "{{ModID}}_CabernetSauvignonCreamSoda", "ToPosition": "Top" },
{ "ID": "{{ModID}}_ChardonnayCreamSoda", "ToPosition": "Top" },
{ "ID": "{{ModID}}_GewurztraminerCreamSoda", "ToPosition": "Top" },
{ "ID": "{{ModID}}_GrenacheCreamSoda", "ToPosition": "Top" },
{ "ID": "{{ModID}}_GrunerVeltlinerCreamSoda", "ToPosition": "Top" },
{ "ID": "{{ModID}}_IceGrapeCreamSoda", "ToPosition": "Top" },
{ "ID": "{{ModID}}_MerlotCreamSoda", "ToPosition": "Top" },
{ "ID": "{{ModID}}_MoscatoCreamSoda", "ToPosition": "Top" },
{ "ID": "{{ModID}}_MuscadineCreamSoda", "ToPosition": "Top" },
{ "ID": "{{ModID}}_NebbioloCreamSoda", "ToPosition": "Top" },
{ "ID": "{{ModID}}_PinotGrigioCreamSoda", "ToPosition": "Top" },
{ "ID": "{{ModID}}_PinotNoirCreamSoda", "ToPosition" : "Top" },
{ "ID": "{{ModID}}_RieslingCreamSoda", "ToPosition": "Top" },
{ "ID": "{{ModID}}_SangioveseCreamSoda", "ToPosition": "Top" },
{ "ID": "{{ModID}}_SauvignonBlancCreamSoda", "ToPosition": "Top" },
{ "ID": "{{ModID}}_SchiavaCreamSoda", "ToPosition": "Top" },
{ "ID": "{{ModID}}_SyrahCreamSoda", "ToPosition": "Top" },
{ "ID": "{{ModID}}_ViognierCreamSoda", "ToPosition": "Top" },
{ "ID": "{{ModID}}_WhiteZinfandelCreamSoda", "ToPosition": "Top"},
{ "ID": "{{ModID}}_ZinfandelCreamSoda", "ToPosition": "Top"}
],```
{ "ID": "{{ModID}}_AlbarinoSoda", "ToPosition": "Top" },
{ "ID": "{{ModID}}_CabernetSauvignonSoda", "ToPosition": "Top" },
{ "ID": "{{ModID}}_ChardonnaySoda", "ToPosition": "Top" },
{ "ID": "{{ModID}}_GewurztraminerSoda", "ToPosition": "Top" },
{ "ID": "{{ModID}}_GrenacheSoda", "ToPosition": "Top" },
{ "ID": "{{ModID}}_GrunerVeltlinerSoda", "ToPosition": "Top" },
{ "ID": "{{ModID}}_IceGrapeSoda", "ToPosition": "Top" },
{ "ID": "{{ModID}}_MerlotSoda", "ToPosition": "Top" },
{ "ID": "{{ModID}}_MoscatoSoda", "ToPosition": "Top" },
{ "ID": "{{ModID}}_MuscadineSoda", "ToPosition": "Top" },
{ "ID": "{{ModID}}_NebbioloSoda", "ToPosition": "Top" },
{ "ID": "{{ModID}}_PinotGrigioSoda", "ToPosition": "Top" },
{ "ID": "{{ModID}}_PinotNoirSoda", "ToPosition" : "Top" },
{ "ID": "{{ModID}}_RieslingSoda", "ToPosition": "Top" },
{ "ID": "{{ModID}}_SangioveseSoda", "ToPosition": "Top" },
{ "ID": "{{ModID}}_SauvignonBlancSoda", "ToPosition": "Top" },
{ "ID": "{{ModID}}_SchiavaSoda", "ToPosition": "Top" },
{ "ID": "{{ModID}}_SyrahSoda", "ToPosition": "Top" },
{ "ID": "{{ModID}}_ViognierSoda", "ToPosition": "Top" },
{ "ID": "{{ModID}}_WhiteZinfandelSoda", "ToPosition": "Top"},
{ "ID": "{{ModID}}_ZinfandelSoda", "ToPosition": "Top"}
],```
Was gonna throw them in the validator, but here you go
oh. oh wait I think I see soemthing hold on let me try something
oh i meant don't DM me 
but hm it's probably better if you patch export Data/Machines
Wasn't planning to, I meant that I was gonna toss the whole jsons into the validator for you
righto, lemme load in with test candidate 3
nope that didn't fix it...rip
Here you go!
U should go eep now
cooking override with category_egg ingrediant: https://smapi.io/json/none/842ff21a9c444660bae9d237503c3c58
content.json: https://smapi.io/json/none/2e285dfc68894757b05f6d80f62e0a9b
Also screenshots of the buttercake from lookup anything:
@green patrol You leveled up to Cowpoke. You can now speak in our voice channels and share images in all channels!
after I see if this patch export reveals anything
oh wait it does show up in the cooking menu it got moved
...that's so weird, why doesn't it show up in lookup anything?
welp problem solved ig, I'm just blind. Ty for the help though selph I really appreciate it!
Hm, feel like I've tried everything now. It's invisible but with collision still, it's strange
hm, I see the sodas in here right enough, at the top of the entries list too
they should work, for all intents and purposes
do u have the right fuel each time
...
I'm daft
I see what's wrong
Thanks for helping with the entries, chu!
I only went and got the primary input wrong 
istg for the probiotic sodas I'll learn how to use local tokens so I don't deal with this copy paste ballyhoo again
Could it be problematic that I'm using tiledata on the patch?
Ok, so I just tried that and it's showing as if it hasn't patched
I'm basically trying to get the special orders board to be fixed on fall 1 instead of being available immediately, so I've got a broken board there until the 56 days have passed
what if you do the opposite then
I'm not sure what you mean?
have a patch for first 56 days
Ahh gotcha, I will try that now. I thought you meant the broken board after the 56 days lol
Would it work if i put a patch for <56 days or will CP not read that properly?
you need to do query for that
Ahh ok that might work better
smapi doesn't seem to like this line "When": { "DAYS_PLAYED 0 56" },
thats cus this is not a dictionary, and that is not a token
Omg I need to sleep lmao, I did know this I swear 
you also can't use GSQs directly in When conditions*
*there's a mod for that, but that's advanced stuff
and in this case there's a token for it
well u have a special order board so are using EMP already right
its also got the GSQ support thing
Yep I am c:
you may do it but again need a token
Ok, will sort it now
Is this better? "When": { "Query": "{{DaysPlayed}} >=56": true },
no thats not how json works
(It's close:
"When": {
"Query: {{DaysPlayed}} >= 56": true
},
That's a {{DaysPlayed}} >= 56 argument passed to the Query token.)
hm it does say greater than still
you can test with the current patch you got
however i do personally think it's better to stop applying a map patch later on, than to start applying one
(Oh, well the syntax is correct but I'm not sure what specific logic you're trying to do.)
Thanks, was pretty close!
(they were trying to do a map patch that appear after 56 day so it is correct for that, i just have Opinions)
Ok so it's still invisible... Ugh I will come back to this after some sleep I think
Wait, it's not because I'm skipping time with CJB is it?
well u can try no condition and see if the patch applies in that case
Nope, still invisible
something up with the patch.tmx itself then 
skipping time via debug/cjb does sometimes screw up day counters, though. in at least some situations, the counter relies on you having slept in order to increment, so skipping ahead X days won't increase it (i don't know offhand which ones, sorry)
Sodas work!
Ok, so I've discovered that the broken board vanishes on summer 1...
Gonna eep, I'll finish the marketing material for the mod page in the morning
So it's not taking notice of the condition, just vanishes on summer 1 aaaaa
This is what it's like all through spring.. and then summer 1 nothing but collision
if you have collision but no pixels, make sure your seasonal tilesheets match
New here and testing out some ideas. I'm trying to change the standard bundles, so I'm editing "Data/Bundles" during the OnAssetRequested event. Looks like the update works, but in game the bundles are unmodified. I tried logging out Game1.netWorldState.Value.BundleData and it still shows the original values. It looks like this cache is set at game launch, even before a save is selected, and I can't see any way to force the cache to reload. Any ideas? Or perhaps my approach is flawed?
I'm using the board from the town tilesheet, so it should be in the same place on all seasons (except winter where it's gone)
bundles need the regenerate_bundles command
Thanks for the reply. I just searched the docs and it looks like a console command, is that accurate?
Also, for learning purposes, is this kind of solution typical when editing game data?
bundles are just set when the save is created and never modified ever again afterwards
theyre not completely unique in that regard but mostly unique
99% of the time it isnt typical
Vanilla Town tilesheet doesn't have the broken board in Fall and Summer.
Okay that makes a lot of sense, editing those after a save is created is potentially bad. Perhaps I should alter my strategy to only apply to new saves
it wont matter what you do in AssetRequested if its not a new save
as you've discovered
so if you're just changing them to be other things then it doesnt take any special consideration to make it new saves only
That's interesting, I was planning on saving my altered bundles in json and having to load it each time. Sounds like the game may already do that
WAIT. The summer version of the town tilesheet doesn't have the broken board on it!
btw, the intent is to randomize these, hence the persistence
well, it aint broken in the summer
I thought it got fixed in fall?
It's fixed in Fall but the assumption is that it got cleared on Summer.
(Trivia: SVE adds it back in on Summer.)
I'm glad I know what's wrong with my patch now anyway lol
can clean the board themselves, need a magic trash bear to clean up the litter
Hi I'm trying to make a mod for the first time and was wondering if there's any way to prevent a map from being winter? I made a new map and I'd prefer to just have it be spring summer and falls looks. I tried just removing the winter tilesheet, it kinda worked but the trees, bushes and long grass were the winter variant
I tried the season override property but it doesn't seem to work for multiple seasons only one
@uncut viper huge thanks for the regenerate_bundles tip! It is now working!
(i pass the thanks on to @lucid iron who gave you the tip)
i pass this alll the way back to pathos who mention this long ago
and presumably implemented the command
well thank you all 😄
I just tried a new save and verified that regenerate_bundles isn't necessary in that scenario. Writing console commands is super handy
Presumably you can conditionally patch the SeasonOverride property to only apply during Winter?
I'm not sure how to do that yet but I'll try and do this :) it sounds like a perfect solution as all I really wanna do is make the map be fall when winter happens
yea that should work
{
"Action": "EditMap",
"Target": "YourMapHere",
"MapProperties": {
"SeasonOverride": "Fall",
},
"When": {
"Season": "Winter"
}
}
consequences include inability to plant powder melons
Oh thank you! Does this go into the content JSON file?
The board is no longer invisible, but the patch isn't going away after the 56 days. Here's the relevant part of the json { "LogName": "Lilybrook Broken Board Patch", "Action": "EditMap", "Target": "Maps/8BitAlien.Lilybrook_Lilybrook", "FromFile": "assets/Maps/LilybrookBoardPatch.tmx", "PatchMode": "Replace", "FromArea": { "X": 0, "Y": 0, "Width": 5, "Height": 3 }, "ToArea": { "X": 97, "Y": 63, "Width": 5, "Height": 3 }, "When": { "Query: {{DaysPlayed}} <=56": true }, },
DaysPlayed =/= what day it is
Yeah, you'd need to actually sleep 56 times.
you need to actually literally sleep 56 times
this is a content patcher edit yep, goes under Changes
I know, I've tried it on an existing save as well, and the board is still broken
Ok thank you so much! :D
Or is it 56 days since the patch has been added to the existing save only counts?
I've just manually slept 56 days and the board is still broken...
(Tip: the patch summary command shows the current value of each token like {{DaysPlayed}} and whether your patch is currently applied, there's no need to guess.)
Days played is 115, so the patch mustn't be being applied 
If you check the patch list shown by patch summary, what does it say for your patch(es)?
Oooh no it's not applied... wonder why that is?
Says this: hint: asset name may be incorrect (shouldn't include '.Lilybrook_LilybrookBoardPatch' extension).
That hint is a bug (which will be fixed in an upcoming Content Patcher update), you can ignore that part.
Ah ok, I'm wondering what's wrong then :c
So seems to be working as intended then? Your Where conditions say the patch shouldn't be applied (since 115 isn't <= 56), and it wasn't?
If something isn't working, it's probably not due to that specific logic then.
Yep, the patch isn't applied anymore and that's a good thing, but visually, the broken board is still there
Sounds like that's due to something other than the patch then. If you want to be sure, you could delete the patch entirely and see if it still happens.
Just removed the patch and the board is fixed
So the patch must not be being removed after 56 days
If you re-add the patch and reload the save (so it should already be disabled when the map loads), is the board still fixed?
Nope, it's back to being broken
What if you set the condition to something that's immutably false?
"When": {
"Query: 1 = 0": true
},
the season override doesnt seem to be working, does this look ok? im very new to coding and have no idea what could be wrong :'D
your target must be the name of the asset, not the file you're loading
also are you still using CustomLocations?
it's deprecated, use Data/Locations to load your location instead
The indentation is horrible, but that doesn't make it wrong
Does SeasonOverride need to have the [ ]? The wiki shows SeasonOverride [<string season>] but I am unsure as to if the enclosing square brackets are still needed for the single season on a map property.
!json also
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.
The query itself is probably fine. It seems there's an issue where, once the patch is applied, reloading the map without the patch doesn't fully remove it. Does it still happen if you temporarily remove all mods except Content Patcher, your content pack, and any required dependencies?
would yall recommend making separate retextures like dshi does or just make one big retexture and try coding configs?
I'm not sure what this means but I was following a tutorial from 3 years ago, do I just replace the "customlocations" with "data/locations" ? Or is there more to it
honestly just make one configurable retexture imo
Also thank you I'll bookmark that website :)
Yep, it still happens sadly
it's easier on your users to have one mod not 10
alright!! thank you ૮₍ ´ ꒳ `₎ა either way itll allow more anticipation to build up so itll feel more accomplishing once i complete it
Do you mean the SeasonOverride map property? No, it seems someone just misused the argument format syntax when writing that part of the wiki. It's a required single argument like SeasonOverride spring.
Also for name of the asset, should it just be Map.tmx? That's the name of the map file I'm trying to edit
you need to Load the tmx
ive got a working mod that does this kinda thing here
though its conditioned on a config rather than global season
yeah, looks like the wiki entry was just incorrect then, since it's the one on the Modding:Maps page under the known map properties.
(I fixed it.)
Fixed the issue!
i'm not familiar with doing configs, but does config schema need to be under changes? or within brackets?
because changes is within brackets
changes and config schema should be in brackets []
config is braces, changes is brackets. just remove the brace on line 15
well. from the first json. not that second one
go back to the first one
so like this?
no, and your VSC is telling you no as well. go back to the first json. just remove the brace from line 15
https://smapi.io/json/content-patcher/d1c98cf8f00f4be99fc9184359464e7d
did that and another error
now replace the brace on line 16 and the brace on line 48 with brackets
[ and ] respectively
cool cool
There are quite a few errors in there, honestly. It's also gonna get mad at you for using "PatchMode" in a "Load" action block.
https://smapi.io/json/content-patcher/1d2f7595d595471ea42882e3c09d2b3a
did that and error
well honestly idk what to add
(if you're using PatchMode overlay, it should probably be an EditImage instead)
tried that but it kept saying "duplicate"
in the SMAPI log?
https://smapi.io/json/content-patcher/47e431f2b46e4d89bb53cc41887cee2a
I got it to stop erroring as far as syntax.
Duplicate?
You had too many closing brackets
huh
Blue Spring and Green Spring were also in the same { } brackets because you didn't have Green Spring closed.
Which WOULD create a duplicate "Action" field
ahh
(if you hover over the closing brackets in the JSON validator, it'll show you what the associated open bracket is in the code)
Helps to show you when something's trying to close the wrong block
How do i tell what $ a portrait is assigned to?
the one in the top left is $0, top right is $1, the one below top left is $2, the one below top right is $3, and so on
it doesnt seem like you need the {{}} around the StrawberryBlonde and PlatinumBlonde, though id need to see the yellow error youre talking about to be sure.
cool cool lemme test it
Thanks
Is there a way to pull up a portrait on command to make sure im looking at the right place?
have you unpacked the game files yet?
Yes
im not sure what you mean then besides just opening up the portrait file from there
hmm actually I think I can guessimate at this point, thanks
you can also use letter $ as well, if you use default placement... for example happy $h = $1, sad $s = $2, unique $u = $3, love/blush $l = $4, angry $a = $5
hey I have been wondering why there is no mod that makes sandy datable and want to make one but I have no clue how to code so if enyone is interested please dm me
have you looked at https://www.nexusmods.com/stardewvalley/mods/21370 and https://www.nexusmods.com/stardewvalley/mods/30976
1.6 update for Looking for Love! Makes the older vanilla singles romanceable. Available in English, Spanish, Russian, and Thai
I guess I did not see it so thanks
nothing wring with making more sandy datable
Would it be alright for me to put a picture of where I built an NPC house for my mod to ask if anyone could think of any reason why I shouldn't have put a house there? Once I built a custom location mod and later learned of why I shouldn't have put it in the location it was in and I don't want to get too far in this time


let me try again