#making-mods-general

1 messages · Page 302 of 1

hard fern
#

Well your fromfile is wherever the file that has all the data is

#

So the filepath (from the folder containing everything)

cosmic thorn
#

ah nvm i figured

violet grotto
#

I have a problem with my pet's animaion. I basically want to define a new walk cycle and reuse one of the frames in this order:

#

I know that I can define the frames used for an animation, but I'm not sure how I'd do that for the walk cycle. I also know that I can define the direction of an animation.
Since "Walk" has four directions though, I assume I'd have to create four different animations for "Walk".

#

If I create four different "Walk" animations ("WalkLeft", "WalkDown", ...), then how woud that affect "RandomBehaviorChanges"?
That likely means I'd have to define Weights for each one of them.

#

If I worded that weird, please tell me that exactly is confusing.

brittle pasture
#

the wiki says "randomly at the start of each frame based on the RandomBehaviorChangeChance field (RandomBehaviorChanges)"

#

so I guess just randomly starting to walk in another direction regardless of which frames they're in

violet grotto
#

I'm not sure if that's helpful in my case. Then again, I might just be confused.

brittle pasture
#

I mean what did you want

violet grotto
#

My main concern is: How do I set up the animation of the walk cycles for all four directions?

brittle pasture
#

add entries for all four directions

violet grotto
#

Like this? THis would be my first guess.

brittle pasture
#

yeah that looks right

#

next you need to set up a way for a pet to transition between them

#

with the various BehaviorChanges fields

violet grotto
#

Like this?

brittle pasture
#

I think UpBehavior and etc. will only match if the pet's current direction matches that

#

you can do something like having a Rest sitting state that has RandomizeDirection set, have all your walk behavior lead into Rest and Rest leading into walking again

violet grotto
#

Damn it, I don't think I understand quite what you're saying.

#

It's a little hard for me to imagine how that would actually look.

brittle pasture
#

are you familiar with finite state machines

violet grotto
#

No

#

Screw it, I think I'll just stick to the 4 frames. My brain can't process what I could do.

brittle pasture
#

basically a pet can have one active state, and it can change to any other state depending on a variety of conditions
you want to define all the states, and how that state can switch to another state yourself

violet grotto
#

Okay then...

#

If the pet starts with walking up it could then transition to walking into a different direction or a completely different state.
Did I get that right?

brittle pasture
#

yes

lucid iron
#

If u only have 4 frames do u need any of that

brittle pasture
#

to clarify what I said earlier, you can't use UpBehavior/DownBehavior/etc. when switching between walk states because if the pet is walking up it will only ever trigger UpBehavior, same with Down/etc.

violet grotto
#

Ah

#

So when I want to define "Change to WalkUp", it would look like this?

#

I assume I can leave "Behavior" as "null" then.

#

Wait

#

No

#

I think I'd have to put "WalkUp" into "Behavior" then.

brittle pasture
#

yeah, and 3 more entries for each of the other directions

violet grotto
#

Okay! I think I understand it now. I'll give it try after dinner.

#

I need some food to recharge my brain.

violet grotto
late pewter
#

Oh huh! Neat! I'm looking at them on the Rain World wiki: Do you plan to add spikes to them at some point?

violet grotto
#

Probably. For now this little guy wills erve as a base for more variants.

late pewter
#

Looking cool so far!

primal rover
#

I wanted to edit the wiki but because it's a link, I can not with my new account.

Here's the section I wish to update on the following page: https://stardewvalleywiki.com/mediawiki/index.php?title=Modding:Modder_Guide/Get_Started

To decompile the game code...

:# First-time setup:
:## Install {{github|icsharpcode/ILSpy/releases|ILSpy}} for Windows (get the "ILSpy_binaries" file under assets), or [https://github.com/icsharpcode/AvaloniaILSpy/releases Avalonia ILSpy] for Linux and macOS. If you can't get Avalonia ILSpy to work, there's also this command line tool you can use: [https://www.nuget.org/packages/ilspycmd ilspycmd].
:## Open ILSpy.
:## Click ''View > Options'', scroll to the "Other" section at the bottom, and enable "Always qualify member references".
:# Open <samp>Stardew Valley.dll</samp> in ILSpy.
:# Make sure ''C#'' is selected in the language drop-down (not IL, IL with C#, or ReadyToRun).
:# Right-click on ''Stardew Valley'' and choose ''Save Code'' to create a decompiled project you can open in Visual Studio.
:## If you're using Avalonia ILSpy, make sure to add the <samp>.csproj</samp> file extension to the filename in the save dialog, like so: <samp>Stardew-Valley.csproj</samp> (Otherwise, the project won't decompile properly.)

This is my addition:

