#making-mods-general

1 messages Β· Page 567 of 1

calm nebula
#

Just set a mail flag

#

Or a conversation topic

fierce vault
#

Ok! I'll look into that approach, since I have no idea how I'd make him not giftable for a day

#

thank you guys

tranquil olive
#

I think I finally got these yellow flowers to stop stacking 🀞 SDVpraiseyoba

fierce vault
#

my mod page is going to be lacking with all that I have left on my plate lol. At least I'll have a nice thumbnail since I worked on that a few weeks ago

tranquil olive
#

I am still scared of the mod page part- but at least I have some rough words down

latent mauve
#

Yeah, the mod page always takes me a while, LOL

autumn ivy
#

my prismatic tools content patcher remake is coming along.... but clint is asking for copper bars instead of my prismatic bars

latent mauve
autumn ivy
#

no... this is what i have

  "ClassName": "WateringCan",
  "Name": "Prismatic Watering Can",
  "DisplayName": "Prismatic Watering Can",
  "Description": "Waters everything. Probably too much.",
  "Texture": "assets/water",
  "SpriteIndex": 42,
  "MenuSpriteIndex": 47,
  "UpgradeLevel": 5,
  "ConventionalUpgradeFrom": "(T)IridiumWateringCan",
  "UpgradeFrom": [
    {
      "Condition": "PLAYER_HAS_ITEM Target (T)IridiumWateringCan",
      "Price": 25000,
      "TradeItemId": "(O)BluPenDragon.PrismaticBar",
      "TradeItemCount": 5
    }
  ],
  "CanBeLostOnDeath": false
}```
latent mauve
#

Ah! ConventionalUpgradeFrom only has UpgradeLevel values 1-4, so it's likely looping back to 1

#

What happens if you don't include ConventionalUpgradeFrom?

brittle pasture
#

yeah remove the field

latent mauve
#

I think you can also use RequireToolId in Your UpgradeFrom model, if you want it to consume the previous watering can (instead of the Condition)

fierce vault
#

just realized the total amount of pixels my portrait sheets should be are off after doing some math, ahhhh!

#

SDVpufferflat so much left to do

autumn ivy
#

ok thanks @brittle pasture @latent mauve it works

upper fractal
#

Im new to this and i don't know what im doing.Im trying to make a npc with misscoriel npc creator mos and im running through the issue that my portraits look very pixelated with the usual 64x64 canvas for each expression.So i been trying to use cp or portraiture to make higher resolution portraits and i dont understand how some of the most popular portraits like the dc and the one for sve look so good and doesn't overflow the frame.I need help,please SDVpufferwaaah

sullen rain
#

Why am I getting this error when the asset exists?

half tangle
mellow laurel
ocean sailBOT
#

Log Info: SMAPI 4.5.2 with SDV 1.6.15 build 24356 on Windows 11 (10.0.26200.0), with 189 C# mods and 455 content packs.

sullen rain
#

I'll try your suggestion from the other channel radium. Thanks for the log

half tangle
#

!npc for more info

ocean sailBOT
#
Creating a Custom NPC

Keep in mind that making NPCs is a complex process that requires learning many different aspects of Stardew modding.
Here are a few links that can help get you started on all that you need to know:

upper fractal
torpid sparrow
#

if its out of date its no use to u

half tangle
#

"easy to use" does not mean it'll actually help you put something into the current version of the game

#

check out that last link in Governor's post for another NPC builder to try

sullen rain
#

Nope
[Content Patcher] Ignored Mona Revived > Schedule Dialogue load: can't use the Target field with an Include patch.

buoyant moon
#

Is there a quick way to do a scan for missing i18n tokens, assuming they aren't using dynamic tokens themselves?

uncut viper
upper fractal
#

I just hope someone with portraits experience can resolve my original question SDVpufferdizzy

sullen rain
#

{

  "LogName": "Schedule Dialogue load",
  "Action": "Load",
  "Target": "Strings/schedules/{{ModId}}_Mona",
  "FromFile": "assets/data/ScheduleDialogue.json"

},
hard fern
#

πŸ€” it should just work

uncut viper
#

That's not Strings/schedules/Mona

#

Which is what is written in whatever is trying to use the dialogue

sullen rain
#

Ah

uncut viper
#

One of your schedules (I assume, based on the dialogue key) is missing the ModId prefix when calling the schedule dialogue

#

The library_read.000 one

sullen rain
#

Ohh

#

Okay

#

Thanks Button

hard fern
#

are your portraits named correctly in portraiture? (perhaps they are named incorrectly, and thus portraiture is not replacing the portraits like they should and instead you are simply seeing your incorrectly sized npc's portraits the way they are in your mod?)

upper fractal
hard fern
#

!log

ocean sailBOT
#

Important note: Your computer username may appear in the log. If your username is your full name, please be aware of this before uploading it.

Please share your SMAPI log file. To do so:

  1. Open this page: smapi.io/log.
  2. Follow the instructions at the top of the page to upload the log file. (Don't copy & paste from the console window!)
  3. After uploading, it will show a green box with a URL to share. Post that URL here.

Please do it even if you don't see any errors. This has useful info like what mods and versions you have, what the mods are doing, etc. If the issue didn’t occur in your last session, please load the game to the point where the issue occurs, then upload the log.

upper fractal
hard fern
#

just lmk when you can

upper fractal
#

Okay!I'll ping you once i get it

hoary flame
#

I'm just now getting around to creating my mod page (finished this mod weeks ago but procrastinated final touches to start another mod instead) and why is putting together images for the mod page so tedious?? I just want to be done already rip

valid folio
#

Hi, how are you? Do you know which file contains the rules for the machines of the base game?

valid folio
torpid sparrow
buoyant moon
#

Is there a wooden sign generator to go with the scroll generator for making images for a mod page?

round dock
#

-# jk i have a love hate relationship with it

#

Conceptualizing? Fun.
Living in mod page purgatory because the preview doesn’t sit right? Hell.

torpid sparrow
steep viper
#

oddly enough I think my favourite part is making the images for the mod page

near imp
#

heretic SDVpufferwoke /j

steep viper
#

I get to decorate:3

hoary flame
#

I wish I could relate

ornate locust
steep viper
ornate locust
#

After the frog moves in

whole prism
#

Hiii everyone!

If anyone is bored and want to do some pixel design of fishies, then let me know!

Im working on making a few sprites for my first ever llegendary fish for my mod, and am super open to any contributions if your willing!! You can ping or DM! SDVpufferwow

gilded oxide
#

Hey so I'm really new to modding so I could be missing something really obvious but I'm trying to use CP's edit image on an AT fish pond texture and it's not working. The smapi log isn't giving me any errors so I'm not sure if it's something in the fish pond drawing process that's the issue or maybe my targeting? I'm using AT's CP integration but I've also just tried the direct file path. I'm so confused aSDVpuffercri

orchid glade
#

Is anyone able to showcase a mod for me? I swear I will apply for mod author asap..

#

https://www.nexusmods.com/stardewvalley/mods/33879
We have finally released our very first beta version of vanilla seasonal outfits! Our vision is outfits that keep as close to vanilla style as possible.

We are also looking for artists to collaborate, you can DM me or GalaxyRobot on here or Nexus if interested.

Nexus Mods :: Stardew Valley

Seasonal and festival outfits designed to match Stardew’s original style. Beta release (Jas portraits only). Looking for pixel artists to join the project!

orchid glade
buoyant moon
#

woo didn't get scope creeped before I released a thing

#

now to make my own event script format that compiles into JSON

dreamy cedar
#

I'm having a hard time convincing SMAPI to display verbose/debug output for just my mods. I can go through the UI and change "Developer Mode" to true and I get everything. But if I turn it off and check my mods in the list, I don't get any verbose output from any mods.

dreamy cedar
#

Yes

lucid iron
#

can u check smapi-internal/config.json "VerboseLogging"

#

see if ur configs saved

ivory plume
#

Note that those are two different things; what you probably want is to (a) enable verbose logs for your mods, and (b) enable developer mode. The former enables verbose logging, while the latter lets you see it in the console window.

dreamy cedar
#

What I'm hoping for is the ability to see my mods' debug/trace data without having to see other mods' trace data. Is that not a thing?

lucid iron
#

its what this is for

#

u need to put "Nerm3.ModId" in there i think

#

i never use this bc its annoying to change config all the time

dreamy cedar
#

Here's the config.user.json (not hand-edited, the result of working in the UI, so no typos):

{
  "ConsoleColorScheme": "DarkBackground",
  "VerboseLogging": [
    "SMAPI",
    "NermNermNerm.JojaFinancial",
    "NermNermNerm.Junimatic",
    "NermNermNerm.QuestableTractor",
    "NermNermNerm.WarpNetworkReimagined"
  ],
  "DeveloperMode": false
}
ivory plume
#

It's possible for TRACE messages, but not for DEBUG messages. Generally mods shouldn't be logging much DEBUG info; if a mod is spamming debug messages, I suggest asking the mod author not to do that.

lucid iron
#

i usually have a thing like this instead in my ModEntry

#if DEBUG
    private const LogLevel DEFAULT_LOG_LEVEL = LogLevel.Debug;
#else
    private const LogLevel DEFAULT_LOG_LEVEL = LogLevel.Trace;
#endif

    /// <summary>SMAPI static monitor Log wrapper</summary>
    /// <param name="msg"></param>
    /// <param name="level"></param>
    internal static void Log(string msg, LogLevel level = DEFAULT_LOG_LEVEL)
    {
        mon!.Log(msg, level);
    }
#

then i can see my own Trace logs as Debug when i build debug config

dreamy cedar
#

Junimatic, for example, is definitely spewing as LogLevel.Trace, and yet with the above settings, I'm not seeing any output. I think we're agreed that I should be seeing it? I can dig deeper if this isn't everybody's experience.

tiny zealot
#

i think in order to see Trace level in your console you need to set "DeveloperMode": true

vernal crest
#

Pathos said you need to enable developer mode to see it in the console

dreamy cedar
#

K, reparsing, I think the idea is that if "DeveloperMode" is false, you see no Debug or Trace in the console. If you set it True, then you see only Trace from selected mods and Debug from every mod?

ivory plume
#

Yep.

uncut viper
#

Dev mode only affects trace not debug, no?

ivory plume
#

(Verbose logging changes what gets output to the logs; developer mode affects which logs are also visible on the console window.)

uncut viper
#

Debug is definitely still in the console with dev mode false

ivory plume
#

Oh, yeah sorry I misread. Debug is always visible, Trace is only visible in developer mode (but always written to the log files either way). Verbose logs have trace level.

dreamy cedar
#

Okay, so here's what I'm seeing in the console with debug mode on:

[19:17:06 TRACE Junimatic] Junimo reached target { projectType=IndoorPots location=Honest A Farm hut={X:22 Y:17} origin={X:23 Y:17} source=Junimatic.IndoorWell at {X:24 Y:15} target=Garden Pot at {X:18 Y:17} items=Steel Watering Can[0]x1 }
[19:17:06 TRACE Visible Fish] Spawning fish in Farm.
[19:17:06 TRACE Visible Fish] found 255 water tiles
[19:17:06 TRACE SMAPI] Visible Fish loaded asset 'Mods/shekurika.VisibleFish/LocationData'.
[19:17:06 TRACE Visible Fish] Attempted Spawns 44 Failed Spawns: 30
[19:17:07 TRACE SMAPI] Junimatic edited Characters/Dialogue/Kent.
[19:17:07 TRACE SMAPI] Junimatic edited Characters/Dialogue/Kent.

Note Trace data from Visible Fish.

ivory plume
#

Yep, that's normal. So to summarize:

  • The log file always shows TRACE and DEBUG.
  • The console window shows TRACE (if developer mode is enabled) and DEBUG (always).
  • You can optionally enable verbose logging. This affects messages logged using this.Monitor.VerboseLog or this.Monitor.IsVerbose, which are written as TRACE level (following the rules above).

So:

  • Enabling 'developer mode' will show TRACE messages from all mods.
  • Enabling verbose logs for specific mods will then add those extra logs to the log + console.
dreamy cedar
#

I see. It's a case of I was projecting what I wanted the feature to do without checking hard to see if that's what the feature actually did. @lucid iron 's conditional compilation definitely does the needful, but it feels like a workaround.

hard fern
#

so uh. how do i fix this..

lucid iron
half tangle
#

I just use Info during dev always so I can see it more easily and then get rid of those lines when I don't need them (and keep stuff at Trace that should be there anyway)

tiny zealot
#

i use Debug liberally and the method i call for it is conditional so the calls get compiled away when i switch to release

ivory plume
#

(That's what verbose logging is supposed to be, but a lot of mods misuse always-on TRACE logs.)

half tangle
#

(and I appreciate the SMAPI update fixing visibility of Info recently)

dreamy cedar
lucid iron
#

i feel like thats what compile configuration r meant for

uncut viper
#

I just do a Ctrl-F when I'm finished with my mod to remove all my Log.Debug calls right before publishing (don't be like me)

half tangle
#

I am also very basic in my compiling practices and only use the released build and not debug

lucid iron
#

button...

dreamy cedar
#

ymmv. I like to minimize conditional compilation. Been burned by having debug code that gets compiled out in release mode because there was a hidden side-effect.

uncut viper
#

(All of my mods are also built and released in Debug bc I never remember to even pay attention to that whatsoever. Don't be like me)

lucid iron
#

u can [Conditional("DEBUG")] u know

uncut viper
#

I actually did put that on my logging but, see above

#

If I had stronger reason to pay attention to it or I was being paid to do it right or something I would pay more attention to it

lucid iron
#

but idk shit about roslyn and her whims so

uncut viper
#

Your good friend Roslyn

dreamy cedar
#

Well, consider this:

#ifdef DEBUG
  foo.Log("This is the {n++}th time I've been called, what could go wrong?");
#endif
#

(Granted, you usually have to get a little subtler than that to have a bug, but it's a thing.)

tiny zealot
#

well, in addition to the bug, that's a pain to have to do every time i want to call log

lucid iron
#

hm i wonder what happens with the [Conditional("DEBUG")] ones then NotteThink

tiny zealot
#

the calls just get excised, afaict

uncut viper
#

Calls to Conditional("DEBUG") methods don't get put in the IL

lucid iron
uncut viper
#

(unless you are in debug obv)

tiny zealot
#

you'd have the same bug, but this is why postfix increment used "cleverly" is a bug factory IME

lucid iron
#

does n++ eval in that case i mean

uncut viper
#

The n++ in that example is not the same case

#

as its not in a Conditional method

#

whatever is in between the #ifdef DEBUG and #endif just does not exist in your compiled .dll whatsoever, any IL between those lines is yeeted

#

presumably if it were a method it'd also remove all the parameters sent to that method, or else the stack would explode

dreamy cedar
lucid iron
#

i did this

int n = 0;
// LogDebug has [Conditional("DEBUG")]
LogDebug($"Do you become one? {n++}", LogLevel.Info);
Log($"n={n}", LogLevel.Info);

and you get n=1 in debug and n=0 in Release

uncut viper
#

Sounds expected to me

dreamy cedar
#

^ The last time I debugged something like this, it was actually Linq-related -- the debug code simply expanded the enumerable, which had the effect of making the second traversal behave differently and, bizarrely, it worked fine with two traversals and broke when only traversed once. Kinda backwards.

#

One of those "Let's see ChatGPT figure that one out" moments.

fierce vault
lucid iron
#

you don't need to prepend your mod id for dynamic tokens

fierce vault
#

Oh? I was copying how I set up my portrait mod. It works, but this doesn't SDVpufferthinkblob

I'll take it out then

uncut viper
#

If you named your DT with the modid prefix then you'd need to write it every time, but you shouldn't name it with it, and having it not in the name but when you try to use it will always break it

fierce vault
calm nebula
#

Stupid questions time

#

Can someone explain the Green Wizard names

#

Thank you.

hard fern
#

πŸ˜” sorry it's my fault

uncut viper
fierce vault
uncut viper
#

You are (correctly) not using your ModId in the names i.e. when you write {{Santa Red}}

fierce vault
#

Ohh

uncut viper
#

I will admit though I just went off what chu said and didnt look at your original json

#

So that's my bad

fierce vault
#

thanks for the help guys, I'll fix that

uncut viper
#

You don't need them in your values either though, but if you're using them in Targets, you may need to use the ModID token in the tagrte instead to make sure a fromfile matches up or something

#

The error you asked about in particular originally is because when you write {{SpringJack1}} that gets turned into parcy.jack/SpringJack1 which is not a GSQ

#

But you are attempting to use it as a GSQ in your appearance Conditions

inner harbor
#

has anyone written a customized wedding to work in multiplayer?

#

I am wondering how to add the other farmers/players!

#

(and looking for a reference)

rain oracle
#

Hello folks, just popping in to ask a question:
Is there any content patcher commands, actions, or that sort of thing that would allow me to modify quarry spawn rates on my custom farm?

I have the dirt placed down, and it seemingly just generates the geodes? (its been a long time, so I honestly forget how i got it working), but id like to adjust the odds if thats possible.

Thanks SDVpufferheart

gaunt orbit
#

spawn rates are hardcoded. you would need to either make a FTM content pack or use c#

#

(in addition to your existing cp pack)

rain oracle
#

SDVconcernedCA Welp.

fierce vault
#

no errors anymore... but my npc will not show in any of my test saves except one that has already had him (and the conditions he needs triggered) for a while

#

he seems so finicky with actually showing up which has me worried

torpid sparrow
#

any errors?

fierce vault
#

none in my smapi console. He's in my old testing save alive and well, but literally would not show up when i staarted a new one and timeskipped to fall 28 and then slept the night to see his event in the morning. (I did briefly enter winter though skipping before that, so maybe that's the issue?) my mod is apparently easily broken by time skipping wrong SDVpuffersweats

#

I'll start another test save and see if I can get him to show.

yeah, it's drivng me crazy. I was more careful with how I time skipped this time, watched the event twice, once using debug, and even went to sleep when he didn't appear only for him to not show up the next day either!

#

but he's there in my old save just fine??

#

modfest ends on the 25th for me since I'm not in Europe, and my npc won't even bother to show up for me lol

#

Good news is that he at least is using his spring sprites now, (thanks button and chu)

#

but I can not get him to work on new test saves!

buoyant moon
#

General i18n question: looking at examples I'm noticing that they aren't including {{ModId}} or any unique identifier as part of the token, is that the standard and are i18n strings isolated to each mod to avoid conflicts if so?

fierce vault
#

anyone have any ideas why that might be happening?

uncut viper
#

No need to namespace them

buoyant moon
#

Got it, thanks, that's what it looked like but I didn't notice it explicitly spelled out unless I missed something

uncut viper
fierce vault
#

I will check that, thanks SDVpuffersweats

#

I've got this in the event"Entries": { "parcy.jack_intro/Time 600 1700/Season Winter/DayOfMonth 1 2 3 4 5 6 7/": " and "Conditon":"!PLAYER_HAS_SEEN_EVENT Host parcy.jack_intro", as his trigger. He has shown up before in other test saves before, so idk

#

oh wait

uncut viper
#

Well the trigger action won't un-invisible him

fierce vault
#

yeah, no I explained that wrong

#

He should have a trigger in his event

#

Or command anyway

#

that makes him visible again

#

I'll check to see it's still there

#

Ohh

#

I maaay have found something of note!

#

I have action SetNpcVisible {{ModID}}_Jack/ but have been skipping through the event.... I do not have a setSkipActions [actions] though, so that might be it?

uncut viper
#

That sounds like it's probably it

fierce vault
#

I'll see if it fixes!

ornate locust
#

You can also just put that before the skippable command

#

if you don't need it to happen in a certain spot in the event

fierce vault
#

yaay! That's what I did, and he shows!!!

#

Thanks (again) for all the help everyone has offered today

#

I'm still not nearly done though πŸ˜„

#

So much left to do!

latent mauve
#

Debating if I need to make Urbosa short for Flower Dance, there are a distinct lack of tall flower dance sprites.

#

Even the taller NPCs shrink down for it, LOL

fierce vault
#

I was struggling making a quick question work for dialogue that technically has no question, but makes the player remark something, so I tried a question null instead, kind of like this question null "#You are!?"/ but now my event won't load?πŸ˜…

#

the # shows as red, even when I had 2 like the example...

urban patrol
fierce vault
#

Oh

#

thanks

urban patrol
#

np

fierce vault
#

that makes sense because that's how it works for other dialogue in the event. I just didn't see those in the example so didn't add them πŸ˜…

urban patrol
#

what example?

fierce vault
#

let me find it

#

this on the wikiquestion null "<question>#<answer1>#<answer2>"

#

not technically a formatted example I guess

#

but it wasn't immediately obvious to me that I needed to add \

urban patrol
#

it's JSON convention that unless you're indicating the beginning or end of a key/value, the quotes need to be escaped so that you don't end the key/value early

fierce vault
#

Ok, thanks!

uncut viper
#

It is technically formatted in that you can use normal quotes without escaping them if your outermost quotes are single quotes instead (and then you need to escape single quotes)

#

This may make it easier on you if you're not using single quotes elsewhere in the string

brave fable
#

honestly if you have any dialogue in the string i wouldn't bother since then you're just having to escape all your apostrophes

#

may as well just be consistent and escape your contained doublequotes

proven spindle
#

Thanks for all the feedback! I've added clarification to the tutorial about the edibility steps and looking at the game files. I'll probably swap the patch export and patch reload section locations; I don't want to group them all together since that can be overwhelming and I find that a later repetition of a concept helps with understanding and retaining it

fierce vault
#

where do I read about additional dialogue commands, like adding an item to a player's inventory? I didn't see anything about that when briefly checking the wiki page on dialogue

half tangle
#

(AddItem would be the one you're referencing)

fierce vault
#

Thanks!

onyx reef
#

might be a dumb question but is there a way to make so multiple cooking recipes fall under the same 'item' for the master chef achievment? Like if i wanted to add customizable pizza toppings for cooking, could i make it so they all register as the pizza while still holding the different toppings.

uncut viper
#

No. But you could use SpaceCore to make one recipe that can take any item with (for example) a "pizza_topping" context tag

#

It would have to be the same pizza, though

#

(This also assumes you're using Content Patcher only. Naturally if you use C# you can do anything.)

onyx reef
#

oh </3

#

ill just make it so there are way less versions to make then. thank you!

dreamy dew
#

Hello. I'm sorry if I keep asking stuffing like this here, but where is RobinDem from? I see it in the mail string?

#

Couldn't find it in the modding data from the official wiki.

swift falcon
#

demolish maybe?

verbal glacier
#

Hi, it's a letter Id which doesn't correspond to anything in particular (no actual letter you received) it can be referenced by events or other dialogue. It's from Robin's Sunday 2 Heart dialogue which uses the $1 dialogue command, this shows a line of dialogue once and then shows another repeatedly (I believe) because you now have the mail flag.

dreamy dew
#

Maybe I have forgotten. What's the dialogue or quote again?

verbal glacier
#

It's Vanilla. "Sun2": "#$1 RobinDem#My husband almost set the house on fire last night with his science experiment. One of his beakers exploded and sent a fireball into the rafters! Thank Yoba I used fire-resistant lacquer when I built the place.$u#$e#Sorry if it smells weird in here, @. It's my husband's bizarre science project...",

dreamy dew
#

Ohh, that. Yeah. I remember that. And you say it's repeatable?

verbal glacier
#

the second part should be

#

After #$e#

dreamy dew
#

So the first part is a one-time thing, but with the marker, it will only repeat the second part from then on?

verbal glacier
#

Yes

dreamy dew
#

Got it, thanks very much.

verbal glacier
#

Happy to help πŸ™‚

obtuse wigeon
#

I'm having an issue where the pathway is still impassable despite nothing being there on the buildings layer (The Tiled screenshot is only showing the buildings layer), no impassible tile property in the map when using patch export, and the PatchMode being Replace.
Are there other layers that prevent movement? or something else odd that I haven't thought of?

near imp
#

im not super familiar with selectively patching only parts of a map yet, but do you also know if your patch replaces all layers?

obtuse wigeon
#

There was invisible tiles! ty very much, I certainly didn't think of that

near imp
#

those bois have got me a few times previously SDVkrobusgiggle

obtuse wigeon
#

it is, more specifically a mod for another mod XD

floral stream
#

which mod?

obtuse wigeon
#

One that's yet to be released and I'm not sure if I can say what the mod is

floral stream
#

oh ok, i just have a mod in that exact spot and ive made like 5 different compatibility patches lol

obtuse wigeon
#

Oof it's a popular place XD

iron ridge
#

i also have a thing there!
-# i doubt the mod has worked in years though so that one's not an issue

floral stream
#

this is is the path i made

vernal crest
#

Where is that? I don't recognise it

obtuse wigeon
#

Lower left of the backwoods

floral stream
#

yeah

vernal crest
#

Ah yes I see

obtuse wigeon
# floral stream this is is the path i made

This location in the mod I'm making certainly isn't final, I'm just tossing things in locations so the other person working on it can give their input in, so there's a very high chance it will change

floral stream
#

yeah its just a very cramped area

rain inlet
#

chat should i bother setting up proprietary vscode for c# debugging or do i go beast mode and just rawdog it with nvim and commandline

dawn ore
#

How can i get a quest to require an island warp totem? I udnerstand the normal logic and have it working for items like iron bars, my guess is theres some formatting thing getting in the way due to the odd naming of totems?

I've tried:
"AcceptedContextTags": "id_(o)886",

and

"AcceptedContextTags": "item_warp_totem_island",

What am i doing wrong?

ornate trellis
#

i never got the id_(o)886 stuff to work either...for some reason it only worked for me when i did it like id_886. either way without the rest people might not want to take a look or be able to say much

brave fable
#

sorry had to correct myself there, assumed items used the id as the name. the reason yours wasn't working is that it didn't match the reformatted name, per the wiki rules:

The name is trimmed, lowercase, with spaces replaced with underscores, and with single quotes removed
so the colon stays

brave fable
calm nebula
#

Just hold it above your head and debug listtags

ornate drift
#

would people consider you a "coder" if you learnt json coding instead of python and whatnot

#

not related to stardew just like in general

torpid sparrow
#

from what i understand we're not really coding

#

especially bc what makes it possible is content patcher

lucid iron
#

It's the same kind of coding as writing html/css kinda

ornate drift
#

basic knowledge

#

i guess

lucid iron
#

You aren't implementing any logic, but filling in appropriate data in a structured document

ornate drift
#

patching

#

and loading

#

and editing

torpid sparrow
#

ive done python and javascript and java and it's a totally different experience imo SMCPufferSquee

#

(i dont code anymore and i was very bad at it)

devout otter
#

Yar to my understanding, it's not really "coding", but to decribe it the accurate way seems to actually confuse most people.

lucid iron
#

I think u can count it as coding

#

The actual distinction is data vs logic

torpid sparrow
#

i think of coding more as logic

obtuse wigeon
#

Generally speaking I agree with Chu, but specifically to modding with content patcher, you're also learning how to debug, read documentation, and learning to think more like a programmer which can (and does) help massively with learning coding languages

ornate drift
#

yeah, you get to learn values and strings

lucid iron
#

There's also some minor logical things you can do in content patcher with the token system

torpid sparrow
#

true

lucid iron
#

But it's overall a declarative thing

#

Not imperative

ornate drift
#

tiled makes me wanna rip my hair follicles off sometimes

#

same goes for json editing
if you even mess up just ONE thing in content everything gets ruined

#

But I can't lie

#

it's extremely fun to learn

#

Maybe I'm having fun because it's like a new hobby, I'm used to being an artist

torpid sparrow
#

content json?

#

u could split up ur jsons

ornate drift
#

you'd have to go in and edit them all again

torpid sparrow
#

huh

obtuse wigeon
#

That's when you use {{ModId}} so you don't have to change them

torpid sparrow
#

yeah

#

which i thought u were using

ornate drift
#

i am

#

I'm just giving an example

#

nothings wrong with my jsons lol

torpid sparrow
#

i suppose but find and replace works in a pinch

ornate drift
#

i have them all separated in assets

torpid sparrow
#

thats what i did when i switched to {{modid}}

ornate drift
vernal crest
#

I think he was just talking in generalities

ornate drift
#

yes

#

that

vernal crest
#

Like if you accidentally set something as an array instead of an object, or miss a comma

#

Lots of possible examples

obtuse wigeon
#

I'd be truly stuffed without the ModID token, especially currently with a 33 character modID

torpid sparrow
#

true

ornate drift
#

Or invalidating your json

ornate drift
#

I don't see the difference between ] and } in jsons

vernal crest
#

I enjoy the need for accuracy in programming and data

ornate drift
#

I keep it held by ducktape and then polish it later

obtuse wigeon
#

I suggest you never look at any none json I write in that case XD

ornate drift
#

Kinda like sketching and then tracing your sketch

ornate drift
obtuse wigeon
#

[ ] are used for lists of things (also called arrays) e.g. [Item1, Item2, Item3]
{ } are used for dictionaries which are key value pairs e.g.

{
  "Key1": "Value1",
  "Key2": "Value2",
  "Key2": "Value2",
}
ornate drift
#

Oh basically patches

obtuse wigeon
#

lists are good for say a gracery list, while dictionaries are good for, well dictionaries with the word and it's definition

ornate drift
#

Logname action etc etc

obtuse wigeon
#

yep!

ornate drift
#

Interesting...

ornate drift
#

Like uhhh

tiny zealot
ornate drift
#

name, edible or not, buffs, etc

tiny zealot
#

it may help you to read about json itself in this case. array/list [] and object/dictionary {} are two of the three fundamental types of thing you can have in json

ornate drift
#

three?

tiny zealot
#

(the third is value, which comprises strings, numbers, booleans, etc.)

obtuse wigeon
#

third is data types I think? like yep what Ichor said

ornate drift
#

ooh

tiny zealot
#

knowing what you need to put in your content patcher json to, for example, change or add data to an object is an exercise in 1. understanding how the data is structured now and how you want it to be structured instead and 2. understanding how content patcher expects to receive data about those changes from you in its own json schema

ornate drift
#

inchresting

trim tundra
#

Heyo! I'm trying to figure out how some stuff works for machines so I can maybe patch a bugged thing myself. See https://discord.com/channels/137344473976799233/1485794553612206180 for a little more detail. Long story short, when re-smoking a fish with a smoker using a talent from VPP that lets you re-smoke fish to increase quality, doing so with MPS machines causes all re-smoked fish of the same quality to stack with each other, merging into a single big stack and losing the original fish

#

Here's the relevant compat data for this talent.

Do any of you have any idea why those fish might be stacking weirdly? I'm not sure how to read this stuff, but it looks like it should just take something in, increase the quality by 1, and then spit it back out.

#

The only mod I think might be affecting this other than those two would be Vegas' Better Item Categories, if that might be relevant.

brittle pasture
#

ignore what I said earlier the issue is that they're using DROP_IN_ID in their ItemId instead of DROP_IN_PRESERVE

trim tundra
brittle pasture
#

yes

#

feel free to also report this bug with MPS (though note that the author is busy currently)

trim tundra
#

'ight, let me make that modification and then go test it. Thanks!

If you wouldn't mind, what's actually the technical difference between those? I'm pretty coding savvy, but I've got no knowledge of how Stardew works behind the scenes.

trim tundra
brittle pasture
#

DROP_IN_ID = the output's flavor is the item id of the input; in this case the input is smoked fish so the output'd become "Smoked Fish-flavored Smoked Fish"
DROP_IN_PRESERVE = the output's flavor inherits the flavor of the input, so Smoked Tuna becomes another Smoked Tuna properly

#

the first is intended for the regular fish to smoked fish rule

trim tundra
#

Ah, so the first turns a Tuna into a Smoked Tuna, or in this case a Smoked Tuna into a Smoked Smoked, and the second would turn a Tuna into a Tuna or a Smoked Tuna into a Smoked Tuna. Got it.

ornate drift
#

the lack of ideas bro this is gonna KILL ME πŸ’”

brittle pasture
#

but as mentioned Nach is busy with IRL stuff for at least a few more months

ornate drift
#

ohhh wait i just realized...

the $ makes it so that instead of breaking the line, it skips to it immediately so you dont have to interact with the character again

#

no wonder why it was skipping only the Mon dialogue

trim tundra
ornate drift
#

where do you find the setting in NotePad++ so that everytime you press a json it always opens up NotePad++?

trim tundra
#

I would assume that would just be the default app in Windows, not a setting in Notepad++. I haven't done this, but it should just be right click > open with > choose a different app > find Notepad++ and set it to always.

#

(Assuming Windows 10/11, I think it works the same in both. If you have another operating system I will be of no use)

ornate drift
#

oh, hey, it worked! thanks

#

mwehehehehe

#

i was trying to put him into the interior of my bakery

#

hes still in town

torpid sparrow
#

thats not a location

#

thats a map

#

have u made a location yet

ornate drift
#

cant it just be Manny-Bakery-Interior?

torpid sparrow
#

thats not what i mean

#

you need to create a location and define it

#

you simply loaded a map there

#

the map doesnt exist as a location

void aspen
#

You can know you did that right if you can debug warp there

#

Without creating the location entry first, map will not be accessible nor for you or npcs

ornate drift
#

but like
i can debug warp there

#

it exists

torpid sparrow
#

show the patch

#

u didnt show the location just the map load

ornate drift
#

is it not this or

torpid sparrow
#

ok so ur location is _SpeedyShop

#

not the interior name

void aspen
#

So it's Speedy Shop

#

Not interior

#

Okay we are echoing

ornate drift
#

wait how do i know its _SpeedyShop?

torpid sparrow
#

right below ur entry

ornate drift
#

oh wait

#

im stupid

void aspen
#

Your entry

ornate drift
#

πŸ’”

torpid sparrow
#

ur first entry is {{ModId}}_SpeedyShop

void aspen
#

Nooo you're not

ornate drift
#

im SORRY

#

dapwihdwapofhan

#

my content is already done for the most part i simply forgot about it

#

the one big thing im terrified for is events

#

im guessing its picking a map, then animations, then dialogue

torpid sparrow
#

errr i mean the animations and dialogue are intertwined

#

like u could have dialogue, then animation, then dialogue again

ornate drift
#

oo

torpid sparrow
#

but the map you pick when u write the patch since you'll be targeting a specifica location

ornate drift
#

am i supposed to add modid as well

#

or just _SpeedyShop

torpid sparrow
#

oh yeah add modid

ornate drift
#

fuck

torpid sparrow
#

i just did that bc i didnt wanna type it out

#

and the modid doesnt change

#

xd

ornate drift
#

oki oki

#

the fuck? SMAPI had a fatal error and then fixed itself after i relaunched it

torpid sparrow
#

huh

ornate drift
#

hes STILL there

torpid sparrow
#

hmm

#

send whole json

void aspen
#

He just wanna sit on the cliff n chill a bit

tiny zealot
merry river
#

@brittle pasture I have a question regarding EMC. Is it possible to inherit the flavor of an input item if one of the input item is a flavored one already? (I want the name to be displayed like "Flavor of Input 1" + "Flavor of Input 2(not a flavored item per se)" + "Potion"
Because in my case, I always get the generic display name for the first input
Here's my attempt lol: https://smapi.io/json/none/4ec1946cf0b44fbcb2ecaedd10e5a63d

merry river
tiny zealot
#

i'll return to it one of these days! (too busy with modfest project atm)

buoyant moon
tiny zealot
#

unpublished framework that adds a bunch of event commands

#

(i haven't finished cooking it yet)

merry river
buoyant moon
#

oh, nice

tiny zealot
merry river
#

i published an update to my mod directly linking to the ecc download and people were in shambles over the fact it's not directly on nexus

torpid sparrow
#

Tell an actor to go to a specific tile without having to write up the path instructions yourself, or even know what tile they are standing on HALLELUJAH

merry river
tiny zealot
merry river
#

also the viewports <3

torpid sparrow
#

just fell to my knees

calm nebula
#

Explaining the difference between a rebase and a merge

merry river
calm nebula
#

I must sound crazy

merry river
#

i dont even know git and gos. all i know is how to click link

#

...i dont like how everyone stopped typing after that

tiny zealot
calm nebula
#

Rebase is like cherry picking every different commit off a different branch

lucid iron
#

rebase is a merge strat just like the regular kind except u pretend you were making the branch changes on main this whole time and do revisionist history accordingly

tiny zealot
#

interdasting

buoyant moon
#

oof, been ages since I've wrote a regex so I've gotten rusty

#

wonder how many other people have made parsers to extract i18n tokens because I'm joining that club

autumn tide
#

hey! anyone know where the grandpa bed image is? been looking for 10 mins and ik it'll be somewhere obvious but I just can't find it

#

not cursors

#

I checked

tiny zealot
brittle pasture
autumn tide
#

i've checked SDVpufferwaaah but I'kk try again

tiny zealot
#

Minigames/jojacorps

autumn tide
#

I'll*

autumn tide
tiny zealot
#

and why would you? it's called jojacorps! /lh

autumn tide
#

maybe grandpa worked at joja

buoyant moon
autumn tide
#

secret villan arc

tiny zealot
ornate drift
buoyant moon
#

yeah, will do once I figure out what's going on to write up a report

#

want to make sure it's not user error first SDVpuffersweats

torpid sparrow
ornate drift
#

oh uhhh no

#

i dont have schedules set yet

#

only spawnlocation

torpid sparrow
#

hmm

#

maybe u need to set appearance?

ornate drift
#

uhhh

#

how do i do that?

torpid sparrow
#

"Appearance": [
{
"Id": "Default",
"Portrait": "Portraits/{{ModId}}.Tilly",
"Sprite": "Characters/{{ModId}}.Tilly",
},

#

you don't have one

ornate drift
#

thats in content though

its already there

torpid sparrow
#

you loaded the portraits

#

oh wait hmm

#

yeah nvm

#

i have multiple appearances so i have that

ornate drift
#

grahhhhhhh

#

coding makes me melt

buoyant moon
#

...curse you, quickQuestion SDVpufferangery

ornate drift
#

maybe kailey can help

torpid sparrow
#

try createonload

#

add this to ur location

#

oh nvm

#

u have that

#

thinks

ornate drift
#

yeah

#

LMAO

#

i do

torpid sparrow
#

if u start a new save does anything change

ornate drift
#

@gaunt heath oh holy kailey please spawn infront of me and guide me through this torturous quest of spawning my npc in the interiors bed

#

(trust me the ritual will work)

ornate drift
torpid sparrow
#

start a new test save

ornate drift
#

im gonna have to go through the beginning cutscene again πŸ’”

#

unless i forgot i can skip

torpid sparrow
buoyant moon
#

I learned so many debug console commands in the past couple of weeks

#

but yeah there's a skip intro checkbox when creating a character that jumps right to the farmhouse, unless you mean a different cutscene

torpid sparrow
#

i think they have a cutscene to add their npc in

buoyant moon
#

ah, yeah, then that's its own thing

ornate drift
#

EW I HAVE TO WAIT TILL 9 AM TO GET IN

buoyant moon
#

world_settime 900

ornate drift
#

oh right

#

debug

buoyant moon
#

though that makes schedules and behavior wonky at times

ornate drift
#

ty

#

damnit i cant get in

#

he seems to be inside though

gaunt heath
#

Oh lawd idk how NPCs work

ornate drift
#

KAILEY

#

hiii

#

oh

gaunt heath
#

And I'm about to start an appointment like rn

#

Godspeed soldier

ornate drift
#

oki good luck :3333

#

take care

#

ty for showing up atleast

torpid sparrow
ornate drift
#

uhhh i need to see what tile exactly did he spaawn in
above or below the bed

torpid sparrow
#

also did u sleep a day after making changes?

ornate drift
#

but yes hes in the bakery

torpid sparrow
#

ok thats why

#

they dont magically teleport

ornate drift
#

deleting this disgusting new save

#

BLEGH

#

zoomed in camera is ass

torpid sparrow
#

always remember to sleep

ornate drift
#

NOOO HE SPAWNED ABOVE THE BED LMAO

torpid sparrow
#

change the tile

ornate drift
#

made it one lower

#

give it a sec

#

yay :3

#

seems about right

#

thats always the most common Home for any NPC, right?

torpid sparrow
#

wdym?

#

at their bed?

#

i dont know actually ive never seen gus in his bed

ornate drift
ornate drift
#

every NPC ive seen spawns in their bed

#

ANYWAY its time forrrrrrrr

#

AE_YellowSparkle schedules AE_YellowSparkle

#

either gonna be fun or nightmare

#

okay so, every NPC stays at their exact coords at 9 AM every day, right?

#

oh wait nvm its a diff activity

torpid sparrow
#

huh

#

schedules start at 6 am

ornate drift
#

right

#

when the day starts theyll be at the home coordinate

#

then afterwards you can specify where they go to and whatnot

#

oh uhhh

#

how do you apply schedules

torpid sparrow
#

u dont have any entries

#

need a patch

ornate drift
#

Changes?

torpid sparrow
#

changes is not a patch

#

you need to EditData

ornate drift
#

er

#

oh

#

in the schedules or content

torpid sparrow
#

schedules

#

oh wait u have a load error

#

hold on

torpid sparrow
ornate drift
#

it says it doesnt have anything in the changes field

torpid sparrow
#

did u just add it to content

ornate drift
#

i did an include in content and then added schedules to assets

torpid sparrow
#

ok yeah

#

u need changes and edit data

ornate drift
#

ignore the rest im trying to test atm

torpid sparrow
#

u need the changes part

ornate drift
torpid sparrow
#

uh no

#

hold on

#

let me explain

#
  1. u already loaded a blank for ur schedule json. good.
  2. u included your schedule json in ur content json. good.
  3. in ur schedule json, you need an EditData patch. Which requires the Changes formatting thing
ornate drift
#

editdata and target data/schedules?

buoyant moon
#

What I did for an example:

verbal glacier
#

Characters/schedules/{{ModId}}_SpeedyManny

torpid sparrow
ornate drift
#

oh ok got it

torpid sparrow
ornate drift
#

ok so basically this

merry river
ornate drift
#

i fucked up the json 😭

#

hold on lemme redo it

brittle pasture
brittle pasture
#

ah then the issue is that you need to use PreserveId: DROP_IN_PRESERVE

merry river
ornate drift
#

it worked
hooray

brittle pasture
ornate drift
#

oh yeah wth was this?

brittle pasture
#

your PreserveId is still DROP_IN

long jungle
#

When I use content patcher edit data, are all fields that were not included in the edit data unaffected?

Even if for example, they are contained inside another field?

"239": {

"Buffs": [

     { 
     "CustomAttributes": {
               "Attribute1": 250,
               "Attribute3": 570 
                                              },
     },
],
},


In this example, I skipped "Attribute2" in the edit data, does that mean that it will not be changed at all and retain it's original value even if I changed some parts of the "Buffs" field?

brittle pasture
#

to recap: use DROP_IN/DROP_IN_ID_1 if you want to copy the item's ID into the flavor field
use DROP_IN_PRESERVE/DROP_IN_PRESERVE_1 if you want to copy the item's flavor into the flavor field

long jungle
brittle pasture
#

ie. keep track whether you are acting on Tuna the item or Tuna the flavor of Smoked Tuna

merry river
#

It's using the second item's ID now but doesn't copy the flavor of the main input item

brittle pasture
#

did you swap around Preserve values to the correct ones as I suggested

#

it looks like you still did not change the main PreserveId field

ornate drift
#

how do i know if an NPC has already occupied a specific XY coord so that my schedule is doesnt overlap with them

merry river
#

huh! I thought I did. must have hit ctrl z one too many times

ornate locust
long jungle
merry river
brittle pasture
ornate drift
#

oh im gonna need to add a sleeping animation

long jungle
#

Thanks!

merry river
#

will add a selph shroom in your honor or something

ornate drift
#

shit

silver herald
#

Hello everyone.

#

I'm an absolute, complete beginner. I'm looking to create a simple mod, and I just completed the 'Getting Started' tutorial on the Stardew Wiki.

#

No idea if this is the right place to ask, but I'm wondering if someone could push me in the right direction to move towards.

ornate drift
#

what mod are you looking for exactly

silver herald
#

The change I want to implement is very simple:

#

You know the 'Review Screen' at the end of the day that summerizes the items placed in the shipping bin and the money you've earned?

#

I want this to appear EVERY day, and not be automatically skipped when the shipping bin is empty.

#

That's it.

urban patrol
#

have you decompiled the game?

silver herald
#

I haven't. I assume that's done using the 'ILSpy' mentioned in the Getting Started tutorial on the Wiki?

urban patrol
#

!decompile

ocean sailBOT
silver herald
#

Where would I type in '!decompile'?

brittle pasture
#

nic already did; you just follow the link above

#

but yes ilspy

silver herald
#

Ah, okay.

brittle pasture
#

you'd need to patch the game's end of night handling to change the part of the code that says "if item shipped > 0 show item shipped menu"

silver herald
#

And I could do that directly once the game is decompiled?

brittle pasture
#

!harmony you'd use this

ocean sailBOT
#

Harmony is a framework for patching .NET code, allowing you to take any portion of the game's logic and insert or substitute your own. This gives you more flexibility and control than SMAPI helpers and events, at the cost of being typically more complex and difficult to use safely and correctly, and more likely to break with a future update of the game and/or SMAPI.

If you are trying to do something that isn't possible or practical with SMAPI alone, then Harmony is usually the solution.

For more information, refer to the following:

silver herald
#

Find the IF statement, remove it, and recompile?

brittle pasture
#

no recompiling involved

urban patrol
#

decompiling is just so we can read the game code to know what to do

brittle pasture
#

Game1.showEndOfNightStuff is where the relevant logic happens

#

now I think this can also be done without Harmony and just inserting the menu in the DayEnding event, maybe

#

not sure about the order of the sequence though, I guess that can be an exercise left to the reader

#

definitely set up a working C# mod first via the tutorial and then you can continue from there

silver herald
#

I did complete the mod in the Wiki tutorial. Basically just logs the player's keystrokes in the command window.

calm nebula
#

That menu might be special

#

Some menus (that might be one of them) kick off tasks

#

Like the save task, etc

brittle pasture
#

so there's a queue of menus on day end and the shipping menu seems to be separate from the save menu

ornate drift
#

um

my NPC got stuck when he re-entered the bakery

#

like from the entrance

#

he was out of bounds

brittle pasture
#

inserting the shipping menu might work, but one issue I see is that DayEnding runs before the game's day ending handler which collects all the items to be shipped

ornate drift
#

oh nvm the xy coord is wrong

brittle pasture
#

honestly the most worry free solution is probably straight up transpile the part that says "if item > 0 show shipping menu"

silver herald
#

Transpile?

brittle pasture
#

which is ironically the most technically difficult one

silver herald
#

Alright....so start by decompiling the game, download and read up a bit on this Harmony thing, and then learn how to use Transpilers?

brittle pasture
#

yeah
it does suck that your simple mod idea is actually very difficult to implement in practice

calm nebula
#

The game is Like That tbh

#

Something something xkcd bird identification

ornate drift
#

er

how do i add a sleep sprite

verbal glacier
#

Data/animationDescriptions

ornate drift
#

am i supposed to add that to a json

#

or

verbal glacier
#

Yes

urban patrol
#

are you looking at the schedules page? i think that’s where animation information is

ornate drift
#

there is yes

#

all lowercase

urban patrol
#

then yeah follow the wiki

ornate drift
#

so {{ModI}}_speedymanny_sleep

#

but like how does it know where my sleep sprite is on the spritesheet

urban patrol
#

you tell it

#

that’s what an animation definition is

latent mauve
#

Part of the animation description is which sprite indexes/frames are used.

ornate drift
#

there's specific numbers for each frame?

verbal glacier
#

this sets the sleep frame to 50

#

the beginning is the intro part of your animation, the middle is the part which loops and the end is the exit

latent mauve
#

So, depending on the size of your character (as defined in Data/Characters), each part of your sprite sheet has a different sprite index, starting with 0. It works exactly the same way with every other asset spritesheet in the game. πŸ™‚

ornate drift
verbal glacier
#

you can add it into schedules and then include it into content

ornate drift
#

oh alr

verbal glacier
#

or just add it to content

ornate drift
#

yeah adding it to content
no reason to add it to schedules since schedules will just load it up once i do the sleep command

#

i think?

urban patrol
#

you decide where you put patches for your own internal organization. Include just means β€œcopy paste all patches from this file here into content.json”

#

you aren’t loading any patches

ornate drift
#

i see

#

ty

latent mauve
#

For the sprite index info ^

verbal glacier
#

you can also have a seperate .json just for animationDescriptions

#

just include it in content.json

ornate drift
#

are animation descriptions also used for events?

calm nebula
#

No

#

Schedules only

ornate drift
#

interesting

latent mauve
#

Events use different methods to pull specific frames

barren tapir
#

Is it a faux pas to repeatedly make mods that add only 1 machine? Currently I have the following mods, each of which only adds one machine:

  • Floral Tea Brewer (makes floral tea from flowers)
  • Seed Sifter (turns mixed seeds to seasonal seeds)

However, I have ideas for various other miscellaneous machines that I want to work on (a new furnace, a sapling aging machine, and bug lamp just to name a few), and they don't really feel like they'd make sense to be in one mod.

My Expanded Slime Ranching and Alchemy mod adds multiple machines, but they all feed into one another and/or work to bring the additional depth I was hoping to provide to slime ranching.

lucid iron
#

You can release a mod that changes a single pixel in a texture if you want

#

That shouldn't stop anyone

urban patrol
#

not that i’m accusing you of this at all, but sometimes users who upload a bunch of small mods (for example, each mod adds one fruit) could be accused of DP farming, if it seems like those low effort mods are simply aimed at getting the maximum number of downloads. however chu is right there’s no β€œgood enough” for a mod

lucid iron
#

Wow this bass aint broken tragic

#

Junimos pls fix

urban patrol
#

donation points on nexus

#

a very tiny currency

fierce vault
#

i thought i read somewhere that you only get DPs based on each unique download for your entire catalogue of mods... is that true?

urban patrol
#

it’s a secret since they changed it

fierce vault
#

Oh?

urban patrol
#

but yeah i believe they did weight repeat visitors lower

ornate locust
#

They try to keep people from gaming the system, because people gaming the system leads to that guy who posted like 200 mods that were all niche Skyrim shouts that made a NPC do a specific animation

fierce vault
#

Ok, well weighting them lower sounds more fair than removing them all!

urban patrol
#

yeah that’s the DP farming i was talking about

ornate locust
#

Well, a repeat download is possibly just people downloading an update

urban patrol
ornate locust
#

Or just playing a second time. Basically you could game THAT system by doing a ton of useless updates that just cause people to redownload

urban patrol
#

yeah i think UDLs are more β€œvaluable” but the same user uniquely downloading 200 mods from the same author is less valuable afaik

ornate locust
#

or just having your friends download the mod a lot of times

fierce vault
#

Oh, I thought you meant repeat downloads, as in a person gets people interested in their other mod

fierce vault
#

at all

ornate locust
#

it isn't

fierce vault
#

oh ok

ornate locust
#

I just misunderstood what was meant by "repeat visitors", that sounded like it meant for the same mod

urban patrol
#

i could have been clearer sorry

barren tapir
#

Nah, my thing is just that it doesn't make sense to me to group together those unrelated mods. For example, the furnace mod I mentioned will add a new furnace that uses solar essence as fuel instead of coal. I'm currently debating whether to add other versions of machines that do this (which, if I do end up doing, I'll add to this mod). To me it makes sense to group those machines together sense they'd all work towards my goal of the mod ("Add more uses for solar essence").

However, it doesn't make sense to me add mods with different mission statements to said furnace mod (I tend to set out with set goals for my mods, usually revolving around adding uses for unused items).

ornate locust
#

No, that makes sense. That's fine

#

The rules are to discourage stuff like, as mentioned, the guy clearly spamming mods

silver herald
#

bool flag = false;
if (Game1.player.displayedShippedItems.Count > 0)
{
Game1.endOfNightMenus.Push(new ShippingMenu(Game1.player.displayedShippedItems));
Game1.player.displayedShippedItems.Clear();
flag = true;
}

#

Alright. So I can identify the decompiled code that I want to "fix".

#

But how does this help create a mod?

#

It's not like I can just make the change I want, recompile, and then play the game, right?

brittle pasture
#

your mod uses Harmony to patch that code into something else

lucid iron
#

What is the context here

brittle pasture
#

they want to make the shipping menu always show even with 0 items shipped

silver herald
#

As a complete beginner to modding.

brittle pasture
lucid iron
#

Ah so you need to target the if (count > 0) bit

silver herald
#

Exactly.

lucid iron
#

And use a transpiler to turn that into unconditional jump

silver herald
#

If that's the easiest way to accomplish this, yes.

lucid iron
#

(Idk what the IL looks like around here, might be unconditional no jump)

silver herald
#

around here?

lucid iron
uncut viper
#

i would also double check that the shipping menu constructor doesn't explode in some way if given an empty enumerable

lucid iron
#

It's unfortunate that you picked a terrible thing buried deep in the new day method as your first mod monS

lucid iron
#

!startmodding

ocean sailBOT
#

Making mods can be broadly divided into two categories:

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

lucid iron
#

Follow the normal C# modding guide for how to setup a project

lucid iron
#

Maybe need to patch more things around ShippingMenu

barren tapir
#

I'm still waiting to attempt harmony patching for my slime mod, considering the fact that I only just got the (rather simple) C aspect of it working. I did have the recent realization that Happy Home Decorator may have what I need though (i.e., logic for what to do when using fairy dust on an object).

I'm not in any rush though. I view that mod as a long term project that I can gradually build on as my skill progresses. I already know for a fact that there are going to be way more difficult things I'll need to do in C (e.g., slime balls that change color and item drops based on the slimes in the slime hutch, logic for handling big slimes, and probably the logic for quality boosting towers in the hutch, just to name a few).

lucid iron
#

Ig another approach could be to "ship" some kinda dummy item and ignore it in a patch in ShippingMenu

#

I don't know which one is better

gaunt orbit
cyan jungle
#

hi guys does anyone have any knowledge on how to make custom schedules/warps/paths? i'm honestly not really sure how to ask since i am making a custom npc but am having trouble with schedule

half tangle
fierce vault
#

oh, I did not know that npcs could also use regular warps. Interesting

buoyant moon
#

I haven't looked into map stuff at all but I thought that would be how they enter/exit buildings

cyan jungle
half tangle
#

Hopefully someone with actual NPC creation experience can offer more specific advice, but I would double check that your custom map doesn't have any stray warps that they may be trying to path to instead

cyan jungle
#

i checked that too and there are none ;-; thanks anyway

half tangle
#

!json if you share your code using this, someone should be able to take a quicker look

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.

urban patrol
#

i suspect what cam said

cyan jungle
#

you mean the code of my map? in tiled?

urban patrol
#

the .tmx file, i can open it in tiled and view the map properties

#

or you could just screenshot those

cyan jungle
urban patrol
#

hmm okay you do only have the one warp in there

#

do you add any warps via EditMap patches?

cyan jungle
#

yes the other warp is on the forest map

urban patrol
#

i mean to this map specifically

cyan jungle
#

in the forest map, there is a edit data thing where if you touch the door from the outside it leads to the inside. it works perfectly fine for my character but my npc doesnt even recognize the warp that leads to the outside of the house

#

there is some kind of issue with pathfinding where the npc doesnt recognize the warp unless i specifically tell them to step on the tile that warps in the schedule. after that, they dont know what else to do. otherwise, they walk through walls without finding the path to the exit of the house

urban patrol
#

are they able to exit their room? i think your Doors might be malformed

#
Stardew Modding Wiki

Last edited by KaileyStardew on 2026-03-18 02:05:56
This is a mildly advanced guide for modders that assumes familiarity with Tiled, Content Patcher, and map modding fundamentals such as the difference between Map Properties and Tile Properties.
Interior doors, such as the one in Figure 1, are interactive map elements with hardcoded behaviour (...

cyan jungle
#

yes if you look in the tmx, they spawn on tile 6,6 which is right around the center

urban patrol
#

oh i mixed up the bedroom and the kitchen

#

okay so unrelated issue then

cyan jungle
#

i havent tried looking at interior doors yet, i wanted them to leave the house first

#

just to try and get a schedule, then focus on doors and details

urban patrol
#

can you send their schedule?

cyan jungle
#

yes it's kinda messy tho

urban patrol
#

and can you also patch export Maps/Forest and send that

#

i'll brb i have to put laundry in

cyan jungle
#

yes

urban patrol
#

what on earth is with tilesheetinator thinking your tilesheets are prefixed with Maps_...

#

that's probably not your problem but i'm having to manually find all these tilesheets now

#

so bear with me

cyan jungle
#

oh im so sorry ;-; i dont know what happened there

urban patrol
#

would you mind screenshotting your map patch so i can compare it to the raw data i have? it's faster than me asking for your custom tilesheets and manually finding the vanilla ones

verbal glacier
# cyan jungle

Post 900 and 1200 in your schedule you use , instead of / which may be causing the schedule to break.

cyan jungle
urban patrol
#

yep thank you!

#

i wanted to see if their way was blocked by another warp

cyan jungle
#

i do have a patch with only the house and its surrounding area

urban patrol
cyan jungle
urban patrol
#

yeah if you just change it to 0610 or remove it entirely you can test to see if it works

cyan jungle
#

i will test that right now one second

#

should i write each step as a singular line instead of using / ?

urban patrol
#

no, you must follow the format as explained on the wiki

#

each entry must be formatted like
"Mon": "0610 Location x y z/0900 Location x y z/1700 Location x y z",

#

with x y z being coordinates and facing direction

cyan jungle
#

alrght! i changed the 600 to 0610 i will test it right now

#

so unfortunately it's still the same. it's like at 9 am the npc tries to look for a way to go to forest like my schedule says and ends up walking through the wall because it cant find a pathway or something

#

there are no smapi errors because the code is technically correct

urban patrol
#

did you start a new save or sleep?

cyan jungle
#

no i just loaded the game and went to look

urban patrol
#

you need to do one of those. schedules are calculated at the end of the day

cyan jungle
#

okay i will do that

#

i slept and its still the same ;-;

urban patrol
#

what does your schedule look like now?

cyan jungle
#

i removed the 0610 altogether because i remembered i had set a spawn point in the npc data json

urban patrol
#

what is your character's internal name?

cyan jungle
#

Eugene

urban patrol
#

also just for future reference, you should use smapi.io/json to upload jsons

cyan jungle
#

ignore the log it was actually a brain fart lol

#

is that a command?

urban patrol
#

!json here's the site

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.

cyan jungle
urban patrol
# cyan jungle Eugene

this is not related to your issue you're having, but you should prefix your character's internal name with {{ModId}}_ to prevent conflicts with any other eugenes out there

urban patrol
cyan jungle
#

oh okay!

#

what should i do now then?

urban patrol
#

just for future reference, that's how you should share jsons

cyan jungle
#

alright

urban patrol
#

so right now, he stays in place until 0900, then walks through walls?

cyan jungle
#

yes exactly

urban patrol
#

idk where he would be trying to go, it looks like you only have the one warp in your map

#

can you patch export your custom map, just to make sure?

cyan jungle
#

yes let me see

urban patrol
#

and while we're at it, just to get the full picture, can you share your patch to Data/Locations you did

cyan jungle
urban patrol
#

AHA you DO have more warps in there

#

8 20 Forest 70 67 7 20 Forest 69 67 7 10 Forest 46 46

#

he's trying to go to one of these

cyan jungle
#

that's so weird :0

#

where did you find that?

urban patrol
#

i opened the map and went to map properties

#

Map>Map Properties>Warps

#

you must have a patch(es) that add warps to your custom map

cyan jungle
#

that is so strange i don't remember making any patches

#

should i copy the warp from my original map and paste into the patch export?

urban patrol
#

well it's either you or some other mod doing it haha

#

no, patch export simply grabs the asset as exists in the game

#

after all patches have been applied

cyan jungle
#

oh man ;_; idk where to even find that then

#

like idk where id find what is making the extra warp

urban patrol
#

well you can run a patch summary asset on your map but like... do you not know what patches you added? /gen

cyan jungle
#

thing is the only patches i have added is the 7 10 forest 46 46 warp. im not sure where the rest could be coming from. myabe another mod? i dont remember there being a mod that could do that but i also have like a whole bunch of mods so idk haha

#

how could i run the summary?

urban patrol
#

it's okay if not i just want to be clear what's happening

urban patrol
cyan jungle
#

it's a mod i downloaded and wanted to edit for fun. not to upload or anything! i just wanted to make an npc. i did thoroughly look at all the code tho maybe i missed the patch?

young pendant
#

do we have any public Pterodactyl eggs for Stardew Valley server setup ?

urban patrol
young pendant
#

you see, i have a 256GB RAM Pterodactyl server tower rack and need to put it to good use

urban patrol
#

the patch summary asset will list each mod that edits it

cyan jungle
#

ah found it!! but it's so weird because the condition for those warps is having sve which i dont have

#

here is the json

urban patrol
brittle pasture
urban patrol
#

whyyyyy did this mod load vanilla tilesheets

hard fern
#

magic

ornate locust
#

Are they loading copies of them or like... the actual files

young pendant
cyan jungle
hard fern
ornate locust
#

because the answer to the first one is maybe "old mod didn't have the tools to use vanilla tilesheets"

urban patrol
#
  "LogName": "Eugene's House Warps",
  "Action": "EditMap",
  "Target": "Maps/Custom_NPCEugene_House",
  "AddWarps": [
    "7 20 Forest 69 67",
    "8 20 Forest 70 67"
  ],
  "When": {
    "HasMod |contains=FlashShifter.StardewValleyExpandedCP": "false"
  }
},```
urban patrol
ornate locust
#

