#making-mods-general

1 messages · Page 318 of 1

umbral plume
#

even if theres only one line

woeful lintel
#

json is always "key": value

#

Yup

#

Can't have 2 keys in a row

uncut viper
#

json syntax is the same no matter what you are writing in it, cant change the syntax if docs tell you otherwise even if you think you need to write smth different

umbral plume
#

gotchya, does that mean i can put both add and remove under entries then or do i still need seperate actions

woeful lintel
#

You can do both if they're next to each other

#

I think

round timber
#

if youre doing the same target, yea

umbral plume
#

safe bet probably just have two seperate actions though right

uncut viper
#

if its the same target the best thing to do is in the same patch if possible

woeful lintel
#

I'd say it's not necessary, but you can start with separate to debug stuff

umbral plume
#

eyyyyy no errors found for now

#

now to test it in game lmao but once the second upgrade is all done, ive already got the first upgrade done so i just get to play with it after :3

#

if anyone needs inspiration: I just learned coding and made farmhouse maps for both upgrades and renos in 42 hours out of pure spite, you can do whatever that thing is you think you cant do

woeful lintel
#

Except put two json keys in a row

umbral plume
#

shhhhhhhhhhhhhhhhhhhhhhhh

#

im a pessimist trying to be postive take it with a grain of salt lol

clever sinew
#

Is there a reason that context tags would default to one specific item as opposed to the category i was trying to define in spacecore?

sour sleet
#

Aaaa time skipping wasn't the problem. She's still getting stuck at the side of the bridge :c

#

Is it a pathfinding issue?

latent mauve
#

Last time this happened to someone, it was at the BusStop, and it was because the warp was blocked by a tile on the Buildings layer.

#

Is she getting stuck on a custom map or a vanilla one?

latent mauve
#

