#making-mods-general

1 messages Ā· Page 248 of 1

shut mountain
#

I meant that's the only thing I haven't done

reef kiln
#

So adding more heath is another c# mod, I don't know how to make. 😢

shut mountain
#

Yeah, sorry

hallow igloo
#

does anyone here know if it's possible to use the RSV minecarts before you've unlocked the boilerroom?

shut mountain
#

You mean use, right? 🤣

hallow igloo
#

I feared that would be the response lmao

hallow igloo
#

okay....

#

hmmmmmmmmmmmm

#

I wanna have some opinions then.

for my minecart mod you have to find a cart before being able to use them. If you find one before you've unlocked minecarts you get a message saying you've added it to your list of mysterious minecarts, if you have unlocked them it says you've added it to your known destinations.

for RSV I wanted to do a 2nd type of message, where if you find them asfter unlocking minecarts but before unlocking the RSV carts, it says something like "you've added the cart to your list, but there seems to be something else wrong before you can use them"

#

should I keep it at that, or also add a message to the vanilla carts for when you've unlocked the RSV ones but not the boilerroom?

hallow igloo
#

so keep the same one for the vanilla ones ,regardless of if they're still mysterious?

shut mountain
#

The second message for the rsv minecarts

#

I'm sorry, brain is not braining ;-;

vernal crest
#

I think you should add a different message for the vanilla ones if the player has unlocked the RSV ones.

hallow igloo
#

yeah I kinda think so too, but it's so much work :')

#

and so few people will see it probably

shut mountain
vernal crest
#

Well, I don't think it's going to feel weirdly unfinished or anything if you don't do it. You just might have a few more confused people in your mod page comments than otherwise xD

hallow igloo
#

yeah fair hahaha

vernal crest
#

You're doing this via CP, right? Not C#?

hallow igloo
#

but my perfectionism tho

#

yeah

#

oh actually I might be able to set it up differently which would make it not that difficult and also add the ability to add more for other mods if necessary

vernal crest
#

I obviously don't know exactly how you have set the messages up, but I wonder if you could just use dynamic tokens to control what the message says. Then you could just have the value of the token change depending on what has happened with the carts. Providing there were CP tokens that do what you need...

reef kiln
#

Are you doing the ES minecarts too? They are a separate network too. Though those I don't remember if you need the CC or not

hallow igloo
#

@reef kiln are you attached to your current frog? I have an old profile picture I no longer use that is very cute imo with a few frogs

#

already did ES, but they follow boiler room unlock

hallow igloo
#

which are a fucking mess to reference in i18n wow

#

I'll send the line in a bit just because I enjoy how it looks haha

vernal crest
#

I imagine you are using them differently to how I am thinking then because the way I am thinking (if it worked) would not be "so much work" to change the vanilla message, it would be a very small change. But I haven't actually thought about what exactly would need to be checked so it's quite probably not feasible. How are you checking whether RSV's have been fixed? Mail flag?

hallow igloo
#

@reef kiln

vernal crest
#

(I assume they set a mail flag for it)

hallow igloo
#

mail flag yeah

