#making-mods-general

1 messages · Page 328 of 1

brittle pasture
#

no it doesn't, it just won't use the item query fields

#

just EMC technically SDVpuffersquee

shut plank
#

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?

uncut viper
#

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)

rare pilot
#

French

#

But that might be too old

#

She was in charge of the smapi website for a moment iirc ?

shut plank
# uncut viper i dont know what event starter template you mean. are you looking at the modding...

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?

Stardew Modding Wiki

This guide attempts to provide a more in-depth explanation to modding events as a reference for both beginners and experts.

slate wren
#

yall is there anyway i can create a mod with close to 0 experience in coding 😔

rare pilot
uncut viper
slate wren
#

😭

uncut viper
#

it probably says so somewhere on that guide page too, but i wouldnt know where

uncut viper
ocean sailBOT
#
Creating a Custom 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:

uncut viper
#

NPCs are a lot to do, but all of it is very doable

rare pilot
#

Well I'm gonna let the new blood handle that cause my modding knowledge is 6 years old lol

lucid iron
#

to make a npc you need art writing and some content patcher stuff

slate wren
lucid iron
#

the content patcher part not too hard n theres templates

slate wren
#

okay okay

rare pilot
#

Hm I might be misremembering Zoey's name I'll have to ask pathos lol

slate wren
tiny zealot
#

!anyonecancook

ocean sailBOT
#
slate wren
#

okay so like

#

uhhh

#

do i use this thing?

uncut viper
#

you can

lucid iron
uncut viper
#

its by no means the only way to make an NPC. but if you prefer it, you can

slate wren
#

what are the differences

#

😣

lucid iron
#

ultimately you are producing the same thing, a content patcher mod

#

!startmodding

ocean sailBOT
#

Making mods can be broadly divided into two categories:

Usually it’s easier to start with making content packs, since you don't need to learn programming.

lucid iron
#

take a look at the wiki tutorial for that for some context

uncut viper
#

the google docs thing just helps you make your json stuff

slate wren
#

help i did i can barely understand anything

uncut viper
#

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

slate wren
#

okay okay

tiny zealot
# slate wren help i did i can barely understand anything

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

uncut viper
#

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

slate wren
#

😔

#

welp

#

uhh what language of code

#

is it?

tiny zealot
#

C# is the language to use for actual game/mod code, but you don't need to touch that for most mods

slate wren
#

so uh

#

should i just go try and understand the wiki instructions?

tiny zealot
#

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

slate wren
#

okay okay

#

thank you so much

#

ill get to that

shut plank
# uncut viper it isnt, no. the very first section after the spot on the wiki page i linked to ...

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" } } ] }

tiny zealot
#

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)

ivory plume
#

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

shut plank
tiny zealot
#

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

lucid iron
shut plank
#

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!

lucid iron
#

future PR will be less messy i hope

ivory plume
#

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.

lucid iron
#

oh pathos i thought en.json is broken is that fixed

shut plank
#

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

ivory plume
tiny zealot
shut plank
#

yep that console command works perfectly. awesome im so excited to get started thank you!!

twin wadi
#

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

tardy tinsel
#

if they have special background stories, you can also include related factors in the dialogue

tiny zealot
#

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

sour sleet
hasty notch
twin wadi
#

haha im teaching my dad how to mod and he just made a little test fish mod after hours of yelling at smapi ❤️

tardy tinsel
wide lake
#

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

ivory plume
wide lake
#

Reusing an existing config option means no new i18n text, so less work 🙂

tardy tinsel
#

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?

ivory plume
twin wadi
#

i think you can have more than two answers

rare pilot
twin wadi
#

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

tardy tinsel
ivory plume
#

Yep, the same applies to $p; you can have any number of |-delimited values.

half tangle
proven spindle
half tangle
#

🤝

proven spindle
#

!translations

#

Hmm guess not on the command side

half tangle
#

I checked the command list and didn't see anything

proven spindle
#

But yeah, that link Cam posted is it

proven spindle
#

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

twin wadi
#

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.",```
gentle rose
#

yup, exactly that

#

what language are you translating to, btw?

twin wadi
#

korean

twin wadi
gentle rose
twin wadi
#

oh okay thanks

#

the wording was a bit confusing on the config

gentle rose
# twin wadi korean

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

twin wadi
gentle rose
#

I get you, I used to do that when I first moved to the UK haha, there's something fun about it

twin wadi
#

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!

orchid glade
#

This looks really useful. The event id I believe no longer has to be numeric though, I think?

rigid oriole
#

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

serene moat
#

The tool I’m making is following the wiki at the time I made it, haven’t updated it if it’s been updated

rigid oriole
#

The wiki has definitely been updated a lot

#

But i think the idea of the tool sounds super useful!

serene moat
#

I just made it for my own lazy ass lol
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

woeful lintel
#

Would be nice to have a queer support charity to set as DP target on Nexus

gentle rose
#

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

rigid oriole
lucid mulch
#

Also preconditions should use their names rather than their legacy aliases

gentle rose
gentle rose
lucid mulch
#