(Yep, if anyone ever says their NPCs stopped moving at the BusStop, easiest thing to check is that the tile below the NPC warp in the bus door isn't blocked)

sour sleet
#

For some reason, she's refusing to cross the bridge lol

latent mauve
#

how is your bridge set on the map?

#

And by that, I mean, what layer are your bridge floor tiles on

sour sleet
#

the sides are on the buildings layer and the stone walkable part is on the back layer

latent mauve
#

is she heading towards a NPC Warp?

#

Is there an NPC Warp on that map?

half tangle
#

I remember hearing about NPCs having trouble with bridges

sour sleet
#

No there isn't. She's heading to another open area

half tangle
#

That's why the Sunberry entrance is a land bridge

latent mauve
#

Usually the bridge issue has to do with the Buildings layer and Passable though, I think?

serene moat
#

I had a similar issue, changed the goto location to another tile and it somehow worked

calm nebula
latent mauve
#

I'm hoping this is at least a 2-tile wide bridge walking space, based on the screenshot. So that shouldn't be the issue, LOL

sour sleet
#

Buildings layer and Back layer

latent mauve
#

Mind taking another screenshot with the Back layer visibility off, for Buildings?

#

It's a little hard to tell what I'm looking at.

sour sleet
latent mauve
#

thanks, the dark spots on the path were messing with me

#

no tiledata anywhere on that bridge, correct?

sour sleet
#

Nope, none at all

latent mauve
#

and she's supposed to stop somewhere else further north on that same map?

sour sleet
#

Yep. I even changed the schedule point just to test and she's still getting stuck in the same place

latent mauve
#

and you've slept or reloaded save after changing, yes?

#

It's not something silly like you made a map change and didn't sleep?

#

(I've done this)

sour sleet
#

I haven't edited this map for a while so no. I've been doing lots of schedule changes though

latent mauve
#

Every time you change the schedule, you need to sleep or load a new save

#

because pathfinding is determined before the new day starts

sour sleet
#

Ahh ok! I will try sleeping

umbral plume
#

what pixel art software do you guys use? Ive only used anime sketch softwares lol if i wanna make my own stardew clone i should probably have some pixel art software reccommendations

latent mauve
#

I use Krita with some custom configurations for pixel brushes, but a lot of people here swear by Asesprite

umbral plume
#

krita has pixelart? I thiink i did their trial and was like "meh"

round timber
#

krita is free tho, there is no trial 🤔

latent mauve
#

There's a charge if you get it off the Steam or app stores maybe, rather than directly from the website?

#

I got mine from the website, so, free

umbral plume
#

asepriite looks nice and 20 isnt too bad is what i would say if i had an income

#

not compared to modern digital art softwares ive come across

round timber
#

you can technically get that one for free too if you compile it yourself

half tangle
#

I just use GIMP. I'm not known for my visual artistry, but I know that some authors who are also use it.

sour sleet
#

Nope, sleeping hasn't made a difference. She is still getting stuck there :c

umbral plume
#

wait im a dummy i want to make animated talk sprites like you see in homestuck so i was like i gotta make my own game well why dont i just make stardew valley portraits but theyre animated sprites instead of a whole a** game

#

duhhhhh

#

liike that

#

ill just make stardew versions and make it a mod

#

i dont need to make a whole game lmao

fiery cobalt
ocean sailBOT
#

Log Info: SMAPI 4.2.1 with SDV 1.6.15 build 24356 on Microsoft Windows 10 Home, with 27 C# mods and 13 content packs.
Suggested fixes: One or more mods are out of date, consider updating them

fiery cobalt
#

Ignored Lots Of Recipes > Include data/fishshop.json > EditData Data/Shops: one of Entries, Fields, MoveEntries, or TextOperations must be specified for an 'EditData' change.

uncut viper
#

!json

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.

uncut viper
#

its what it says on the tin though. you dont have an entires, fields, moveentries, or textoperations field

uncut viper
#

you didnt put your shop stuff inside an Entries block

fiery cobalt
#

It is literally the same as the one for the saloon but the saloon one works

umbral plume
#

(oh right sorry my yapping is taking up chat space my bad sweeties)

uncut viper
#

you must put it inside an Entries block as that is how CP works

sour sleet
#

Whoever helps me fix this will be my new favourite person SDVpufferwow

latent mauve
#

I need to go find dinner, since it's 9pm and I've not eaten yet, but if nobody else has got it figured out, I'm happy to try to look at the TMX directly later.

#

just in case it's invisible tile shenanigans

fiery cobalt
#

Again it is literally a cut paste of a working one

#

Lets find the tiny mistake lol

sour sleet
#

Could the problem be with a schedule string? That's the only other thing I'm thinking

latent mauve
#

It could be, but that would likely show in the error log?

sour sleet
#

Ahh okay

latent mauve
#

wouldn't hurt to post it just in case

sour sleet
#

"Sun": "610 8BitAlien.Lilybrook_JagHouse 12 13 0/1200 8BitAlien.Lilybrook_Lilybrook 13 49 2/1400 8BitAlien.Lilybrook_JemmaHouse 13 22 1 \"Strings\\schedules\\AnyaLilybrook:JemmaHouseAnya\"/2000 8BitAlien.Lilybrook_JagHouse 3 7 2 anyalilybrook_sleep",

fiery cobalt
#

oh I am dumb

uncut viper
round timber
#

one time i had my npc stuck because i didnt add the animation i used into the actual game but that didnt happen mid-walking like yours did

fiery cobalt
#

I swear just posting here makes things obvious

round timber
#

do her other schedules work, btw?

sour sleet
#

Yep, her other ones are fine

peak isle
#

regardless, hopefully the entries block fixes stuff for ya

fiery cobalt
#

It is

peak isle
#

ah nice, memory like an elephant hap

fiery cobalt
#

Hopefully it works

#

Because if not the Saloon is going to have so many recipes

#

I wish the Gus's Recipe Book mod still worked

merry rampart
#

Not sure if this is a coding problem or what, but I have no idea how to remove this shadow

Problem is, it's a skin and not a building itself. I don't want to remove the shadows for all skins, just this one...

#

or at least move it up under the trailer

fiery cobalt
#

It kinda looks like the trailer is flying

merry rampart
#

yeah...

#

i dont like it in the least

#

i might also add a bit of wood flooring in front of it because i dont like the ghost wood sound that i cant figure out how to get rid of

brittle pasture
merry rampart
#

that removes the shadow for all the skins

uncut viper
#

that would affect all variants, no?

merry rampart
#

not just the one

brittle pasture
#

ah missed that part sorry

karmic gust
#

If I'm testing schedules that have a When condition requiring the player to have seen an event, will using smapi console commands to view it count? Or do I have to start the event in game organically

peak isle
#

this is how I learned there is a spring_Shadows tilesheet. I feel like all I ever do is scroll thru that folder and I'd never noticed that file before lol

brittle pasture
#

well looks like a thing for mmap

round timber
#

watching it via debug ebi works yes

uncut viper
#

until mmap or smth adds a thing for it i would just move the trailer to the bottom of the skin png so its next to the shadow and add some manual shadow to it so at least theres not a harsh edge

merry rampart
#

cant. this is a farmhouse skin

karmic gust
#

Ty!!

uncut viper
#

you cant draw the shadow into the trailer skin .png you are loading?

merry rampart
#

it has to stay where it is so the door consistant with the others

round timber
#

if all else fails, draw a fence in front of the trailer?

sour sleet
merry rampart
#

i might need to

uncut viper
#

if its the farmhouse itself, id honestly just disable the shadow for all variants then bc who is gonna change it that often or even notice in the first place

sour sleet
#

The plot thickens. One of my other NPCs has just walked across the same bridge with no issues. I'm losing my mind here SDVpufferwaaah

latent mauve
#

okay, I'm back from dinner

sour sleet
#

I might just change the schedule so she doesn't need to cross the bridge lol

#

I just wanna know what the problem is

latent mauve
#

so the other NPC crossed the bridge fine?

sour sleet
#

Yep, but he came from the other side

latent mauve
#

ah

#

Do they cross the other way eventually?

sour sleet
#

I will test that out brb

latent mauve
#

I really wanna test your TMX for invisible tiles, LOL

#

but it's weird that it'd be a one-way failure

merry rampart
#

this looks a little better. i dont love it but it's better than it was

posting here because i posted the "before" pic here. the rest will go into the art channel

#

also yes im ocd

sour sleet
#

Must just be a problem with Anya SDVpufferflat

round timber
#

poor anya

latent mauve
#

Then the next step is changing her schedule strings to inch her closer to the spot where she gets stuck

#

and also checking that her animations all exist in animationDescriptions, like someone mentioned earlier

sour sleet
#

I've changed her schedule to force her to cross the other bridge so she can get to the place that way lol

#

I just think it's a very strange and specific issue

merry rampart
#

npc pathing is complete sorcery

clever sinew
#

I will fix thatttt not right now

golden basin
#

isnt ther a mod that lets you craft furniture and like make recipes for you mod?

hard fern
#

🤔 im debating if i should make some of my machine processing stuff interchangeable (wrong word but idk what to call it)...

#

like i have "recipes" for a product

#

you can put it in machine 1 to turn it into a different item, and then put it into machine 2 to make it a different color

#

but i wondered if i should allow putting it into machine 2 first, to dye it, then machine 1 to process it

brittle pasture
brittle pasture
#

use the full qualified ID in the output

#

it's a thing since 1.6.9

#

there is the bug where the game's vanilla crafting menu doesn't handle big items properly (it will overlap other items), however it's not a problem in Better Crafting

#

if you're willing to scope creep yourself further you can make a custom crafting station with BC...

#
    {
      "LogName": "Craft table from another table",
      "Action": "EditData",
      "Target": "Data/CraftingRecipes",
      "Entries": {
        "CHAIR": "(F)0 1 388 10/Home/(F)3 1 815 1/false/default/",
        "TALBE": "(F)1120 1 388 10/Home/(F)1122/false/default/",
        "SORD": "(W)4 1/Home/(W)62/false/default/",
        "TALBE2": "(F)1120 1 388 10/Home/(F)TABLEMACHINE/false/default/",
      }
    },

example code from my test mod lmao

calm nebula
#

Sord

round timber
#

talbe

hard fern
#

sord....

#

the part im dreading abt my mod the most is the BC portion bc SDVpuffersweats i have so many items

umbral plume
#

ive got one last issue i cant seem to solve before my entire journey has been worth it and completed

#

I don't think the null commands are correct in the json cause....

#

its still trying to load the extended corner

#

any ideas>

#

?

#

the little strip of wall in the center implies its also trying to load the smaller version of the corner room too even though the json has it being replaced with mine

latent mauve
#

You need to also null the remove entry, most likely

umbral plume
#

i did

latent mauve
#

Ah

umbral plume
#

lemme try running an unmodded version rq

#

cause i even tried replacing the vanilla files

latent mauve
#

That definitely looks like the remove version isn't properly set, because you shouldn't have black tiles on the layer otherwise, I think

umbral plume
#

nope no changes

umbral plume
latent mauve
#

Post your JSON?

#

I'm not at my computer anymore to look at the source code but I will see if anything looks off to start with

pastel vessel
#

I'm replying 5 years too late, because I only just now got back into Stardew Valley. So, hope you don't mind me doing so. But uh, hi. I'm the guy who ported Flo to Content Patcher for 1.3 and I do not believe he even had a Spring schedule in his original mod. I probably should have sorted that out in retrospect when porting him. But I more or less did a straight port from the original, very ancient mod framework he used to Content Patcher.

I've been interested in giving him a proper update for years now and I think I'm finally able to do that. I found this because I went digging to see if the link to my original upload was anywhere, lol.

#

I think I still have the original mod archived somewhere on a drive of mine even though it's long gone. Could probably check and see if I was just an idiot lol.

umbral plume
#

well i half fixed it?

#

idk where the front layer went lmao

#

why did the front layer not register lmao

latent mauve
#

Did you accidentally turn it off in Tiled when you last saved it?

umbral plume
#

no ii didnt

#

i just triple checked even

latent mauve
#

Hmm

umbral plume
#

why would only one layer not being loading in????

#

and for only one room too

latent mauve
#

That can happen if you have the wrong patch mode, but I don't think you would have had any reason to switch that from the default by putting an entry in for it

umbral plume
#

For only one room? all the others, edited and not, have their front layer

#

its just this one

latent mauve
#

For that specific patch

umbral plume
#

idk anything about patches 🤷‍♀️ im just gonna try reording the layers so front is the very top and try loading it in

latent mauve
#

But again, I don't see any reason why your patch mode would have been set to something different

umbral plume
#

its still doing it

#

🤔

#

Somebody help I cant fix it T_T

#

Its literally the very last thing before this entire shtshow is complete

whole raptor
#

How do LocalizedStrings work exactly? SDVpufferthink For example if I edit in something into the default Strings/NPCNames, but player has a non-english language for the game, would it just use the English name?

fading talon
#

If the Load Action of CP is used to edit NPCNames or other files, it will indeed affect different languages. (I used machine translation. I'm not sure if I expressed it clearly. Sorry!)

whole raptor
#

Yeah.. I meant EditData, definitely not Load SDVpufferyoba

#

Although now that I think about it... it probably will default to English name, since I believe it's like that with all the other data SDVpufferthinkblob

fading talon
#

It should be like this. Just now I tried to modify NPCNames using EditData, but the result failed... So I might not be able to help you. Sorry.

uncut viper
#

just targeting Strings/NPCNames will edit the asset no matter what the language is unless you specifically tell it to only target it in English

#

you can put a When condition on it though

#

(or use the TargetLocale field on the action i suppose)

whole raptor
#

Ah, so that's how it works, good to know

#

(I probably want it to edit all anyway)

#

Can I TargetField something like this..? SDVpuffereyes (Worth a try anyway)

orchid glade
#

So I

gloomy hemlock
#

Hello! Is this a valid way to use the dynamic token for ModID?
"LogName": "{{ModID}}WillyWeatherDiaLoad"
I thought having the ModID be auto-attached to the start of my LogNames would make troubleshooting easier if any bugs came up when playing with other mods and the person troubleshooting wasn't myself. (Or my ADHD brain forgot what my LogNames were which would also make sense)

orchid glade
#

oops... So I'm looking through the code on a recolour, and I notice it uses OnTimeChange as well as OnLocationChange for all it's patches. Is there any reason a recolour would need OnTimeChange?

whole raptor
gloomy hemlock
#

This is good to know. I'll avoid using it just incase. Better to avoid the potential complication

#

Thank you!

uncut viper
#

the log already displays the mod name if something goes wrong. LogName doesnt support tokens as far as i know

whole raptor
uncut viper
orchid glade
#

Hmm, is that a thing in vanilla? Because I don't think this adds any mechanisms

uncut viper
#

nothing that content patcher does regarding patch updates is vanilla

orchid glade
#

ALso maybe buff icons would need it I suppose

uncut viper
#

the point is that if you make a patch update ontimechange and have a token in it that changes based on time, then thats you making it a thing

orchid glade
#

Yeah I don't thinkt here are tokens that change it based on time is what I mean

uncut viper
#

or i guess more broadly, the overall point of why a recolour would need it, is "it depends"

orchid glade
#

I

#

I'll checkk for that

ornate locust
#

I know some mods have windows that change based on time more granularly than vanilla's day/night tile system, but not in a recolor

orchid glade
#

Sorry, I don't know why I keep hitting return by mistake, I guess my fingers are cold.

ornate locust
#

oh no it's the perfect spot to accidentally send messages when apostrophe, I do that all the time

orchid glade
#

Also, even I don't think buff icons would need it, because if the sheet with all the icons is loaded on location change... it's not like the icon changes when the buff runs out, it just applies it or not, right?

ornate locust
#

Yeah. My only suspect would be window-related

round ermine
#

It's coder brain. Gotta newline after closing! dogekek

ornate locust
#

if it's not that, maybe the modder just didn't understand the performance toll or how things work well enough

orchid glade
#

But also, why would OnLocationChange be needed, if the assets are all loaded on day start?

uncut viper
#

when a patch updates CP invalidates any relevant assets and they get reloaded

#

otherwise there would be no updaterate concept at all

whole raptor
ornate locust
#

I feel like you might have a case of "I don't quite understand how this works so I'm going to use all the updates just to be sure"

uncut viper
#

CP does at least smarly NOT actually do any invalidation or updating if nothing did actually change, iirc

ornate locust
#

that is good

uncut viper
#

but if you use like, a Time token, thats always gonna be changed every timechange, obviously

lucid mulch
#

Only if you have updaterate set to something

uncut viper
#

well, yes, that is the context of this conversation

whole raptor
# lucid mulch sure

I put something like this: "TargetField": ["Lance", "Reactions", 0, "SpecialResponses", "DuringMovie"],
I just wasn't sure if it'd work with automatic indexes (0, 1, etc), but why shouldn't it 😅

orchid glade
#

Well I'm not sure I understand the implications of what you're saying Button... like whether that means the patches need OnLocationChange or not...

whole raptor
#

(VSC sure is a lifesaver at times like this)

ornate locust
#

What's the recolor? at least, what's it recoloring?

uncut viper
ornate locust
#

like is it just outdoors, indoors, UI, what are we dealing with here

orchid glade
#

It's the Kitsch Blue Grass recolour, ummmm outdoors and some interface I think

uncut viper
#

if a patch is loading spring_outdoors_{{Time}}.png for example, if you do not change the updaterate, that will be checked once at day start only. i.e. it will load spring_outdoors_0600.png and stay that way the rest of the day

orchid glade
#

Button, so if there are no tokens, would it not need it?

uncut viper
#

if you change the updaterate to ontimechange, it will re-evaluate the patch every time the clock changes, so it will change to, for example, spring_outdoors_0610.png when it becomes 6:10am

lucid mulch
#

There are multiple phases

  1. Tokens update, and remember what tokens change
  2. Based on the update condition (all / timechange / locationchange) it will get the list of patches that meet that update condition and have changed tokens
  3. will re-evaluate the patches contents to check if the outcome is actually different
  4. If a patch wants to change its content or if it runs at all, then that asset is added to the list of what gets invalidated
  5. When the vanilla asset gets invalidated, smapi+vanilla will load it again
  6. which ContentPatcher will then apply the Load and/or edits
uncut viper
#

and will update everything as necessary

#

or more technically will invalidate as necessary*

whole raptor
uncut viper
#

there is still overhead in actually checking, even if its less, so still dont do it if you dont need to

orchid glade
#

I want to know if it's safe to remove OnLocationChange if the patch has no location-specific tokens

#

Are all the maps loaded on day start or only when you enter the area?

uncut viper
#

its probably safe, but it also probably wont really affect your performance too too much

#

though, to clarify

#

it doesnt need to be a location specific token

#

it just would need to be a token that changes during the course of the day, or potentially changes

ornate locust
#

At a glance at the files, nah, the time bit at least is definitely overkill. Seems like they just replaced the defaults, nothing fancy that would require weird time stuff

uncut viper
#

the {{Time}} token will change but it wont do anything until you change locations, but it will still change even though its a time-based token

lucid mulch
#
{
   "When": {
       "Time": "{{Range:610,650}}"
   },
   "Update": "OnTimeChange"
}

would on daystart not be running, and so not invalidate the asset onday started
at 610, it will re-evaluate and this conditions now true, and will invalidate
at 620,630,640 and 650, the condition will re-evaluate but still be true, and the contents didn't use the token in some capacity, so not invalidated
at 700, condition re-evaluates but to false, assets invalidated
at 710+ its evaluated to false, same outcome, not invalidated

ornate locust
#

Some of it's even drag and drop for mod compatibility stuff

lucid mulch
#

If you used {{Time}} in the middle of your Entries/Fields etc or the FromFile/etc, then it would invalidate on the 620-650 as well

uncut viper
#

the update rate just tells content patcher when to recalculate what the tokens should be. has nothing to do with the contents of the tokens themselves, so dont confuse timechange with only mattering for {{Time}} and such

ornate locust
#

(I looked at that, wondering if it was something they did for some other mod's problems)

#

honestly, a flatout EditImage replacement seems like it'd do them without needing an "update". Think that's how Earthy does it and it works fine

orchid glade
#

Sounds like.... probably can remove both Time and Location, but removing OnTimeChange would be the once most likely to have a performance benefit

#

Ohh yeah I'll check out Earthy, since it's popular I'm sure its optimised

ornate locust
#

Yeah Earthy has no update at all in any of the entries

#

I have a folder of recolors on hand since I was doing recolor compatibility

orchid glade
#

I mean I haven't run it and found it laggy (yet), but I was looking in there and noticed all the updates and thought it was odd

lucid mulch
#

Not all recolours are made equally.
and for EditImage, there is a big cost on actually applying the edit, but just takes 1 misbehaving patch to cause everyone to run the edit

ornate locust
#

It may not be laggy on its own, but the problem is when you dump out a big ol folder of mods on top of it

orchid glade
#

Exactly

#

I've only used it in a very small testing environment so far.

lucid mulch
#

Scarlett prior to some of my optimisations was spending 1-3 seconds applying (a lot of) EditImages to Cursors
and someone decided it would be smart to do a OnLocationChange edit to it

whole raptor
#

Tbh I once tried removing all on time updates from the 300 mods I had.. and the performance difference wasn't even that huge (noticeable in profiler, but not really in game)

ornate locust
#

It's probably nice if you're having active problems anyway

lucid mulch
#

for large modlists the cost of maintaining the tokens themselves starts to be the performance hit

orchid glade
#

Hmm, interesting, I just don't trust my laptop...

ornate locust
#

There was this mod that had windows that change with the time and man that one wrecked my performance

#

Nice in theory, not worth tripping every few steps

orchid glade
#

Yah

lucid mulch
#

but content patcher can only do peformance hitches either in the warp black screen or on the timechange intervals, got bad frame pacing out of that and its not content patcher (and the fleet of content packs) fault

ornate locust
#

the core of the problem here anyway is that it is uniquely pointless when it functions the same way without any update.

lime mural
#

Can anyone help me making mod for custom farmhouse?

#

I made farmhouse layout with tiled but I don't now how to put tile properties.

cinder talon
#

is it possible to have an event be locked to whether you have an item in your inventory? like an event will only trigger if i have a rabbits foot in my inventory?

ornate locust
#

There is. The Last Smolunanu does it for an early event

hard fern
#

Pretty sure the vanilla "definitely not cheating on my boyfriend/girlfriend" event triggers when you have a rabbits foot... Otherwise they all yell at you

latent mauve
ornate locust
#

your memory is faster than my searching

cinder talon
#

thank you all! ❤️

#

follow up, with sam’s job being between jojamart or the museum, is there a way to track which place he’s working at?

rotund elm
#

By chance does anyone here know how config sliders work? I am trying to do one where instead of 1,2,3 I can change what it shows for a specific value? I looked around the wiki and cp docs and gmcm docs, but cannot find it mentioned so idk if its even possible with CP alone. SDVpufferpensive

ornate locust
whole raptor
rotund elm
gentle rose
#

I would say that using a slider for most non-number values is usually bad UX (except for maybe low/medium/high but even then tbh), most text values are better served via dropdown

whole raptor
#

(Unless you're on Steam Deck...)

rotund elm
#

I wasn't aware you could mod steam deck wHaT

blissful panther
#

It's just a PC!

rotund elm
#

How am I just now finding this out

woeful lintel
#

probably because of the wall between Windows users and the rest of the OS universe

#

that's funny actually, a wall with no windows separating windows from not windows

empty sinew
#

should i avoid these type of characte for json translation?

fossil osprey
#

I don't see why that would be a problem JSON wise, but I don't know on the smapi/cp front

lucid mulch
#

Steamdeck is somewhat awkward for modding due to how the smapi console is very inconvenient to interact with

fathom hound
#

I just upload my log to see it

worn coral
#

This might be an awkwardly phrased question as I'm a complete newbie to maps, but I understand that using ontimechange update is not a good choice, performance wise - so for a map change would it be more performance friendly to use daytiles/nighttiles over ontimechange map patch? (it's to support a visual change in a warp that becomes active "after dark" so following the game day cycle would be perfect)

fading walrus
devout otter
worn coral
unique sigil
# lime mural I made farmhouse layout with tiled but I don't now how to put tile properties.

Depends on the tile property, you can either:

  1. Apply it through tileset editor - click the wrench icon on the lower right of Tiled's tileset pane, click on the tile you want to put tile properties on, then input the tile property using the format shown here
  2. Put the tile property using a TileData object on the object (pink icon) layers. For this, I suggest copying an existing TileData object from an existing map and editing it instead of creating a TileData object from scratch to prevent mishaps. The format is the same as linked above.
#

The first method is usually for convenience and if you want a specific tile to consistently have a specific tile property (e.g. Type Wood on ALL wood tiles you have), the latter if you want to put a tile property on a specific tile/on a tile in a specific situation (e.g. Action Warp on ladder tiles).

vernal crest
#

Hmmmmm it might be time to explore LocalTokens

serene moat
#

Someone made tiktoks about my Levi mod. Am so happy Jackalope_Please

vernal crest
#

Congrats!

serene moat
#

I’m not sure if I’m allowed to post links to videos here

vernal crest
#

Noooo DaysInPhase don't do this to me SDVpufferwaaah

#

Curses. So close to being able to use LocalTokens but foiled by DaysInPhase.

#

I worked around it by putting a set value in the Include and then doing a separate EditData patch to add the correct DaysInPhase for each crop afterwards but I do not like that.

unreal spoke
#

I‘m not entirely sure what you’re doing, but couldn’t you use more local tokens?

vernal crest
#

The issue is that local tokens are always considered dynamic text so they can't be used in data model fields that only allow numbers (or bools). DaysInPhase is a list of integers (I think) so it didn't like the local token.

[Content Patcher] Can't apply data patch "(CP) Korea Blossom > Add Adonis Amurensis > data/add_object.json > Add crops > entry #1" to Data/Crops: failed converting entry to the expected type 'StardewValley.GameData.Crops.CropData': Could not convert string to integer: 1, 2. Path 'DaysInPhase[0]'..
#

Hmm, by splitting each entry into its own token I can get it to accept it, but I wonder what happens when there's a different number of items in the list SDVpufferthinkblob

#

...huh, this seems to be working

#

Setting the value of the later DaysInPhase list items to 0 seems to make them ignored

vernal crest
unreal spoke
#

That’s more or less what I meant, yeah. Good to hear you got it to work! SDVkrobushappy

jagged violet
#

hi! i need help fixing a mod, but i'm not the creator of the mod which is actually removed from nexus... 👉🏻 👈🏻

anyways i need help fixing because of that reason, and i didn't really wanna bother the creator for a mod that they removed for a reason, its called bairan's jewelry entourage but its actually a replacement for trinkets/companions like fairies and parrots

the mod itself have these errors since i first got it but i didn't get to find a way to fix it

https://smapi.io/log/a7091e18f7a1427e920af84e8b6e1294

This mod failed in the GameLoop.GameLaunched event. Technical details:
Newtonsoft.Json.JsonReaderException: Can't parse JSON file at D:\SteamLibrary\steamapps\common\Stardew Valley\Mods\Bairan's jewelry entourage\content.json. This doesn't seem to be valid JSON.
Technical details: After parsing a value an unexpected character was encountered: ". Path 'ConfigSchema', line 12, position 4.
at StardewModdingAPI.Toolkit.Serialization.JsonHelper.ReadJsonFileIfExists[TModel](String fullPath, TModel& result) in SMAPI.Toolkit\Serialization\JsonHelper.cs:line 86
at StardewModdingAPI.Framework.ContentPack.ReadJsonFile[TModel](String path) in SMAPI\Framework\ContentPack.cs:line 76
at EventRepeater.ModEntry.OnLaunched(Object sender, GameLaunchedEventArgs e) in E:\Stardew Valley Mods\Event Repeater\ModEntry.cs:line 123
at StardewModdingAPI.Framework.Events.ManagedEvent`1.Raise(TEventArgs args) in SMAPI\Framework\Events\ManagedEvent.cs:line 101

Error preloading content pack 'Bairan's jewelry entourage'. Technical details:
Newtonsoft.Json.JsonReaderException: Can't parse JSON file at D:\SteamLibrary\steamapps\common\Stardew Valley\Mods\Bairan's jewelry entourage\content.json. This doesn't seem to be valid JSON.
Technical details: After parsing a value an unexpected character was encountered: ". Path 'ConfigSchema', line 12, position 4.
at StardewModdingAPI.Toolkit.Serialization.JsonHelper.ReadJsonFileIfExists[TModel](String fullPath, TModel& result) in E:\source_Stardew\SMAPI\src\SMAPI.Toolkit\Serialization\JsonHelper.cs:line 86
at StardewModdingAPI.Framework.ContentPack.ReadJsonFile[TModel](String path) in E:\source_Stardew\SMAPI\src\SMAPI\Framework\ContentPack.cs:line 76
at ContentPatcher.Framework.RawContentPack.TryReloadContent(String& error) in E:\source_Stardew\Mods.Pathoschild\ContentPatcher\Framework\RawContentPack.cs:line 80
at ContentPatcher.ModEntry.GetContentPacks()+MoveNext() in E:\source_Stardew\Mods.Pathoschild\ContentPatcher\ModEntry.cs:line 453

This mod failed in the GameLoop.UpdateTicked event. Technical details:
Newtonsoft.Json.JsonReaderException: Can't parse JSON file at D:\SteamLibrary\steamapps\common\Stardew Valley\Mods\Bairan's jewelry entourage\content.json. This doesn't seem to be valid JSON.
Technical details: After parsing a value an unexpected character was encountered: ". Path 'ConfigSchema', line 12, position 4.
at StardewModdingAPI.Toolkit.Serialization.JsonHelper.ReadJsonFileIfExists[TModel](String fullPath, TModel& result) in SMAPI.Toolkit\Serialization\JsonHelper.cs:line 86
at StardewModdingAPI.Framework.ContentPack.ReadJsonFile[TModel](String path) in SMAPI\Framework\ContentPack.cs:line 76
at ContentPatcherAnimations.Mod.CollectPatches() in C:\Programming\StardewValley\ModSource\ContentPatcherAnimations\Mod.cs:line 216
at ContentPatcherAnimations.Mod.InitializeIfNeeded() in C:\Programming\StardewValley\ModSource\ContentPatcherAnimations\Mod.cs:line 146
at ContentPatcherAnimations.Mod.OnUpdateTicked(Object sender, UpdateTickedEventArgs e) in C:\Programming\StardewValley\ModSource\ContentPatcherAnimations\Mod.cs:line 127
at StardewModdingAPI.Framework.Events.ManagedEvent`1.Raise(TEventArgs args) in SMAPI\Framework\Events\ManagedEvent.cs:line 101

here is the manifest.json file from the mod btw

https://smapi.io/json/content-patcher/7a9bbe484af340dda727a0154f28b814

ocean sailBOT
#

Oops, couldn't parse that file. Make sure you share a valid SMAPI log.

vernal crest
coral trout
last arch
#

Hello !

I'm currently working to make a French dub mod of Stardew Valley, and I found another mod that could make this possible (Voice Over Framework Mod).
I first did a test with a single voiceline to see if it would work, but although the voice pack was detected, the audio file wasn't (and nothing was played, even the console doesn't show any logs).

Do you know where this issue could come from?

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

vernal crest
#

(The first link in Governor's message)

last arch
vernal crest
last arch
#

I'll go try again

#

And thank you!

vernal crest
#

Have a look at the existing packs for how to format yours

frosty hull
#

@brittle pasture Hello guy

#

are you zombifier on nexus?

vernal crest
#

Yes they are.

blissful panther
#

(My Android senses are tingling! SDVkrobusgiggle)

frosty hull
#

Oh ok good👍, i have question about your mod ExtraMachineConfig

#

can i ask in here or should i ask on SMAPI Android discord?

blissful panther
#

Here's fine assuming it's about a potential change to the mod! Just whatever Selph's most comfortable with.

brittle pasture
frosty hull
#

my question is what this function?

  • IClickableMenu_drawHoverText_Transpiler
#

I mean, what is it trying to draw?

brittle pasture
#

Though, isn't EMC straight up unusable on Android currently because it's exploding machine code?
if you're fixing EMC for Android the buff transpiler is like the least important part lol

frosty hull
#

so, if i disable this Transplier, Is should works?

brittle pasture
#

yes

frosty hull
#

Oh ok, is not important?

brittle pasture
#

it's only a visual bug fix

#

and to clarify, by "should work" I mean disabling this transpiler wouldnt change the fact that EMC still isnt usable on Android

#

right now if you try to load a machine it throws a "invalid IL" error somewhere in the GetOutputItem postfix, which I have no idea how or why

frosty hull
#

ok one sec, i will test disable IClickableMenu_drawHoverText_Transpiler

ocean sailBOT
#

Log Info: SMAPI v4.2.1.1 - 1747817855 with SDV 1.6.15 build 24354 on Android Unix 35.0.0.0, with 7 C# mods and 4 content packs.

frosty hull
#

no error

brittle pasture
#

huh

#

you tested by loading a furnace?

frosty hull
#

nop

#

lol, how? i don't know how to use this mod

brittle pasture
#

just try to smelt some copper ore

frosty hull
#

Ah shit, yes i got error

#
  • An error occurred in the base update loop: InvalidProgramException: Invalid IL code in Selph.StardewMods.ExtraMachineConfig.MachineHarmonyPatcher:MachineDataUtility_GetOutputItem_postfix
#

It seems like we've been talking for a long time. Aren't we bothering others in the chat?

vernal crest
#

Nope

calm nebula
#

Like, concrete class to interface

#

Or the other way around

#

Or struct to class

brittle pasture
#

maybe you can try rebuilding the mod against the Android binary

vernal crest
#

Reading this is breaking up the monotony of data entry for me lol

brittle pasture
#

if that's a thing

frosty hull
#

i can fix them, give me a time

#

maybe 1-2 day or 2 year

brittle pasture
#

wow that'd be like my last guess lol

frosty hull
#

here this code, i just use Method Reflection Invoke, works fine

#

thanks so much hehe SDVpuffertroll

brittle pasture
#

thanks for the work!

last arch
#

@vernal crest Hi again! I used the command from the mod page and my voice pack is now detected by the game, but the test voiceline still doesn't play despite me double-checking everything :(

vernal crest
last arch
#

The audio file is in .wav, i also tried with .ogg but none of them worked

vernal crest
#

And the audio file is playing if you open it in media player or some other program?

last arch
#

Yes

vernal crest
#

Hmm ok I don't know anything about the voiceover framework mod and I'm not at my computer anymore so I can't really look at anything myself, but I'd recommend downloading one of the existing voice packs if you didn't already and try testing that one as-is in game. If that works, replace one of the audio files in that mod with yours and rename yours so it has the same name as the one it replaced. Then test the pack again and see if it plays your file.

last arch
#

Got it, thanks again!

vernal crest
#

If it doesn't, try going the other way: replace your audio file in your mod with one of the working ones from the other mod and see if that works.

last arch
#

I'll keep you updated

clever sinew
#

Alrighty, I am going in circles -- I cannot get spacecore to override this cooking recipe and I don't understand why. Would anyone be willing to look at the code and try to tell me the (probably obvious) mistake I am making?

vernal crest
clever sinew
#

this is the spacecore-interacting json

#

And then this is the overall content.json

#

(Also yes i probably need to change texture path, but i would hope that's not what's causing the issue because I haven't seen any errors relating to it in smapi logs)

vernal crest
clever sinew
#

Yes, here you go

clever sinew
#

....unless I am misunderstanding what you are asking, which is also possible

vernal crest
#

I'm not sure why your recipe doesn't have the {{ModID}} prefix but it should do so.

clever sinew
#

I thought it did, that's so strange

#

Alright well thank you! That's why I wanted a second pair of eyes :D

#

ohhhh i see what i did

#

wow I never would have caught that mistake otherwise. this was very helpful, thank you again!

vernal crest
#

You're welcome :) the rest of it looks okay to me

#

I'm used to looking very closely at recipe IDs because of shop shenanigans lol

gaunt orbit
#

tinkering with an idea I had for a harmony helper instead of doing something productive

serene moat
#

Laughing at my own dialogue. Sometimes I forget what I have written

|| "fall_Tue6": "Willy won’t play Poker with me anymore.#$b#You know what also starts with W? Wuss.$1", ||

last arch
#

@vernal crest IT FINALLY WORKED QDWOJDQWDQWIOQ I'VE BEEN WORKING ON THIS FOR 6 HOURS 😭

#

I'm so relieved, thanks again for your help!

calm nebula
gaunt orbit
#

sourcegen is cool but also the documentation sucks ass

golden basin
#

so im wanting to make a crafting recipes for a chair right? I have the method written out but i dont really understand it very well, could someone help me learn?

gaunt orbit
#

I need to see if there's a good way to get attributes in the syntax tree but have them omitted from the compile. I know there's a Conditional attribute you can use to disable/enable them based on build properties, but I'm not sure at what stage they're removed, and if it's possible to just do an always-false condition without things breaking

golden basin
#

I was given this last night, but what does it really mean? I know the id is just the idea but the numbers after thats the actual recipe? home is the location for its for right? but whats those numbers afterward

gaunt orbit
#

you need spacecore to have craftable furniture, vanilla doesn't support it. I know non-object recipes have been talked about here before, let me see what I can find

golden basin
#

I have spacecore

#

ill look at the documentation

gaunt orbit
#

seems like it has a separate data asset

golden basin
#

I actually do not understand this documentation at all

#

uhh hmm is there a mod that does this? like with spacecore already that i can peak at?

brittle pasture
brittle pasture
gaunt orbit
#

huh? crafting recipes support non-objects now?

brittle pasture
golden basin
#

I have made recipes before but becaise the context is different my brain is confused

gaunt orbit
#

I wonder if the tooltips are still fucked

golden basin
#

ill give a shot and let you know wren

gaunt orbit
brittle pasture
#

yeah the draw's still borked, but Better Crafting fixes it

brittle pasture
gaunt orbit
# brittle pasture

that's definitely a mod doing that, because I'm looking at the decompile for CraftingRecipe and it is still very much hardcoded to objects

golden basin
#

better crafting? whats that?

brittle pasture
#

which line? because 1.6.9 explicitly no longer force appends (O) to the output

brittle pasture
gaunt orbit
#

explicitly using unqualified ids

brittle pasture
#

the comment is outdated, those IDs just get passed as is to ItemRegistry.Create

#

it used to not be the case and (O) would get prepended, but pathos removed it in 1.6.9 per request

#

I think atra requested that even

gaunt orbit
#

huh, okay

#

fair enough

violet grotto
#

I've got a situation.
Some context: I want one of my Scavengers to gift items depending on which animals the farmer has. So I want to check, if a farmer has chickens that laid eggs, and tell the Scavenger to start offering eggs as gifts.
I want to check for this by using "PLAYER_STAT" and "ANY" for the <player> part.
The only thing that worries me is this warning here...

#

If I use "ANY", this theoretically shouldn't matter, right?

lucid iron
#

Do chicken eggs have a stat

violet grotto
#

yeah

#

It's listed as one of the options.

#

Though, I likely couldn't use this method for modded farm animals, now that I think about it.

faint ingot
#

you could have a trigger action that has the host check the stat and then send a mail item to all players

violet grotto
#

Okay maybe I don't need to check for stats like that and just allow them as gifts behind a certain pet friendship threshhold.

violet grotto
#

Could be useful for later down the line.

faint ingot
#

I guess in your case you care about the individual farmer having chickens though not the host

#

or is it all the same? I don't play multiplayer

violet grotto
#

But I guess I'll hold off on that idea.

#

Since I'm already here, I also wanna ask if it's possible to check if the farmer has a specific pet.

#

I know that there's this, but I think this means any pet.

faint ingot
#

I don't think so? My only idea would be that you could edit data/pets to have a certain pet give a certain gift specific to your mod, and then you can check to see if they've shipped that item or if it's in their backpack. But that would only happen at high hearts with the pet and that's very round about. I'm sure someone more experienced has a better idea.

calm nebula
#

That particular stat is fussy enough as is because it only works correctly for host

violet grotto
#

Uh, I guess since there's <player>, it could accept "ANY".

calm nebula
#

Oh, okay

violet grotto
#

But I'm currently more concerned about the 'detecting if either farmer or farmhands has a specific pet' thing.

#

Since I could use this for future plans.

faint ingot
#

So here's my unrelated question of the morning: is it possible to have two different events, with the same name, in different locations? or would that break something?

#

actually nevermind I'll just use different names - the problem I was grappling with was having an event take place in a random location and then having to overwrite or delete it from all the potential locations and have an alternate event somewhere else. but I'll just stop it from triggering with conditions instead of trying to locate and remove it.

serene moat
#

Hello people! I'm hoping anyone can help me. I've have tried to merge two blocks of code together with different propositional logic and I can't get it to work, so ideally it works as an if else statement. Currently if someone has SVE installed, they of course get a yellow warning in smapi that the first patch can't be implemented.


{
            "LogName": "AdventureGuild hours changed",
            "Action": "EditMap",
            "Target": "Maps/Mountain",
            "MapTiles": [
                {
                    "Position": {
                        "X": 76,
                        "Y": 8
                    },
                    "Layer": "Buildings",
                    "SetProperties": {
                        "Action": "LockedDoorWarp 6 19 AdventureGuild 600 2600"
                    }
                }
            ]
        },
        {
            "LogName": "AdventureGuild hours changed for SVE",
            "Action": "EditMap",
            "Target": "Maps/Custom_AdventurerSummit",
            "When": {
                "HasMod": "FlashShifter.StardewValleyExpandedCP"
            },
            "MapTiles": [
                {
                    "Position": {
                        "X": 32,
                        "Y": 21
                    },
                    "Layer": "Buildings",
                    "SetProperties": {
                        "Action": "LockedDoorWarp 6 19 AdventureGuild 600 2600"
                    }
                }
            ]
        },
round ermine
#

You want a

            "When": {
                "HasMod |contains=FlashShifter.StardewValleyExpandedCP": false
            }

on the first one, and then it will only be applied when SVE is not loaded. 🙂

serene moat
#

Thank you! 🙏
I kept trying with stuff like this

"When": {
            "HasMod": "!FlashShifter.StardewValleyExpandedCP"
round ermine
#

Yeah, it's a bit unintuitive the formatting that you've gotta use. dogekek Btw, if you want to do multi-line code in discord, you can do uhh:

```
code
```

🙂

#

and it'll make it a block, and if you do uhh, ```json
for the first ``` it'll even do pretty syntax highlighting. 🙂

serene moat
#

Nice, I was just highlighting the text and clicking the <> button

uncut viper
violet grotto
ivory plume
fresh tree
#

Hey guys I need help, I did an npc and she is a marriage candidate. I made an editdata in the utily string of the wedding but at the time of the wedding something strange is it that I did something wrong?
Lewis doesn't say that part of now it's husband and wife or wife and wife he just jumps to the kiss
In Smapi there are no errors

ivory plume
fresh tree
#

Oooh thanks so.... For now I don't make her be married?

tiny zealot
#

you can work around it by implementing your own custom wedding script

ivory plume
#

I think it's fine to make her marriageable; her marriage event will work the same way as marrying a default NPC.

#

(Implementing a custom wedding event just to fix one dialogue line that's missing for all NPCs seems a bit overkill, but it's an option.)

tiny zealot
#

(pathos, if you can say, what was the bug? was it in code or is it a script error?)

ivory plume
#

It's just missing argument escapes. Specifically, this command in 1.6.15 (newlines added for readability):

speak Lewis "[GenderedText
    [SpouseGenderedText
        [EscapedText [LocalizedText Strings\StringsFromCSFiles:Utility.cs.5371]]
        [EscapedText [LocalizedText Strings\StringsFromCSFiles:Utility.cs.5373]]
    ]
    [SpouseGenderedText
        [EscapedText [LocalizedText Strings\StringsFromCSFiles:Utility.cs.5377]]
        [EscapedText [LocalizedText Strings\StringsFromCSFiles:Utility.cs.5375]]
    ]
]"

Should be (with added EscapedText):

speak Lewis "[GenderedText
    [EscapedText [SpouseGenderedText
        [EscapedText [LocalizedText Strings\StringsFromCSFiles:Utility.cs.5371]]
        [EscapedText [LocalizedText Strings\StringsFromCSFiles:Utility.cs.5373]]
    ]]
    [EscapedText [SpouseGenderedText
        [EscapedText [LocalizedText Strings\StringsFromCSFiles:Utility.cs.5377]]
        [EscapedText [LocalizedText Strings\StringsFromCSFiles:Utility.cs.5375]]
    ]]
]"
#

(Tokenizable strings are a fun syntax to work with sometimes.)

tiny zealot
#

lisps have a way of being so

ivory plume
#

It sounds like you already did? So you're able to marry her correctly in-game, it's just that Lewis skips one dialogue line?

fresh tree
#

Yes

ivory plume
#

That's it then. Lewis will skip the dialogue line when you marry any NPC (including default ones like Abigail), it's not something specific to your NPC.

fresh tree
#

I didn't know... Thank you Pathos

ivory plume
coral trout
umbral plume
#

knock knock

#

i got one last minimal issue with my mod before its 100%

tawny ore
umbral plume
tawny ore
#

My worst nightmare, who?

umbral plume
#

Your worst nightmare, not knowing what's wrong with the mod your creating

#

oh cmon now why is smapi crashing

#

frick sake

rancid musk
#

Are we sure Matt's worst nightmare isn't just more chest mutex bugs

lucid iron
#

Chest mutex is not real and can't hurt you

tawny ore
#

global inventories was supposed to be my solution workaround, but it turns out it's just more bugs

#

bugs all the way down

rancid musk
#

But it's also only really a problem for people who want to let players access chests on other maps in multiplayer

ivory plume
tawny ore
#

You know, I used to feign ignorance

tawny ore
rancid musk
#

-# Clearly I need to make Better Mutexes /s

calm nebula
#

-# make worse mutexes instead

uncut viper
#

(thanks for the reminder i still need to do a bit more chest mutex handling)

tawny ore
uncut viper
#

who the heck is joba

brittle pasture
#

Excuse me the correct name is Yoda

uncut viper
#

[looks at smudged writing on hand]

rancid musk
#

Steve Joba, president and CEO of Joba Corporation

tawny ore
uncut viper
#

on a scale from 1-10 how dumb of an idea is it to use a Tuple as a dictionary key in an asset I want to be user-editable via CP

tawny ore
#

Is that something CP could even handle? I thought it really only worked with simple string keys

uncut viper
#

not by default, though the warning i got from newtonsoft implies i can create a custom TypeConverter to handle it

tawny ore
#

That sounds cursed. Do it! Snack

lucid iron
#

Why not dict dict

uncut viper
#

because i desire a consistent order to the entries

#

but i dont want to use int keys

lucid iron
#

But ur in a dictionary

#

Don't u have to sort regardless to guarantee that

tawny ore
#

When it comes to Content Patcher data models, I try to conform to SDV's existing design language to make those models more accessible to those who would be using it, but that's just me

uncut viper
#

i wanted a Dict<string, string> to determien what messages to show for a lost book but i only want the first n messages to care about where n is the number of lost books you've found, so id need to iterate over the dictionary until i reach n lost books, but i dont want to rely on dictionary insertion order as i need it to be consistent

lucid iron
#

I see so u r bake in the index

#

Why not list

uncut viper
#

because the map action i was going to have people place in the museum was going to be like "Action ShowLostBook <lost book key from that dict>"

lucid iron
#

Wouldn't it just be like

#

Action ShowLostBook <museum id> <lost book number>

uncut viper
#

what if someone else edits their museum to add to it, though, and messes up the order

#

or just wants to add al ost book to the end of their list

tawny ore
#

Yeah I see the problem, you kind of want the behaviors of both arrays and dictionaries

#

Some SDV data models use an unenforceable Id attribute, not that I think it's a good solution

uncut viper
#

i thought about that too, but it seemed like it'd be really annoying to have to do a whole { id: blabla, string: text here } object for every individual book message

#

though i guess thinking about it, i suppose putting the index in the tuple doesnt really change anything as people cant change that for existing entries

lucid iron
uncut viper
#

moveentries in a list of strings sucks though

lucid iron
#

I think if it's a string u just use that as the id

uncut viper
#

having someone write the full dialogue string repeated twice in the json and in the tmx feels bad, and its also harder to localize

#

and more annoying to conditionally edit if desired

lucid iron
#

Yeah ig the only way to do it sane is enforce use of a translation key

uncut viper
#

which still wou ldnt even solve the problem of duplicating it twice in the json and tmx, but if i just look at the tmx and dont make em put it in the json, i have no way to determine what order the lost books should be unlocked in

lucid iron
#

Why is it in the tmx too yggy

uncut viper
#

you said to use the string as the id

#

thats what would be put in the tile action

lucid iron
#

No that's only move entries

#

Tile action should use index

uncut viper
#

moveentries can do that?

lucid iron
#

If u wanted to move entry a list of string i think that's the way to do it

#

Perhaps double check in case im hallucinating

uncut viper
#

but also consider this: you are editing my museum to add a lost book. unbeknownst to you, another mod out there is also doing that, and neither of you are aware of each other. you both try to move your entry to the top of the list, and then both use index 0 in your map action bc you expect to be first. one of you will be wrong

lucid iron
#

The point of having it be a list in the back is just bc that's ultimately the shape you prefer for actually making it work

#

Vs making it nice to edit by content patcher

uncut viper
#

maybe i should just go back to my original idea of "fuck lost books no one wants to add those anyway"—

lucid iron
#

Button what if u make lumina decide

#

So u won't have to agonize it

uncut viper
#

why lumina

lucid iron
#

Lumina seems like she knows what a book is

#

(i picked first modder that came to mind ok)

uncut viper
#

i am just gonna go the { id: blabla, text: blabla } route i think

#

so a list of that

#

its annoying but also the most reliable i think unfortunately

wintry tundra
#

Hey

#

It’s 5

uncut viper
#

and prooobably better than my weird tuple idea. maybe

lucid iron
#

I feel like if base game was doing this

wintry tundra
#

Yeah I know

lucid iron
#

It probably would have gone for translation keys

uncut viper
#

are you meant to be in a vc text channel Joja4life

lucid iron
#

But that is just arbitrary vibes here Dokkan

uncut viper
#

base game has its own fancy custom Notes map action that cares not for your extensibility desires

#

and int IDs naturally

tawny ore
#

Aren't translation keys mostly for when instances of objects hold the translated value?

uncut viper
#

theyre used for a lot of map actions

#

and things like special orders

#

basically anywhere where the text needs to be both grabbed on the fly at any arbitrary time and also needs to be localized, i think

lucid iron
#

Yeah it is just wherever u would use i18n normally

#

With exception of dialogue and events (but events is getting refactored away from this)

rare perch
#

"[Content Patcher] Can't apply image patch "Connors Sam Sprite > EditImage Characters/Sam" to Characters/Sam: target area (X:0, Y:0, Width:128, Height:384) extends past the right edge of the image (Width:64), which isn't allowed. Patches can only extend the tilesheet downwards."

I'm trying to mod Sam with new portraits (same style as his vanilla portraits) and i used the mod that turns all the stardew xnb files to pngs and edited sam's portraits directly, and it turns out the file it spat out was 128x384, and content patcher won't accept my sprites. is there any way to scale it down without losing resolution? photoshop makes it rly blurry when i try

uncut viper
#

you cant delete pixels without losing pixels. the scale is the resolution

lucid iron
#

Why is your sam originally 64 wide

#

That is suspicious

rare perch
#

which is weird bc ive modded sprites before (player character sprite) and the mod is fully functional, idk whats up with portraits

lucid iron
#

Oh i see the issue

#

You are targeting Characters/Sam instead of Portraits/Sam

rare perch
#

lol just imagine sam's overworld sprite being a floating head

cinder talon
#

so for tracking sam's job, i know you'd have to determine whether the community center has been complete, but other than CommunityCenterOrWarehouseDone [which tracks both] how do i check if the cc only has been complete?

#

or does the warehouse mean the abandoned jojamart when the cc is complete?

ornate locust
#

IsCommunityCenterComplete

#

is a content patcher token that'd do it

cinder talon
#

bless! thank you sm!

balmy venture
#

Anyone has a dumbed down guide on how to add custom paths to the game? Like add instead of replacing existing ones. I wanted to update mine with an option of a separate craftable path 🫠

gaunt orbit
#

[[Modding:Floors_and_Paths]]

gaunt orbit
#

The page is really bare bones but at least it has the data format you need

brittle pasture
#

You can also look at another mod for reference

balmy venture
#

ya I checked this one but I was wondering if there's a way just to add 1 path time instead of a big sheet, wasn't sure what would change with the code. I'm code dumb haha

#

thanks I will check the link

#

Thank you it seems this link will help me a ton!

#

Guess I will play with some custom paths while I wait some mods to update 🎉

gloomy hemlock
#

Quick question. I'm working on making some custom TriggerActions, most of the fields are pretty understandable via the wiki and context itself, but what do these fields mean/do?
"Actions": null,
"CustomFields": null,
The "Action" field seems to be where the vanilla game puts the actions to be executed if the condition is met when the trigger goes off, so I'm not sure what the Actions field is. Do you use that if you're doing multiple Actions instead of a singular?

uncut viper
#

(i missed that you mentioned the wiki, sorry. but it lists Actions on there)

gloomy hemlock
#

No I appreciate it, my eyes just totally glazed over that I think. Hazards of working on my mod at 5AM when I should be sleeping. Also having like 12 tabs open. Thank you!

sleek igloo
#

Hey all, this is an open call for any mod authors who want their machines/ingredients/recipes/blueprints added to KRS random stock. I'm unfamiliar with the popular ones apart from cornucopia/wildflour and those generally already avoid vanilla clutter
unless you count 5000000000000 seeds but that's pierre's problem
(For those unfamiliar, this is KRS: https://www.nexusmods.com/stardewvalley/mods/5245)

Generally the purpose is to declutter vanilla shops, such as Gus' saloon, where most mods dump all their recipes without conditions/randomness so it's a little scary to find a) what you want or b) an interesting bargain that isn't just a deluge of unknown recipes

#

seeds i generally don't do, since the traveling merchant can randomize those already, but already grown crops used as ingredients such as herbs/veggies or spices/culinary goods work too

#

I also do random machine drops, random crafting blueprints, and custom weaponry. The inventory changes every time so you don't feel too cheaty when a really good item comes up

#

if you're interested in being included, ping me please SDVpufferheart

inner harbor
#

KrS is returning!

sleek igloo
#

I hope 😅

#

I'm having a heated discussion about how to do it atm

#

@ivory plume hnnng sorry I keep pinging you about this but everyone I talk to seems unsure how STF could tell content patcher items apart from vanilla, does the "RemovePackRecipesFromVanilla": function not work with non-JA items?

uncut viper
#

once an item is in the content pipeline theres no reliable way of determining which mod added what, aside from hacky inefficient workarounds (or if you're the mod adding them in the first place obv)

tawny ore
#

Whoah, KRS brings me back. One of my first mods was listed as part of that.

#

Does KRS need to be concerned with what items are added to its shop? It should be on the mod authors to add their items to the shop's id, or for a compat pack to be created. I suppose you can come setup with compat for some mods.

#

But really, it could just be the store front that any mod is able to add their items to.

visual dirge
#

is there a way for a c# mod to dynamically load a content pack after the game's already running? (e.g. during the middle of the day)

tawny ore
#

Yes

uncut viper
#

is it your content pack?

calm nebula
#

Sure but at that point I think you should go through the content pathway

uncut viper
#

or is your C# mod trying to load a CP pack

visual dirge
#

wdym?

uncut viper
#

a content pack is not just a CP thing

visual dirge
#

oh i mean a content patcher pack 😅

#

specifically

uncut viper
#

then, no

tawny ore
#

Only the Content Patcher mod can load Content Patcher packs

uncut viper
#

CP will load it with the rest

whole raptor
#

Couldn't you do it with just CP and update on time/location with time range?

tawny ore
#

As a C# mod you can invalidate the asset path, and then get a fresh copy of the data

visual dirge
#

let's say i want to make a c# mod that downloads a content patcher pack from some server (if it's able to) and loads it

uncut viper
#

not doable

visual dirge
#

unfortunate 😔

tawny ore
#

In that case definitely no. SMAPI only sees what's there when you start the game.

#

A mod manager could do something like that, before the game launches

sleek igloo
#

oh no i unleashed the coders

uncut viper
#

you'd be looking at a crapton of patching both SMAPI and Content Patcher to get that even remotely close to working

sleek igloo
#

chu was telling me I should just leave the shop empty and let other people target me instead?

uncut viper
#

id agree with chu

tawny ore
#

I was suggesting this as well

visual dirge
#

"hey everyone this mod depends on a fork of content patcher. why? just because"

tawny ore
#

In the world of SDV 1.6 cross-mod compatibilities like that are easier to do, and encouraged in fact

sleek igloo
#

It's a bit hard for me to get my head around as a content modder tbh, mostly because when I made KRS, part of the mess I was cleaning up in vanilla shops was PPJA of which I was a part, so it really was just me trying to clean up our mess 😂

uncut viper
tawny ore
#

Think of it as you providing the shop owner, shop/location, and maybe some built in integrations, but ideally you partner with others like Cornucopia so that they can add stock when they detect your mod is installed

sleek igloo
#

Right, that's what chu was saying

uncut viper
#

also you'd be looking at rewriting most of content patcher anyway. at that point, probably easier to write your own from scratch

#

its just not at all built with that mid-save loading in mind

sleek igloo
#

also hiya matt, long time no see

tawny ore
#

Howdy Hi

latent mauve
#

I could see some integration on the KRS side as far as pulling specific shop stock by context tag, maybe, if there was a specific tag to include, but otherwise, yeah, it might be easier to let the mods that want to participate add themselves to your shop entry.

sleek igloo
#

this is giving me group project anxiety tho ngl SDVpufferchicksweatsip feels wrong to sit on my hands (figuratively anyway)

latent mauve
#

(consider this my completely unrelated plea to have some sort of trend for context tag sanity to support things like this in the future)

sleek igloo
#

aha

#

i vote for that

#

the only reason STF even did something like this was because I asked Cher if she could include it 😅

#

It did not exist then either

tawny ore
sleek igloo
#

well KRS is mostly recipes tho

#

you can add items yeh

tawny ore
#

Sounds simple enough, as long as the conventions don't result in unintended overlapping tags

sleek igloo
#

but the biggest problem was that mountain of recipes in gus' menu

#

I still shudder going in there

tawny ore
#

KRS could look for any item that has the context tag kadijas_recipe_shop or something like, and add recipes for any item with that tag

calm nebula
#

Yeah, a shared context tag seems the most sane

lucid iron
#

do ALL_ITEMS work properly for recipes tho

#

thats the jank im worried about

latent mauve
#

we can find out

sleek igloo
#

yeah can you even tag a recipe SDVpuffersweats

tawny ore
#

I don't think so, but you can tag the items they create

sleek igloo
#

but if I only want to sell the recipe and not the item?

tawny ore
#

Oh does that pose a challenge to implementing KRS in Content Patcher

uncut viper
#

whether a shop entry is a recipe or not is in the stock data, not on the item itself. i dont think it'll matter

sleek igloo
#

I honestly have no idea

tawny ore
#

I'm still thinking with my C# brain how it could be done

latent mauve
#

Since you mentioned Gus, are we specifically asking about food recipes?

#

cooking?

tawny ore
#

No it was crafting too

uncut viper
#
{
  "ItemId": "ALL_ITEMS",
  "PerItemCondition": "ITEM_CONTEXT_TAG whatever",
  "IsRecipe": true
}
sleek igloo
#

so KRS has two vendors, a twin that handles food stuff and one that handles crafting/weaponry

latent mauve
#

I think Button's right in that it's only defined in the shop stock as a recipe.

uncut viper
#

ive no reason to believe this wouldnt work. im not guaranteeing it will

tawny ore
#

I mean, whether it works or not is probably not too big of a deal because we have framework mods galore that do everything under the sun

uncut viper
#

assuming you go with the context tag opt in route, yes

tawny ore
#

Yeah, that's how the Content Patcher data model works for shop inventory

#

You need to read up on game state queries if you haven't

sleek igloo
#

would the context tag route be easier than the specific shop route? or should I plan for both?

uncut viper
#

(and Item Queries, which are a separate thing)

sleek igloo
#

the words "game state queries" give me allergies, it looks scary

uncut viper
#

you're making a shop either way

inner harbor
#

There's no way to stop spouses killing house slimes without c# im guessing? I dont think Tori would kill them

sleek igloo
#

WHATS A HOUSE SLIME

tawny ore
#

I'd poll the content pack creators who would possibly want to have their inventory be added, you already have feedback from a couple here

uncut viper
#

you make a shop and by default itll sell anything with that context tag. people can then optionally add other things to the shop if they want on their end

sleek igloo
#

true

inner harbor
#

When u hatch a slime in your house

sleek igloo
#

can you hatch a slime in your house

#

why would you hatch a slime in your house

tawny ore
#

Spouses kill slimes... how did I not know this

latent mauve
#

wait, I misread

sleek igloo
#

my slime hutch is the only place i ever die

inner harbor
#

Because you have the slime ring and they make xute pets

latent mauve
#

Yeah, they have specific lines for them being in the house too

#

But yes, I vote context tags personally

#

(Also, imagine if you had a series of travelling shops like food trucks and could then separate them FURTHER by types of food in context tags. The dream.)

inner harbor
#

Yeh i like context tag idea

sleek igloo
#

I could just set them both up ig, for whoever wants to finetune stuff with hasmod conditions or whatever

tawny ore
#

Context tags makes less work for mod authors making the items

#

It's less code than adding a shop entry

latent mauve
#

I dream of shopping centers that auto-sort items in rotating shops by context tag in Stardew, LOL.

sleek igloo
#

yeah but wouldn't they still technically add the item to a vanilla vendor if my mod isnt there

latent mauve
#

One day maybe, if a unified list ever begins to emerge

tawny ore
#

Not if they have conditional logic

#

Content Patcher "HasMod" can allow them to add it or not

latent mauve
#

^

sleek igloo
#

ngl i still don't know how to use hasmod

#

i retired right when that was becoming a thing it broke my brain

inner harbor
#

I didn't know you coyld add shop data with cntext tags

latent mauve
#

Yep, I tried it with a few assorted food mods so I could easily see what mods added similar tags. I still have the WIP mod somewhere, but it worked fine.

uncut viper
#

(to be clear here, doing the context tag idea still includes people being able to target your shop specifically. like. the context tag thing is extra work, not different work)

sleek igloo
#

(oh btw hi lemur! sorry, I got distracted_

inner harbor
#

No worries, i went shopping

tawny ore
inner harbor
#

(Groceries nothing exciting)

uncut viper
#

im only making sure Hadi still knows that its doing both options so its not like choosing context tags prevents the other, is all

sleek igloo
#

i imagine there's fancy stuff you could do if you set it up as a separate shop

#

idk cp is a whole new world for me lol

uncut viper
#

any shop you make someone would be able to specifically target to add their own things to

tawny ore
#

Anyway, there is nothing that prevents authors from adding stock to your shop by id, in addition to you adding stock by context tags

sleek igloo
#

ok so then my problem now is making templates ig SDVpufferchickcry

uncut viper
#

all the context tag thing is is just adding some default stock to your shop, but the shop still has to exist first

#

and if it exists they will come™

sleek igloo
#

I have a meat/recipes mod I can update (i hope), and I can use it as an example (theoretically)

tawny ore
#

You can almost just clone an existing shop and tweak it to suit your needs

latent mauve
#

I did the bad thing in my mod for testing and used the Saloon, but this is basically what I had:

"Target":"Data/Shops",
"TargetField": ["Saloon", "Items"],
"Entries": {
    "FRL_AllContextTagFoods": {
        "Price": 0,
        "AvoidRepeat": true,
        "Id": "FRL_AllContextTagFoods",
        "ItemId": "ALL_ITEMS (O)",
        "PerItemCondition": "ITEM_CONTEXT_TAG Target {{shopcontext_tag}}"
      },
    },
"Priority":"Late"    
}```
#

And the {{shopcontext_tag}} in my case was a dynamic token but yours wouldn't be.

uncut viper
#

out of curiosity, why the priority late

sleek igloo
#

what is a dynamic token AHHHHHHHHH

uncut viper
#

just to put it last?

latent mauve
#

Yeah, Button

uncut viper
#

makes sense!

latent mauve
#

I was tired and didn't want to risk fighting with a mod that loaded their objects after my mod was loaded

tawny ore
sleek igloo
#

ok im gonna do this like i'm a kindergartener building a tower

latent mauve
#

I only used a dynamic token so that I could put a custom context tag in via my Config options for testing purposes

#

to see what populated in the list when I used a tag

sleek igloo
tawny ore
#

Content Patcher let's you define tokens when you want to reuse/change the value

uncut viper
#

token = placeholder

sleek igloo
#

OH that i get

uncut viper
#

content patcher replaces it when its ready

tawny ore
#

Anytime you see {{something}} it means that it's a placeholder for a value

uncut viper
#

dynamic token = placeholder you define the rules for

latent mauve
#

So, for example, I had a drop down list in my config that let me pick a context tag. And when I picked an option, that was what I had my dynamic token set to use as its value.

sleek igloo
latent mauve
#

it was likely not the best way to do it, but it worked at the time. LOL

sleek igloo
#

i learn better by doing i think... i hope

uncut viper
#

you also wont need to use a dynamic token anyway so you dont need to worry about it

latent mauve
#

^ Yep

uncut viper
#

the only token you'll probably use is {{ModId}}

#

(and by probably i mean You Should Use It)

latent mauve
#

It was convenient in my use case, you can safely avoid dynamic tokens entirely

sleek igloo
#

"you won't need any" > "you'll probably usethis"

uncut viper
#

i said you wont need any DYNAMIC tokens

#

ModId is not a dynamic token

sleek igloo
#

i need a paramedic

latent mauve
#

{{ModId}} is not a dynamic token. Just a normal placeholder token.

sleek igloo
#

my brain melted

latent mauve
#

Dynamic tokens change based on conditions, so they aren't static. {{ModId}} is a static token that gets set once based on your mod's unique ID in the manifest and just spits that out so you don't have to type it out everytime.

karmic gust
ocean sailBOT
#

Log Info: SMAPI 4.1.10 with SDV 1.6.15 build 24356 on Unix 6.5.0.23, with 3 C# mods and 1 content packs.
Suggested fixes: One or more mods are out of date, consider updating them, SMAPI is out of date, consider updating it

sleek igloo
#

(I'm not trying to be obtuse, I feel terrible that I don't understand when you guys are trying so hard to help SDVpufferchickcry )

latent mauve
#

❤️

sleek igloo
#

I think I just need to do one thing at a time, if i think on all the other possibilities/options I'll get stuck

#

I'm gonna try to update the meat mod first

latent mauve
karmic gust
#

yes sure, sorry. I changed Haley's home location and that did successfully change, but I also tried to change her regular schedule (like the schedule called 'spring') and that didn't take effect. She continued taking her normal 'spring' schedule

latent mauve
#

Pathfinding is set the night before, so if you are looking for your schedules after the Haley and Shane event, for instance, it might not fire until the next day after that event.

calm nebula
#

It's just "Characters/schedules/.."

#

Not "Data/characters/schedules"

karmic gust
#

ahh

#

oops

#

I had slept a day after the event played, I should clarify

#

but I will change that and retry!

latent mauve
#

ah. Well, the target is indeed likely to be the only issue here, but more context is helpful. ❤️

#

(hi Pathos!)

ivory plume
# sleek igloo <@226803198218731520> hnnng sorry I keep pinging you about this but everyone I t...

Hi! RemovePackRecipesFromVanilla is specifically for Json Assets items. Per the field docs:

Takes a list of Unique IDs of Json Asset packs. Will remove all recipes from these packs from vanilla shops. Warning: This includes any items from these packs added to vanilla shops using this mod!

All it does is get a list of item IDs added by those content packs from the Json Assets API, and remove any matching items from shops. So it won't work with items added another way like Content Patcher.

karmic gust
#

Schedule (and dialogue 😅) changes are now working! Thank you!

drowsy pewter
latent mauve
#

6480, is there a master list of context tags used by Cornucopia anywhere? Out of curiosity.

sleek igloo
drowsy pewter
#

Theres so many context tags in cornucopia that realistically nobody would EVER need to use

#

So just a tag dump wouldnt be helpful

#

for a specific task you can just look at object data

drowsy pewter
#

So in CP its exactly the same as selling from a list/pool of cooked items

drowsy pewter
# latent mauve 6480, is there a master list of context tags used by Cornucopia anywhere? Out of...

Theres a list of the most useful ingredient and cooking related tags I cane up with down at the bottom of this page https://stardewmodding.wiki.gg/wiki/Context_Tags

Stardew Modding Wiki

Context tags are words/labels assigned to an item. These tags can then be used by the game or mods. Some uses of context tags are listed on the following table.
There is no known limit on numbers of context tag an item can have. Context tags do not have significant impact on performance.
Some context...

latent mauve
#

Trying to see about the impossible task of a unifying context tags list, for food in particular, it's a mess.

#

It will almost certainly go nowhere

drowsy pewter
#

Theres no point because everyone has their own purposes

latent mauve
#

yeah

drowsy pewter
#

I can do my best to suggest people tag their cheese_items or whatever but I wouldnt be able to predict lumina needing an edible_flower_item tag for example

#

Thats why that wiki page has the table of useful and common tags I know of

latent mauve
#

I mean, even things that seem like they should be predictable end up getting separate tags anyway

drowsy pewter
#

Its already intended to be a more central form of tags that multiple mod authors would find useful

latent mauve
#

For instance, food_sweet is the vanilla tag used for desserts, but food_dessert is still used in a lot of mods instead

drowsy pewter
#

I would link the xkcd comic about 15 competing standards

latent mauve
#

it's been linked plenty, I think we can skip it. 😉

drowsy pewter
#

It doesnt matter what people tag their food. It only matters when theres third party mod who needs to be reading those tags for a specific purpose. When theres a usecase then those two authors can communicate with each other

#

vanilla uses food_pasta for italian food

#

cornucopia uses it for pasta

latent mauve
#

Yeah, so I think it's just gonna be a case of "if you make a mod that uses context tags to populate a list for a shop or similar, tell mod authors directly to use that tag to be added in"

drowsy pewter
#

exactly

latent mauve
#

Which is unfortunate for old/abandoned mods that add items, but what can you do.

hard fern
#

😅 i should probably come up with a set of context tags I'll use across my mods... To stay consistent

drowsy pewter
latent mauve
#

true

uncut viper
#

what about a third party mod to keep a (probably community maintained) list of context tags found in different mods that it decides are equivalent (e.g. it considers "food_sweet" and "food_dessert" and "food_afterdinnertastymeal" to all be equivalent)
and then patch the relevant functions that the game uses to check context tags so that if you ask for e.g. food_dessert, it'll also check for food_sweet and food_afterdinnertastymeal and return items with those tags too (or just return true if you were asking if they had that tag)
wouldnt count for mods that check Item._contextTags directly, but they shouldnt be doing that anyway

#

then a mod author can just add the checks for tags they know about and leave any stragglers to this hypothetical mod who might have it in its database, as an optional dependency

drowsy pewter
#

I would be a little annoyed at the potential for a mod like that to cause more unexpected conflicts with my stuff than any small upsides tbh

uncut viper
#

any mod can already add the same unexpected conflicts by just adding items with the same context tags you check for but for a different use, tbf

drowsy pewter
#

Its more like, it could literally change how my own mod reads the tags from my own items lmao

uncut viper
#

i can see the wariness in having items you may not have accounted for show up in things, but my personal take (emphasis on personal take) is that if you want strict control over your context tag based stuff, dont use a generic context tag, use something you control

brittle pasture
#

I don't feel like this is prevalent enough to justify a C# mod when a CP mod to add said tags to the offending item will suffice

uncut viper
#

its not like this third party mod would be doing some weird parsing or somehow reading the tags to decide whats equal. there'd be a human deciding that "food_eggs" and "food_egg" should be the same thing

drowsy pewter
#

Yeah if anyone wants to be anal about context tags then I do think the thing that would have a much greater positive benefit would be tagging untagged third party items

drowsy pewter
#

spooky action at a distance for c# mods

uncut viper
#

i figured part of the problem of wanting a "unifying context tag list" like was the premise for the convo would be to help account for mods or modders that do not know about the list in the first place, which manually adding tags to specific mods would not be able to account for

#

i dont do content mods and dont have any need for anything to do with context tags, so i have no plans on thinking about this idea any further than 5 minutes from now and was just spitballing based on lily's messages SDVpuffersquee

#

even though 5min is already more distraction away from Custom Museum Framework than i should be allowing myself rn

latent mauve
#

My whole thought process initially (before the rotating shop dream) was "it'd be neat if I could at least try to make any of my future mods follow a pre-existing standard even if vanilla doesn't have the appropriate tag", which the list linked on the modding wiki does help with, at least!

drowsy pewter
#

you're welcome to add more to it if you think theres a custom tag that would be broadly useful

rough lintel
#

ok speaking of poopy things, why is my mod suddenly not loading extra layers in my tmx. half the walls are gone for some reason

drowsy pewter
#

or a tag you need to get people to try and use

latent mauve
#

And I don't think they got a fix either

#

Bottom-most walls were just gone

rough lintel
#

i may have found the issue but ill test and see if this is true

latent mauve
rough lintel
#

if the uhh if the squares that set "floorid" go over the walls, itll do that

latent mauve
#

their Front layer was gone

rough lintel
#

because it draws over whatever is on front

latent mauve
#

oooh

rough lintel
#

so just put the wall on always front

#

(is my guess right now)

latent mauve
#

That does make sense as to why it wouldn't have been an issue before

rough lintel
#

mmhm

latent mauve
#

Because typically you wouldn't have a wall on that tile

#

Even in vanilla, the 'back' layer there tends to be a black tile with no ID under the wall because the top edge of the wall is the top of the tile

#

with the exception of the angle piece, which I think is on AlwaysFront in vanilla

uncut viper
#

Harmony question: If I'm patching a method that has out parameters in its signature, and I need to affect those in my patch, do I still just do ref Type <parameter> like i normally would and ignore the out part?

brittle pasture
#

ref works yeah

uncut viper
#

the Minecraft modding community and what it does for equivalent items is exactly what I was trying to think about when thinking about the stardew equivalent

idle lantern
#

Hi there! I want to add an object to a custom event. I'm trying to use

addObject <x> <y> <sprite index> [layer]

But, I'm unsure of how to add a cave carrot to Marnie's ranch since they aren't on the same sheet

uncut viper
#

this lexicon is newer than my time there though

#

back in my day yada yada

lucid mulch
#

stardew gets a bit more tricky as you wouldn't want to convert copper to iridium despite both being ore.
hard to tell what context tags are categories vs types

drowsy pewter
uncut viper
#

well hopefully a mod checking for the context tag "ore_item" wouldnt care about the difference, else id say they should be doing not that

latent mauve
lucid mulch
#

wiki's docs I think still refer to it as sprite index

uncut viper
#

(the lack of being able to automatically determine things like that is why i went the "community maintained sets" approach)

latent mauve
#

Well, I'm on the wiki and that's where I got my copy/paste from. 🙂

idle lantern
#

I copied the command from someone else in the discord - was trying to search for my answer in case someone else had asked similar

latent mauve
#

use the qualified Item ID instead of the sprite index (sprite index used to be the same as the Item ID, but now that we can have string IDs, that terminology doesn't always work)

idle lantern
#

I appreciate it! It, and sound effects, are the last thing I need for an event I made for Marnie and Marlon.

brittle pasture
lucid iron
#

you gotta rebrand selph

#

the Crop Codec

brittle pasture
#

maaaaaybe the mod can take a step further and automagically rewrite every machine recipe to accept equivalent items instead of just toggling
the problem is that there's still roughly 82542 places in SDV that checks item ids exactly, cooking being one of them

and of course, the phantom issues that could arise as 6480 mentioned

uncut viper
#

you can always patch string.Compare

rough lintel
#

i just like having things consistent

#

if mod authors developed a tag compendium, that'd be nice, i think

#

not a mod or anything, but a resource for how to tag your items

latent mauve
#

closest we have is that list 6480 linked

#

which I did not know about before it got linked

rough lintel
#

ive never seen that ever

#

so that is not very visible or good lol

latent mauve
#
Stardew Modding Wiki

Context tags are words/labels assigned to an item. These tags can then be used by the game or mods. Some uses of context tags are listed on the following table.
There is no known limit on numbers of context tag an item can have. Context tags do not have significant impact on performance.
Some context...

rough lintel
#

honestly, slap this on an excel sheet, make it a command, people will use it

drowsy pewter
#

!contexttags

#

Welp

#

i mean its up to people to promote it

#

i normally bring it up when people talk about making their own item mods

rough lintel
#

bring it up randomly. bring it up when theres not even food talk. bring it up at the dinner table. all advertising is good advertising.

calm nebula
#

Can I talk to you about our lord and savior ||dollar cost averaging||

#

||I hope the joke is obvious||

tender bloom
#

what about content patcher

calm nebula
#

That too hahaha

sturdy wyvern
#

does anyone know if there is a list connecting the soundtrack titles to their in-game ids?

latent mauve
versed wyvern
#

I think they want to match the song titles from the OST to those IDs

latent mauve
#

Trying to remember if there was more description elsewhere

urban patrol
#

there's the great ID spreadsheet

latent mauve
#

ah, yes, the Event Modding Resource sheet

#

That's what I was checking actually xD

violet grotto
#

Is there a tutorial or docs of some kind for creating custom crops through Content Patcher? Closest thing I could find is this page, but it's with JSON Assets:
https://stardewmodding.wiki.gg/wiki/Tutorial:_Making_a_New_Crop

Stardew Modding Wiki

PLEASE NOTE: JSON Assets is obsolete in 1.6 in favor of Content Patcher. Backwards compatibility is maintained, but for new crops CP should be used.
Making a new crop is easy with Json Assets (JA), but involves a few more steps than some other beginner mods. However, don't be intimidated by the length of this tutorial! It's only long so as to e...

#

A bit confusing, since it says at the very top that Content Patcher shoould be used instead.

latent mauve
#

that should be the event modding resource spreadsheet

#

Music Bank IDs tab has youtube links to the tracks

#

as well as the track names

sturdy wyvern
#

i didn't see the tabs on the bottom, so i didn't know there was diffrent pages, and only went to 285

latent mauve
violet grotto
#

damnit

latent mauve
#

Crops aren't actually too hard, so we can probably help you through it-- there are also some existing CP packs that add mods that you could use as reference

violet grotto
#

Yeah, I thought about using another crop mod as refernce, if all else fails.

#

Need to find one first...

latent mauve
#

I think 6480's Giant Crops mod is updated to 1.6 without the JA dependency

#

which is linked on that page, actually

#

yep, confirmed, that one's converted to CP

violet grotto
#

Wait, doesn't that just add ginat crops?

#

Ooh, I could take a look at Cornucopia!

latent mauve
#

you can do that, yes

brittle pasture
#

[[Modding:Crop_data]]

brittle pasture
#

you'd add the seed and the harvest item to Data/Objects, and the crop data to Data/Crops

violet grotto
#

Man, how did I miss that?

#

Thanks!

latent mauve
#

I appreciate that the modding wiki uses the crop template as the example on the "How to use templates" page. LOL

#
Stardew Modding Wiki

So you've got a template with a bunch of colored squares on it. Now what?
Templates are easiest to use in a program that uses layers. This explanation will for now assume you understand how layers in an image editing program work.
Layers in Photoshop
Layers in Gimp
Layers in Aseprite

Let's say you made a crop (or, in this case, literally just c...

violet grotto
#

This will come in handy too!

sturdy wyvern
#

is there any reason to use json assets(beside mods that require it) or has Content Patcher completely replaced all it's functionality?

brittle pasture
#

not really since 1.6

latent mauve
#

JSON Assets is primarily just being maintained for older mods, so I'd avoid it unless there's some niche feature you need that didn't make it over to CP

lucid mulch
#

the few edge cases where JA did something got mostly solved by spacecore functionality and other mods augmenting vanilla

drowsy pewter
#

(definitely my one claim to fame)

faint ingot
#

So the current challenge I'm dealing with is I have an event in an area where FTM loads monsters. and they are loaded and frozen when the event plays. Any way to have them hidden during the event or not really?

#

I could copy the location to a temporary map but ideally I'd still like the other FTM elements (mining nodes) present

drowsy pewter
drowsy pewter
#

Thank you!

#

I'm also temporarily enjoying the ability to have a cornucopia as my profile banner before this week of free nitro runs out

cinder talon
#

How did y’all get so dang good at pixel art? I always feel like everything I make looks too sharp xD

drowsy pewter
#

just lots of practice lol

#

For sharpness you learn to use intermediate colors to smooth things out

#

If you want my advice specifically on anything you're welcome to ping or message me ^^