#
"Action": "MessageOnce Polydot.PolyCarts.Unlock_Event.FarmCave {{i18n: {{F/U}}_L1}}^{{i18n: {{F/U}}_L2}}^{{i18n: {{F/U}}_L3}}^{{i18n: {{F/U}}_L4 |Unlocked_Location={{Farm Cave Name}}}}"```
reef kiln
reef kiln
hallow igloo
#

that's the dynamic token for Find/Unlock hahaha

vernal crest
#

Is that the gender switch character?

hallow igloo
#

which one? and no

gentle rose
#

the ^, I think it is

vernal crest
#

Chevron and yes it is but presumably not in this context. What is it doing though?

gentle rose
#

what are you trying to achieve using those ^s?

hallow igloo
#

in the MessageOnce it's a newline

gentle rose
#

technically generally you shouldn’t be doing things like referencing dynamic tokens (which are logic) in your i18n (which should just be content)

hallow igloo
#

chevrons are mostly not a text character

gentle rose
#

but like it doesn’t matter TOO much

hallow igloo
#

while this works

#

and is documented!

#

(very poorly though)

gentle rose
#

can’t you just split the i18n? though that may cause an issue with other languages’ grammar SDVpufferthinkblob

hallow igloo
#

it's suprisingly hasn't yet, even in chinese

vernal crest
gentle rose
hard fern
#

Chwvron is like

hallow igloo
#

but yeah it could, except that I don't want to

gentle rose
#

anyway if it works it works SBVLmaoDog

hallow igloo
#

also I think I tried that initially and there were issues,but I don't remember as it's been a looong time

hard fern
#

A bunch of pointy things

reef kiln
hard fern
#

Cgevron has a chevron in their logo

vernal crest
#

Why do you have four different i18n lines in there?

hallow igloo
#

I couldn't get newlines to work in the actual i18n content so this worked

#

and it wouldn't make much sense to have the same line 4 times

gentle rose
#

you couldn’t make the exact same thing work in i18n? that’s strange SDVpufferthinkblob

hallow igloo
#

I agree

#

but I tried and got help from a bunch of people and it didn't work

gentle rose
#

afaik ^ as newlines aren’t a content patcher so it’s not that load a blank json thing

vernal crest
#

Are you just very verbose in telling players "you have added this cart to your list" to need four lines? (Not intended as a criticism, just unsure what you're actually saying in 4 lines xD)

hallow igloo
#

You found a broken Minecart.
After tinkering a bit, it looks like you fixed it, but it doesn't seem to do anything...
Maybe you can find out what the problem is and come back to it later?
You've added '{{Unlocked_Location}}' to your Mysterious Minecarts list!

#

You found a new Minecart!
After trying to get it to work for a bit it springs to life.
It should be fully functional tomorrow!
You've added '{{Unlocked_Location}}' to your known destinations.

#

a bit of flavour

vernal crest
#

Ah okay, nice ^_^

#

So the {{F/U}} token is what determines whether players get the "it's not unlocked" vs the "you can use it" lines?

hallow igloo
#

yep

#

and it WAS binary before

#

either find, or if boilerroom, unlock

vernal crest
#

So wouldn't adding the vanilla "ope RSV didn't unlock these!" lines be pretty easy?

hallow igloo
#

but I'm gonna just add a bunch of them with different when conditions

vernal crest
#

What, why D:

hallow igloo
#

lmao just use those words xD

vernal crest
#

Just keep using the dynamic token?

hallow igloo
#

yeah

#

but more dynamic?

vernal crest
#

Oh wait you mean a bunch of new values to the token

hallow igloo
#

yes

#

hahahha

vernal crest
#

Nvm I thought you meant a bunch of copies of the MessageOnce Action whoops

hallow igloo
#

thanks for the worry, that was valid

reef kiln
#

On a completely separate off topic note, youtube has decided I want an very scary, AI powered robot dog that looks and acts like a real dog. I have ad for it every other ad. But it creeps me out how real it is. Please stop youtube.

hallow igloo
#

get an adblocker

vernal crest
#

Ok my wife keeps saying "bed soon?" "maybe bed now" "what about now?". So I think it is time for bed.

hallow igloo
#

sleep well!

reef kiln
#

I have thought about it, but I am afraid to anger "the Google". They probably know more about me then I do. 🤣 šŸ˜‡

hallow igloo
#

but that's why you should fight back

#

get firefox or another non-chromium

#

and get adnauseum

#

fixed

tawny ore
#

You should try out Floorp because it's a fun name that starts with an F like @reef kiln.

gray bear
#

Floorp is also fun to say

reef kiln
#

But what if Google decides to us my info for evil. I have a theory, that the reason no politicians challenge Google is because Google secretly lets them know "we have you entire internet history" do you really want to cross us?

hallow igloo
#

not in a mean way but you don't matter to google whatsoever, they don't care

tawny ore
#

Just leak out all of your evil yourself, and then they'll have nothing on you

reef kiln
#

I know 🤣 i am happily insignificant. But that also means they could care less about crushing me. šŸ˜‡ 🤣

gentle rose
#

as with everything else

tawny ore
#

I've spent that last few years de-googleifying myself. It's very liberating.

reef kiln
#

There really is not anything I can think of in truth. But for a company that should know everything about me. There ads sure have been off mark the last few months.

gentle rose
#

I never cared enough to de-googleify myself because I know enough of my data is already out there, but I do care about increasing the regulation on companies like google

tawny ore
#

Anyway privacy nowadays is mostly an illusion, unless you go completely off the grid.

#

Your smart devices collect data on you. Discord collects data on you. They all do.

gentle rose
#

(and if you don’t believe us, look up Facebook’s Shadow Accounts)

#

(you literally cannot opt out of data collection at this point)

umbral robin
#

Heya, I don't understand this. how do you know how to search the letter id in this?

"Clint.Mines.1": "$1 <letter ID>#Did you know a rumor that there's a key in the mines? #$e# Have you confirm it?",

latent mauve
#

Is that from a mod or vanilla?

#

(you don't typically see $1 at the start of dialogue because portraits go at the end of the dialogue line, not the beginning, so that whole format seems wrong to me)

umbral robin
# latent mauve (you don't typically see $1 at the start of dialogue because portraits go at the...

It's from the dialogue commands.
Creates a line of dialogue which the character will only see once (at most). <1st-time text> is shown only if <letter ID> has not been marked as sent yet (and this marks it as sent); otherwise, <nth-time text> is shown. <letter ID> should not correspond to an actual piece of mail (because it will not be sent), but it can be referenced by events or other dialogue lines.

brittle ledge
#

That's not the portrait cue, it's the first-time thing.

#

I'm not sure what you mean by searching the letter ID though, what are you looking for?

latent mauve
#

Oh, the only reference I found in the wiki to letter ID looks like a passout mail thing

umbral robin
#

Yes, but it would be problematic if I need to send letters to create many of dialogue of this types. Is there a loophole to this?

brittle ledge
#

You don't have to create an actual letter (in fact, it will not send an actual letter).

#

It's just creating a flag so it knows it's done the first time dialogue already. So what I would do is just make up an ID like mymodID.specificsituationcue

umbral robin
#

So, If I create it like this

"Clint.Mines.1": "$1 AleAle.ThisIsTheFirstMessage#Did you know a rumor that there's a key in the mines? #$e# Have you confirm it?",
Would it work?

brittle ledge
#

Yes, Clint would say the first cue whenever that key came up, then the next time it was valid, he'd say the second part.

umbral robin
#

So, it's automatically tagged within the save?

brittle ledge
#

Yep

umbral robin
#

Thank you so much, I'll go try to implement this now.

latent mauve
#

Minor grammar nitpick, "Have you confirm it" should probably be "Have you confirmed it" (figured I would mention in case it's a language thing)

#

Also I learned something new today about first time dialogue, so thanks!

umbral robin
obsidian barn
#

Hi, guys, I'm new here. I was reading the how to get started, it says I need to install Visual Studio, but could I use Visual Studio Code instead? or is it too different?

flat sluice
ornate locust
#

Some of it you can do in basic notepad if you really wanted

#

wouldn't RECOMMEND that, but

flat sluice
#

If your mod would use Content Patcher (.json files), I'd recommend Visual Studio Code.
If your mod would be in C# (.cs, etc files), then Visual Studio Community.

flat sluice
ornate locust
#

Definitely would not recommend LOL at least something that'll give you some indication that you've closed your dang {}

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.

flat sluice
#

I'd recommend at least one of those 3 programs. (using VS Code)

ornate locust
#

we all drop a bracket every now and then, it's really helpful to use something that'll point it out

flat sluice
obsidian barn
#

for some reason, I don't like working on VS too much, I rather VS Code.

hallow igloo
flat sluice
obsidian barn
#

btw, I see that mods compiles into dll to run in Mods. If I would like to see how a mod is coded, it wouldn't be easy, right?

flat sluice
hallow igloo
hallow igloo
flat sluice
lucid iron
#

Yeah the manifest one has regex that doesn't work in vsc for some reason

hallow igloo
#

funny

flat sluice
#

And for the ones that aren't, DotPeek will help.

lucid iron
#

There's a big mod dump repo that has all the open source mods

#

See pins

flat sluice
flat sluice
lucid iron
#

I don't recommend learning to code from a decompiled mod though

#

You gotta deal with decompile artifacts too

#

Learning from game is also a little jank for same reason

brittle pasture
#

switch case mangling my beloathed

lucid iron
#

If you have some feature in mind you can ask here

hallow igloo
#

using that

obsidian barn
#

quick question, is there a debug mode where I can see variables' value in-game?

flat sluice
flat sluice
brittle pasture
#

lookup anything's data mining fields allows you to see values of fields of the things you lookup

but otherwise your best bet is breakpoints in VS (not that I know how to set that up #justlinuxthings)

obsidian barn
#

I see... I will take a looking into that. Thx!

lucid iron
#

Selph can't u break point in vim too

brittle pasture
#

if I could that's news to me

lucid iron
#

Ah hm, i guess you don't have a debugger to attach do u LilyDerp

#

Cus it is not like u r use gdb

honest inlet
#

Hi! I need a bit of help. I'm trying to make a mod and there is a custom location that i'm inserting into the vanilla map (in cindersap forest) and the game is not reading the paths for the trees that i'm putting in. First image is how the house looks in game and the trees that are overlaping, second image is the paths that are in that part of the map in the forest, third image is the part of the forest that is being replaced. The game isn't reading the paths that i'm putting in and instead is using the ones that the forest file has already there. Here's what i did with the code to put the house in the forest:{ "Action": "EditMap", "Target": "Maps/Forest", "FromFile": "assets/Maps/NPCHouse.tmx", "ToArea": { "X": 96, "Y": 74, "Width": 15, "Height": 15 }

#

english isn“t my first language and i've never modded before so apologies if i didn't express myself correctly

teal bridge
lucid iron
#

Consider including this trigger in your mod

flat sluice
#

!rtf

ocean sailBOT
#

Reset Terrain Features (https://smapi.io/mods/#Reset_Terrain_Features) is a mod that lets you reset, clear, or generate everything that spawns on a map using an in-game menu. That's especially useful when changing maps mid-save, as the debris will otherwise use the old layout (causing things like trees in the water or bushes blocking exits).

lucid iron
#

RTF wouldn't do it automatically for the user (yes i have an agenda)

lucid iron
#

Setting it up is pain tho

flat sluice
honest inlet
lucid iron
#

Yes, this is a trigger action

honest inlet
lucid iron
#

If you are just debugging you can run actions like this

#

debug action Spiderbuttons.BETAS_ClearTerrainFeatures [Location] [Type] [TopLeftX] [TopLeftY] [BottomRightX] [BottomRightY]

#

(with the right arguments of course)

honest inlet
#

to be honest i don't even know what debugging is SDVpetcatsad

brittle ledge
#

Testing and seeing what breaks kyuuchan_nod2

honest inlet
#

ooh, you put that in the smapi screen, right?

lucid iron
#

Yep it's a smapi console command

rancid musk
#

Really wish errors within xTile map drawing would somehow include the names of the mods responsible for patching the current map. I know that's not feasible, but I get to add +1 to the number of bug reports I've gotten that have nothing to do with my mods because I have a harmony patch earlier in the stack trace before a broken map. :>

honest inlet
#

if i close the game and open it again wouldn't the problem still be there?

brittle pasture
#

the bushes are saved to the save, so if you yeet them and then go to sleep they remain gone

honest inlet
#

okok, got it!

deep cypress
#

Awww thanks for answering!!! Are you the one who made the NPC building spreadsheet?

hallow igloo
lucid iron
#

It fires once

#

Since it's a trigger action the default is mark as applied

hallow igloo
#

as in it only fires the first time someone loads the mod?

lucid iron
#

Once in a save yeah

hallow igloo
#

holy fuck why did it take a buttons.gay page to tell me this exists

lucid iron
lucid iron
#

With docs about her mods

#

But trigger actions is a vanilla thing

hallow igloo
#

ooooh wait it's a mod

lucid iron
#

The suggestion was to

  1. Use trigger actions, the vanilla system
  2. To fire this custom trigger action, provided by a mod called BETAS
#

As an alternative to asking players do reset terrain features all the time

hallow igloo
#

okay that takes a bit of work, but it seems like the right choice to make to use that instead of RTF

#

a lot of work actually

lucid iron
#

Not really it's one data edit

#

i suspect my sense of easy is skewed somewhat but hey if u have need we can help you

hallow igloo
#

it's checking 109 map patches to find where there were originally bushes or smth and adding a data edit for each of them

lucid iron
#

You can template that

hallow igloo
#

not the checking

lucid iron
#

As in

#

Organize 109 patch into 2 to 4 types of patch

#

Local token them

#

And have it do both trigger action and minecart add

hallow igloo
#

wh- what?

lucid iron
#

Just with different local token values

#

These features are all pretty new and i imagine you didn't have em when working on your mod initially

hallow igloo
#

possible

lucid iron
#

But they exist now AquaThumbsup

hallow igloo
#

I cannot wrap my head arond what any of this means though

lucid iron
#

It is templating

#

The box.json is all the data edits needed for a particular trinket

#

I just change the capacity and sprite index for each

#

To make 3 different trinkets of similar function

hallow igloo
#

ah so I could make 1 json that says what type of terrain feature to remove where

lucid iron
#

Yeah, along with the map edit itself

hallow igloo
#

and then quickly call that template with local tokens to not type too much

lucid iron
#

Since the area will overlap

#

And the minecart data edit

hallow igloo
#

OH

lucid iron
#

Slice ur mod basically

hallow igloo
#

I COULD REWRITE MY ENTIRE MOD

lucid iron
#

Yep

hallow igloo
#

I hate that you put this in my mind

#

it's working fine like it is

#

I don't have to do this

lucid iron
#

Scope creep is free

hallow igloo
#

NOBODY BUT ME WILL NOTICE

lucid iron
#

Yeah you don't

hallow igloo
#

but yet

lucid iron
#

Although i have bumped into some limits with local tokens (can't use list yet)

hallow igloo
#

list?

latent mauve
lucid iron
#

You cannot do a for i in [2, 4, 6]

#

There's talks about how that might happen but idk what the plan is so assume it doesn't exist

hallow igloo
lucid iron
#

Also can't seem to inherit ticket yet

#

No you may not dm me this is very moddingā„¢ļø

#

Could make a thread if you want tho

midnight sand
#

I have a question, does Content Patcher always iterate between all the patches to see which one it should apply?
I'm seeing the trace and there are assets that have 0 calls for OnTimeChange and they are still in the Trace Log as being checked

hallow igloo
#

there's no threads in this channel

brittle pasture
#

there are threads, but only orange names can start them

lucid iron
#

But idk im not rly trying to talk you into do anything i just want people to know about Features

#

Yeah i can thread if desired

hallow igloo
#

O:

hallow igloo
#

I fucking lvoe the concept

#

and it wouldf make future stuff so much easier

#

if I understand everything correctly

lucid iron
#

Best to just try it out

#

Not on ur existing mod just a test to see if you understood it and can achieve what you want

lucid iron
#

So a single ontimechange patch on Data/Objects affect everyone adding objects

hallow igloo
#

I can replace this:

//Minecart Farm Cave
{
    "Action": "EditData",
    "Target": "Data/Minecarts",
    "LogName": "Farm Cave EditData",
    "When": {
        "Farm Cave": true,
        "HasSeenEvent": "Polydot.PolyCarts.Unlock_Event.FarmCave"
    },
    "TargetField": ["Default", "Destinations"],
    "Entries": {
        "Farm Cave": {
            "Id": "Polydot.PolyCarts_FarmCave",
            "DisplayName": "{{Farm Cave Name}}",
            "TargetLocation": "FarmCave",
            "TargetTile": { "X": 2, "Y": 7 },
            "TargetDirection": "right"
        }
    }
}

with smth like

{
   "Action": "Include",
   "FromFile": "assets/whatever.json",
   "LocalTokens": {
      "location name": "FarmCave",
      "TargetTile": "x2y7",
      "TargetDirection": "right"
   }
}
lucid iron
#

Need to be TargetTileX and TargetTileY i think

#

And best to avoid spaces in token names

hallow igloo
#

makes sense and makes sense

#

but I get the concept correctly?

lucid iron
#

Yeah, tho ofc u need to write the template to be included as well

hallow igloo
#

yeah

#

which is the main thing

#

but that sounds very doable

midnight sand
# lucid iron So a single ontimechange patch on Data/Objects affect everyone adding objects

There is

  1. A part that says that 178 patches are being applied on OnTimeChange. This list an asset "A" to invalidate
  2. A part that indicates that a the asset "A" is being invalidated, but it list all the assets, some multiple times, even when they have 0 OnTimeChanges.

That's why I want to know if it still check all the other patches, or it have a list of "OnTimeChangePatchesToCheck" and the second part I'm seeing is only because of the trace

uncut viper
#

patches that aren't Loads are applied in order, not separately, and you cannot just edit a single thing inside an asset, you have to load and patch the entire asset from scratch again

#

so ofc one person making it so that the entire asset needs to be patched again means that everyone else must have their patches reapplied too

#

as an answer to your original question, no, content patcher is not only checking which patches should apply. Because it's applying all of them, because it has to

midnight sand
#

Again, the asset "String\HelloEveryone" is one that I just added to test, only has an "OnDayStarted" and it still appears in the "OnTimeChange". Nothing uses it, nothing changes it, nothing does nothing to it, and it still appears as being checked in the trace for an "OnTimeChange" update

uncut viper
#

wdym "again" that's the first time you've said that

#

do you only have your own mod installed

midnight sand
#

Just to specify when I said "I'm seeing the trace and there are assets that have 0 calls for OnTimeChange and they are still in the Trace Log as being checked"

#

So I did say it, just didn't say the name of the asset

lucid iron
#

You will have to share your log, I don't think i understand what you mean

mystic skiff
#

Mail Framework Mod 1.19.0 released.
New features:

  • New property to keep a mail valid once all conditions have been met for a day but the mail was not read on that day.
  • New feature to handle Randoly Chosen Attachment
  • New property to set how much items from the attachment list should be chosen to delivery.
  • New property to set a "RandomGroup" to an Attachment, so its pick from that group instead of from the whole list.
  • New property to set a "Weight" for a given attachment, when being picked randomly.
  • New property to set how many items should be pick from a given group, instead of using the default value.
  • New property to say if an item from a given group can chosen more than once.
  • New set of property to set a MailReceived requirement for attachments and replies
  • New property to set a MailReceived to be removed when a letter is read or when a reply option is chicked.
  • New property to set a cost for a given reply option.
  • New ItemType "None". It basically to be used when you want a random chance of not delivery an attachment.

Link: https://www.nexusmods.com/stardewvalley/mods/1536

To see a practical example of the new features, check the new Subscription Boxes Mod (https://www.nexusmods.com/stardewvalley/mods/32308)

midnight sand
lucid iron
#

!log do u have parser link for this one

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.

ocean sailBOT
#

Log Info: SMAPI with SDV on , with 0 C# mods and 0 content packs.

lucid iron
#

Only one asset is actually invalidated spacechase0.SpaceCore/ObjectExtensionData

midnight sand
#

That's not what I asked

lucid iron
#

How does content patcher know if something has ontimechange patch without checking it is my counter ask monS

#

I don't know enough about cp internals to give you more detailed answer sadly but the source code is there if you want to find out

midnight sand
#

Thats why I asked, because if it reads everything, everytime it becames a resource hog and that clearly causes performance issues.
If it created a dict or something when SMAPI is starting with which patches it should apply at which moments it would be slow to start but faster at OnTimeChange

#

Even if rechecking the conditions for those patches

rancid musk
#

@uncut viper Hi, just a very minor thing: when you updated Special Power Utilities today you didn't increment the main version of SPU on Nexus, so the last updated date and version are displayed incorrectly. (I don't know if that would mess with mod update checks or not.)

midnight sand
#

For example:
"Oh, there is a OnTimeChange at 1240 in Maps/ASDF, Ill add it to the dict OnTimeChangeDict["1240"] = "All patches that apply to Maps/ASDF", so I don't recheck every patch again, even if it doesn't needs it"

tiny zealot
uncut viper
#

this is also not the only time its happened for me

rancid musk
#

Ah. I've never had that happen to me before. Sounds... fun.

tiny zealot
#

another of nexus's incredible features

uncut viper
#

the best is that bc of how nexus is, you cant really tell its happened until like, 20min later at minimum

rancid musk
#

-# BetterNexusMods when

lucid iron
#

The thing that's being updated is token context rather than specific asset tho

uncut viper
#

clearly it TRIED to do it correctly, because it gave me the v2.3.3 in the changelog section, which was already filled out bc i filled it /shrug

#

but ive fixed it now anyway, thank you for bringing it up!

midnight sand
#

Yes, but the changes are to assets, so at least it would have reduced the token and other things checks only to the ones that MUST be checked at specific times

lucid iron
#

It would be neat if you have approach that's better, pathos is open to pull requests usually

uncut viper
#

also OnTimeChange isnt a thing that lets you specify times

lucid iron
#

I think this is where the code path starts

midnight sand
tiny zealot
#

my understanding is pathos usually likes to discuss potential PRs in advance, so that if he expects to deny your change he can spare you the effort of creating it

uncut viper
#

yeah, but its not OnTimeChange itself that specifies what time it changes at

lucid iron
#

As for ontimechange but targeting a time, that is already a thing isn't it

uncut viper
#

OnTimeChange simply tells Content Patcher when to re-evaluate any tokens in the patch

lucid iron
#

This is why i get lag at 1900 in game

#

When all the aesthetic mods wants to go into nighttime mode

#

Actually applying the change is bigger than the act of checking if it should apply

uncut viper
#

so you cant simply check for what time any patch with OnTimeChange might change at, bc the conditions of the Time condition can also change, depending on time

#

or other factors

reef kiln
uncut viper
#

like, what if a condition is "Time": "{{Random: 0600, 0700, 0800}}"?

hot gale
midnight sand
#

In that case CP at everytime is trying to load all the patches and only the tokens are preventing it from happening?

uncut viper
#

it never tries to unless the conditions pass

#

but that may just be semantics

golden basin
#

This is why I don't do recolors or aesthetic mods

lucid iron
#

I feel like there is perhaps case for an OnTimeIs update rate Dokkan

hot gale
#

Does content patcher just check recursively for changes?

#

Why not have the mods themselves issue the command to change

#

So it's not wasting time when there isn't anything to do

lucid iron
#

You can yea

uncut viper
#

i do think though it is important to stress that the UpdateRate things are not for when patches apply

lucid iron
#

With trigger action

uncut viper
#

they are like as chu said for updating the token context

#

which affects the whole patch, not just conditions

hot gale
#

In theory they're just loading one sheet instead of the other both should be relatively static

uncut viper
#

everything affects performance in one way or another

brittle ledge
#

Everything costs money, but some things are candy bars and some things are yachts SDVpuffersquee

uncut viper
#

there is overhead in managing patches, as Alan points out

lucid iron
#

You can make some awful performance "visual only" mods if you r doing strange things yep

uncut viper
#

the only thing that doesnt affect performance is running the vanilla game without SMAPI

lucid iron
#

xnb modding

uncut viper
#

chu can you please tell me what xnb mod can be applied while also being vanilla

reef kiln
uncut viper
#

it will affect performance

#

if you are adding more things to a file, it affects performance

tidal stone
#

someone help me choose, should i do try to do bellflowers next or lily of the valley hmm

lucid iron
reef kiln
#

Not if you just replace the xnb with yours. You won't even need SMAPI.

midnight sand
#

checking the condition for 200 patches when only 20 might have been changed is not very efficient

uncut viper
#

as far as i know, content patcher does not recheck conditions unless it needs to

lucid iron
tidal stone
#

also its possible to have a patch in your cp mod for furniture with a patch for crops right or will i need to make a mod within my folder for a secondary mod?

uncut viper
#

if there is no token context update, then the values have not changed, and if no values have changed, nothing is done

latent mauve
#

You can edit as many things as you want with CP in the same mod

brittle ledge
#

You can toss as many different things in your CP mod as it supports.

tidal stone
#

aah ok ty

lucid iron
#

The stance here isn't really "checking patches is free" since it's not free, but rather "could there be better way to check patches and reduce the overhead"

lucid iron
#

With the caveat that you cannot do something that will break existing content patcher packs

tidal stone
brittle ledge
#

(I would not really recommend splitting your CP stuff into separate CP mods, because includes divide up your CP just fine without having to manage multiple manifests or update keys, etc)

tidal stone
#

phew ok, i was a lil worried about it lol

golden basin
#

Ever since merging my stuff with includes I've had a way easier time, tiakall got on the head

brittle ledge
#

CP mods also can't refer to things like dynamic tokens or configs in other CP mods, unless you use a framework mod like Cross-Mod Compatibility Tokens. kyuuchan_nod2

uncut viper
#

as far as i can understand CP source code, this function seems to imply that nothing is updated unless Content Patcher does know its necessary to do so

reef kiln
#

You can technically have all your changes in a single contents.json though for ease of reading it is better to not.

brittle ledge
#

So if your crop mod has a token or config, your artisan good mod would have no idea, for example.

golden basin
#

Oooh never heard of that mod, have you used it tiakall?

tidal stone
#

oooh ok

lucid iron
#

You should use it if you need to know about another mod's tokens

golden basin
#

That's amazing people are so talented

lucid iron
#

But if it's your own mod then just do 1 content patcher pack

brittle ledge
lucid iron
#

Don't split them up just so you can cmct yourself monS

tidal stone
#

I wanna make an artn crafts looking table and some barrls with differemnt flowers/herbs in them and some different flower related crafts

golden basin
tidal stone
uncut viper
#

in fact, it looks like all the console logging you're seeing Alan is not entirely because of Content Patcher at all

contentHelper.InvalidateCache(delegate(IAssetInfo asset)
    {
        bool flag = reloadAssetNames.Contains(asset.NameWithoutLocale);
        if (verbose)
        {
            this.Monitor.Log($"      [{(flag ? "X" : " ")}] reload {asset.Name}");
        }
        return flag;
    });

(ignore the ugly formatting im lazy)

uncut viper
#

oh it looks better formatted than the preview ok

brittle ledge
uncut viper
#

Content Patcher tells SMAPI to invalidate assets based on a predicate rather than specifying specific asset names

#

and it just logs whether or not it was included in the list it calculated as needing an update, but SMAPI is the one iterating over everything

golden basin
uncut viper
#

but its not doing any patch calculations

#

bc its SMAPI doin it

brittle ledge
golden basin
#

I'm so excited for sunberry

tidal stone
#

aaa sun berry village ā¤ļø

#

i love a new town

uncut viper
golden basin
#

I just know it's gonna be quality content. There's a lot of talented people involved in it

#

Do you know who all is making NPCs for it I've been so curious it's actually making me itchy haha

reef kiln
tidal stone
#

agreed i just can't wait to get to know all the characters and explore it and such, take a gander

golden basin
#

Yeah, I would join the server but I am big anxious because there are ppl in there I admire a lot. Plus I've made a fool of myself a few times so imma hide in the darkness and play quietly with my blood pfff

#

Blor bos!!!

#

Not blood

#

Phone pls

tidal stone
#

i wonder if any npcs ill recognize will end up in sunberry, i forget where but i heard some people are moving their npcs around i/e some goind to ridgeside or sunberry

gentle rose
#

they're called wren and I already love them

uncut viper
#

(i am excited to play sunberry in like 2 years when i eventually finish my own NPC SDVpufferpensive (not bc im putting them in sunberry or anything but bc i wanna finish them before doing another full playthru))

reef kiln
#

Cool. Thats exciting

golden basin
#

Wren is a cool name : o

#

Lumina!!!!!

hallow prism
#

hi!!

lucid iron
#

Button npc real DokkanStare

golden basin
uncut viper
#

(if only it worked!)

#

my NPC has been "real" since a year before 1.6

#

barely real, but real!

lucid iron
#

It's ok my npc is 8 anim frames rn

hallow prism
#

a start is a start

lucid iron
#

Ive not touched the birb since last year

golden basin
#

I can't wait to see y'all's NPCs that's pretty exciting

lucid iron
#

Something i perhaps need to do is

#

Make npc like pathing on trinket companions

#

So that the bit where birb comes with you can be more polished

uncut viper
#

sounds like you're scope creeping and/or procrastinating your actual NPC

lucid iron
#

I am procrastinating so hard

golden basin
#

Same though

lucid iron
#

Though the thing is i feel the birb is just a mascot for a mod whose real focus is a dungeon

final folio
#

Hello, is there any tool to generate the Sprite numbers of an animation, or if or if it has to be manually?

reef kiln
#

I respect people with the patience to do NPCs. My mods are all small because I lose interest in bigger mods and don't finish them.

golden basin
#

What's your mods frog?

#

:0

#

🫓

#

Gimme

reef kiln
#

The are all pretty simple.

#

And the fish statue needs to be updated for 1.6. But the others all work.

ornate trellis
#

I thought I had no attention for big mods but here I amstill staying strong making a smol expansionish update for my npc mod :B

hallow prism
#

step by step is a big help in doing big mods

ornate trellis
#

currently staring at all my location data to add forage and fishes

midnight sand
uncut viper
reef kiln
#

I also have about 40 mods (in my current build) that are just cross compatibility stuff, and small edits to other peoples mods. But I can't publish those.

uncut viper
#

(or well i mean, thats what GetPatchesToUpdate checks, the token tracking stuff happens elsewhere and for general purposes)

#

though more accurately to say, Content Patcher keeps track of what patches a token affects, not what tokens a patch relies on

untold pagoda
#

hi, sorry if this sounds noobish, ive never modded before, but im trying to make seasonal Baechu and Romanceable Ras SVE compatible, and I want to know if this sounds like it would work:

My problem is that the seasonal baechu wizard portraits and sprites only have a 2 expression sheet, and I need at minimum 7 expression for RomRasSVE. Would all I need to do is create a 7 expression sheet and use it to replace the sheets in the Seasonal Baechu or would I need to put them elsewhere? I think it's also missing a hug and kiss sprite and i have no idea where those sprites would be put on a sheet so if anyone could point me to a sprite sheet breakdown that would be lovely

sorry for the long message, thank you

reef kiln
# golden basin What's your mods frog?

For example, I have a small cp mod that just makes your trees tappable. I wanted to be able to put tapper on them even if I only got sap. So I made it so I could. But I am not going to publish something like that.

golden basin
midnight sand
#

So the more tokens, the less performance every OnTimeChange, even if its a token that might not change in the playtrough, since it has to check if it changed?

golden basin
#

i know the reuu trees you can tap im pretty sure hm i could work something like that in

reef kiln
#

I don't know, I know I wanted it. Mostly because a tree a couldn't tap felt like a challenge. šŸ˜€

golden basin
#

hmm ill consider that then

tidal stone
#

Is it possible to make walk underable arch furniture or would that require a framework

uncut viper
uncut viper
#

CP does do a lot of optimizations for its own tokens though where possible

midnight sand
reef kiln
# golden basin hmm ill consider that then

I have over 40 mods like that for tiny things to make the game feel a little more complete too me. Did the same thing to Dwarven expanded. Have one whole mod customizing it to my tastes. (Basically making the animals need the custom building only, rather the both the barn and custom) But agian, I would never publish it.

sour sleet
#

Is it possible to do the following with CP: Add a new building to build at Robin's that will only house my custom animal?

uncut viper
#

content patcher has no possible way of knowing you have not seen that event

#

unless it checks

sour sleet
#

BrilliantSDVpufferthumbsup

midnight sand
#

So It will try to check the change every OnTimeChange if I put a patch with a Update of OnTimeChange that depends on that token then. I remember seeing one like that in the NPC June for example

uncut viper
#

the intricacies of how exactly content patcher decides in what order to check tokens and when is beyond me, i imagine there are some optimizations somewhere to check like "if no patch has this token ontimechange, we dont need to update it with the rest of the ontimechanged ones", but yes if you use a token in an ontimechange patch then it must be checked for an update at every time interval

lucid iron
uncut viper
#

but the actual check is likely to be very very minimal performance loss

lucid iron
#

Here's a standalone dino example

uncut viper
#

i mean, for hasseenevent, its just a dictionary lookup

golden basin
#

@reef kiln hmmm tree sap šŸ‘€

uncut viper
#

actually scratch that, that might be a dictionary check entirely

brittle ledge
uncut viper
#

bc i believe that token actually just returns all your seen events

golden basin
#

?

brittle ledge
#

!vpp

ocean sailBOT
#

Vanilla Plus Professions is a professions and talents mod by KediDili. It expands on the vanilla professions by adding new profession choices at levels 15 and 20 and adds a new talent tree for each skill where players can earn talent points to purchase perks that improve various gameplay aspects. It has been released on 25th of December.
It can be downloaded from Nexus: https://www.nexusmods.com/stardewvalley/mods/20054

reef kiln
uncut viper
#

content patcher does have stuff that checks if a dictionary has changed from its previous value though and i imagine there are optimizations there. but if a list/dictionary has not changed since last time, it still had to check ofc, but it wont redo any patches if nothing has actually changed

golden basin
uncut viper
#

but there's no way to know if a token has changed without, well, checking it ofc. unavoidable

lucid iron
#

You can also make custom shake item

uncut viper
#

(besides the aforementioned "if a token is known immutable" exception)

golden basin
#

you can do that in vanilla too make shake items and tappable sap stuff

lucid iron
#

Tho normally the expectation is "shake down a seed for this tree"

uncut viper
#

(HasMod, for example, is immutable and wont be rechecked bc it cannot ever change during a play session)

lucid iron
#

(i meant in vanilla yea, not vpp specific)

reef kiln
lucid iron
#

I thought that one's hardcoded

midnight sand
#

I'll try changing a few CP mods that I downloaded to see how performance behaves when changing tokens or Update rates then.

uncut viper
#

to be clear i dont wanna give off the impression that it doesnt matter at all either so i hope im not! OnTimeChange should still be avoided if possible

reef kiln
uncut viper
#

the fewer updates you can get away with the better

midnight sand
#

My CP mods are not that many in comparison to what I've seen here

uncut viper
#

just that Pathos has worked very hard to make CP as optimized as possible

#

(not to say there is literally no room for more, just that its been a big priority)

golden basin
#

ive never noticed lag with my mod but hmmm maybe i should ccheck

undone hawk
#

Y'all how the heck do you run unit tests for your mod? SMAPI isn't shared unless actively running due to the way the Nuget packages are set up, so if your unit tests require any aspect of Stardew code they completely break

reef kiln
#

The biggest lag in my game that I have found is at 1900, as that is a transition to night. And I think alot of NPCs also start pathing at that time.

uncut viper
#

i dont know anyone who runs unit tests

#

someone made a library for it

#

so theres one person i guess

golden basin
undone hawk
#

I can see why. The way the nuget stuff is set up, it gets pissy if the project is anything OTHER than exactly a Stardew mod

uncut viper
pine ermine
#

Yes, I do use unit tests

uncut viper
#

speak of the devil

undone hawk
#

Linkoid I've been trying to get a simple set of unit tests working for the past five hours

uncut viper
#

you havent been here for like a month, how did you notice this

undone hawk
#

How the hell

pine ermine
#

Use valley unit

golden basin
lucid iron
#

Imagine testing when u can just ship and hope for the best

undone hawk
gentle rose
uncut viper
#

my test is running a function from an OnButtonPressed event

pine ermine
uncut viper
#

you can get keyword alerts for discord?

undone hawk
#

Why SMAPI isn't directly able to be referenced I will never freaking understand

lucid iron
#

I do put some test console commands though

golden basin
#

just gotta do the default json now

uncut viper
#

oh wait, i guess i did google for the library, you can get alerts for that cant you

pine ermine
gentle rose
uncut viper
#

oh, so just extreme serendipity

lucid iron
#

It's fated

reef kiln
uncut viper
#

i did see you had updated a repo like less than an hour ago after i sent it and did wonder if you were around

lucid iron
#

I do like using valley unit for testing split screen but i wish i had way to launch 2 smapi

#

That is the more relevant multiplayer test case imo

golden basin
pine ermine
undone hawk
#

I just wanna use XUnit to test data, why is that so much to ask

faint ingot
#

I need some help with Morris... I see you can use him out-of-the-box in events and he has a sprite/portraits, but he has an empty Appearance [] in data\Characters, and giving him a home and schedule doesn't seem to cause him to show up and follow it. What do I need to change about him to get him to follow a schedule? (I know his 'sprite' in JojaMart is just a couple of tiles and I know how to remove them)

gentle rose
#

anything messing with morris is inviting sve incompatibility afaik, just fyi

lucid iron
#

You can write regularly ol unit test as long as you aren't linking to game

faint ingot
undone hawk
uncut viper
#

i will ask the question of "did you sleep a day or two first" re: morris

lucid iron
#

Stardewui has unittests on itself

uncut viper
#

beyond that i have no answers

lucid iron
#

And that's approximately how it goes there

pine ermine
#

if it involves game data

faint ingot
#

I slept a day I'll try to sleep a couple more and see if that changes anything

undone hawk
#

I'm working with a lot of gamedata and it needs to be sorted and set up correctly (p much EVERYTHING to do with fish)

lucid iron
#

The thing about game data is just "well people be modding in fish too"

#

What i did with machine mod is that i have my own variant of patch export

uncut viper
#

yeah you wont have all the data without letting content patcher run

#

or other c# mods

undone hawk
#

That's literally insane

lucid iron
#

That dumps the transformed models via a console command

undone hawk
uncut viper
#

what do you mean. how do you expect content patcher to add mod data without it running

#

or do you mean the patch export thing

faint ingot
#

slept a few and still get this, wondering what I need to change for the game to see him as a valid character

lucid iron
#

Sadly i did not catch many quirks and had to patch version 4 times on week 1 lol

reef kiln
undone hawk
#

Oh I think you responded to smth other than me, I thought u were saying to access base game data that CP had to be running

uncut viper
#

i was aedding on to chu's comment

undone hawk
#

Fair enough, not insane

golden basin
#

I think

#

his internal name is different

reef kiln
#

It doesšŸ‘†

lucid iron
#

Yeah my case was that my mod is designed for mod list with many artisan machines

uncut viper
#

but yeah admittedly i dont know much about unit testing libraries but idk how id expect one to access that data without being purpose built to access it for tests, which is.. what valleyunit is

lucid iron
#

It doesn't make sense to test without a good number of those mods

undone hawk
faint ingot
#

OK hmmm, I was hoping I wouldn't have to create a whole new 'character' but maybe I do

lucid iron
#

Well it's not a unittest lulu, it's an integration test

undone hawk
#

I

lucid iron
#

I did need it just for development reasons to figure stuff out

golden basin
#

you do yeah, Morris is a hardcoded name in the game, theres no changing it to be a full npc. You can edit the map tile out and put him in as a different npc with the same display name

lucid iron
#

The valleyunit thing basically auto opens the game for you

faint ingot
#

OK, thanks everyone

lucid iron
#

So that you don't have to press the buttons to load save and stuff

undone hawk
#

I think we're having two separate conversations at this point so I'm just gonna say thanks for the ValleyUnit thing and poof

gentle rose
#

I'm guessing ValleyUnit similar to things like Selenium, Chai and iirc Gecko(? I may be completely making that one up) where it allows you to run tests using Stadrew as a frontend? SDVpufferthinkblob are those even the correct names, I can't remember any more lmao

uncut viper
#

all those names sound made up to me

lucid iron
#

Yeah it is kind of selenium like

uncut viper
#

actually Selenium doesnt i know that one admittedly

gentle rose
#

Selenium is definitely real, I'm 70% confident about Chai and like 5% confident about Gecko

lucid iron
#

Chai is a drink

#

Ans gecko the animal

gentle rose
#

I am certain there is a unit testing framework named after a drink, I'm just not sure it's called Chai SDVpuffersquee

lucid mulch
#

Mocha iirc

uncut viper
#

"Chai is a BDD / TDD assertion library for node and the browser that can be delightfully paired with any javascript testing framework."
"delightfully"

#

i see several guides for using Chai and Mocha in tandem

lucid iron
#

Unittests r my least favorite part of job LilyDerp

gentle rose
lucid iron
#

I feel like they never catch anything useful since it's usually running in a vacuum

uncut viper
#

isnt that what unit tests are meant to do

pine ermine
# undone hawk I think we're having two separate conversations at this point so I'm just gonna ...

This is ValleyUnit. I forgot to write a README but it does work as it is now.
See the tests folder for a functional example.
https://github.com/linkoid/Stardew.ValleyUnit/tree/main/ValleyUnit.Tests
I do have a proper README for SmiteUnit though which is what powers ValleyUnit.
https://github.com/linkoid/SmiteUnit#readme

And this is the package reference to add to the .csproj

<ItemGroup>
  <PackageReference Include="Linkoid.Stardew.ValleyUnit.Sdk" Version="0.1.0-alpha" />
</ItemGroup>
GitHub

Contribute to linkoid/Stardew.ValleyUnit development by creating an account on GitHub.

GitHub

SmiteUnit is a simple test framework for testing assemblies that run in external programs. - linkoid/SmiteUnit

lucid mulch
#

Unit tests might be one of the most misused patterns in software engineering

lucid iron
uncut viper
#

unit tests for in a vacuum, integration/end-to-end for real cases or smth? idk. im not a very good tester

lucid iron
#

I just feel very lost about it's purpose

uncut viper
#

logic vs flow i guess

gentle rose
#

having been to what was an attempt to teach unit testing in uni (after already having experience with them previously) I now have a bit of insight as to why they're so misunderstood

lucid iron
#

In modding land integration test is your mod hitting one of those 1k mod people and then they come back with a smapi log if you are lucky Dokkan

lucid mulch
#

Unit tests are all about automated regression testing of very small units of work.

The bigger the unit the less useful it is, because when it fails it tells you less about what happened.

Also, unit tests only give information when they start failing, but if they can do that at random they lose all power (boy who cried wolf)

#

And if they can never fail, they can never provide value

lucid iron
#

The last part is difficult

#

I struggle to identify good unittest cases

gentle rose
#

I submitted my practical assignment late, and the TA checking it asked me if I already had it verified once. I said no. He said I was the first person who realised that when testing a calculator class, you cannot use the class' own subtraction function to test its addition function etc šŸ’€ honestly I don't think I was even taught that when I was doing automated testing before, I think it was just common sense?

lucid mulch
#

Tbh the only times I will personally do a unit test, is it it's a sufficiently complex unit of work that is also kinda annoying to just manually run myself

gentle rose
#

but yeah, afaik nobody teaches it properly but we expect people to understand it, so I can't imagine we're going to see much improvement in software testing any time soon pffft

lucid mulch
#

When you start adding mocking it can be easier to accidentally make an impossible to fail test, or a test that's only testing your mock

#

And adding code coverage metrics can add incentives to add bad tests

gentle rose
#

also it appears that gecko is indeed something I fabricated, whoops SDVpuffersquee but hey, 2/3, not so bad

lucid mulch
#

For example smapi has unit tests for the mod rewriting functionality because that's a nightmare code.

But doesn't have unit tests for the prioritised event dispatcher

pine ermine
#

and then going to a specific place at a specific time

gentle rose
#

unit testing literally every method just leads to spending more time debugging bad unit tests than bad code imo

#

(in general, not just in modding)

final arch
lucid mulch
final arch
lucid mulch
#

(and see people change very internal methods to be public so they can unit test it easier)

gentle rose
winged crest
#

Make a mod where sap are useful

#

pls

gentle rose
#

!modideas

ocean sailBOT
#

If you have a mod idea that you aren't planning to make yourself, you can put it in the mod ideas github: https://github.com/StardewModders/mod-ideas

However, this does not mean anyone is guaranteed to work on your idea—modders who are looking for ideas sometimes go through and work on what they find interesting off this list. If you want to pay someone to make your mod idea, there are a few people who do commissions (mostly art, sometimes code); you can ask around, search usernames for the word comms, or see !commissions.

lucid mulch
#

One of my biggest pet peeves about unit testing is people making worse production code in the name of making it testable

gentle rose
#

post that there, and probably start with the please part next time you ask someone to do something for you šŸ˜…

tidal stone
#

use sap to manufacture bubblegum in the valley

lucid mulch
#

And while in the process making it harder to troubleshoot when it catches fire at 3am

winged crest
#

you can use fruits to add flavor to it

gentle rose
#

I will say though that regression tests should probably be used more often than they are pffft just regression test everything

calm nebula
lucid mulch
#

That doesn't expose private

calm nebula
#

has been in python land

#

For toooo long

rigid musk
#

@ornate locust How hard would it be for you to make a yellow version of the couch for your tilesheets? tbh_bushhide

lucid mulch
#

Not having true encapsulation does make bad unit tests more tempting

ornate locust
#

doing festival placements right now SDVpufferchickcry

rigid musk
#

CB_clappyclap Yippie that would be amazing! I appreciate the thought

ornate locust
#

festival placements are... not fun

rigid musk
#

Good luck with your festival placements... figuring out where to put them is so hard

#

The amount of times I would be like 'yes this is perfect' and then realize someone else was already there is... a lot

lucid iron
#

Graph theory DokkanStare

uncut viper
#

one day...

rigid musk
#

I have so many when conditions for different npc mods heh

lucid iron
#

What if we just randomized who got to show up that year

rigid musk
#

pain that's horrifying Chu

lucid iron
#

I am 400 iq trust

ornate locust
#

I went through the spreadsheet, though I know it's not infallable and a few of the maps are a bit busted. Then I went through the years with a pile of NPC mods in, with and without SVE

silver sand
#

Damn, the dedication

ornate locust
#

Hey I did cheat, I'm not crazy

lucid iron
#

If there's overlap can you talk to everyone on that tile

ornate locust
#

CJB to set the date to right before a festival, sleep, go to festival

reef kiln
native saddle
rigid musk
#

lmao I dont even set the day to right before I just do it the day of and change it to the time because it still triggers the festival

ornate locust
#

It still took a while, but it wasn't UNMANAGEABLE

rigid musk
reef kiln
lucid iron
#

Well it sounds at least usable

#

But yes graph theory...

silver sand
#

Why is Shane dead

ornate locust
#

I have all the spots I want marked down, just have to get the exact coordinates from Tiled and put them in the ol JSON

#

and do a small map patch because the year where there's trash all over the fair, Bill is going to be ticketing the litterer for being an asshole

uncut viper
#

(im not ... Totally sure the content in that video fits within server rules)

faint ingot
#

How does it not? He's not dead, he just has some eroded stomach lining! (and its just makeup) --- its film!

silver sand
#

OHHHH

#

That's like jam

#

Strawberry

uncut viper
#

Hence the "not sure"

faint ingot
#

I mean you can see him in the audience...

silver sand
#

Bold of you to assume I can see that wellSDVkrobusgiggle

uncut viper
#

i think you are taking my saying that as me saying "you're breaking the rules" when all I'm saying is I'm literally not sure. a horror movie IRL would show that too, but I don't think it'd be allowed in here either. I'm not a junimo though, I'm only saying this as a "I don't want you to get in trouble so be careful" thing not telling you what to do

dusk mulch
#

welp time to try my hand at a custom item

lucid iron
#

This server is pg13 right

#

Again not saying sdvhead video is rule breaking but I am wonder about general content guidelines

golden basin
#

Oh jeez

#

Pff tomato pasta

#

Paste**

uncut viper
#

Discord itself is 13+ only

#

i just know depictions or implications of violent acts towards NPCs aren't allowed, it's just. depiction within a depiction that gave me pause

rancid musk
#

Saw a post in modded farmers asking if there was a building version of a watering trough that's part of the base map, and since then I have been thinking about a framework mod that'd let buildings dynamically apply map overrides to areas. šŸ¤”

#

It honstly sounds like it wouldn't be hard... until you have to deal with moving or demolishing a building, lol. Then: terrible.

brittle pasture
#

well there is a conveniently patchable function for "after building move"

dusk mulch
#

An item sprite is 16x16 right?

uncut viper
#

that doesn't seem like it'd be that bad to me

reef kiln
brittle pasture
#

depends on what type of items. regular items yes, big craftables are 16x32, furniture can be whatever (but still composed of 16x16 squares)

rancid musk
#

You would need to reset the map and then apply every other map override again. I guess that... might not be too terrible. I'd have to test it.

rancid musk
brittle pasture
#

"watering trough" building is already possible with pure vanilla

#

what khloe said

rancid musk
#

In fact the Well is already nothing but a data asset using tile property overrides.

reef kiln
#

Oh, so a framework that makes map patches buildable? Or do I not understand.

rancid musk
#

Yeah, that basically.

#

Let you place map overrides as buildings.

#

Like, say you want to build a pond on your farm map. You place a building that actually applies a map override.

#

And since it'd be a map override it would use the original tile sets and be compatible with recolors, and not just a big image of a pond that behaves weird.

rigid musk
#

buildable ponds...

rancid musk
#

(Granted, my original thought for buildable ponds was more the creation of a tool like the teraforming tools in AC:NH so you could just freely change your landscape and magic would happen. I should go back to that mod, actually...)

#

But the buildings thing could be neat, honestly.

latent mauve
#

(buildable waterfall please?)

gentle rose
brittle pasture
#

finally, Map Editor Extended Redux

rancid musk
lucid iron
#

Though initially i explored how it might have worked if it's all just paths that are "waterways"

dusk mulch
#

bro why is making a book sprite so hard

#

bugger it, im stealing the one from the tilesheet

uncut viper
lucid iron
#

Map tile approach has some limits like what do when water crosses tile/grass boarder

gentle rose
uncut viper
#

no nothing ever happened with it

lucid iron
#

The thread's still there but yeah nothing happened

uncut viper
#

just a handful of mod authors myself included who would like to do it

#

but none of us with the time committment to actually do it

rancid musk
latent mauve
#

Would the implementation of that be similar to how the tourists in Central Station work with rotating characters, but with main spots and an overflow area?

uncut viper
#

it wouldnt take any NPCs away, itd move them to a next available tile (or half tile)

tidal stone
#

ive made 15 plants so far idk how many would be good for a small mod ā˜ ļø

lucid iron
latent mauve
#

Yeah, I was thinking main spots rotate and anyone not there was in overflow/still present but elsewhere

lucid iron
#

Need something like that for water

#

I was looking at this one

uncut viper
#

the reason for graph theory is bc ideally it would place people as close as possible to their original location

#

or allow npc creators to specify alternates

lucid iron
#

It's got just grass

gentle rose
#

no need for time commitment, here's your pseudocode

if (length(npcs_in_this_festival) > unoccupied_tiles_on_map) return false;
foreach (npc in npcs_in_this_festival) {
   x = random(0,width)
   y = random(0,height)
   while (tile(x,y) is occupied) {
       x = random(0,width)
       y = random(0,height)
   }
   npc.setposition(x,y)
}

for legal reasons this is a joke

uncut viper
#

bc e.g. if someones NPC talks about the punch bowl, it makes no sense to move them away from the punch bowl

uncut viper
dusk mulch
lucid iron
#

Honestly i think randoming the npc that get to use the tile that year is fine kinda

uncut viper
#

i mean, theres plenty of ways you can get rid of collisions that would be easy

lucid iron
#

Just gotta play 10yrs to see all the guys

uncut viper
#

but theres no point in doing it if you arent gonna do it right

brittle pasture
#

allow them to define a preferred area, go down the list from smallest area to largest. if their area is fully occupied, sucks to be you, go outside

gentle rose
uncut viper
#

i mean technically all it takes is a matching algorithm really

#

its just implementing that is Sucks

#

not the most Sucks but Sucks when you have other things you wanna work on more SDVpuffersquee

#

also dont forget NPCs who move during the festival

gentle rose
uncut viper
#

i think you may be misunderstanding how NPC event movement works

gentle rose
#

no, once the fence is there, just remove the movement

#

the fence is your visual explanation for the character being trapped

calm nebula
#

I'm reminded of the dating thing $university did

uncut viper
#

"just"

calm nebula
#

Is it called the marriage problem or the secretary problem?

gentle rose
#

edit their schedule data to have them not moving. ez

uncut viper
#

mine didnt use dating, it used job applicants

#

b8ut i think it is stable marriage

calm nebula
#

In mathematics, economics, and computer science, the stable marriage problem (also stable matching problem) is the problem of finding a stable matching between two equally sized sets of elements given an ordering of preferences for each element. A matching is a bijection from the elements of one set to the elements of the other set. A matching...

uncut viper
#

cmon iro keep up /lh

calm nebula
#

Has someone extended it to gays and lesbians yet

gentle rose
#

there are a lot of other problems in finding a group of mathematicians and computer scientists stable marriages

uncut viper
#

... days? matching lesbians with a day of the week?

#

i choose friday

#

top priority. ill accept no other matches

gentle rose
#

I am not a lesbian and therefore do not need to choose a least bad day of the week alientwerk

#

I am... I need that question mark as a pride flag

dusk mulch
#

Do I have to load item textures into somewhere before assigning them to an item?

uncut viper
#

yes*

#

*not if using an internalassetkey

dusk mulch
#

Internal asset key?

uncut viper
#

content patcher token

dusk mulch
#

oh

#

so if i am using CP i dont have to?

uncut viper
#

you have to, unless you are using an internalassetkey token

gentle rose
#

but also you should only use those in specific scenarios, where you don't want anyone else to be able to edit them for your mod etc

dusk mulch
#

My mods are open source so I will go load it

gentle rose
#

idk what open source has to do with it but yeah, I'd say load it

dusk mulch
#

Oh I misread it sorry

#

Anyway

#

Where do I load it into...?

opal oriole
#

Hello! Is there any precondition that requires the player to have completed a quest? I didn’t find one.

uncut viper
#

just make it unique

calm nebula
#

There are tricks around this if it is a quwst you wrote

reef kiln
#

Can't you use the has seen event. As most quests have an event with them. We'll special order quests anyway. Help wanted might be an issue.

opal oriole
#

It is. What should I do if I want the farmer to receive a letter after completing a quest? Should I create an event? Or is there an easier solution?

calm nebula
#

Use Data/TriggerActions and look for the autogenerated questComplete_questId conversation topic

dusk mulch
lucid iron
#

Well besides making it a special order

#

You can do $action AddMail in their dialogue

uncut viper
#

yes*

uncut viper
#

you could yes. but dont. bc if someone else uses QWEFQUQWEBNU you're fucked

lucid iron
#

So when you talk to so and so to complete quest they send a mail

dusk mulch
#

Alright, ty! I am new to making custom items so...

opal oriole
dusk mulch
lucid iron
#

Yeah

opal oriole
#

ok thx a lot!

reef kiln
uncut viper
#

also i have a quest related question: subclasses of quests need to be registered with spacecore too i imagine. does spacecore correctly save quest progress in that case. actually, come to think of it i dont know where normal quests save progress

#

do they just calculate it on the fly

lucid iron
#

They do save

#

I often crack open my save bc i forgor who i still have to greet

uncut viper
#

wait does that mean it tracks whats LEFT or what you've already done?

lucid iron
#

It's got the actual who is left list there

uncut viper
#

huh

lucid iron
#

Even tho in game it shows 13/28

#

That's just how Socialize quest work tho

#

Help wanted saves a number i think?

#

For number of fish caught

uncut viper
#

oh yeah i guess that is what the DescriptionElement serializer is for i imagine

#

maybe

#

i dont like looking in quest code

lucid iron
#

It's better than monsters

#

Maybe

uncut viper
#

surely it cant be that bad to do monster stuff if you're subclassing right

#

right

lucid iron
#

Monsters has -2 reusable things for actual behaviors but u r right that it doesn't have to go into the save file

dusk mulch
#

Does the target location i am putting it into have to exist?

uncut viper
#

no

#

Loading is what makes it exist

calm nebula
#

Do quests have moddata

uncut viper
#

yes

dusk mulch
#

I keep getting this error because of it [game] Failed loading texture NotAGardener.TT_32321/Book.png for item (O)NotAGardener.TT_WillowsBook: asset doesn't exist.

uncut viper
#

sounds like you havent replaced the texture in your item with the asset name you creayed

#

created

#

using your example from earlier, it would be "Texture": "QWEFQUQWEBNU"

#

what did you set as your load target?

dusk mulch
uncut viper
#

ah, the classic "asset name vs sfolder vs file path" confusion

#

you're not making a folder

#

"{{ModId}}_32321" IS your book png

#

its the name you've given to that asset

#

it is one thing

#

"{{ModId}}_32321" is not a folder of things

dusk mulch
#

Ohhhhhhh

uncut viper
#

your texture is simply "{{ModId}}_32321"

dusk mulch
#

Yayyy it works! Thank you!

uncut viper
#

nothing inside a Target line is ever a folder. the only one that can be kind of thought of as a folder kinda but try not to is Maps/

#

but only bc people often say "load it into Maps" which isnt technically correct but people say it (including myself) bc its easier

#

you're not actually placing anything into anything else when setting a Target

#

also i dont think your gift taste is right

#

pretty sure it needs to be the item id

#

not the name

reef kiln
dusk mulch
uncut viper
#

do you wanna be a guinea pig for my tutorial about it

dusk mulch
#

Who is that directed towards?

uncut viper
#

Frog, unless you're offering too

dusk mulch
#

The item is for a quest, how can I make it so you can only gift it to 1 person?

hallow prism
#

i don't remember if you can

#

there is a reject dialogue but this would need to be set by npc

#

maybe there's a context tag or a specific type/category that would work

uncut viper
#

if its item type is set to Quest NPCs should reject it if its not relevant to them i believe

dusk mulch
#

I am using robins axe quest as reference, I will try something

reef kiln
#

I can read it if you are asking, but I am afraid. Not sure why but help with a tutorial feels like a big deal.

uncut viper
#

i promise its super casual i just wrote it but i have no idea if it makes sense to anyone lol

#

no pressure if you dont, but if you do, its here. not mobile friendly though

#

or well. kinda mobile friendly ish

#

not mobile recommended

grand edge
#

hi, does anyone know how multiple "homes" work with custom npcs?

the wiki says they use the "first matching one" but i can't seem to get it working even though smapi says the game state query is true. He just uses the default.

                    "Home":
                    [
                        {
                            "Id": "NSHDesertFestivalHome",
                            "Condition": "IS_PASSIVE_FESTIVAL_TODAY DesertFestival",
                            "Location": "Forest",
                            "Tile":
                            {
                                "X": 4,
                                "Y": 5
                            },
                            "Direction": "down"
                        },
                        {
                            "Id": "Default",
                            "Condition": null,
                            "Location": "Woods",
                            "Tile":
                            {
                                "X": 49,
                                "Y": 26
                            },
                            "Direction": "down"
                        }
                    ],```