Oh that's weird

urban patrol
#

those are in the Maps folder

ornate locust
#

that's confusing

urban patrol
#

yeah lol

ornate locust
#

Bafflement shared

cyan jungle
#

oh i see thats what false means then. if i remove that whole chunk will it break anything since i already have a warp?

urban patrol
#

i'm actually not sure when map edits apply. i thiiiiink it may be on asset requested?

#

i asked button a while ago but forgot the answer

hard fern
#

anyone know why if i have question null #<my fake question> it only shows the first word...

urban patrol
#

question null needs quotation marks

hard fern
#

ah

#

questionss hurt me

urban patrol
#

lol i only know because i use them so frequently

urban patrol
old edge
#

Hello I am having trouble with enhancing my custom location. I am trying to make the map a decoratable location

#

I added the type into data locations but I’m not sure what else I have to do

#

Is it a tile property?

cyan jungle
urban patrol
ocean sailBOT
#

You can use the Tilesheetinator tiled extension to create Stardew Valley maps that work in-game without having to copy vanilla and modded tilesheets back-and-forth, rename files with a . in front of their name, edit maps only in the unpacked content folder or make symlink workarounds.

See the mod page for full installation and use instructions.

cyan jungle
#

oh my goodness illl have to do that after i debug this schedule!! seems so practical