If you can't get Avalonia ILSpy to work, there's also this command line tool you can use: [https://www.nuget.org/packages/ilspycmd ilspycmd].

If someone else wishes to update this, feel free

rancid musk
#

What incredible exceptions I've had reported from an android user: System.InvalidProgramException: Invalid IL code in Leclair.Stardew.CloudySkies.Layers.RainLayer:Draw: IL_002c: stloc.3 System.InvalidProgramException: Invalid IL code in Leclair.Stardew.CloudySkies.Layers.RainLayer:Update: IL_001c: stloc.2

primal rover
gaunt orbit
#

Android modding my beloathed

rancid musk
#

I really want to know what's happening with the android version to make stloc throw invalid IL code

#

-# Not enough to investigate that mess, mind you

indigo yoke
#

anyone know why a monster would be invisible if you teleport into the mines or volcano?

primal rover
rancid musk
#

Well, it has to be that the stack is in a bad state. But yeah. Fun stuff in android land.

lucid iron
#

If u decompile like this u can have gamedata and game in 1 folder

clear oxide
#

Wow 🤯

inland rain
#

oh okay, thank you for clarifying

cosmic thorn
#

Guys do i still need a framework to make a simple quest via mail just to deliver an item?

brittle pasture
cosmic thorn
#

yeah but there is no mention of an item option and stuff, how do i trigger that item was delivered ?

tiny zealot
#

part of the quest data is what item to deliver, how many, and to whom

cosmic thorn
#

i just need to deliver like idk one strawberry

brittle pasture
#

you specify ItemDelivery in the type, and what item to deliver to whom in the "completion requirements" field

cosmic thorn
#

is there info for that?

tiny zealot
#

did you follow the link selph gave you a minute ago?

cosmic thorn
#

ah

#

i noticed

calm nebula
cosmic thorn
#

i didnt see the last table there

calm nebula
#

But is rather like a normal bit of code

rancid musk
#

I assume they're doing some funky Cecil stuff to rewrite types and it's exploding. Or... something.

#

This is the IL around the stloc that exploded: ```
// loop start (head: IL_0111)
// sequence point: (line 141, col 4) to (line 141, col 29) in F:\Code\Stardew\StardewMods\CloudySkies\Layers\RainLayer.cs
IL_0020: ldarg.0
IL_0021: ldfld valuetype ['Stardew Valley']StardewValley.RainDrop[] Leclair.Stardew.CloudySkies.Layers.RainLayer::Drops
IL_0026: ldloc.2
IL_0027: ldelem ['Stardew Valley']StardewValley.RainDrop
IL_002c: stloc.3
// sequence point: (line 142, col 9) to (line 142, col 18) in F:\Code\Stardew\StardewMods\CloudySkies\Layers\RainLayer.cs
IL_002d: ldc.i4.0
IL_002e: stloc.s 4

#

Which is just cs for (int i = 0; i < this.Drops.Length; i++) { RainDrop drop = this.Drops[i];

calm nebula
#

It could easily be "in mobile raindrop is a reference type instead of value type"

#

Tbh

rancid musk
#

Hmm.

brittle pasture
#

I got an invalid IL error on Android in a postfix

rancid musk
#

Let me check the android decomp

#

... yeah, cs public class RainDrop {

#

That's exactly it atra lol

north palm
#

hello kitty_wave i have a question... Is there a way to put a house for my npc if I will like to still install very large mods like stardew valley expanded?

I added a house for my npc at the mountain map but run into an error

calm nebula
#

Thank you thank you I'm a geek and this is what I decide to do with my life

urban patrol
calm nebula
#

I don't mean modding. That would be productive

rancid musk
#

I'm actually not sure why I'm using the built-in RainDrop type

calm nebula
#

I mean "understanding why il does what it does"

north palm
urban patrol
#

!log if you can share it via these instructions i’ll be able to help more

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.

urban patrol
#

!json you can also upload your json here for us to see

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.

cosmic thorn
#

huh... what did i do wrong. it does work but nothings happening when im giving the berrie

"1001": "ItemDelivery/Sweet Sweet Strawberry/Grow great strawberries for great Gus!/Grow and give one strawberry to Gus/Gus (O)396/-1/600/-1/true/Thank you! This strawberry is really great!$h

urban patrol
cosmic thorn
inland rain
north palm
#

oh wait. i did change it to bus stop since i run into an error on the mountain.. but is my code correct?

#

what extra steps i need to do

urban patrol
#

i don’t think you’re actually patching in your building to the bus stop map. you added a warp correctly but you didn’t replace the actual tiles to show your building

#

you have a commented out section of code where you load the bus stop map (which i assume is where you meant to), but for compatibility you should really be using edit instead of load

north palm
#

oh okiee i will try it.. thank you luna_mafu_love

urban patrol
#

np, @ me if you need more help

north palm
#

will do 0b_love

cosmic thorn
#

yeah that was an issue

tiny zealot
cosmic thorn
#

oh i see, okay thx

crude plank
cosmic thorn
#

guys how to jump to the next line in the mail? \n dosent work

brittle pasture
#

use ^

cosmic thorn
#

it did help thx

rancid musk
#

The number of mods that do something like cs GameMenu menu = Game1.activeClickableMenu as GameMenu; only to then not actually use any properties of GameMenu is too darn high.

#

Most recently, I discover this. Why? Just why? This cast is literally worthless that's the only thing they do with it. ```cs
GameMenu activeMenu = (Game1.activeClickableMenu as GameMenu);
activeMenu.drawMouse(Game1.spriteBatch);

#

I could easily patch this mod with BGM if not for this stupid cast, but now I need to PR to this mod instead.

spice inlet
#

to be fair there's a lot of code that you don't see

#

code that didn't make it to the commit

#

maybe they did temporarily use one of its properties to test things out, or they wanted full type suggestions

#

there's also nothing inherently wrong with it (apart from not checking if the menu is actually GameMenu before casting)

primal rover
#

It could be copy pasting code and a lack of understanding. I see that happen often enough until someone points it out on a PR.

pine elbow
#

Does anyone have some good documentation on how Data/animationDescriptions works?

#

the wiki is confusing

ornate trellis
#

whats confusing about it

pine elbow
#

what is each part between the / for?

#

It can have numbers, and texts, what each one does

#

how many parts a complete string can have, separated by /

ornate trellis
#

it says so on the page frames/repeat frames/leaving frames/message key/offset X Y/laying_down whereas you dont need to have laying_down but the others are needed

#

when it says The entry frames will play after arriving at the schedule point for example you want your npc to sit down and read a book at the spot you chose. you entry frames is you putting down the sprites of the process of sitting down, they play once in the beginning, repeat frames are as it says repeating like when they sit and do the book reading and as the wiki already states well the leaving frames will play before moving on to the next schedule point.

pine elbow
#

Let's take it one step at a time, there are 6 parts in total, right?
The first being the location X and Y where the character is?

#

Are these 2 numbers the location of the npc on the map?

#

Or are they sprite ids?

ornate trellis
#

its sprite IDs

#

each fame equals to a specific ID on the sprite sheet

pine elbow
#

Would that be in the first part of the string then?

ornate trellis
#

first part is the entry frames as i said. a set of frames that play once at the beginning of the animation

pine elbow
#

I'm building a class in python to build this animationscripts string, so I need to know all the information. Can I give the name to the variable that receives this first frameEntry value, or suggest some other name?

ornate trellis
#

i cannot really say much on the coding part of things, onto the CP scripting

calm nebula
#

(Just fyi, if you're parsing these things- the documented form on the wiki works, but the actual game parser is significantly looser)

#

And there are special cases with the sleep animations I didn't document

merry rampart
#

So I'm making an NPC that is marriagable. She has a familiar that follows her around like 70% of the time. I want the familiar to move into the farmhouse when the player marries my NPC, but I'm not exactly sure how to do this.

Would I be able to add the farmhouse into the familiar's schedule? Making her a Custom Companion is another option I've considered, but I also want her to be friendable

pine elbow
#

But there are 6 parts in total?

pine elbow
# calm nebula And there are special cases with the sleep animations I didn't document

Is this all there is on the wiki?

Sleep animation
When the NPC goes to bed, they'll play the looping sleep animation set via <lowercase NPC name>_sleep in Data/animationDescriptions, if it exists. For example, this content pack adds a sleep animation for an NPC named 'Pufferbob':

{
    "Format": "2.6.0",
    "Changes": [
        {
            "Action": "EditData",
            "Target": "Data/animationDescriptions",
            "Entries": {
                "pufferbob_sleep": "50/50/50" // note: make name lowercase
            }
        }
    ]
}```
#

there really isn't a full explanation that I need

#

What I need to know is how many parts it has or can have, what each part is for, and a cool name to give them, and what type of data each part can have.

I noticed that it can be int, list[int], or str

calm nebula
#

There are additional constraints I did not document

#

I believe the entry frame can be only one frame, for example, or you get issues in multiplayer

pine elbow
#

Not even the game uses all the features it offers, I'm creating a python library, and I almost always find features that the vanilla game doesn't use, and they are available.

#

example

"penny_beach_towel": "16 17/18 18 18 18 18 18 18 18 19 19 19 19 19 19 19 19 19 19 19 19/17 16//laying_down",
  

This one has 5 fields divided by /

#

there is an unused field there

calm nebula
#

Yup, it's omitting the message key

#

Tbh if you're making a lib it's worth spending some time with the game's many specialized parsers

pine elbow
#

Do you know in which game class I see the use of this string? Can I see it through ilspy?

calm nebula
#

Not off the top of my head, sorry

#

You can certainly see it in ilspy

pine elbow
pine elbow
#

From what I understand then:
frames: list[int]
repeatframes: list[int]
leaving_frames: list[int]
message_key:str,
offset: point,
laying_down : str << this laying_ ?

#

If it is always laydown I can use bool, if not, I will have to use str

inner harbor
#

Would it be worth my while to adjust my sending of mail to trigger actions?

brittle pasture
#

is this for ESR? if yes I don't see why not

lucid iron
#

How were you sending them before

brittle pasture
#

the existing precondition mails will probably remain working indefinitely

inner harbor
#

via Data/Events, same way the game did it.

brittle pasture
#

but migrating to best practices is definitely recommended

inner harbor
#

They're kinda all over the place, but I'm not sure the best way to organize it: whether to keep them on the same page as the other information for the NPCs they're linked to, or put them all into one include.

lucid iron
#

Yeah and once u do u have more options

inner harbor
#

I've done some - for my smaller mods.

brittle pasture
#

an approach is to keep things relative to the root depending on the asset they're editing
ie edit Data/TriggerActions in Data/TriggerActions.json

#

that way you know exactly where an edit is

lucid iron
#

Technically having 1 big trigger action editdata is more performant than N number of em

brittle pasture
#

you can subdivide the file into sections for more readability

golden basin
#

So my map edit is acting like my tilesheet doesnt exist but it does. its working for a different edit I did via content patcher but for some reason its no longer working for this new edit im doing? does anyone have an idea of why it would be ignoring my tilesheet? ill send my code soon

lucid iron
#

Send the error log too

ocean sailBOT
#

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

lucid iron
#

What is the actual name of the tileset in Tiled?

golden basin
#

spring_Fellowclown_Outdoors

#

and its loaded into my mod

lucid iron
#

Are you sure?

golden basin
#

Yes, its actually working for a different edit i did the same way

#
"LogName": "Glowflower 1",
"Action": "EditMap",
"Target": "Maps/{{ModId}}_AncientGraveYard",
"MapTiles": [
{
"Layer": "Buildings",
"Position": { "X": 32, "Y": 9 },
"SetIndex": 3663,
"SetTilesheet": "spring_Fellowclown_Outdoors",
},
{
"Layer": "Buildings",
"Position": { "X": 32, "Y": 10 },
"SetIndex": 3756,
"SetTilesheet": "spring_Fellowclown_Outdoors",
},
{
"Layer": "Paths",
"Position": { "X": 32, "Y": 10 },
"SetIndex": 8,
"SetTilesheet": "Paths",
},
]
},```
lucid iron
#

So for a vanilla example sometimes spring_outdoors has the name "untitled tile sheet" in the map itself

golden basin
#

this is the other one that is working

lucid iron
#

Your patches do look right hence tmx is what i want to check next

golden basin
lucid iron
#

Take screenshot of the panel with the tilesheets

golden basin
#

is it the cap S that could be causing it?

lucid iron
#

Yeah possibly

#

Try renaming it in tiled (edit tileset)

golden basin
#

i will eat my hands if thats the issue one sec

#

yep time to eat my hands

#

she lives!

ornate locust
#

mood

inner harbor
ornate locust
#

also thanks for reminding me on accident to get all my trigger actions in the same place, I had some of the things scattered in mail

inner harbor
#

problem is, it's easier for me to work on things if I do each NPC at a time

ornate locust
#

no wonder I couldn't find the damn things

brittle pasture
#

you can subdivide it maybe

#

NPCs/CoolGuy/TriggerActions

inner harbor
#

I'm trying to reduce my number of content patches, lol.

odd ginkgo
#

hey all, a couple questions! 1, I've added marriage dialogue to a custom NPC (funLeave_NPCname), but the game says it doesn't exist. Do I need to create a different dialogue file for marriage?

#

2, I'm adding a big temporaryAnimatedSprite to a cutscene, but I'm not sure where to load it - the Events/Temp? Or TileSheets/animations? Thank you and hopefully that makes sense

brittle pasture
#

yeah marriage dialogue is in a different target

worldly sundial
lucid iron
#

Wow 2 caked

#

Does machine rules all work properly for any tile the big bc is on?

worldly sundial
#

I tried to but I probably missed some things

merry rampart
#

can farm animals spawned with MEEP be made to follow an NPC around? or do they just wander?

worldly sundial
#

Bigger craftables created fake ghosts in the other spots, For bigger machines I have the one real object top left and then I tried to postfix/transpile a bunch of checks for objects. So you can grab/place into it from anywhere

lucid iron
#

Discord cached the embed already

copper kestrel
#

this text on smapi.io uses the Heart Suit emoji (♥️), not the Heart emoji (❤️)... literally unplayable

lucid iron
worldly sundial
#

does that work for a thumbnail

lucid iron
worldly sundial
#

Yeah I've seen that, I mostly did this for fun haha
Since I'm mostly just overriding location checking/ draw code for the machine most of the machine logic should (™️ ) work

lucid iron
#

Wobble DokkanStare

odd ginkgo
rigid oriole
#

cannot for the life of me find where the game has the art for the critters like the bunnies and things... anyone know?

#

i've found birds and stuff but not the rabbits

calm nebula
#

Next to the birdies

#

Tilesheets/critters

rigid oriole
#

i'm in the wrong folder

#

athank u 😭

#

there's birdies in loose sprites too

lucid iron
#

Crabs r there too

rigid oriole
#

there are also crabs in loosesprites 😭

lucid iron
#

I think those r movie theater birbs

rigid oriole
#

wait i've never seen this lil guy

calm nebula
#

New to 1.6

#

Which none of us have played right

rigid oriole
#

i played SOME ok 😭

#

guess i will need to keep playing

#

i restarted to do a good modded run

lucid iron
#

The opossum...

calm nebula
#

I laughter at myself

lucid iron
#

When i saw her i was scared

calm nebula
#

I have not played 1m6

lucid iron
#

But not as scare as big foot

calm nebula
#

Chue will play 1.6.16 foe me

lucid iron
#

Big foot very scare...

rigid oriole
#

the bigfoot is crazy

odd ginkgo
#

my wife came from the other room

#

what a cutie

lucid mulch
calm nebula
#

Unfortunately for me I have a very good memory

#

And have spent too long looking at 1.6's code/data files

merry rampart
#

where's that one guide to making a non-social npc?

brittle pasture
#

in 1.6 that's just a regular NPC but with CanSocialize to false

merry rampart
#

ah ok

karmic jetty
#

Hey everyone! I'm trying to draw over the farmhouse wood pile. This code is mostly working, but, I'm not seeing a way to set the layer to be between the player and the farmhouse itself. Currently, it draws in front of the player. If a full gist would help, please let me know. I'm thinking that I'm maybe going about this in the wrong way.

      
farmhouse.DrawLayers.Add(new BuildingDrawLayer()
          {
            Id = "Leeous.Woodpile_Empty",
            Texture = Helper.ModContent.GetInternalAssetName("assets/woodpile_empty.png").Name,
            SourceRect = new()
            {
              Width = 47,
              Height = 36,
            },
            DrawInBackground = false,
            DrawPosition = new()
            {
              X = 2,
              Y = 78
            },
          });
late pewter
brittle pasture
brittle pasture
#

that actually looks like DrawLayers

#

just in C#

lucid iron
#

or like, dont do it in here i mean

#

do it in data edit

karmic jetty
#

Looking into that now, thanks!! I am trying SortTileOffset now, thanks y'all. @lucid iron when you say "do it in data edit", do you mean like this?:

if (e.NameWithoutLocale.IsEquivalentTo("Data/Buildings"))
      {
        e.Edit(asset =>
        {
          var data = asset.AsDictionary<string, BuildingData>().Data;
          var farmhouse = data["Farmhouse"];
          // TODO: Try drawing blocks over tiles to ensure we're on the right spaces
          
          farmhouse.DrawLayers.Add(new BuildingDrawLayer()
          {
            Id = "Leeous.Woodpile_Empty",
            Texture = Helper.ModContent.GetInternalAssetName("assets/woodpile_empty.png").Name,
            SourceRect = new()
            {
              Width = 48,
              Height = 48,
            },
            SortTileOffset = (float)3,
            DrawInBackground = false,
            DrawPosition = new()
            {
              X = 0,
              Y = 4 * 16
            },
          });
          
          farmhouse.ActionTiles.Add(new()
          {
            Id = "Leeous.Woodpile_Open",
            Tile = new()
            {
              X = 2,
              Y = 2
            },
            Action = "Leeous.Woodpile_Open"
          });
        });
      }
    }
lucid iron
#

yea (assuming all yer fields are right, im trusting intellisense on that one)

karmic jetty
#

Awesome, trying it out now, thanks as always

lucid iron
#

also u might need a load for assets/woodpile_empty.png?

calm nebula
#

No that's finw

karmic jetty
#

looks like it's working (still editing the sprite, ofc that's not final haha) thanks guys