uncut viper
#

this is just a shot in the dark, but i think they may be teleported Home the night before? not 100% on that

hallow prism
#

yeah homes are working in a delayed way

#

as far as i remember

#

they change the map and the tile at a different rate

#

homes aren't worth using for temp/short change

reef kiln
#

Yup, does not work on my mobile. Sent it to myself as a link in an email. Will read it when at my computer. But probably won't be till tomorrow. Sorry. It is the kids bed time marathon here so no computer for a few hours

hallow prism
#

they are worth using for permanent/long term change

grand edge
#

he can't path out of the woods sadly šŸ˜”

hallow prism
#

(ex : i tried using them for "npc visits on week-end" and it wasn't worth it, but leo on mainland is worth it because it's permanent)

uncut viper
hallow prism
#

then use 0 schedule, with the limitation of it having rare issues

uncut viper
#

is Woods even a location

hallow prism
#

yes it's secret woods

uncut viper
#

i love CA naming conventions

grand edge
dusk mulch
#

@ivory plume I figured out what causes the glitch for the ticket machine to not appear in central station.

Whenever you do a patch reload on the mod that spawns it, the machine decides to vanish.

uncut viper
#

we have the woods which are actually Forest. the Backwoods which arent woods. and the Secret Woods which is Woods

hallow prism
#