Rather than "w Sunny" it would be "Weather Sunny" iirc

serene moat
#

I’m just using what the game uses itself

woeful lintel
#

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

rigid oriole
#

I suppose if I actually wanted to make a donation it'd make more sense for me to donate directly anyway

gentle rose
serene moat
lucid mulch
#

Old vanilla events didn't switch for backwards compatibility reasons, but the newer 1.6 native events should be

serene moat
#

Where do you read this? The event wiki page has the alias as well

gentle rose
#

same page

#

[[Modding:Event_data#Short_aliases]]

serene moat
#

Strange, when shortform still works

lucid mulch
#

Deprecated != Removed

gentle rose
#

it still works for backwards compat like sinz said, that doesn't mean it should be used

serene moat
lucid mulch
#

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

serene moat
#

Wonder why so many big mods haven't updated it

woeful lintel
#

probably same reason why SV didn't change all the event keys?

lucid mulch
#

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

woeful lintel
#
Nexus Mods Forums

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

gentle rose
woeful lintel
#

It's a forum post, so feel free to propose those you know.

serene moat
#

As a queer, I love this initiative

long jungle
#

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.

Nexus Mods :: Stardew Valley

Gives unique identities to Swords, Clubs, Daggers, Slingshots, Boots, and Rings. Modifies Monsters and Mine Rewards accordingly. New Weapon Special Attacks (Right Click) also implemented. Made for SVE

#

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?

fading walrus
# long jungle https://www.nexusmods.com/stardewvalley/mods/29284 I clearly am not very good a...

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!

long jungle
long jungle
jolly grove
#

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?

lucid iron
calm nebula
#

This should be how it works as of 1.5.something

#

The startupprefs file

#

!startupprefs

ocean sailBOT
#

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 + R to open a 'run' dialogue. Enter %appdata%/StardewValley to 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.
jolly grove
jolly grove
calm nebula
#

No, don't do those instructions

#

I'm just telling you where the file that saves the options should be

jolly grove
#

oh ok

static ravine
#

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

calm nebula
jolly grove
#

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

static ravine
patent lanceBOT
#

Syntax: .quote [#|nick|add|edit|remove] [#|"quote"] [- nick] | On Discord? React to a message with 💬

tiny zealot
#

.q 6218

patent lanceBOT
#
#6218

It's not in Cursors
There's no way it's in Cursors
... it was in Cursors

tiny zealot
#

dang you can't combine a quote call with more info

lucid iron
tiny zealot
#

but, don't patch your new breed's face icon into cursors. just provide your own asset

lucid iron
#

It's a dog but it's simple example for breeds

tiny zealot
static ravine
#

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)

lucid iron
#

Oo it went past 10k udl

#

10k people have your cat

calm nebula
#

I enjoy the genre of "a modder's personal pet"

#

Very much

#

Someone coughing should make a recommendation list

#

(Tia?)

lucid mulch
#

the 1.6 added cat breed with the void is CloseEnough™️ for me

calm nebula
#

Void pics plz

lucid iron
#

@ kailey onyx when

calm nebula
#

I don't think I've seen Wednesday in a while

lucid iron
#

I feel left out for not having pet sometimes

#

Gotta add my childhood goldfeesh somehow

lucid mulch
last badge
#

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!

soft granite
#

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?

lucid iron
#

troubleshooting

#

Check that subpage

soft granite
#

A subpage on this discord?

lucid mulch
#

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

soft granite
#

Ok, so it does infact ask for a specified pack. Does it reload everything, including jsons that would affect schedules and dialogue?

lucid mulch
#

within the limits of what the asset pipeline normally can affect

opaque field
#

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

soft granite
lucid mulch
#

patch reload isn't going to do anything more powerful than a OnTimeChanged update rate

lucid iron
#

Change it to mail flag once you want to lock in brat

opaque field
#

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

lucid iron
#

No just IncrementStat

#

It's a trigger action

soft granite
gaunt orbit
#

Has anyone done custom c# buff effects in 1.6? If so, how did you go about it?

opaque field
#

oooooooooOOOOhhh okay. I actually have that page open I'll go check it out

tiny zealot
lucid iron
#

MousePoints

gaunt orbit
#

Hatcoin

tiny zealot
#

(it's for when you choose the really mean dialogue options in her events)

soft granite
#

Thanks, this will cut down a lot of time shutting down and reloading the game repeatedly!

opaque field
lucid iron
#

Yeah

#

Well idk is brat supposed to be mutually exclusive from blush and basic?

royal stump
# gaunt orbit Has anyone done custom c# buff effects in 1.6? If so, how did you go about it?

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 ![SDVpufferthinkblob](https://cdn.discordapp.com/emojis/958634925639225395.webp?size=128 "SDVpufferthinkblob"))
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```
opaque field
#

@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

vernal crest
lucid iron
#

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

uncut viper
#

it can't go below 1

opaque field
#

I was gonna do 0-8 = Basic 9-18 = Blush 19-27 = Brat

uncut viper
#

(small difference that may or may not actually matter)

lucid iron
#

Yeah i should clarify

#

If it goes to 0 it's removed

opaque field
#

oooh so 1-9 10-19 and 20-28?

uncut viper
#

you would just check for a minimum of 8

opaque field
#

okay cool cool coool :3

uncut viper
#

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

opaque field
#

sweet, this was super helpful. Thank you!

last badge
calm nebula
#

Need to look but I recall looking and thinking that it was safe to subclass

vernal crest
lucid mulch
#

never closes dynamic tokens block, never opens a change block (or close it)

#

or closing the outer most object either

vernal crest
#

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

lucid mulch
#

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

vernal crest
#

Yup

#

I closed the config schema, changes block, and file (outer block) and the errors went away

last badge
vernal crest
royal stump
#

whereas in 1.5 and earlier, the whole thing was barely synced at all, iirc

lucid mulch
royal stump
#

so I guess a Buff subclass should still be safe if that's the goal

vernal crest
lucid mulch
#

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

vernal crest
# last badge oh shoot, can you show me what you did?

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.

calm nebula
#

Which is fine for a lot of applications tbh

royal stump
#

yeah, other clients have never really had control over application either, but I imagine most buffs would want to be handled locally anyway

uncut viper
#

(can you harmony prefix an instance constructor to have it return a subclass of itself instead?)

royal stump
#

also buff does have customFields for tacking information on, though idk if that part is synced offhand

calm nebula
#

Other than a light buff

uncut viper
#

expected but sad

lucid mulch
#

Harmony patches on a constructor can't return a different type

calm nebula
#

The constructor is actually an initializer

lucid mulch
#

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*

woeful lintel
uncut viper
#

the use case was letting the Buff constructor return this subclass buff instead if it matched an expected buff id

lucid mulch
#

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

woeful lintel
#

oh ok

uncut viper
#

(though the behind the scenes usecase was me just furthering my harmony knowledge)

#

(or well, general C# knowledge i guess too)

lucid mulch
#

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

woeful lintel
#

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?

uncut viper
#

the serializer understands specific types and those specific types only

royal stump
#

telling it to just save a normal instance is basically what spacecore's serializer stuff does, iirc

gaunt orbit
lucid mulch
#

The second you are doing other types you need spacecore to mess with the serializer on your behalf

uncut viper
#

you could also just do the snorlax method as well, but if you want to qactually save the furniture itself you do want spacecore

lucid mulch
#

Technically can do it yourself but no one wants the yellow warning of shame that spacecore takes on so no one else has to

uncut viper
#

(the snorlax method being "replace the furniture with something inoccuous on saving, restore it on finished saving/save loaded)

gaunt orbit
#

Although now that I think of it, I'm not sure if you can do that with the fancy vanilla buffs either

uncut viper
#

tbh i have wanted to serialize stuff myself and dont mind having the warning... but i just dont know how to 8')

tiny zealot
#

(standalone serializer mod when)

royal stump
#

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

woeful lintel
#

So the game will just ignore any CustomFurniture when saving if I don't do anything about it, right?

uncut viper
#

no

#

it will break horribly

royal stump
#

the game will freeze at save and spam red

lucid mulch
tiny zealot
#

right, i just want the serializer to be its own mod and not pull in all of spacecore

woeful lintel
#

lmao, that's better imo

uncut viper
lucid mulch
#

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

royal stump
#

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

woeful lintel
#

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

royal stump
#

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 SDVpufferdizzy
other mods can occasionally move or store instances in fun new ways

vernal crest
woeful lintel
#

tried to look at spacecore's code, and yeah, I'm not doing whatever's happening in there.

calm nebula
royal stump
#

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 SDViconghost

calm nebula
#

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

tiny zealot
#

i was gonna say that's just xml, lol

calm nebula
#

But even on top of that it's insanely redundant

#

A lot of default values get serialized

royal stump
#

yeah, I always get lost when I bother to save edit something

calm nebula
#

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)

lucid iron
#

Serializer scary i would absolutely do the Furniture -> CustomFurniture and back

spark finch
#

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)

calm nebula
#

It's really not if you're comfortable with emit code

lucid iron
#

That's a load bearing statement atra

lucid iron
woeful lintel
#

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

lucid iron
#

Why isn't it just read from asset then

lucid mulch
woeful lintel
#

(forgot to mention: no instance specific data)

frosty hull
#

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

spark finch
lucid iron
#

That's how i did trinkets for instance

woeful lintel
#

yeah, that's what I do right now, the part that bothers me is patching each individual method when I could just override them

lucid iron
#

Yeah i hold opinion that patching individual method is better in this case

woeful lintel
#

hence "I can even omit the extra data field if it's too annoying"

uncut viper
#

having gone through similar with CMF i second chu's opinion that patching the methods is better

lucid iron
#

But still it's probably fine to do iterate all items and swap during the Saving event, put em back in Saved

woeful lintel
#

ye

uncut viper
#

(also, have you checked that all the methods you're patching are even virtual in the first place)

woeful lintel
#

nah

tawny ore
uncut viper
#

well, itd really put a damper on the overriding plan if you cant even override them

calm nebula
#

Xmlser is also used for MP sync....sometimes

woeful lintel
#

I think most of them are already override from Item

calm nebula
#

If you want subclasses just use spacecore

#

Seriously

woeful lintel
#

nah I'm fine, I'll just continue doing Harmony patches

calm nebula
#

It's so easy to fuck up if you try to do it yourself

tawny ore
#

If your subclass doesn't even have custom states, then it's a bit pointless to even bother with subclassing or spacecore

calm nebula
#

And more about the fact that in mp sync the game blows past the steam packet size

royal stump
#

(can confirm, I'm just going with spacecore if I ever finish my overhauls and still need them SDVpufferdizzy)
(most of it's vanilla or Harmony-able now, but yeah, swapping all instances safely is a mess)

tawny ore
#

It sounds like your Furniture is just vanilla furniture with custom (model) data

calm nebula
#

Like, that's the entire reason I'm poking the serializer in the first place

tawny ore
#

Just seems kind of overkill to worry about save serializer stuff if there's nothing about the furniture you need saved

gentle rose
#

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)

jolly grove
frosty hull
#

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

woeful lintel
brittle pasture
#

tbh that's fine, that's what the game does for data

#

the big ass dictionary being stuff like Game1.objectData

tawny ore
#

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

royal stump
#

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

woeful lintel
#

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.

royal stump
#

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? SDVpufferdizzy not my area of expertise really

woeful lintel
#

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

royal stump
#

GameLocation and Town still do it for two specific IDs, along with some save migrator stuff and the GetOne/GetOneNew methods

spark finch
royal stump
#

that and all the farmhouse bed generation, ig

woeful lintel
royal stump
#

Item.GetOne calls this.GetOneNew(), which would apply to the overridden version if it's ever used on furniture

woeful lintel
#

I... think all the specific instantiations might cause issues in very specific cases, but let's hope nobody overrides these with FF

calm nebula
royal stump
#

but yeah, I'm not super familiar with who calls what in the 1.6 item rework

calm nebula
#

I actually am not sure why tbh

royal stump
#

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

calm nebula
#

If you spawn it it is caught by object list changed or whatever the smapi event is

vital dew
#

is there a guide out there for how to convert old Custom Furniture packs to either CP or something else? c:

uncut viper
woeful lintel
#

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

woeful lintel
vital dew
#

i do have FF, though these are just some png retextures that haven't been updated - not interactables or animated or anything ^^

worn coral
gentle rose
#

!converters

vital dew
#

i'll take a look! thank you all

gentle rose
#

(idk if that's on here but this is our list of converters made by various mod authors)

worn coral
#

yup that one, just dug out my commands list but Iro is always faster than me

vital dew
#

hehe, has it on speed dial meruhehe

lucid iron
#

I don't know off hand what the character edit menu is called

lucid iron
#

So i guess they need a event that triggers on that (spacecore) and also checks if u r wizard basement

royal stump
# calm nebula Do you know why item extensions has to patch ftm

SDVpufferthink 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

uncut viper
#

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

lucid iron
#

But they wanted to start an event based on that

uncut viper
#

oh i forgor that part, i didnt realize thats what you meant by event oops

lucid iron
#

Wizard basement check is just in case people bring up the menu from debug

vital dew
#

i think i missed a step LOL

#

my guy he is right there

#

attempt 2 we can do this

woeful lintel
#

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

vital dew
#

i thought i did RazzThonk let me try again

#

sorry about the trouble ^^;

woeful lintel
#

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)

gentle rose
#

try using python3 instead of python maybe?

vital dew
calm nebula
#

Try py or python3

vital dew
gentle rose
vital dew
vital dew
#

unless i'm just, supposed to fill out ALL tags and i'm not

#

but it said optional

woeful lintel
#

put quotation marks around your mod's name

vital dew
#

if the answer is that easy LOL

woeful lintel
#

we could have told you that earlier too, but oh well...

vital dew
#

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

woeful lintel
#

it's more of a bash issue than python issue

vital dew
#

thank you all for your help, i really appreciate it bunnyglad

woeful lintel
#

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)

calm nebula
#

Tbh I've been thinking that trigger actions and gsq could do with a more bash like parser

gentle rose
#

why were you thinking that

calm nebula
#

Optional parameter are annoying

uncut viper
#

didn't Khloe do that for Cloudy Skies?

static ravine
#

anyone know how i can spawn pets in to test stuff? cat console command doesn't seem to exist

rigid oriole
#

You probably want the optional breed argument as well if its a custom cat breed

static ravine
#

thank you, works. didn't realise i had to prefix with debug lolol

twilit spoke
#

How can you edit the hover text (description) for an item on the toolbar?

lucid iron
#

Is it an object you made

#

What kind is it

twilit spoke
# lucid iron What kind is it

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.

lucid iron
#

Are you in C#?

twilit spoke
#

Yeah

lucid iron
#

Patch hovertext then

uncut viper
#

watch out for all the other people patching item hover text related functions too SDVpufferthumbsup

twilit spoke
lucid iron
#

It's on IClickableMenu which is the superclass

twilit spoke
#

drawHoverText is but not the hoverText field. Maybe I can still make it work

lucid iron
#

Yeah that's why everyone's transpiling this one LilyDerp

uncut viper
#

(i should probably double check that the route i went works with all those...)

brittle pasture
#

If you're fine with plain text you can patch its description

uncut viper
#

(oh good, i dont need to double check anymore)

rigid oriole
#

i am one of the description patchers lol

frosty hull
#

Hello world, anyone have idea how to get uniq entity ID of game object

#

such as furniture object, crops, debris

calm nebula
#

Do you need it permanently or per session

frosty hull
#

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

lucid iron
#

Guid?

brittle pasture
#

do anything but buildings have guid

frosty hull
#

Ah good idea

#

i see furniture that collection with NetCollection

twilit spoke
sleek igloo
#

@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 SDVpufferchickcry

lucid iron
#

It'd be pretty slow

brittle pasture
#

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

gaunt orbit
#

(you might still get hash collisions, and the hash will change between program runs, but still. It's not a terrible idea.)

frosty hull
#

thanks, but currently i use guid, i think it should works fine

tawny ore
#

guid is fine if you only care about uniqueness and you don't need it to be deterministic

frosty hull
#

Ok

blissful panther
#

I love the madness of seeing Unity in this channel, and it being perfectly on topic.

frosty hull
#

lol

tribal ore
#

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

uncut viper
#

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!

tribal ore
#

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

whole raptor
#

You could probably maybe a dynamic token with randomized names and then use it for event commands? SDVpufferthinkblob Unless I misunderstood what you want to do

calm nebula
#

Well if your doing c# you could literally str.replace

tribal ore
#

So that the mod I'm thinking about can support custom NPCs in some fashion

tribal ore
whole raptor
#

What if Farmer is dating more than 1 tho SDVpufferthinkblob

tribal ore
#

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

whole raptor
#

Hmm no clue if it can be done with CP then with support for all custom NPCs😅 Sounds simple enough with C# tho (maybe)

tribal ore
#

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#

whole raptor
#

Unless there's something that adds something like {{Spouse}} for dating, but doubt it

tribal ore
#

CustomTokens doesn't right now, but maybe I could write one...

#

That's not a bad idea

whole raptor
#

I could definitely see other use cases for it

tribal ore
#

Agreed. Thanks for the idea. That's probably at the top of my list to try now

#

Might end up being a separate mod

lucid iron
#

You can date multiple people right

#

So it is once again the content modders yearning

rigid oriole
#

they yearn for the foreach

lucid iron
#

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

uncut viper
#

if you're in C# you can just do str.replace like atra said

#

an event is just a big string after all

daring skiff
#

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.

lucid iron
#

You can try looking through decompile

daring skiff
#

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.

daring skiff
#

I found one on GitHub by just searching text but I'm not sure how recent it is.

rigid oriole
#

it's ambient noise

#

[[Modding:Audio]]

rigid oriole
#

I'm fairly certain it is not used outside of the clint ambiance context

daring skiff
#

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

rigid oriole
#

I feel like every time i stand outside the blacksmith, the track plays

daring skiff
#

Damn.

#

Well, good news, I designed a way less obnoxious one.

rigid oriole
#

do you have your ambiance turned down in settings?

lucid iron
#

If u ever need to disambig between some cues i do have mod for it

daring skiff
#

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

daring skiff
lucid iron
#

Unfortunately it's not a true framework

#

I would actually have to go and add new alt cues and this is by design

twin wadi
#

wdym cracked game?

gentle rose
#

how many channels did you message that in?

lucid iron
strong mesa
#

@gentle rose only 2

#

@twin wadi a hacked version from a website. I didnt buy the game from Google Play.

twin wadi
ornate locust
#

consider not going to a public server and saying "I have done Crimes"

rigid oriole
#

The mods already told you not to ask in this server

calm nebula
#

I have done crimes ||jaywalking||

rigid oriole
#

Gasp

round timber
#

technically sent that before i verballed them, anyway dont worry about it SDVpufferthumbsup

lucid iron
#

1000 yrs jail for atra

calm nebula
#

That seems like cruel and unusual punishment chue

tawny ore
#

1000 years, but only simulated in your mind so it's actually just a few hours IRL

lucid iron
#

1000 yr jail but you get infinite yarn and free food

wind charm
#

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

ornate locust
#

when in doubt, check Cursors

royal stump
wind charm
royal stump
#

SDVpufferthumbsup that one's the go-to for a lot of random images

lucid iron
#

Quick whats ur favorite cursors

#

Big fan of the shop bg square it's so splashable

royal stump
#

I like the big brown arrows because they were useful for Custom Tracker SDVpufferowo

tawny ore
#

Who'd have thought, a random sprite was on Cursors

brittle pasture
#

I'll tell you my least favorite: the fish/animal menu buttons
yes I'm still sore

sleek igloo
#

I'm gonna need a to do list mod then lol

gentle rose
#

I think my fave would be the WHO AM I graffiti

patent bluff
#

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

lucid iron
#

If you would like a #mod-showcase people can post to there on your behalf until you qualify for the role

fading walrus
sour sleet
#

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

royal stump
sour sleet
fading walrus
patent bluff
royal stump
# sour sleet Yep I'm using FTM to spawn them and item extensions to create the custom ore nod...

Alright, so a couple options:

  • GameStateQueries can 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}
  • MinimumSpawnsPerDay can 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: 5 would have a 50% chance of spawning nothing each day.
sour sleet
#

Thank you! This is really helpful c:

worn oar
#

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?

rare orbit
#

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

rare orbit
#

and this goes on the top??

brittle pasture
#

it goes in your content.json

twin wadi
#

also, is "cherry oak village" too generic? idk, just second guessing the name

rare orbit
#

above in the content json right?

lucid iron
#

If that's the name of your village then it better have a massive cherry oak in town square

rare orbit
#

how do i fix this? there's gonna be two options

#

platinium blonde and strawberry blonde

tawny ore
#

Are you using an editor like VSCode?

#

The issue with your json would be indicated there

rare orbit
#

i used notepad to get started

#

but i switched to vscode

#

vscode is hard to get

tawny ore
#

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

rare orbit
#

how do i do that?

tawny ore
#

shift+ctrl+p then type format document, and it'll automatically adjust the indentation of everything

rare orbit
#

ok did that but still got errors

tawny ore
#

Format Document won't fix your errors. It just makes them more obvious.

rare orbit
#

this what my code looks like and the 1st image is my errors

tawny ore
#

You still need to learn what to look for

lucid mulch
#

Note the red {} are the ones that are mismatched

tawny ore
#

You need an extra }, to end the previous action

#

The } you have there only ends the "When"

rare orbit
#

crap forgot to delete that last part

tawny ore
#

Another tip, VSCode can validate the same way that smapi.io/json does if you paste the schema into your file

rare orbit
#

tried to but it doesn't wanna

#

how do i add it?

tawny ore
#

After the first { in your content.json file add "$schema": "https://smapi.io/schemas/content-patcher.json"

rare orbit
#

and which line is this?????

tawny ore
#

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

daring skiff
#

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.

rare orbit
#

ok so only error im seeing is that is the String does not match the pattern

#

should i even include the 1st set?

tawny ore
# rare orbit

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

rare orbit
calm nebula
#

You shouldn't need sound tweaker anymore but the asset handles certain things like pitch oddly

daring skiff
#

Yeah. My mind just went to Sound Tweaker because with that mod you could set the min max velocity/pitch.

rare orbit
#

ok lemme re read it

#

i keep trying to target the right file

#

but idk if i am

tawny ore
#

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?

rare orbit
#

Material and Material are spelled the same?

tawny ore
rare orbit
#

the thing is the target is two images from the original

tawny ore
#

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.

rare orbit
#

the issue too is i wanna make sure when they pick between platnium or strawberry? it stays that during spring and winter

fading walrus
#

froggie_sob 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

lucid iron
#

i recommend using shorter token names

fading walrus
lucid iron
#

quill can u check ur machine with mcp

#

it sounds like some kinda rule ordering problem

fading walrus
#

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

lucid iron
#

did you moveentries

rare orbit
#

anyone mind reviewing my code i think i fixed it

tawny ore
fading walrus
lucid iron
#

heres an example of why

#

the 2 🗒️ rules are the generic egg_item -> mayo

calm nebula
#

I love my error mayo

lucid iron
#

if i want my EGGFAULT to become erronnaise instead of regular mayo it has to go first

fading walrus
rare orbit
fading walrus
#

Opening mcp helped visualise it

#

Thanks chu

lucid iron
fading walrus
#

Into the documentation to find out how to do the moveentries I go

lucid iron
#

for u, move to top should be sufficient

rare orbit
#

need to know so i don't upload something broken

lucid iron
#
"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

fading walrus
#

Reading it rn

rare orbit
#

ok.... anyone wanna test this for me

#

please i am begging.

green patrol
#

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

rigid oriole
rare orbit
#

ok i'll do that

#

even tho my perfectionism is screaming

rigid oriole
#

Honestly if you've thoroughly tested it yourself I think its ok

#

Its hard to be perfect

rare orbit
#

i've tested the previous version

#

not this version this one has a config to switch between hair colors

rigid oriole
#

Well I mean test ur new version thEn pray

#

Don't release something u didn't even try on ur own machine lol

fading walrus
#

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

lucid iron
#

yea assuming u r adding all these in the same edit

fading walrus
#

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

twin wadi
sour sleet
#

Any reasons why a map patch would be invisible when applied?

lucid iron
#

many reasons

sour sleet
#

I've done a patch summary and it's saying it's been replaced soooo

fading walrus
#

Testing time part two

#

If it doesn't work I'll just sleep on it

lucid iron
twin wadi
sour sleet
brittle pasture
green patrol
#

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

brittle pasture
green patrol
#

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?

lucid iron
#

is your map actually that big NotteThink

brittle pasture
#

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?

sour sleet
#

The map has patched and the collision is there, it's just the object is invisible

green patrol
ocean sailBOT
#

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

fading walrus
green patrol
#

omg soda maker pack 👀

fading walrus
#

yesss

#

my old wine sodas

#

you updating ASM was a godsend

#

could revive my first major mod

green patrol
#

but yeah no errors or warnings related to the cooking_replacements.json file selph

lucid iron
#

for the ones that became generic

fading walrus
lucid iron
#

just send here

green patrol
#

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

brittle pasture
fading walrus
#

I think I found it

#

Lemme try a thing real quick

brittle pasture
#

I could be wrong tho

green patrol
#

lemme restore and send that version hold on...

brittle pasture
#

just to clarify, the recipe stops showing up in the cooking menu at all?

#

can you post your content.json just in case

fading walrus
# lucid iron just send here
                { "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

green patrol
#

oh. oh wait I think I see soemthing hold on let me try something

lucid iron
#

but hm it's probably better if you patch export Data/Machines

fading walrus
fading walrus
green patrol
#

nope that didn't fix it...rip

lucid iron
#

U should go eep now

green patrol
ocean sailBOT
#

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

green patrol
fading walrus
green patrol
#

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!

sour sleet
#

Hm, feel like I've tried everything now. It's invisible but with collision still, it's strange

fading walrus
#

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

lucid iron
#

do u have the right fuel each time

fading walrus
#

I see what's wrong

#

Thanks for helping with the entries, chu!

#

I only went and got the primary input wrong milklaugh

#

istg for the probiotic sodas I'll learn how to use local tokens so I don't deal with this copy paste ballyhoo again

sour sleet
#

Could it be problematic that I'm using tiledata on the patch?

lucid iron
#

no i dont think that is the case NotteThink

#

u can try a patch export on the map perhaps

sour sleet
#

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

lucid iron
#

what if you do the opposite then

sour sleet
#

I'm not sure what you mean?

lucid iron
#

have a patch for first 56 days

sour sleet
#

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?

lucid iron
#

you need to do query for that

sour sleet
#

Ahh ok that might work better

#

smapi doesn't seem to like this line "When": { "DAYS_PLAYED 0 56" },

lucid iron
#

thats cus this is not a dictionary, and that is not a token

sour sleet
#

Omg I need to sleep lmao, I did know this I swear SDVpuffercry

brittle pasture
#

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

lucid iron
#

well u have a special order board so are using EMP already right

#

its also got the GSQ support thing

sour sleet
#

Yep I am c:

lucid iron
#

you may do it but again need a token

sour sleet
#

Ok, will sort it now

#

Is this better? "When": { "Query": "{{DaysPlayed}} >=56": true },

lucid iron
#

no thats not how json works

ivory plume
#

(It's close:

"When": {
    "Query: {{DaysPlayed}} >= 56": true
},

That's a {{DaysPlayed}} >= 56 argument passed to the Query token.)

lucid iron
#

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

ivory plume
#

(Oh, well the syntax is correct but I'm not sure what specific logic you're trying to do.)

sour sleet
#

Thanks, was pretty close!

lucid iron
#

(they were trying to do a map patch that appear after 56 day so it is correct for that, i just have Opinions)

sour sleet
#

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?

lucid iron
#

well u can try no condition and see if the patch applies in that case

sour sleet
#

Nope, still invisible

lucid iron
#

something up with the patch.tmx itself then NotteThink

tiny zealot
#

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)

fading walrus
#

Sodas work!

sour sleet
#

Ok, so I've discovered that the broken board vanishes on summer 1...

fading walrus
#

Gonna eep, I'll finish the marketing material for the mod page in the morning

sour sleet
#

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

tiny zealot
#

if you have collision but no pixels, make sure your seasonal tilesheets match

sinful spindle
#

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?

sour sleet
lucid iron
sinful spindle
#

Also, for learning purposes, is this kind of solution typical when editing game data?

uncut viper
#

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

devout otter
sinful spindle
uncut viper
#

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

sinful spindle
#

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

sour sleet
#

WAIT. The summer version of the town tilesheet doesn't have the broken board on it!

sinful spindle
#

btw, the intent is to randomize these, hence the persistence

uncut viper
#

well, it aint broken in the summer

sour sleet
#

I thought it got fixed in fall?

uncut viper
#

is it? i thought it was summer

#

(i havent done an actual Playthrough in a while)

devout otter
#

It's fixed in Fall but the assumption is that it got cleared on Summer.

#

(Trivia: SVE adds it back in on Summer.)

sour sleet
#

I'm glad I know what's wrong with my patch now anyway lol

uncut viper
#

can clean the board themselves, need a magic trash bear to clean up the litter

leaden hawk
#

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

sinful spindle
#

@uncut viper huge thanks for the regenerate_bundles tip! It is now working!

uncut viper
#

(i pass the thanks on to @lucid iron who gave you the tip)

lucid iron
#

i pass this alll the way back to pathos who mention this long ago

#

and presumably implemented the command

sinful spindle
#

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

devout otter
leaden hawk
lucid iron
#

yea that should work

#
{
  "Action": "EditMap",
  "Target": "YourMapHere",
  "MapProperties": {
    "SeasonOverride": "Fall",
  },
  "When": {
    "Season": "Winter"
  }
}
#

consequences include inability to plant powder melons

leaden hawk
sour sleet
#

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 }, },

uncut viper
#

DaysPlayed =/= what day it is

devout otter
#

Yeah, you'd need to actually sleep 56 times.

uncut viper
#

you need to actually literally sleep 56 times

lucid iron
sour sleet
#

I know, I've tried it on an existing save as well, and the board is still broken

leaden hawk
sour sleet
#

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

ivory plume
#

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

sour sleet
#

Days played is 115, so the patch mustn't be being applied SDVpufferthinkblob

ivory plume
#

If you check the patch list shown by patch summary, what does it say for your patch(es)?

sour sleet
#

Oooh no it's not applied... wonder why that is?

#

Says this: hint: asset name may be incorrect (shouldn't include '.Lilybrook_LilybrookBoardPatch' extension).

ivory plume
#

That hint is a bug (which will be fixed in an upcoming Content Patcher update), you can ignore that part.

sour sleet
#

Ah ok, I'm wondering what's wrong then :c

ivory plume
#

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.

sour sleet
#

Yep, the patch isn't applied anymore and that's a good thing, but visually, the broken board is still there

ivory plume
#

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.

sour sleet
#

Just removed the patch and the board is fixed

#

So the patch must not be being removed after 56 days

ivory plume
#

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?

sour sleet
#

Nope, it's back to being broken

ivory plume
#

What if you set the condition to something that's immutably false?

"When": {
    "Query: 1 = 0": true
},
sour sleet
#

doing that fixes the board

#

So at least now we know this is an issue with my query

leaden hawk
#

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

brittle pasture
#

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

woeful lintel
#

The indentation is horrible, but that doesn't make it wrong

latent mauve
#

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.

woeful lintel
#

!json also

ocean sailBOT
#

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.

ivory plume
# sour sleet So at least now we know this is an issue with my query

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?

drowsy minnow
#

would yall recommend making separate retextures like dshi does or just make one big retexture and try coding configs?

leaden hawk
rigid oriole
leaden hawk
rigid oriole
#

it's easier on your users to have one mod not 10

drowsy minnow
#

alright!! thank you ૮₍ ´ ꒳ `₎ა either way itll allow more anticipation to build up so itll feel more accomplishing once i complete it

ivory plume
leaden hawk
lucid iron
#

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

latent mauve
ivory plume
#

(I fixed it.)

sour sleet
#

Fixed the issue!SDVpufferparty

rare orbit
#

any idea how to fix this?

#

?

urban patrol
#

i'm not familiar with doing configs, but does config schema need to be under changes? or within brackets?

#

because changes is within brackets

rare orbit
#

honestly idk

#

if anyone is familar with configs? some help would be amazing

round timber
#

changes and config schema should be in brackets []

uncut viper
#

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

rare orbit
#

so like this?

uncut viper
#

no, and your VSC is telling you no as well. go back to the first json. just remove the brace from line 15

rare orbit
uncut viper
#

now replace the brace on line 16 and the brace on line 48 with brackets

#

[ and ] respectively

rare orbit
#

cool cool

latent mauve
#

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.

rare orbit
#

well honestly idk what to add

latent mauve
#

(if you're using PatchMode overlay, it should probably be an EditImage instead)

rare orbit
#

tried that but it kept saying "duplicate"

latent mauve
#

in the SMAPI log?

hard fern
#

Duplicate?

latent mauve
#

You had too many closing brackets

rare orbit
#

huh

latent mauve
#

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

rare orbit
#

ahh

latent mauve
#

(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

rare orbit
#

i got some yellow errors and i assume it was cause the haircolor wasn't the same

soft granite
#

How do i tell what $ a portrait is assigned to?

round timber
#

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

round timber
rare orbit
#

cool cool lemme test it

soft granite
#

Thanks

#

Is there a way to pull up a portrait on command to make sure im looking at the right place?

round timber
#

have you unpacked the game files yet?

soft granite
#

Yes

round timber
#

im not sure what you mean then besides just opening up the portrait file from there

soft granite
#

hmm actually I think I can guessimate at this point, thanks

twin wadi
echo veldt
#

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

calm nebula
#

There is at least one

#

Roses in the sand or smth like that

brittle pasture
#
Nexus Mods :: Stardew Valley

1.6 update for Looking for Love! Makes the older vanilla singles romanceable. Available in English, Spanish, Russian, and Thai

Nexus Mods :: Stardew Valley

This mod remakes Sandy as fully romanceable character with hundreds of lines of dialogue, 7 new events and tones of schedule changes. Includes sprites originally made by Poltergeister (Hair piece by T

echo veldt
#

I guess I did not see it so thanks

calm nebula
lucid iron
#

nothing wring with making more sandy datable

lucid jewel
#

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