inner harbor
#

The official code for unlimited special order duration isn't released yet is it?

tiny zealot
#

it will be in 1.6.16 (no date announced)

lucid iron
#

yea u should keep using current stuff

inner harbor
#

just writing some special orders from a very demanding junimo

lucid mulch
#

I'm tempted to backport some of 1.6.16 via a mod, though it would run the risk of a SolidFoundations where it later changes

lucid iron
#

what did solid foundations do?

calm nebula
#

(Also east scarpe has unlimited special orders in the c# iirc)

lucid mulch
#

solid foundations was a backport of the 1.6 building data model

#

but it was for the original proposal which changed a few times which meant migrations had to happen anyway

inner harbor
#

It does atra!

#

(you wrote it)

#

she is a demanding little critter. I love writing her.

versed wyvern
#

Just coming in to drop the info I just tested that RejectItem dialogue does show even if you already gifted the NPC an item for the day, which is exactly what I was hoping for genshin_oh

#

If I want to set a flag that lasts for X days, is setting and checking for a Conversation Topic the best way to do it? blobthink

lucid iron
lucid mulch
#

from 1.5.6's perspective it was a custom asset

lucid iron
#

u can do IncrementStat YourTimer -1 in a dayending trigger

#

this would be useful if u needed arbitrary times

tiny zealot
#

you can already set topics to last an arbitrary number of days

#

i'm kind of torn about it, so i have avoided doing any time gates of this sort

versed wyvern
#

Really? Why's that?

tiny zealot
#

the stat method feels more "correct" (programmer brain, please ignore) because it doesn't use a different system that also has minor side effects.
but the CT method is easier because the code to handle it is built in so you don't have to do the trigger action parts too

#

(the side effects are "you can't reuse a topic because the game won't add it a second time" and "you end up filling the set of topics with all of the _memory_oneday and so on automatic follow-up topics")

#

i'm fairly sure there's minimal performance impact from having more topics, since they are stored in HashSets, but they bother me

lucid iron
#

Well to be fair the stats way is very easy code too

#

But there's no cp token for stats rn

#

Need to have calcifer or emp

versed wyvern
tiny zealot
#

if you want to reuse the timer, then i would recommend a stat

#

IncrementStat YourNameHere days to start it.
DayEnding IncrementStat YourNameHere -1
DayStarted GSQ PLAYER_STAT Current YourNameHere 0 0 to enable whatever comes after the timer expires

versed wyvern
#

The 0 0 part is the range where the query is true, I presume?

tiny zealot
#

yeah, min 0 max 0

#

you'll probably need other guards on it too but that's a starting point

versed wyvern
#

I think this should work for my mischievous purposes then, thank you both henyadance

tiny zealot
#

in particular, you probably only want to decrement it if it's positive, and you probably want the zero trigger to fire only if it was previously positive (so it expired, versus simply not having been set)

north palm
#

Hello kitty_wave so i was trying to load a house asset file to the mountain map but it wasn't showing up.. there's no error on the log and I'm warping to the correct interior house at the right spot.. what am i doing wrong with this code? https://smapi.io/json/none/fc035e381c2b499ca0a85dbb44771f26

Thank you lurk_love

urban patrol
#

have you made the map including the exterior of your house in Tiled?

north palm
urban patrol
#

what people usually do is two different patches--one for non-SVE, and one for SVE with a When HasMod condition

#

i'm not sure how the mountain map for SVE differs from vanilla, but yes you can just find that map, make a copy, and then patch it the same as vanilla

north palm
#

okie let me search that. thank you 0b_love

urban patrol
#

if you need an example let me know, i've done it for my mod!

north palm
#

oh an example would be great.. you are godsend 0b_love

urban patrol
#
    "Action": "EditMap",
    "Target": "Maps/{{ModId}}_Lighthouse",
    "FromFile": "assets/maps/Lighthouse_SVE.tmx",
    "FromArea": { "X": 26, "Y": 0, "Width": 12, "Height": 5 },
    "ToArea": { "X": 26, "Y": 0, "Width": 12, "Height": 5 },
    "When": {
        "HasMod": "FlashShifter.StardewValleyExpandedCP",
    }
},```

this is for my custom map, not vanilla, but the same principle applies
north palm
#

okiee love_flowers thank you! zcatto_heart

lucid iron
#

can u negate GSQ,GSQ to make NAND

#

asking in case i dont actually need to add this lol

#

hmm i guess it's like

#

!ANY "GSQ,GSQ"

calm nebula
#

Any "!GSQ" "!GSQ"

lucid iron
#

and ig u can also do XOR if u want bolbthinking

#

ANY "GSQ,!GSQ" "!GSQ,GSQ"?

#

ill add it anyways Sleepden

tribal ore
#

So, I apologize for a very non-concrete question but... are there any common mods that mess with conversation topics? Keeping them around for longer than they should be, not letting them count down? Or is there another reason for conversation topics just not going away?

lucid iron
#

lasting conversation topic

tribal ore
#

Yeah

lucid iron
#

it does what it says on the tin

tribal ore
#

That's a mod?

lucid iron
#

ye

#

i havent looked at exact mechanism tho

tribal ore
#

Alright, thank you. I'll check if either of the bug reports I've gotten involve that one then. I have a couple of events timed by conversation topics that are failing for two people

calm nebula
#

(Also, can I point out any set of binary logic without backloops can be broken down into the standard sum of products form)

lucid iron
#

why would this be sinful...

#

im adding proper GSQs for all of these

calm nebula
#

Smh

#

A Karnaugh map (KM or K-map) is a diagram that can be used to simplify a Boolean algebra expression. Maurice Karnaugh introduced the technique in 1953 as a refinement of Edward W. Veitch's 1952 Veitch chart, which itself was a rediscovery of Allan Marquand's 1881 logical diagram or Marquand diagram. They are also known as Marquand–Veitch diagr...

lucid mulch
#

I don't see how making logic gates out of GSQ is sinful

north palm
merry rampart
north palm
#

i didn't have to use the when code love_flowers

lucid iron
#

u need to show the npc definitions not the load

merry rampart
#

the disposition?

lucid iron
#

yea isnt there a place to define the real size

merry rampart
#

I didn't see anything like that in the description of the mod

lucid iron
#

nvm they are just given 64x128

#

thats pretty limiting...

#

so yea u need to make the cat's frames 64x128 each

#

if u just want a bigger npc though, poohcore is what you want

#

that one just fixes pathing issues with >16 footprint npcs

merry rampart
#

hmmm looks a lot easier

#

maybe later along the line ill try and make her sprites smaller, but till then...

#

success!

north palm
#

Tried to set the layer to backs, buildings and paths but they aren't removing the objects

brittle pasture
#

if this is bushes and trees you need a new save

#

or use Reset Terrain Features

north palm
#

oh yes it's trees and bushes. I'll check reset terrain.. thank you!

lucid iron
#

i implemented the internal id field like this (default off)

#

also supports npcs and such

#

i followed the list_items format for preserve id but hm its a little hard to see

sour sleet
#

Is there a way to make a custom ingame achievement? (The gold stars on the collection tab)

lucid iron
#

yes but dont

sour sleet
#

Why’s that?

lucid iron
#

they were still int ids iirc

#

yea Game1.getAchievement

#

also need C# to do it

sour sleet
#

Ahh ok gotcha

merry rampart
#

what would prevent an npc from being able to get back inside their house? they can get out but can't get back in...

house is entered by a LockedDoorWarp tile property, same as the vanilla town buildings. Player character can enter just fine

vernal crest
#

Is the end point of the NPC's schedule inside the house accessible?

merry rampart
#

It's behind a door that the player cant enter unless you have sufficient hearts. and they can get out of it just fine

vernal crest
#

I meant the tile inside the house that the NPC is trying to get back to. Is there a clear path from the front door of the house to that tile?

merry rampart
#

yes

#

nothing on the buildings layer that would prevent access

#

can they not stand on a tile that has back2?

#

that's the only thing i can think of....

vernal crest
#

I wouldn't think that would affect it, but you could try changing their end point somewhere else just to be sure.

merry rampart
#

ill make the new spot right in front of the entry door

#

nope

#

im stumped...

vernal crest
#

You slept after changing the schedule?

merry rampart
#

yeah

#

... frick i think i might know what it is

#

i had another warp tile on the map... one they couldn't get to

#

even though the door was closer

vernal crest
#

Oh for the same house?

merry rampart
#

yeah

vernal crest
#

Oh yeah circular pathing will probably do it

merry rampart
#

deleted the second warp and yeah, that was the issue

#

so how do i keep my second warp without creating a circular pathing issue?

vernal crest
#

Hm, I would've said I don't think you can unless it's player-only, but ScienceHouse has two and I don't see anything special for that to make it work.

inland rain
#

is ticks per second constant? can i convert ticks to seconds?

#

oh i see it should be 60 per second

lucid iron
#

if u have a GameTime its got both Ticks and miliseconds

inland rain
#

oh ty 🙂

lucid iron
#

(the elapsed TimeSpan actually)

left grove
#

helloo question! how do you figure out if a mod is active or not? 🥲

lucid iron
#

are you in content patcher or C#?

inland rain
#

C#

inland rain
#

ah kk

left grove
#

oh content patcher

lucid iron
#

in content patcher u have the HasMod token

lucid mulch
merry rampart
#

this is my house. i think because the second warp is blocked, that's creating the pathing issue. in the science house, the second warp isnt blocked.

lucid iron
#
"When": {
    "HasMod": "otherModId"
}
left grove
#

ohhh! okay i think i can figure it out from there, thank youu

merry rampart
#

i think ill try making that second warp a step warp instead of a click warp

lucid iron
#

would that make a difference NotteThink

vernal crest
#

TouchAction Warp is player-only so it might stop the pathfinder trying to send an NPC through it

merry rampart
#

I would like the npc to be able to access it because she sometimes likes to spend time on the roof

calm nebula
#

Don't do that

vernal crest
#

Doesn't look like it to me Atra

calm nebula
#

Just make it the bottom tile, the one the player can actually reach

ornate locust
#

Looks like 1 to me

calm nebula
#

The second warp is ignored

lucid iron
#

fun...

vernal crest
lucid iron
#

i have a stupid idea

#

touch action PlayEvent

#

make event put u on the roof

merry rampart
#

im not sure i know what you mean

lucid iron
#

and then u add a event that is just exit location roof LilyDerp

ornate locust
#

Oh all the event does is move you outside, yeah

#

that makes sense

merry rampart
#

but will my npc be able to get on the roof? thats the problem

calm nebula
merry rampart
#

sigh. why do i keep coming up with ideas that need some sort of c# coding to impliment...

urban patrol
#

when i made a walkable roof i made a secret second identical map and separate location lmao

lucid iron
#

use that one BETAS thing to yeet them on roof?

#

idk what the schedule implications are for this

#

also what happens if u put a ladder so that the roof isnt a dead end

merry rampart
#

i do have a ladder, inside the house

lucid iron
#

outside

#

rn the roof is a dead end and yet part of a greater map

merry rampart
#

i tried that but i hated how it looked

lucid iron
#

i am more interested in whether this makes the npc no longer confused

urban patrol
#

i still recommend duplicate map, named "Roof" or something, and have the NPC go there. it won't be visible when you're not also on the roof though, if that's a dealbreaker

vernal crest
#

Outside ladder with NPC passable tiles, 10 minute NPC animation of climbing ladder, NPC on top of roof :D

lucid iron
#

oh a follow up dum idea, to be used in conjunction with the event dum idea

#

use schedule anim to get them on the roof

merry rampart
#

i could have sworn there was a property or something to exclude a tile from npc pathing

lucid iron
#

npc actually still on the ground just beeeeg offset

vernal crest
#

That is a very neat effect, though if I remember correctly it makes the speech bubble location odd because it's still on the ground (though I was remembering that in relation to someone who sits on the jukebox in the saloon, not Nova's specific example).

lucid iron
#

yea cus secretly still on the ground

ornate locust
#

offset: hella

merry rampart
#

i havent played around with schedule animations yet. just getting them to enter and exit the house is proving to be a real pain in my backside

vernal crest
merry rampart
#

yeah i dont get why they just can't use the door that's accessable and stop trying to get the one that isnt :/

pine elbow
#

Ahh schedule debugging. A cruel mistress

#

Good luck, my friend

merry rampart
#

like, the acessable door is literally two tiles away

vernal crest
#

The mysteries of the pathfinder

#

At least for those of us who don't understand pathfinding algorithms

ornate locust
#

look, see, I have a cat, and I understand this: You don't want the pathfinder to use that door, so the pathfinder wants nothing more than to use that door

merry rampart
#

I just found this bit of text in spacecore's documentation

lucid iron
#

its cus for the location level path finder doesn't consider the roof as a separate node as the outside

#

a smarter path finder would, because they are isolated, but its not smarter

merry rampart
#

sadly i cant find anything else on it

vernal crest
#

So if you made Spacecore a required dependency and made a map that goes between the roof and the inside map (like an attic sort of thing) you could maybe force your NPC to take the front door because the extra map would make the roof path take two warps to get to the interior of the house instead of one.

violet grotto
#

I hope you don't mind me bumping in, but I seem to have stumbled on a new issue with my custom pet.
Since I basically replaced the standard "Walk" behavior with "WalkUp", "WalkRight", etc. to change the amount of walking sprites, my pet now seems to be walking into obstacles without stopping.

#

Normally, pets seem to stop as soon as something gets in the way when they walk.

#

I'll take another look at the modding wiki page for pets, but I don't recall there being a related topic for this very specific issue.

lucid iron
#

WalkInDirection

#

try setting this perhaps?

violet grotto
#

I did that already.

lucid iron
#

Do dogs do that

#

When they have the big side dash do they stop

violet grotto
#

Nope

#

I tested that

#

When they sprint they don't stop when something gets in their way, but when they walk normally they do stop.

lucid iron
#

Yeah the sprint is essentially what u made right

#

Wonder if Walk is magic then

violet grotto
#

I'm afraid so

lucid iron
violet grotto
#

Damn it

#

Does that mean I'd have to make custom code for a modified "Walk" in order to get what I want?

lucid iron
#

yea if i was making this i'd transpiler updateSlaveAnimation to adjust the frames

#

or just let scavs go where they please cus it's funny

violet grotto
#

I think I'd have commission someone, because I have no clue how I'd do that.

merry rampart
#

so i added this tile property to the side of the building. they went up it and into the house through the roof.

i wonder if i made a schedule point closer to inside door they'd go through the door instead?

lucid iron
#

a third idea is to break up the animation (how many frames?) to more pieces

#

while they still wont be checking collision at least they can switch directions more often?

violet grotto
#

I guees that could work, but then they'd probably change direction too much, which I think would look weird.

violet grotto
lucid iron
#

hm easier approach, prefix Pet.RunState, if _currentBehavior starts with "Walk" make it exactly "Walk", restore it in the postfix

#

this is in the decompile, Pet.cs

violet grotto
#

And where is the decompile? Doesn't seem to be in the uncpacked files for Stardew Valley.

lucid iron
#

!decompile

ocean sailBOT
lucid iron
#

different flavor of unpacking

violet grotto
#

Ah!

#

The code seems simple enough, so I think I'll try giving it a go.

lucid iron
#

!harmony

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:

lucid iron
#

need postfix/prefix

#

the only big pet mod i know of is pet overhaul but idk if it has this kind of feature

violet grotto
#

Yeah, I'll look into the things you sent me first.

lucid iron
#

you can always make scavs not pets 3sSmolMiku

#

-# trinkets

violet grotto
#

I'll save that for later though, because I have o head to school soon.

violet grotto
lucid iron
#

trinket tinker just lets u have 8 frames for walk if you want

violet grotto
#

Farm animals seem rather restrictive and pets have at least a base I can work with.

violet grotto
#

I didn't think of that, actually.

lucid iron
#

but it'd be a thing that follows u and do stuff blobcatgooglyblep

#

gather forage and spear things maybe

violet grotto
#

If I figure out the walking issue with pets, then I could do both.

lucid iron
#

not an entity on the farm outside of ur view

#

trinket companions also just dont have collision in general bc they stick close to you and i didnt want to deal with pathing at the time (spiritually working on it)

merry rampart
#

screw it. im just gonna delete this roof warp and figure it out later. nothing i try seems to work

versed wyvern
#

Hrmm... is it normal that portrait emotion commands don't work when dialogue is preceded by an $action command? Like my test dialogue

"AcceptGift_(O)72": "$action AddMoney 500#Thanks, here's a tip!$h",
results in the $h being read as text

#

The portrait works properly if the $action comes after the dialogue, but I would like the action to occur first for flavor

latent mauve
#

It's definitely come up before that putting $action before dialogue text causes wonky behavior

#

Does the order of the money being given actually matter if it comes after the dialogue in this case? It shouldn't require another click or anything AFAIK.

versed wyvern
#

The actual thing I want to do is cause an instant Appearance change upon being offered the item using BETAS, which works swimmingly, but not being able to put the action first means I'd have to talk to them again to see the outfit change 02ded

#

Oh wait a sec, as long as I'm using BETAS already maybe I can make this really stupid by using a BETAS fake dialogue box instead of actual dialogue hyperthinkfast

#

Phooey, no, that doesn't work, can't use that action in a dialogue action, it seems

versed wyvern
#

Well great, it also turns out RejectItem dialogue will cancel any dialogue the character has active for the day so you CAN'T talk to them again immediately to see the new outfit

latent mauve
#

Yeah, the RejectItem dialogue is a known issue, it's listed in the upcoming fixes for 1.6.16

versed wyvern
#

Oh, really? That's good news at least smileydog

versed wyvern
#

gwat I think I just stumbled into a working solution

#

Having an extra line of dialogue before the actions, separated by $b, causes the following line of dialogue to properly apply the portrait for some reason, like this one works fine

"RejectItem_(O)91": "Is that...?#$b#$action AddMoney 500#OHHHH BANANA$h",

#

So then all I need is that RejectItem bugfix slated for that nebulous 1.6.16 release for this to work without jank WoahThink

drowsy pewter
#

ohhh banana

rigid musk
#

@drowsy pewter do you have a list of the context tags you'll be using for Cornucopia? I want to add them to my mods if applicable for compatibility:)

drowsy pewter
#

Um there's a lot of tags. What is your mod again?

#

I mean I can give you the object data file with literally everything, but I assume you more want to know about something specific, like allergen tags, food type tags, or generic ingredient tags

rigid musk
#

Ingredients/food types.. I didn't know allergens existed heh

#

I have a few mods (of which I can't remember off the top of my head because I'm tired and I just woke up) as well as my apple mod that I definitely 1000% started sideeye

drowsy pewter
#

I just want to know if you're using them to write machine rules, if you're writing flexible spacecore cooking recipes, or if you're creating new crops and stuff that you want to add tags to for other modders to use your items, not necessarily for compat with cornucopia specifically

#

For example I tag every single item with itemname_item, so if I gave you every tag that'd be like 1000 of them 😂

rigid musk
#

So many tags..

#

It's for crops and such

#

I presently don't have any fancy machines that I've made.. yet

#

I.e. one of my mods has a celery crop, the apple one will have.. well.. a lot of apples

#

I also have like.. mushrooms and weird berries

#

Weird berries is the best way I can describe a qi berry honestly

drowsy pewter
#

So if its just for crops you can use the itemname_item format (such as cucumber_item) which is already used in Cornucopia More Crops so you can see that as an example. Like I'd suggest adding apple_item to all of your apple items.

Theres additional tags which I add to certain types of food ingredients to sort them into categories, which are the following:
chili_item
edible_flower_item (this is used by lumina's mods)
berry_item (however ive been informed that the berry distinction doesnt exist in every language, so this is kind of a fuzzy category thats been confusing players)
edible_mushroom (vanilla, so make sure to add this)
leafy_green_item
root_vegetable_item
grain_item
bean_item
herb_item
spice_item

#

Adding those tags would allow your items to be used with certain cornucopia cooking features

#

if you come up with something that could be useful but it's not there yet, you can also make up a tag to add

rigid musk
#

Thank you!

drowsy pewter
#
Stardew Modding Wiki

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

rigid musk
#

I've used a fair few of the existing ones (like the edible mushroom one, which is why the shroom i have can be turned into dried ones) but it's good to know some others for compat :]

#

It's also cool you can kinda just.. make them

woeful lintel
#

Heyyyy, so I just noticed that the IGameContentHelper.Load<Texture> method says;

Load content from the game folder or mod folder (if not already cached), and return it. When loading a .png file, this must be called outside the game's draw loop.

#

Do I have to load all textures when parsing the Furniture, and store them in a cache, and hook this cache to the assetInvalidation Event?

#

Long story short, I'm having an issue where the game searches for localized assets when I don't want it to do that, and I'm trying to figure out how to avoid it spitting a wall of errors every time it loads a texture

lucid mulch
#

searches for localized assets

wall of errors

can you clarify?

woeful lintel
#

FF works fine in most cases but if the game is not in anglish, and there is a CP "Load" patch targetting an asset from a Furniture Pack that is not actually in it, the SMAPI content pipeline will throw errors because it can't find the localized version of the asset (ending in ".png.ja-JP" for example), then find the non-localized asset loaded by CP and only then work as intended. So this will cause a bunch of errors to be logged every time the asset in question is invalidated.

#

Here's a snipper of log to illustrate the issue:
Edited out the log

ocean sailBOT
#

Log Info: SMAPI 4.2.1 with SDV 1.6.15 build 24356 on Microsoft Windows 10 Home, with 34 C# mods and 18 content packs.

lucid iron
#

Did u check the name without locale

woeful lintel
lucid iron
#

Oh is this not in asset requested hm

woeful lintel
#

I've not looked into this much yet, but the error changes when using an "EditImage" CP patch: since there's a dummy asset in the Furniture Pack, the game has no issue asking FF to get it, but it's been reported that there's an error about a NullReferenceException when returning to title, and loading the save again crashes the game with ObjectDisposedExceptions in the drawloop.
Here's the log: https://smapi.io/log/37f80adf32d545898011d3bd469a534b

ocean sailBOT
#

Log Info: SMAPI 4.2.1 with SDV 1.6.15 build 24356 on Microsoft Windows 10 Home, with 34 C# mods and 18 content packs.

lucid iron
#

While im not sure what would you do for content pack for for this, content patcher will Load particular asset to all possible locales unless otherwise specified

#

This second log looks like attempt to EditImage an asset but then failed at making it a Texture2D?

woeful lintel
#

would including the ".png" extension in the target be the case of "otherwise specified"?

lucid iron
#

To avoid draw crashes u should probably have an error texture

woeful lintel
#

I guess, but how do I know that it was disposed before sending it into SpriteBatch.draw? Is there a method to test that?

calm nebula
#

Texture2d.IsDisposed iirc

#

But that's a bandaid at best tbh

tiny zealot
lucid iron
#

I always just made content patcher do all the data loading so this is all pretty out of my depth LilyDerp

#

The thing about png is true but actual error is assets/RFT(Under-Room)_High.png missing (is it missing)?

calm nebula
#

One thing to note is that fundamentally the game relies on having exactly one copy of the asset in cache, and when it updates that copy, it actually just swaps out the data in the texture

#

I personally think this is fragile af but was probably a required thing if they didn't want to, you know, break backwards compat

woeful lintel
# tiny zealot if this means a Target, like a game asset, like it is used in CP, then including...

in this context, the asset is required by FF with a path that looks like FF/<Furniture Pack ID>/<asset path in Pack>, with the last part including the extension.
FF has a OnAssetRequested event hook to fetch the assets in the appropriate Furniture Pack, but in the case where the first bug happens (CP Load), the asset doesn't exist in the Furniture Pack because it is supposed to be loaded by CP with a higher priority. However the game tries to load localized versions of the asset before the naked path, which are not patched by CP and therefore print "asset not found" errors

woeful lintel
#

In the case of the CP EditImage actions, I have no idea why the game trips over and gives FF a Texture2D that was disposed of, because it comes straight from the content pipeline with IGameContentHelper.Load<Texture>

#

I would assume that the game would make a new asset request if an asset is disposed of

calm nebula
#

It does not

woeful lintel
#

damn

#

So if I see that a texture I ask for is disposed of, do I need to request an invalidation?

lucid iron
#

Hm did u check DoesAssetExist

woeful lintel
#

nope, never heard about that. Looking into it

lucid iron
#

On second thought because you are loading the default asset (why) it is probably considered always existing

calm nebula
#

Loading the default asset is probably the problem tbh

golden basin
#

so is "Update": "OnTimeChange, OnLocationChange", really needed? I have some edits that happen after events, usually they apply after a time change, but im curious if waiting until the next day for it to apply normally through cp would better?

lucid iron
#

Well doing less work is always good

tiny zealot
golden basin
#

Will do this

#

Theres only a couple that absoutely do need it anyway

lucid iron
#

Oh clown did people besides Scarlett report the fog problem?

golden basin
#

yeah they did

lucid iron
#

I had hard time reproducing it

#

Theory is it happens after event reposition u

#

But passerby starts with an event...

golden basin
#

i am too but I was thinking of removing the fog and stuff because after a while it does hurt my eyes

tiny zealot
#

SDVpufferthinkblob thinking about a trigger action that just tells CP to patch update one time

lucid iron
#

Dokkan yeah but I do have to fix it still

#

Anyways it was probably related to how viewport changes worked, will release a maybe fix on the weekend

woeful lintel
lucid iron
woeful lintel
#

There's also my initial worry: is it ok to call IGameContentHelper.Load<Texture2D> during the draw loop? Its description says it's not ok, but I don't understand when I should load the texture if not during the draw loop

lucid iron
#

It's expensive

lucid iron
#

I thought the betas one is invalidation

#

Does it force immediate reload of maps

uncut viper
#

no the BETAS action calls patch update console command

tiny zealot
woeful lintel
lucid mulch
#

if you are getting disposed textures through the asset pipeline, somethings gone very wrong

#

SMAPI tries very hard to preserve Texture2D references

woeful lintel
#

I have an idea but it's hard to wrap my head around how to apply it

uncut viper
#

calling the Load function in the draw loop means it will be trying to load that texture again every single frame
very bad

lucid iron
#

I don't think where you be doing the load is the problem though

woeful lintel
uncut viper
#

yes, but it still has to go through the process of getting it from the cache

woeful lintel
lucid mulch
#

what is calling the load, what content manager is doing the load, and how is the texture used?

golden basin
#

i have a question does "Update": "OnTimeChange, OnLocationChange",
only happen once?

#

or is every single time

lucid mulch
#

the update rate is how frequently the patch will be reevaluated, it will only actually cause the asset to change if the patch will do different behaviour

#

but it would be every timechanged (600, 610, 620, etc) and warping every time

golden basin
#

jeez so everytime the time or location changes, the game will check the entry?

lucid iron
#

In my stuff when I want a texture i ask the content pack (for cp) to do a Load, so they have the texture they want from the start. You described that you are loading some kind of placeholder for content patcher mod to EditImage so even if the editimage fails you get this possibly invalid placeholder

golden basin
#

no wonder theres lagging happenig with my mod ill fix that

lucid mulch
#

Again, it only causes the asset to change if your patch is changing

lucid iron
#

If you were not creating a different Texture2D to hand to the content pipeline everytime that could be an issue, but i didn't see ur code here

lucid mulch
#

cp does other logic like what tokens you use to optimise further

golden basin
#

yes but it checks it everytime to see if if it needs changing right?

lucid mulch
#

Texture2D's during normal operations cannot be removed from a content manager cache in SMAPI, unless the content manager itself is being disposed

woeful lintel
#

Here's the process as it is in the current version:

  1. The game wants to draw a Furniture defined through FF
  2. FF requests the texture with helper.GameContent.Load<Texture2D>(path) (this is FF's mod helper)
  3. if the texture is not cached, then there's an OnAssetRequested event
  4. FF finds the Pack that the asset is from (its ID is in the path from step 2)
  5. FF calls LoadFrom on the event by passing it a method that depends on the asset type (Texture2D in this case)
  6. When the method passed to LoadFrom is called by the asset pipeline, it checks the path of the asset and there are 3 cases:
  • the asset starts with "FF/", so it should be fetched from FF itself with helper.ModContent.Load<Texture2D>(true_path) (FF's mod helper again)
  • the asset starts with "Content/", so it's from the Game's file -> helper.GameContent.Load<Texture2D>(true_path)
  • (else) the asset is loaded from the Furniture Pack: IContentPack.ModContent.Load<Texture2D>(true_path)
woeful lintel
lucid mulch
#

and is this asset in question actually a localized image, or is it just the user in that language

woeful lintel
#

just the user in that language

#

I think the issue is that FF calls LoadFrom on the asset requested event regardless of if the asset actually exists at the path, so I guess SMAPI goes "oh, there's a method to load this localized asset!" and runs it, but it doesn't work so it requests the un-localized asset afterwards and it works because CP can load it

#

is that correct?

#

But this would also cause errors on any asset loaded through this method, even without CP...

lucid mulch
#

if you aren't doing localized assets, you should only handle the non-localized variant

#

smapi/stardew will try the fully localized first, then international and then the non-localized last.
but once it figures out one of those worked, it will remember for future loads/edits on that asset

woeful lintel
#

Do I have to check if the asset is localized and discard it if so?

#

I just remembered, I should mention that I start by doing that: string name = e.NameWithoutLocale.Name;

tiny zealot
#

if memory serves, checking args.NameWithoutLocale.IsEquivalentTo is the standard approach

woeful lintel
#

Well, Yeah, but I can't compare the name to all potential assets in a Furniture Pack, the asset requested in question has this structure: FF/<Furniture Pack ID>/<asset path in Pack>

tiny zealot
#

NameWithoutLocale.StartsWith may be of interest?

woeful lintel
#

hmmm, I'll try with that

lucid mulch
#

doing NameWithoutLocale would still make you handle the localized variant

woeful lintel
lucid iron
#

People could theoretically want a localized signage or something though

woeful lintel
woeful lintel
#

So, it's fine when the asset is in the Furniture Pack because it can retrieve it for the first localized variant SMAPI asks for, but when it's not in the Furniture Pack but only loaded by CP, it tries the localized variant first and can't find it before asking the non-localized one and having CP Load it

woeful lintel
#

At least the CP Load bug is solved, I just have to ignore any asset that's a localized variant

#

From what I understand, that snippet at the start of the asset requested event should be enough: if (!e.Name.IsEquivalentTo(e.NameWithoutLocale)) return;

#

Having a Stardew Valley game open on a rainy day really helps with debugging

woeful lintel
calm nebula
#

I'm headed to work but tl;dr the way lifetimes are managed for assets are weird

lucid mulch
#

the "Invalidate everything if its not-english when going back to titlescreen" is the extra fun part

calm nebula
#

You must provide a fresh texture instance to each Load

lucid mulch
#

oh yeah if you preserved the reference in the load mechanism itself you are doomed

calm nebula
#

And you must never allow the copy in the content manager to become disposed XD

#

And an atra runs back to rust

lucid mulch
#

because smapi is explicitly doing temporary loads for textures and copies it to the "persistent" one and disposes the temporary ones

calm nebula
#

Not really

#

C# is preferred to python

lucid mulch
#

also copying to itself would potentially also be an issue

woeful lintel
calm nebula
#

Copying to itself is fine iirx

#

There is an intermediate buffer

woeful lintel
lucid mulch
#

hmm

the asset starts with "Content/", so it's from the Game's file -> helper.GameContent.Load<Texture2D>(true_path)
more I think about it, this seems semi scary, having multiple assets in the pipeline being linked to the same texture2d instance

woeful lintel
#

Here's the method passed to LoadFrom for reference:

        private static Texture2D load_texture(IModContentHelper pack_helper, string path)
        {
            Texture2D result;

            if (path.StartsWith("FF/"))
            {
                result = ModEntry.get_helper().ModContent.Load<Texture2D>(path[3..]);
                // Load from FF content
            }

            else if (path.StartsWith("Content/"))
            {
                string fixed_path = Path.ChangeExtension(path[8..], null);
                result = ModEntry.get_helper().GameContent.Load<Texture2D>(fixed_path);
                // Load from game content
            }
            
            else result = pack_helper.Load<Texture2D>(path);
            // Load from Pack content

            ModEntry.log($"loaded texture at {path}", LogLevel.Trace);
            return result;
        }
lucid mulch
#

The real content managers version with a cache don't get a dispose call on them though.
the temporary content managers version which doesn't touch the cache gets disposed

woeful lintel
#

passed like this:

e.LoadFrom(
  () => {return load_texture(furniture_pack.ModContent, name);},
  AssetLoadPriority.Low
);
lucid mulch
#

and ModContentManagers dont have a cache anyway and are guarenteed to return fresh Texture2D's every time

woeful lintel
#

In the case we're talking about, all the textures come from the result = pack_helper.Load<Texture2D>(path); branch. If there's anything wrong with the way I juggle assets from multiple places, I'd like to know about it, but I don't think that's going to help solve my CP compatibility with localization.

lucid mulch
#

@ivory plume I think the PropagateTexture flow might need some try/catches or something.
I also still can't quite figure out how the texture2d got disposed in the asset pipeline, or what the nullreferenceexception that hapened during the setdata propagation was

ivory plume
#

I can add some try..catch so an error doesn't break propagation for other assets, but that wouldn't help track down where it's getting disposed. You could maybe patch Texture2D.Dispose to log the stack trace whenever it's called.

#

As for the null reference exception, if you can send me a(n ideally minimal) Mods folder that reproduces the issue, I can run it with a debugger to see where that error is happening.

calm nebula
ivory plume
# lucid iron i implemented the internal id field like this (default off)

Thanks for the prototype! I'd probably...

  • make it always visible (non-configurable) since it's generally useful;
  • move it to the bottom under the less technical fields;
  • still want to figure out a more player-understandable display for item IDs (e.g. (O)348/Cornucopia_BellPepperOrange isn't an item ID).
lucid iron
#

Ah right now it's just beneath added by mod

#

Bottom/less technical field would be just above datamining fields?

ivory plume
#

Yep, probably the bottom of the fields that are visible by default (but I can play around with the order before merging it to see what makes most sense).

lucid iron
#

Yeah i was unsure about the flavor display too, maybe it could be like (O)348, with flavor Cornucopia_BellPepperOrange

#

I'll leave the PR as is then Dokkan

brittle pasture
#

(why not another field below)

lucid iron
#

Mayhaps

woeful lintel
oak wolf
#

I'm trying to use the ChangeName command in an event to fake a the player character for events. I've gotten everything to work, except for having the player name come up properly. Using "{{PlayerName}}" or "@" just voids the event changes because of the invalid characters, whereas using {{PlayerName}}, without the quotation marks, just uses the actual token as opposed to the players name, and @ makes the name into a left pointing arrow. Is there another way to have the game pull the players name, rather than those two, during events?

lucid iron
#

Are you still doing a Load

#

Cannot use tokens in a Load and as for @ that only works in dialogue

oak wolf
#

The map file, in this case BusStop, is being loaded with my changes inside, not a raw event in my content file. Should it be an editdata with my event in the content file instead? I didn't realize that it would be an issue if it wasnt in my content.

#

The Load and Token issue, i mean.

lucid iron
#

Yeah it is a problem but fixable if u just do editdata on the same asset

#

You may use includes to organize your EditData patches

#

So that u can still have a busstop.json separate from main content.json

oak wolf
#

Gotcha. I'll try that and see if it works. Thanks, both for now and last time! Already many less errors. 😁

uncut viper
versed wyvern
#

(Either that or something else specific to the RejectItem bug)

tough nest
#

Quick question relating to npc schedules. If I wanted to check for the earliest schedule entry that an npc has, would it be safe to assume the earliest possible time of day could be at 600? Or should I be checking all the way to 0?

uncut viper
tiny zealot
#

you can also start a schedule with a zero time to change the NPC's spawn point for that day (sometimes called a "zero schedule")

#

are you parsing schedules or writing your own?

tough nest
#

I'm creating a companions mod, when you dismiss the companion I want it to path back to where it should be according to todays schedule. So if for some reason you dismissed a companion at 600 I wasn't sure if that is the earliest possible schedule and it should path back to its default position, but I think you answered my question. If a "zero schedule" exists it should path back to that, meaning I should check from the current time, down to 0 to see what the last schedule was, if there was one.

ivory plume
# woeful lintel

Are there specific steps to cause the NullReferenceException issue? I tried loading a save and returning to title, and no error was reported (see log). If it only happens with a save containing specific items, can you send an affected save too?

lucid iron
calm nebula
#

Ooh, a companion mod!

#

Sounds cool

lucid iron
#

I recommend making them walk to some warp?

#

Companion of some sort is at 4 cakes now exciting

tiny zealot
woeful lintel
#

The requirements are setting the language to something else than english, and having the "Dropdown Armchair (edit)" (this is the exact name that can be used in the debug fin command) Furniture loaded.
I can't provide a save right now, I'm already in bed (with my phone), I'll send one tomorrow if it's still needed.

lucid iron
#

Ichor im beginning to suspect that lacey is ur core mod

tough nest
#

Do you think warping would be better? I should probably add that at least as a fallback if a path from the current location to the target location can't be created.

lucid iron
#

Just gonna depend on lacey for my own npc needs now

tiny zealot
lucid iron
tiny zealot
#

i think they're even slower (slightly) than the farmer's walk speed. ~500ms per tile

woeful lintel
lucid iron
#

Even if your pathfinding works perfectly you could be in mount vapius doing stuff, dimiss Abigail, who now spends the remainder of her day slowly going home

tough nest
#

I'm just not sure if thats an issue or not, would it cause issues if she didn't make it home by 2600?

tiny zealot
#

no, it's fine for NPCs not to make it home. they'll reset during the big sleep

lucid iron
#

Not rly, but you will have to keep changing the end of your pathing thing throughout the trip according to their normal schedule

#

I dunno if this is worth solving vs if u just path them to some exit and warp away afterwards

ivory plume
clear oxide
#

wait does SV have a mod downloader & manager ?

fossil osprey
#

yes, kinda

#

!stardrop

ocean sailBOT
#

Stardrop is a mod manager written specifically for Stardew Valley. See the Stardrop wiki for installation and usage.

See this tutorial for connecting Stardrop to Nexus or updating mods in Stardrop.

If you have issues with Stardrop, see the issue report guide.

modest dagger
ocean sailBOT
#

Log Info: SMAPI 4.2.1 with SDV 1.6.15 build 24356 on Microsoft Windows 11 Home, with 15 C# mods and 5 content packs.

uncut viper
modest dagger
#

but.. the tilesheets are there

uncut viper
#

in the folder with the tmx, while you are editing the tmx? there are no missing tilesheet errors in tiled? bc the only two ways i know to get an invalid gid is either saving when there are errors/missing tilesheets, or using a tilesheet from vanilla that no longer exists (like removed in 1.6.9)

modest dagger
#

the other maps NeithsHome, Basement and Upper all work fine

old edge
#

If I'm trying to run a trigger to summon the green rain do I need to use OnDayStarted or OnDayEnding?

#

doesn't seem to work all the time...

static otter
#

Is it possible for me to create another map as an extension of the farm map and have it be recognized as a farm map by the game?

brittle pasture
#

Yeah you can set a location as plantable and allowing construction

#

the former is in Data/Locations, the latter a map property IIRC

static otter
#

How do I view that map though when I go to build?

#

Cause doesn't building just show the farm map when you go to Robin to construct?

brittle pasture
#

if you set the buildable property it will automatically be added to Robin's menu

calm nebula
#

No

#

There will be an additional selection menu

brittle pasture
#

she will ask you what location you want to build on

static otter
#

oh wow that's pretty dope

#

Guess I am making another map

old edge
static otter
#

Somehow I keep getting drawn into map making when I pick this game back up during a stardew phase

#

this time I'm going for Perfection though so, it's gotta be a good farm to play for hours on

clear oxide
#

If you where able to evolve a monster , how would you evolve it ? what gem would you use ?

lucid iron
#

Let ppl set what item to use

#

Per monster

clear oxide
#

they can

#

im trying to find an universal item tho

lucid iron
#

When in doubt prismatic shard 3sSmolMiku

gentle rose
#

guys can I nerd snipe some of you into brainstorming with me

say you made some kind of dynamic npc flat/hotel where rather than mod authors statically calling dibs on certain rooms (and therefore rooms being awkwardly empty for most people), they just registered their npcs as having rooms in the hotel and were dynamically allocated. How would you go about assigning rooms to NPCs (both at the start of a save and when added later on)

I feel like you wouldn’t want to move one mid-save so you would want the existing order stored in the save file, and then ig if you uninstall one their room becomes available for the next installed npc?

lucid iron
#

Why are you making central station tourists again \lh

merry rampart
#

Personally I'd fill it up by floor

gentle rose
#

well yeah, the question is how

uncut viper
#

iirc fireredlily had some sort of brainstorming here too back when the apartment was first being made

#

if you cared to backsearch for that

merry rampart
#

First come first serve, basically. Can keep track with a spreadsheet

lucid iron
#

I think you would want decide if it's a magic ghost hotel or just ordinary hotel

gentle rose
#

yeah, I think I was actually bouncing ideas about this back then too

uncut viper
#

personally i wouldnt care about storing the order

#

someone moving rooms would be no weirder than an NPC up and disappearing/appearing mid save, immersion wise

lucid iron
#

Cus if it's magic ghost hotel then yeah i expect it to expand or contract as needed

gentle rose
lucid iron
#

Probably even randomize it per day, for fun

gentle rose
#

-# …what if it’s a framework—

lucid iron
#

If it's an ordinary hotel i would save the order

merry rampart
#

I came in here to ask a question and I can't remember what it was

uncut viper
#

i would just assign rooms alphabetically by NPC internal name

#

and not care about order

lucid iron
#

Both impl still require same set of base features so

uncut viper
#

but thats me

lucid iron
#

It seems like a minor thing u can decide later

uncut viper
#

i still dont think the question of assigning rooms is even the real problem, though

gentle rose
#

yeah, I was thinking of doing that for the initial order and then add new installs later button

#

hmm, what would you say is the biggest issue

uncut viper
#

yeah and i was just sayin i wouldnt even bother caring about when its installed

#

scheduling and events

#

how can an NPC author write a schedule or an event if they dont know where it will be?

gentle rose
#

the idea would be to magic that part away using some hidden warps

#

and the hotel/building wouldn’t all be on one floor

uncut viper
#

that seems very "code the rest of the owl" to me

rough lintel
#

this seems very scary

#

as in hellish to code lol

#

and hellish to implement on the user side

uncut viper
#

im not sure how a hidden warp would help me write an event. where would i even load the event to. where would i center the viewport? where would i add temporary sprites

lucid iron
#

Make each map the same tmx just instanced

gentle rose
#

that scheduling part I actually had a pretty solid idea for but I need to do a lot of proofs of concept haha which is why I just handwaved it

lucid iron
#

So it's the same shape everytime

uncut viper
#

what if i want an event to start in the lobby and move to the room? or vice versa?

lucid iron
#

That's just change map isnt it

gentle rose
uncut viper
#

it is, but where should i move the NPC to after exiting the room?

#

idk where their door is

lucid iron
#

Oh i was imagining the hallway as part of their room map

gentle rose
#

yeah, that part you could theoretically handle via mod provided tokens

uncut viper
#

and what door should i have them walk up to in order to enter the room?

gentle rose
#

to an extent

lucid iron
#

And the lobby is a unique different map

uncut viper
#

im not sure how a token would help me set up an advanced move to walk towards some point i dont know before runtime

tidal stone
#

shops can be made via contant patcher right, like custom animal shops for example if i wanted a different npc to sell them versus marnie

lucid iron
#

No u need a framework

uncut viper
#

custom animal shops no (can livestock bazaar do custom ones?), regular shops yes

tidal stone
#

darn

lucid iron
#

Either shop tile framework or livestock bazaar

tidal stone
#

aah i see

gentle rose
#

where the framework would provide tokens for route_to <npc name> that would plug a route in or something

#

or just… not do events in their hotel room SDVpuffersquee

uncut viper
#

a token, or an event command?

gentle rose
#

could be either one tbh, or tokens for coords and event commands for routes

uncut viper
#

limiting my NPC to only work with this specific hotel mod (bc it requires tokens or commands specific to it) would be too limiting to me as an NPC author personally, and so would being told i cant do events in or around their room, which is a rather important part of an NPC

karmic jetty
#

Hey everyone, does anyone have any good recommendations for C# courses? I've found plenty but wanted to see if anyone had any specific suggestions they could give?

lucid iron
#

You can get your own marnie style dialogue to pick regular itme shop or livestock shop

wanton pebble
#

!yellowbook

ocean sailBOT
gentle rose
#

I get what you mean for the second part but ig I’m still interested just in case haha

(for the first part, I feel like the place where they live would obviously have to be a dependency anyway?)

lucid iron
#

Honestly i don't think this is necessarily a npc house Dokkan

uncut viper
#

where they live wouldnt need a dependency if i just made the place myself

lucid iron
#

But i support 2 caking central station and make some kinda grand bazaar mod

gentle rose
#

chu just wants to scope creep me into making a haunted hotel

lucid iron
#

Yes

uncut viper
#

or if not made myself, at least one i can know how it'll appear and route me precisely while im writing the NPC

gentle rose
#

honestly I’m not even against it

uncut viper
#

and not only when i launch the game

lucid iron
#

You can have npc go sell things like

#

They path to special waiting room

#

And this means apply their shop

gentle rose
uncut viper
#

unless you can solve the eventing and scheduling problems

lucid iron
#

Well i think one of the good things about pelican town loft is that

#

People can play with npc making

#

Without having to think too hard about map making

uncut viper
#

(tbf, i did answer the original question in good faith, its just you then asked me what i thought the actual problems would be)

lucid iron
#

Now u r making them learn weird specialized npc making...

gentle rose
#

isn’t that the job of a framework, to pretend to make things easier while secretly adding a new level of complexity

#

(/lh)

merry rampart
#

Poohcore is supposed to fix pathing issues with NPCs wider than 16px, correct?

gentle rose
#

that’s in a personcore mod?

#

ngl I kind of assume personcore mods have no inherent side effects so this is interesting

uncut viper
#

spacecore is a personcore mod

gentle rose
#

does spacecore have inherent side effects /gen

lucid iron
#

Yeah it is supposed to do that

uncut viper
#

yeah

lucid iron
#

And yes spacecore does it fixes the map level pathfinding

uncut viper
#

spacecore also does stuff with NPC pathing

lucid iron
#

Jen maybe ask clown about it

wanton pebble
#

If a person was named core and made a core mod, would it be CoreCore or Core Squared? SDVkrobusgiggle

uncut viper
#

also has the extra dialogue stuff

merry rampart
#

there's nothing in spacecore's documentation that explains how it fixes pathing...

lucid iron
#

But im pretty sure there was 2 custom fields to set

gentle rose
#

I’m going to sue casey for making me be incorrect

uncut viper
lucid iron
#

You gotta flag your character as wideboi and tallboi

merry rampart
#

i got that, but im not editing a vanilla npc, im adding a new one

#

and i did

#
          "CustomFields": {
             "poohnhi.PoohCore/WideCharacter": "true"
          }```