no, it starts them on a map on the day they have the 0 schedule, it's a bit different than teleport

hallow prism
uncut viper
#

those at least make sense to me bc they were prior names

reef kiln
uncut viper
#

i cant imagine the Secret Woods were ever meant to be the Normal Woods

uncut viper
dusk mulch
#

Is there a way to place usable kegs on a map?

uncut viper
#

FTM

reef kiln
dusk mulch
#

Fine... I will give in and use FTM...

grand edge
#

basically he hides in the woods all year cause he's 100% not from around here XD

he sneaks in to spy on the town when he can šŸ‘ļø šŸ‘ļø

ivory plume
ivory plume
#

Hmm. I can add some logic to account for that, but at least it's not something that'll affect players normally.

reef kiln
#

Can vouch for that. Can confidently say I have never patch reloaded even when making mods...... mostly because I only learned about it like 3 days ago. But still never done it.

hot gale
#

Woops? I was scrolled up lmao

hot gale
grand edge
#

me whos been restarting the game every time i change something: Tell me about this.... "patch reload"

uncut viper
#

!reload

ocean sailBOT
#
How do I reload my changes while I'm still in game?

-You cannot reload tokens, that's a forced restart unfortunately
-If you've done any CHANGES, then type into SMAPI:
patch reload YourMod.UniqueID
-If you've done i18n DEFAULT.jSON changes, then type into SMAPI:
reload_i18n then
patch reload YourMod.UniqueID
-C# Visual Studio has a feature called Hot Reload
-C# Rider also has Hot Reload
-Generally working in C# it will be called "Hot Reload" (usage may vary)