urban patrol
#

it's the best improvement to modding i've ever seen hands down

cyan jungle
#

OMG THE NPC ACTUALLY FOLLOWED THE SCHEDULE

#

AHHH

#

also sorry about that i ran into a bug trying to fix another bug and so on

#

πŸ₯²

#

@urban patrol thank you so much for your help!

urban patrol
#

yay!

barren tapir
#

Sprites for my next mod!

ornate drift
#

need ideas.... πŸ€”

fierce vault
#

I think I like coding events in more than writing the first draft.

#

I think actually testing in game really helps to improve what might be an initially wooden script

olive lotus
#

Is it possible to wedge a CP "when" condition into a line of dialogue?

I basically want to have one line show up if the farmer is married (at all, to anyone) and another if they aren't, and the only thing that seems to do that is "When": "HasValue:{{spouse}}"

#

I know the vanilla game has a lot of dialogue lines which still trigger when they're no longer applicable, but I don't wanna...

autumn tide
#

could you clarify more about how you wanna use it? GSQs might work for one particular dialog line

urban patrol
#

you can use query

olive lotus
#

Exactly like a game state query (I used GSQs on other lines... except I would have sworn I saw no option for PLAYER_NPC_RELATIONSHIP that allowed for anything but a specific name. And now there's an "any" option sitting right there in plain sight.

This is what I get for trying to write info into this content patch for 4 days straight...

urban patrol
#

[[Modding:Dialogue]]

orchid glade
#

Is there a way to determine whether a target exists, and use that as a condition in CP? Similar to HasFile or HasMod?

calm nebula
#

I dont think so, why do you need that

orchid glade
#

Well, if I want to target a seasonal variant when someone is using seasonal cute, but if they don't have that NPC turned on on the mod, then the assets I'm editing won't exist

lucid iron
#

That's fine ur edits will just be inert too

gaunt orbit
#

The asset will exist, that mod just won't be editing it

#

I think

orchid glade
uncut viper
#

If nothing tries to Load it, then nothing will attempt to Edit it

royal stump
#

CP edits kind of inherently account for assets not existing
they're a set of edits to apply if and when those assets are loaded

gaunt orbit
#

Chu is correct if it is loading new assets

uncut viper
#

You could do an EditData to Characters/dfkjtghdfkg/365983476 and it'd be fine

orchid glade
uncut viper
#

(Same for EditImage, or EditMap)

gaunt orbit
#

Then yes it will haggle that for you

#

*handle

uncut viper
#

I wish CP could haggle for me

patent lanceBOT
gaunt orbit
#

The content pipeline works the reverse of the way that you're thinking it does. CP does not "push" things to the game, the game "pulls" things from it

#

(and any other c# mod)

orchid glade
#

So that's why it's sad when the FromFile is missing I guess

calm nebula
uncut viper
#

Another nexusmods page

gaunt orbit
#

Basically what it looks like is this

  • game needs something, asks smapi for it
  • smapi asks c# mods including cp if anyone can provide it
  • if you have cp a load patch, it will say "yes I have it"
  • cp will then read the local file and give it to smapi
  • smapi will repeat this with edits
  • smapi will then give the fully modified asset to the game
torpid sparrow
#

what is the correct format for the content json rn

#

and also is it supposed to be the version number of content patcher

uncut viper
#

Yes it is, unless you want to support Android, in which case it's 2.8.0

torpid sparrow
#

thanks!

uncut viper
#

(Technically the version number of CP without the last number because CP ignores that one)

torpid sparrow
#

oh fuck i forgot the beach version of nyapu portraits

#

guh

#

cant update yet

#

what is the easiest way to config appearance?

hard fern
#

With a condition on the appearance?

torpid sparrow
#

i know there's conditions on appearances but how do i do it with a config token

hard fern
#

πŸ€”

ornate locust
#

configs are content patcher tokens

#

if it resolves to true you can put it in a condition

#

or false

torpid sparrow
#

what does it look like written out