lucid iron
#

What kinda not work did u observe Bolb

merry rampart
#

i did that, but now she won't leave the house, just wanders off into the voice

#

void

lucid iron
#

Also i think jorts and jean show it's possible to fit a whole cat in 16x32

brittle pasture
merry rampart
#

no its an npc house

lucid iron
#

Ik passerby uses it at least NotteThink

#

Whatever schedule you got definitely works fine for a 16x32 character no poohcore?

merry rampart
#

im gonna have to peek into its coding and see if there's something im missing

#

right

lucid iron
#

Trying to eliminate other causes here

brittle pasture
#

(also poohcore has kinda graduated to spacecore's level of being a framework that originated as a personcore)

calm nebula
merry rampart
#

i have no idae what that means

rigid oriole
#

now i'm curious what macropathing is

uncut viper
#

probably why it doesnt explain how it fixes it SDVpuffersquee

merry rampart
#

also looking at jinx from passerby and im not seeing any additional code, so i dont know why cat won't leave house

calm nebula
#

Other than my home for code I took out of atracore

brittle pasture
#

and then I follow the inverse route where I hijack a framework and turn it into selphcore

rigid oriole
#

looks at the slingshot in emc /lh

ornate trellis
#

i learned to have a love-hate relationship with npc pathing after my maps turned out to loop and break my npcs on a level spacecore didnt help with pufferpensivebutt loops gotta loop

merry rampart
#

@golden basin apologies for the ping! I was hoping you can help me out here.

I'm trying to make a cat npc that's 32x32, same size as Jinx from your mod. I was wondering if you ever had pathing issues with Jinx (or other similarly sized npcs) not leaving maps and if so, how did you fix? I have the poohcore coded correctly by the looks of it, so i can't figure out why my cat isnt' leaving my npc's house

golden basin
merry rampart
#

yes

golden basin
#

I'm not at my PC currently because of a injury keeping me in bed. But you're welcomed to copy my code. Also be sure your maps npc pathing entry is set to allow pathing

merry rampart
#

i wonder if maybe the map itself is the issue

#

hope you feel better soon and thanks for answering!

golden basin
#

Can I see your location data

merry rampart
#

I've got ExcludeFromNpcPathfinding set to false

golden spire
#

have you slept 1 day/more than 1 schedule point?

golden basin
#

thats a good point ^^^

merry rampart
#

i can try

golden spire
#

you need to sleep 1 day for schedule changes to work correctly

tidal stone
#

im almost doen making the pet version of the pillbug!! woo

merry rampart
#

holy shit im an idiot. the modding equivelent of "have you turned it off and then on again"

tidal stone
#

then im gonna make the npc one

#

Im gonna go look at the adoptable joltik mod to see how they have their thing set up since they make a npc joltik and a pet joltik

merry rampart
#

im gonna spend the next hour sulking in a corner for missing something obvious /lh... sorta

thanks for the help, guys! cat has left the house!

golden spire
#

schedule stuff gets set upon save, so if you change stuff it can confuse them or they don't do anything for that day.

merry rampart
#

i'll keep that in mind

#

this might fix another issue ive been having too...

lime seal
#

nyaaWave2 After copious encouragement from Airyn, skellady/max, and Dora, I updated all my mods for 1.6, available on ModDrop! 🥰
For anyone who provided translations: check out the Patch Notes. If there's a reference to new config options or wording updates, the translations will likely need updates too.
https://www.moddrop.com/stardew-valley/profile/213628/mods
My updated mod list:

  • Artisan Equipment for Sale
  • Easier Bee House, Oil Maker, Preserves Jar, and Lightning Rod
  • Easier Farm Totem and Survival Burger
  • Easier Stable
  • It Takes a Village (ITAV)
  • Joja Always Has Seeds
  • Joja Has Extra Stock
  • Joja Plans Ahead
  • Pelican Town Potluck
  • Pierre Plans Ahead
  • Something's Rotten in the State of Ferngill
  • Townies Need Artisan Goods (TNAG)
  • Townies Need Food (TNF)
  • Trick or Treat Event
  • Unique Mobile Greetings
  • Beer in Half the Time
  • Immersive Krobus
clear oxide
#

nothing wrong here ...

subtle epoch
#

Ngl I respect you guys.. Seriously, mod development is a cool thing.

fathom hound
lucid iron
#

grass is sve

subtle epoch
ornate trellis
#

Yall crying why my bed cursors

#

i mightve understood the code wrong, hm

#

but why cursors...

ornate locust
#

huh

#

Might be looking at the wrong image?

ornate trellis
#

id have assumed if its the texyture i did wrong i just get the error thing

ornate locust
#

Like the wrong tilesheet. That looks like it's from Cursors

#

mainly because it has cursors

ornate trellis
#

yeah but how, i just

ornate locust
#

What's the code look like?

calm nebula
lucid iron
#

I would like to sleep on A tonight

ornate trellis
#

proof my asset exists btw

ornate locust
#

yeah the end of that doesn't look right

#

one sec...

#

Here's mine, it's the double slashes that are off I think

#

You want them in all parts of the path, not just the start

ornate trellis
#

ohh

#

so Mods\\{{ModID}}\\assets\\Items\\vww_fishmonger_furniture

ornate locust
#

I believe so

ornate trellis
#

also i mightve done the false wrong too tho...i didnt want my furniture to pop up in the catalogue/shops

ornate locust
#

The false bit looks right anyway

ornate trellis
#

is it false tho if i dont want it sold/in the catalogue or would that be true

ornate locust
#

Ah you're right, I think that's true.

#

Oh and I should point out: Make sure that path is the ASSET name, not just the texture path

ornate trellis
#

hell nahhh still cursors

ornate locust
#

Yeah I think you're doing to the image path instead of the asset path

ornate trellis
#

oh wait

ornate locust
#

I load mine like this, so my asset path is Mods\{{ModID}}\Furniture

ornate trellis
#

Mods/{{ModID}}/vww_fishmonger_furnitureyeehaw

ornate locust
#

Woohoo! Nice bed!

ornate trellis
#

thank you!

calm nebula
#

Cuteeee

ornate trellis
#

now i probs gonna suffere adding the other furniture

ornate locust
#

Well, look on the bright side, you've got that part of it down, so you won't have that problem next time.

ornate trellis
#

i wish

#

I am the resident always confused™️ person

ornate locust
#

The modding journey: a series of stubbing your toes until you figure it out

fathom hound
#

Beautiful bed!

#

Void you are my favorite pixel artist fr!

ornate trellis
hallow prism
#

if i want this :
"HasSeenEvent: anyPlayer": "Lumisteria.MtVapius_Clearing01Mariam0H",
but when false

#

what is the proper format again?

#

contains false?

grizzled crescent
#

I'm bashing my head D;
I am doing the color for a fruit but I can't figure out how to code the color context index to be a custom color. Do I want the hex, rgb, or hsl? And how do you code that?

hallow prism
#

contains whatever : false?

ornate trellis
#

now i gotta try and understand how dif sized furniture sprite in dices or w/e work

clear oxide
#

omg finally ! btw ive spent to many days on this system

ornate trellis
#

wasnt it that context tags only take specific colors

grizzled crescent
#

It says only for Emily's things have specific

subtle epoch
calm nebula
hallow prism
#

i do think you need to use a context tag that exists in game

#

thanks

ornate trellis
fathom hound
grizzled crescent
#

It's confusing. It says for tinting it has a RGB value except Emily's dyes that use the following table

brittle pasture
#

what that means is that when you make wine/jelly, the tag is used to determine the color

#

when you use that item to dye at Emily's dye pot, it instead uses that table to determine which pot it's eligible for

grizzled crescent
#

What table would be used for Artisan goods?