grand edge
#

neat!

uncut viper
#

im not sure what it means about not reloading tokens

ivory plume
#

(If you're working on a Content Patcher pack, the troubleshooting guide documents the various commands and tools available.)

ivory plume
untold pagoda
grand edge
uncut viper
#

i knew that part, but to me it seems to imply tokens in general, not just those ones

dusk mulch
#

Does anyone have an example of FTM being used to spawn big craftables?

ivory plume
#

(Well, it doesn't change any other tokens either.)

hallow prism
uncut viper
#

i know it technically d oesnt i just think that for a new modder reading that might give them the wrong idea that they cannt edit their json to move tokens around at all or change what tokens theyre using, rather than just not being able to reload config and dynamics SDVpuffersquee

#

to me it reads as "if what you're editing uses tokens, it cant be reloaded. restart your game"

hallow prism
#

if you have a better wording i think commands can be edited but it's hard to find the right balance between keeping stuff short and clear and giving details

uncut viper
#

well, i cant edit them anyway

#

i am no mod author SDVpuffersmile

ocean sailBOT
#

New command added! You can use it like !reload.

ivory plume
#

!reload

ocean sailBOT
#
How do I reload my changes while I'm still in game?
  • Content Patcher pack: enter patch reload YourMod.UniqueId in the SMAPI console window. This will reload and reapply all your patches (but won't recalculate the ConfigSchema or DynamicToken sections if you use them).
  • Translation default.json file: enter reload_i18n in the SMAPI console window. If it's for a Content Patcher pack, also run patch reload afterwards.
    -C#: see the Visual Studio hot reload or Rider hot reload feature.
uncut viper
#

chefs kiss

dusk mulch
ivory plume
#

How is that (aside from the last bullet point's formatting which I just fixed)?

uncut viper
#

if i was gonna be really nitpicky, id say YourMod.UniqueId might imply i should write BETAS.Spiderbuttons.BETAS but thats very nitpicky. otherwise i think it looks grand

ivory plume
#

I could change it to patch reload <your mod id> if that's clearer?

uncut viper
#

i think it cant hurt

lucid iron
#

The C# bullet broke for me

grand edge
reef kiln
#

I understood it. I think either way works.

uncut viper
#

pathos fixed the bullet point

rancid musk
#

That kind of implies to me that reload_i18n only reloads default.json, and I don't think that's accurate?

ocean sailBOT
#

New command added! You can use it like !reload.

ivory plume
#

(Fixed the mod ID format and removed the default.json bit.)

hallow prism
#

thanks šŸ™‚

reef kiln
#

!reload

ocean sailBOT
#
How do I reload my changes while I'm still in game?
  • Content Patcher pack: enter patch reload <your_mod_id> in the SMAPI console window. This will reload and reapply all your patches (but won't recalculate the ConfigSchema or DynamicToken sections if you use them).
  • Translation files: enter reload_i18n in the SMAPI console window. If it's for a Content Patcher pack, also run patch reload afterwards.
  • C#: see the Visual Studio hot reload or Rider hot reload feature.
lucid iron
#

That's pretty rude of you

dusk mulch
ivory plume
#

(The documentation is open-source! Feel free to submit improvements when you figure it out, since it's easier to know what's confusing when you're not already familiar with it.)

uncut viper
#

(i would still feel slighted if someone said that about one of my mods. the creator is still a person who hangs around here, yknow)

reef kiln
#

I have not used FTM documents, but looking at the code, it did not seem that confusing. But that is only for foragable stuff that I looked at.

lucid iron
#

I think it's fine to say "this documentation confuses me and i don't know how to do X"

#

Dislike is passing a judgement on the work put into it SDVpufferpensive

#

For example of ftm big craftable look at little free libraries

hot gale
#

Anyone know why the bush directly on the tile where my door is would be there? I did a replace function and that is not in my tmx on any layer

uncut viper
#

bushes and other terrain features are generated once and stored there

hot gale
#

Ah so this was an existing save

lucid iron
#

!rtf

ocean sailBOT
#

Reset Terrain Features (https://smapi.io/mods/#Reset_Terrain_Features) is a mod that lets you reset, clear, or generate everything that spawns on a map using an in-game menu. That's especially useful when changing maps mid-save, as the debris will otherwise use the old layout (causing things like trees in the water or bushes blocking exits).

uncut viper
#

they arent regenerated every time the game loads

reef kiln
#

Did you add an existing map?

lucid iron
#

What if we add the betas thing here

uncut viper
#

well

hot gale
uncut viper
#

if that command is more so meant for players it wont be useful for them

lucid iron
#

Yeah

uncut viper
#

i did start working on an alternative RTF though

lucid iron
#

Although they could run via debug the avg player wouldn't know how

hot gale
#

I mean the fact that its solveable is enough for me

uncut viper
#

theyd need to install BETAS just for that, though