#making-mods-general

1 messages Β· Page 352 of 1

red egret
#

I'd never think of rotating paintings πŸ˜…

#

Art is not a problem to me, just the technical things

lucid iron
#

If u show nerds cool art then more likely to get help PecoSmile

woeful lintel
#

Could anyone help with a crash reported by a FF user? The log ends with:

Fatal error. System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.at MonoMod.RuntimeDetour.Platforms.DetourRuntimeNETPlatform.GetFunctionPointer(System.Reflection.MethodBase, System.RuntimeMethodHandle)
at MonoMod.RuntimeDetour.Platforms.DetourRuntimeILPlatform.GetNativeStart(System.Reflection.MethodBase)
at HarmonyLib.Memory.GetMethodStart(System.Reflection.MethodBase, System.Exception ByRef)
at HarmonyLib.Memory.DetourMethod(System.Reflection.MethodBase, System.Reflection.MethodBase)
at HarmonyLib.Memory.DetourMethodAndPersist(System.Reflection.MethodBase, System.Reflection.MethodBase)
at HarmonyLib.PatchFunctions.UpdateWrapper(System.Reflection.MethodBase, HarmonyLib.PatchInfo)
at HarmonyLib.PatchProcessor.Patch()
at <something in Furniture Framework's Harmony Patching methods>
.
.
.

I can't provide a full log because the users didn't πŸ’€
My guesses is either they don't have a proper version of the game, or their memory is messed up

lucid iron
#

Also easier cus we'd know what u want and be able to say "yea u can do xyz with just vanilla" or "no you need abc framework but u can do it without c#"

lucid iron
#

Tell them to restart and see if it persists

#

(this is the AVE thing people bring up here)

#

Other things include uninstall or install random c# mods

#

Sometimes it just works

woeful lintel
#

I've got one user dropping a log chunk (poop lmao) without context, and another saying they have "the same issue", providing a log that cuts off during harmony patches and they say that this crash happens basically randomly (happened many times) with different amount of mods (including MRPs)

red egret
lucid iron
#

It also normally not an error that appears on the log at all

woeful lintel
#

not consistently mind you, but it does happen a lot according to them

lucid iron
#

Since it would just crash smapi before it could do anything

#

Yeah i would recommend have less c# mods

#

But get a harmony summary if you can

woeful lintel
#

I'll see if they even follow up on it

lucid iron
#

Did you have a invisible Building later tile

#

Also, the farm cave entrance is a map property, did you change that

lucid iron
#

Whoever that was pls don't delete your messages

sweet wharf
#

I'm trying to edit and make a room in the saloon for a custom NPC I'm making and I was wondering how I can start doing that. I've looked on the wiki and it just confused me more so

plucky mirage
#

hi, i have two dialogue expansion mods for CP and i'm trying to make them both work together instead of one overwriting the other, i was told i can make use of the randomization feature

#

the first mod i had to convert specifically with a tool, the second one is native for CP, however i can see that both mods have lines for, let's say, Mon2

#

how do i go about ensuring both mods' lines show up

#

for the first mod i specifically ticked the option to make it compatible with the base game lines so that both show up and so far it seems to have worked

#

(i think)

sweet wharf
uncut viper
#

editing a map is the same process no matter what map you're editing

#

only difference is your CP targets

rigid musk
# plucky mirage the first mod i had to convert specifically with a tool, the second one is nativ...

In theory if you wanted the mod, another mod, and the base game to all have a dialogue line for the same day/key you'd likely have to make your own mod/edit that includes all three dialogue options for that day.

Personally I use {{random}} as a token for my dialogue to pull multiple lines

In your example if you had the three lines:
Mon2: Hi @!
Mon2: You're cool!
Mon2: Today sucks...

From vanilla, mod 1 and mod 2, you could make your own entry that does

Mon2: {{i18n:Mon2{{random:1,2,3}}}}

Where your i18n tokens would be
Mon21
Mon22
Mon23

Usually I put an underscore between my random and the token so that I can differentiate things (so {{i18n:Mon2_{{random}}}} )

#

Oi im doing this on my phone so formatting is hard sorry

plucky mirage
#

if i understand SMAPI's mod load order correctly

rigid musk
#

I do believe patches are done in order of loading when it comes to dialogue (unless I'm misremembering)

plucky mirage
#

and they're loaded alphabetically yeah?

#

so if mod #1 starts with A and mod #2 starts with B, the latter will win events with its lines

rigid musk
#

Honestly im not 100% sure in this case, i think adding one of the mods as a false dependency might also work but I can't remember for sure right now πŸ€”

plucky mirage
#

(these are the mods and their names)

rigid musk
#

Iro save me iro

gentle rose
#

yes and no. This is true but there are also a lot more ways to change things, like false dependencies and patch priorities (the ideal way)

plucky mirage
#

yeah so this is my first time doing something like this and i know nothing about modding SDV

gentle rose
#

which two mods are you looking to change the order of?

plucky mirage
#

so i got Stardew Valley Gift of Gab - Marriage Candidate Edition, and Over 75 New Dialogues for Shane, where the former i had to convert to CP with XNB to CP Converter, and the latter's lines my friend prefers to have in the game over any others

#

and they both seem to contain some lines for the same day/occasion

gentle rose
#

did you also convert shane's new dialogues? it's also an xnb mod

plucky mirage
#

they have a CP version that contains the .XNB file, i didn't make use of it

#

like if you download it it contains both content.json, manifest,json, and Shane.xnb

gentle rose
#

ah, I see. The easiest way for your own personal use is to go into its manifest.json and add a dependency (give me a sec and I'll send the exact instructions)

tiny zealot
# plucky mirage and they're loaded alphabetically yeah?

there's no reliable order: it's directory traversal order, which is implementation-defined. on windows it's frequently alphabetical, but on macos and linux i believe it's inode order. like others said, you need dependencies or load/edit priorities to guarantee an order

plucky mirage
#

hmph

gentle rose
#

aaaand wiki's down. give me a sec and I'll tell you exactly how to set the false dependency

plucky mirage
#

can you explain what i'm trying to do here? am i trying to set Gift of Gab as dependency for Shane's, so that Gift of Gab loads first as a dependency, and then gets overwritten by Shane;s?

gentle rose
#

you need to both open the manifest.json file for Shane's, and before the last }, add a comma to the end of the line above it if there isn't one yet, and then add:

"Dependencies": [
   {
      "UniqueID": <the id you made for gift of the gab>,
      "IsRequired": false
   }
]

(replace the <...>, brackets included, with the ID)

plucky mirage
#

like so?

#

i have copied UniqueID from the manifest.json of Gift of Gab

gentle rose
#

not quite - you did it one line too high

#

undo it and do it on the line before the very last }

plucky mirage
#

that last } is highlighted at the bottom in blue

#

is that not the one i needed

#

i input the block right before it

gentle rose
#

you notice how there's another } right above it?

#

you needed to do it below that one

#

so under what's currently line 18

sweet wharf
#

So, I edited the room in the saloon, and now I'm trying to figure out how to make it usable in my mod

plucky mirage
#

that feels like i did the same thing lol

lusty sail
#

You need a comma after the curly brace on line 12

plucky mirage
lusty sail
#

Yep

plucky mirage
#

this should work?

lusty sail
#

Yeah let us know if it doesn’t

gentle rose
#

yup, looks good

plucky mirage
#

thanks a bunch for the patience and the help

#

so far SMAPI didn't spit any errors

visual dirge
#

oh my god someone from this server dm'ed me asking about this message πŸ’€ i wonder what the scam is lmao

gentle rose
#

report them to bouncer

iron ridge
#

are they a digital artist trying to pay rent by any chance

gentle rose
#

they take your money and don't give you anything

plucky mirage
visual dirge
gentle rose
#

wait that makes a lot of sense, Klip! I always wondered how they chose me that one time

plucky mirage
#

mine had no messages on the server whatsoever so it was obvious they were scammers

sand timber
#

Would it be possible to get an invite?SDVpufferheart

visual dirge
#

its just so funny to me that i went "ugh i keep getting art commission scams when are they gonna scam me with plushie commissions instead" and someone took that as a challenge πŸ’€

lusty sail
#

This is why my DMs stay off xD

gentle rose
#

it did give me the best quote of all time though

#

10/10 would get called a little fool by a scammer again

sweet wharf
#

Would love to join

gentle rose
#

oh wait, this one was the fake game scammer. the commission scammer just got lost trying to tell me when tf I asked for a commission

sweet wharf
gentle rose
#

oh, I was waiting for you to give details of what you actually mean

sweet wharf
#

So, I have the map, I have my character, I have my dialogue for him, I'm working on the schedule, but I'm trying to start with where he will start during the day and I wanted to know if I have make another .json file for the map specifically

gentle rose
#

you don't ever really need to make another .json file, but earlier you said you edited an existing vanilla map, right? it's not your own new map

sweet wharf
#

Yeah, so I edited the room next to Gus's and made it for my character, so what do I do now?

gentle rose
#

I assume you edited the unpacked map file in tiled?

sweet wharf
#

Yes

#

I posted a picture of it in the making mods art channel if you need to look at it

gentle rose
#

right, next step is to read [[Modding:Maps#Getting_your_map_in_game]] and follow that

plucky mirage
#

people in the comments of Over 75 New Dialogues for Shane say that there's an issue with a particular heart cutscene that prevents the player from selecting any options, is there any way i can figure out which one that is? i am assuming it's one of the following expressions in these "events" because i can't see anything that could correspond to a "heart cutscene"

#

i don't know what these symbols actually represent

#

i figured out that @ is the player's name

#

that's about it lol

#

the other events that aren't JojaMart and danceRejection are just for specific days

hard fern
#

Maybe the extra $ after b in the second highlighted part.. i dunno

plucky mirage
#

oh hang on

#

i think this is what i need to parse these

sweet wharf
fossil osprey
#

Paths are auto, you just need to tell him where to go and when

lucid iron
sand timber
#

Sure! Thanks Chu :3

lucid iron
#

Sure Dokkan

visual dirge
#

😁

elfin grove
#

hi, Better Things dev here... in the "ItemName" you need to put:
maat.BetterThings_BigShed3

flat sluice
#

Oh, I always wondered what that shortcut is for!
Could I also get an invite, please?

Added by Chu, thanks to them!

lusty sail
#

I’m surprised that discord isn’t posted in #friends

#

Or pinned here

uncut viper
#

it would be weirder to me if it was, given that its invite only and also would be strange imo to have a modmaker community in this discord that advertises a different mod making discord instead

rough lava
elfin grove
#

you can disable it if you want, in the mod config. ( I known it have an issue with the ring given by the Mystery Boxes ) Sadly i cant fix it my own..

red egret
#
Stardew Modding Wiki

This tutorial explains how to add custom furniture using the new 1.6 game update features and Content Patcher. The tutorial assumes you already have the game unpacked and that you have some basic familiarity with the Content Patcher format. The mods referenced as examples in this tutorial are Bonsai…

whole raptor
#

Looks good, but note that in the next game update, furniture data will change completely

uncut viper
#

it's updated for 1.6 it seems so yeah

#

the next update that Nomori mentions has no release date and may be months or years away, and content patcher will rewrite your mod to fix it

#

so I wouldn't worry about it

whole raptor
#

True

#

Reminds me of the "1.6 is coming soon" SDVkrobusgiggle

red egret
#

@woeful lintel

uncut viper
#

not sure why you're pinging them?

red egret
#

they told me to

uncut viper
#

fair enough, then, but if you plan on using their framework, then no that tutorial won't help

red egret
#

no, it would be only for CP

#

im learning the very beginning

#

or if there is a better source and template?

uncut viper
#

then Leroy's framework won't have anything to do with it

#

I don't know of any other tutorial or template

red egret
#

Leroy offered help earlier

karmic gust
uncut viper
#

im just setting your expectations, is all, so you're not caught off guard if the format is different

red egret
#

yeah i dont want to use FF yet, im just so lost in the vanilla idk how to put files in folders and how to write code for them

uncut viper
#

a CP-only furniture is a lot different from a Furniture Framework furniture

#

but if sticking to just CP then that tutorial seems fine

red egret
#

okay i will try something

uncut viper
#

!startmodding

ocean sailBOT
#

Making mods can be broadly divided into two categories:

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

uncut viper
#

this info will help too

red egret
#

ty

sweet wharf
#

I want to add those choices during dialogue, but I have no idea how to do that.

rigid musk
#

Dialogue choices?

#

Hi chu wave

red egret
#

one more question, it would be the easiest for me to take an existing mod and keep the structure, just replace the pictures and the specific details, but is it ok?

sweet wharf
flat sluice
uncut viper
#

if it's a very basic mod there's really not many ways one can add furniture anyway

#

if it was a larger or more complex mod and you just copied it all and tweaked it, then it's more frowned upon

rigid musk
red egret
#

yeah something very basic, i already made a scarecrow mod like this but i want to understand what im actually doing and not do something not allowed

uncut viper
#

if you didn't plan on publicly releasing the mod, you could do whatever you wanted anyway

lucid iron
#

Copying vanilla and changing the data as a start is fine

sweet wharf
uncut viper
#

but if you do plan on releasing it then yeah just using a small mod as a learning template is fine, as long as you understand what you're changing and it really is a small mod that doesn't have like, a creative touch to how it's set up

red egret
#

its already on Nexus XD i got permission from the owner/artist tho (it featuers a character)

#

but the code was taken from a similar mod, if i need permission for that too

lucid iron
#

Is that the mateo scarecrows mod

red egret
#

yeah

uncut viper
#

depends on how much of a creative touch the mod has, really, which there is no defined criteria for

#

but one cannot own the ability to write an Edit data patch

lucid iron
#

If you make them a 1x1 furniture decor

#

They can go on a table

lucid iron
#

It'll be great trust

red egret
#

so far i cant assess how creative a mod is

hard fern
#

table decor...?

#

Lol

red egret
hard fern
#

The mental image of an npc on a table is funny to me

uncut viper
#

im vague on purpose because it's a vague and subjective thing that I'm not qualified to speak on legally, nor do I know what people consider the limits to be socially

calm nebula
#

Isn't the case that controls this Google vs Oracle

uncut viper
#

some people have very complex patch setups with custom dynamic tokens and includes and yada yada and copying that wholesale without permission tends to leave a sour taste in people's mouths

red egret
#

omg okay i run from that XDD i think i will take two mods i find easy and compare and see what i can use of that

uncut viper
#

someone who's mod consists of one EditData to the furniture asset and a folder of pngs has no reasonable claim to that

red egret
#

alright, i feel better XD ty

sweet wharf
#

Sorry, I'm gonna be sitting here asking a lot of questions. So, how do I set up the portraits with the dialogue? I have a whole seven pages of dialogue for my character and I'm putting it in my dialogue.json file, but I don't know how to set it to put it in the portraits and dialogue boxes

rigid musk
#

Portraits are triggered with portrait commands

gaunt orbit
#

Use npc data to define the portrait texture, then use the portrait commands to change which "mood" is displayed

rigid musk
#

^

#

No command means neutral or the first portrait, $h is happy, and so on, you can find that on the page that Dennis linked as well under portrait commands

#

You can also use $0, $1, $2 etc but standard is to use $h and such, as vanilla has the first six portraits pre defined as to what they are

#

Anything beyond the sixth portrait will be $6+ (with 6 being the 7th portrait since the index starts at 0)

#

So if you had a dialogue line that says "It's so good to see you!" And you wanted them to be happy, it would be "It's so good to see you!$h"

sweet wharf
#

Thanks

rigid musk
#

Also make sure your portraits are laid out in that format if you're going to use the vanilla layout (they should be anyways for potential default lines.. dont be like me and not realize it existed and then have to go in and change every generic dialogue line)

calm quiver
#

200 downloads! πŸ₯³

#

Not a lot compared to the top for the month, but I’m super grateful that people took time to download and try it anyways πŸ™β˜οΈ

red egret
#

congrats!

sweet wharf
rigid musk
#

So if you had 5 portraits your canvas would be 128x192

sweet wharf
#

Okay, I have six portraits and I am currently trying to figure out how to put them on a canvas, because the app I'm using is a bit finicky

rigid musk
#

What are you using?

sweet wharf
#

Pixel Studio on Steam

rigid musk
#

I think pixel studio is free so you could try that, its what I used to use before - WELL

#

All you have to do is make a canvas (it'd also be 128x192 though you can make it bigger if you may add more portraits) and then have the other portraits open and copy the pixels and paste them on the new canvas

lucid iron
#

I think they can be wider if you wish to Sow Confusion and Chaos (dont)

sweet wharf
rigid musk
sweet wharf
rigid musk
#

Yep! Im not sure how to do it on pixel studio any more but you'll want to make sure each portrait is within the bounding box of the 64x64 or else itll be messed up in game, but from what I can tell they are lined up !

sweet wharf
#

So, with everything I have, what would I put in my dialogue.json for the bouquet and pendant acceptance and rejection?

round dock
#

Not using my laptop rn so I can’t link but the keys are in the dialogue wiki

torpid sparrow
urban patrol
#

howdy all. i'm trying to make use of github and its branch feature so i can have my main branch be for PC, with a branch for android compatibility. first of all, is this a correct usage of branches, and second of all, how do i make it so that edits to files in the android branch aren't saved to my computer, but only to that branch? i use N++ if that helps

torpid sparrow
#

I dont know if theres a dialogue key for the pendant i cant seem to find it on the wiki

rigid oriole
lucid iron
#

I recommend not doing this for your own sanity

urban patrol
rigid oriole
#

You just switch back to the main branch

#

Then the files on ur pc are magically the main branch ones

urban patrol
lucid iron
#

I thought your mod is cp only anyways and the not working betas stuff are unused

rigid oriole
lucid iron
#

They can just ignore the betas errors and still use the mod

rigid oriole
#

Is this not a c# mod

lucid iron
#

Not that im aware which is why im confusion lol

rigid oriole
#

I see where ur opinions come from now

urban patrol
#

it's CP with BETAS as a dependency. i have two map files whose tile properties are a spacecore trigger action, the trigger action then firing a warp and a different sound than the door closing

uncut viper
#

i mean a repo is still helpful for jsons

lucid iron
#

Yeah im recommending against branching for android

#

If you really wanna do it i would put the betas related stuff behind a include

#

So if ppl don't have betas for any reason they can still use your mod

#

In your manifest make betas an optional dep

urban patrol
#

it's tile properties though, so i'm not sure how i would section that off haha

lucid iron
#

You can use EditMap for that

#

Assign different tile props depending on whether BETAS is there

urban patrol
#

with a when hasmod condition?

lucid iron
#

Yeah sure

#

I am assuming it is a tile action btw

urban patrol
#

yeah it's <property name="Action" value="spacechase0.SpaceCore_TriggerAction TreeWarp"/>

lucid iron
#

If it's not a tile action it might not even matter cus this just becomes unchecked data

#

This is spacecore not BETAS tho

urban patrol
#

the trigger action being

               "Id": "TreeWarp",
               "Trigger": "Manual",
               "Actions": [
                   "spacechase0.SpaceCore_PlaySound leafrustle true",
                   "Spiderbuttons.BETAS_WarpFarmer handwrittenhello.dbda_CrystalVoid 22 26 2"
               ]
           },```
lucid iron
#

Yeah just have 2 different edits for the trigger action

#

Target field in there and append the BETAS action when available

urban patrol
#

okay cool that's even easier than editmap

visual dirge
#

in content patcher, is it possible to just Include all of the files in a particular directory? or do i always have to list them out individually

lucid iron
#

Always individual

#

But u can do a comma separated list FromFile

visual dirge
#

oki good to know

#

oh, also can dynamic or local tokens override global ones within my mod?

#

like if i want to name them the same thing

lucid iron
#

I think u get bonked for this

visual dirge
#

i wanna override ModId to remove the .ContentPatcher suffix

urban patrol
visual dirge
lucid iron
#

It's considered invariant and baked in real early

visual dirge
#

πŸ˜”

#

not me complaining again that content packs can't have entrydlls

lucid iron
#

I mean u can just give up and AssetRequested everything

visual dirge
#

that sounds like a bad idea πŸ˜…

mild dagger
lucid iron
#

But yeah just define a dt not named ModId i guess

mild dagger
#

I just saw machine control panel has a requirement for GMCM Version 1.15.0, could you maybe take that out as gmcm is still broken?

lucid iron
#

Probably

visual dirge
#

just thought ModId would be more readable

lucid iron
#

I just have manifest builder bump the version

mild dagger
#

ah makes sense

lucid iron
#

I should just get my ui mods out of gmcm entirely

#

But yeah go delete the thing from manifest ill upload new version later

mild dagger
#

yeah I already did :D I was just thinking how I bet there's gonna be support cases coming from this at some point so I wanted to tell you already SDVpuffersquee

calm nebula
#

Fwiw I don't put gmcm requirements in the manifest usually

urban patrol
#
    "Action": "EditData",
    "TargetField": ["Data/TriggerActions", "{{ModId}}_TreeWarp"],
    "When": "HasMod: |contains=Spiderbuttons.BETAS",
    "Entries": {
        "Actions": [ "spacechase0.SpaceCore_PlaySound leafrustle true", "Spiderbuttons.BETAS_WarpFarmer handwrittenhello.dbda_CrystalAndNiko 37 11 2" ],
    },
}``` 

is this the correct way to target and edit the BETAS-dependent trigger action? i removed the BETAS and spacecore actions from the normal trigger action and made the action just `Warp`
lucid iron
#

u still need "Data/TriggerActions"

#

but u only need one of the 2 things between conditionally edit map warp and conditionally edit trigger action

#
{
  "Action": "EditMap",
  "Target": "Maps/{{ModId}}/YourMap",
  "MapTiles": [
    {
      "Position": {
        "X": 5,
        "Y": 6
      },
      "Layer": "Back",
      "SetProperties": {
        "Action": "spacechase0.SpaceCore_TriggerAction {{ModId}}_TreeWarp"
      },
    },
  ]
},
urban patrol
lucid iron
#

on your actual tmx, put the vanilla warp action

urban patrol
#

is there a reason for me to do that instead of what i'm doing? genuine question, i don't know the difference

lucid iron
#

well you want to make betas an optional dependency right

lucid iron
#
{
  "Action": "EditData",
  "Target": "Data/TriggerActions",
  "TargetField": [
    "{{ModId}}_TreeWarp",
    "Actions"
  ],
  "Entries": {
    "Spiderbuttons.BETAS_WarpFarmer handwrittenhello.dbda_CrystalAndNiko 37 11 2": "Spiderbuttons.BETAS_WarpFarmer handwrittenhello.dbda_CrystalAndNiko 37 11 2"
  }
}
#

i think NotteThink

#

targetting into string lists is funny

#

oh and i forgor on both but now u can stick a When hasmod

urban patrol
#

do you always need both target when using targetfield? i'm still trying to figure out how to use targetfield lol

visual dirge
#

can i use content patcher tokens for numeric fields (in EditData's Entries)? like can i do

"IconSourceRect": {
    "X": 0,
    "Y": "{{Query: {{SomeToken}} * 16}}",
    "Width": 16,
    "Height": 16
}
```or does the type matter here?
urban patrol
visual dirge
#

oki good good

lucid iron
#

well, as long as SomeToken is a number

visual dirge
#

yea ofc

#

i have just discovered that Include + LocalTokens is a templating engine

#

i will do great things with this knowledge

tropic basin
#

I have successfully bullied stardew valley into letting me gift whatever non-object I want

royal stump
brittle ledge
visual dirge
#

oo yay

lucid iron
#

u can do really fun and nested things with it now that it supports passing a single local token down the includes

urban patrol
# lucid iron ``` { "Action": "EditMap", "Target": "Maps/{{ModId}}/YourMap", "MapTiles":...

further question about this: when does this get applied? i already have a conditional edit on this tile dependent on heart level. do i need to target both my base map (CrystalAndNiko.tmx) and my overlay map (CrystalTreeWarp.tmx)? should i do priorities or something?

    "Action": "EditMap",
    "Target": "Maps/{{ModId}}_CrystalAndNiko",
    "FromFile": "assets/maps/CrystalTreeWarp.tmx",
    "FromArea": { "X": 0, "Y": 0, "Width": 1, "Height": 2 },
    "ToArea": { "X": 37, "Y": 9, "Width": 1, "Height": 2 },
    "When": {
        "Hearts:CrystalPalace": "10, 11, 12, 13"
    }
},```
lucid iron
#

if its gonna be overlapping zone and assets/maps/CrystalTreeWarp.tmx is what has the warp action then put this patch after

#

altho if i was doin this i'd probably see about not even having assets/maps/CrystalTreeWarp.tmx Dokkan

#

the only things that absolutely require tmx include adding new tilesheet and adding animated map tiles

#

rest u can do all in json

urban patrol
#

hmm okay so... base map with default action (play dialogue), no map overlay patch. then two patches targeting the base map, one for when hearts level 10+, and then the next patch one for when hearts 10+ AND hasmod BETAS? and only one will be applied?

lucid iron
#

yea patches that otherwise have no priority will go in order

#

your situation is like this

#

Load map Maps/{{ModId}}_CrystalAndNiko
EditMap Maps/{{ModId}}_CrystalAndNiko When Hearts
EditMap Maps/{{ModId}}_CrystalAndNiko When Hearts AND BETAS

urban patrol
#

excellent, thank you. and the way to do 2 whens is with the comma for AND, right?

lucid iron
#

but yea what does assets/maps/CrystalTreeWarp.tmx actually look like

lucid iron
#

and is just me writing generic logic

urban patrol
urban patrol
#

oh that's much cleaner than i would probably end up making mine haha

lucid iron
#

idk if there's performance implications for tmx vs this whole thing

#

but i just like doing it here cus dont like xml

urban patrol
#

yeah fair

#

oh hang on does the above example mean i can make this ^ one action?

lucid iron
#

yea

#

maptiles is a list for a reason

urban patrol
#

sick

#

but i still need to do one tile at a time, correct?

latent mauve
#

Each tile needs to be in its own { }, within the [ ] in "MapTiles": [ ] I think

lucid iron
#

its a list of {} tiles

urban patrol
#

gotcha. it would be cool if we could define a rectangle with width and height, but no big deal

lucid iron
sweet wharf
#

So, I'm still working on the dialogue for my character and I can't seem to find the dialogue key for marriage and expecting kids and having kids.

latent mauve
#

OneKid and TwoKid are the ones for having kids, you can do _<random number 0-4> behind it to have variations

#

expecting a kid is a generic dialogue, I think?

round dock
#

Yeah thonkid

#

Most marriage tokens are there tho

torpid sparrow
#

yayayay he shows up in game

#

absolutely crushing marnie's windpipe here but thats okay

round dock
#

toothless omg

lucid iron
#

tbh i was under impression toothless was an npc

latent mauve
#

So the 'expecting kids' lines seem to be in StringsFromCSFiles, if that helps!

torpid sparrow
#

hmmmm i could make him into an npc

#

i did consider it but i wanted him to live on the farm

#

and i dont know how to do that without adoption

latent mauve
#

Could probably just move his position down a bit in that event xD

#

To not murder Marnie

torpid sparrow
#

i could make a separate mod where he's an NPC and he could live in the cove map i made

torpid sparrow
#

theres gonna be like 3 or 4 build-up events prior to adoption

latent mauve
#

you could try using those keys in your MarriageDialogueJx JSON and see if you can override them, but I can't guarantee if it'll actually find them there first instead of defaulting back to the generic ones there.

sweet wharf
#

Okay

latent mauve
#

Everytime I see it, I'm reminded that I really should change the "can't you tell? You're pregnant" line for my personal games. xD

#

That's the last thing I'd want to hear as a pregnant lady from my SO in the morning. LOL

#

"Can't you tell?"

sweet wharf
#

I get it, the way they speak is like, "no duh I know I'm pregnant, I'm the one who took the test?!"

latent mauve
#

The ONLY viable person I'd accept that from is Harvey, because as a doctor, there is a possibility he would notice the symptoms first.

sweet wharf
#

Yesss, I would love for him to have a little cutscene like Rasmodius does in RRRR

sweet wharf
sweet wharf
round dock
#

(if you wanna check uniqueIDs, check manifest btw)

latent mauve
#

It's right there in my mod's manifest.json, yep

calm nebula
latent mauve
calm nebula
#

I'm just thinking of the male partner using that line while the female partner is hugging a toilet

#

Tbh if you do that you deserve to be smacked

lucid iron
latent mauve
sweet wharf
#

Where could I find a set list of coordinates for the town and the buildings?

latent mauve
#

The easiest way is to open the maps in Tiled or use something like debug mode or the debug ppp command to get the tile info

#

debug ppp will spit out the coordinates where your player is standing, but if you're between tiles, it's not super accurate.

inner harbor
#

TO make a custom item that draws flavor from its input (ie like wine, jelly, etc) and color from that item as well, do you need a C# component?

torpid sparrow
#

i cant remember if apples from SVE can be added as a roommate i feel like yes but i cant remember for sure

#

i might look at apples code

inner harbor
#

Apples is a roommate, also Mr Ginger and Dwarf.

torpid sparrow
#

lovely ill go poke around :D

inner harbor
#

that pregnancy dialogue coul dbe "Darling, isn't it wonderful, you're pregnant!" and then you can still slap him upside the head. Although so saying, SDV pregnancy seems pretty cruisy compared to RL.

#

I do try not to run the mines when expecting a baby though.

torpid sparrow
#

am i able to have npcs actually walk around on the farm? ive never had a custom npc as a roommate so i dont know what they act like

inner harbor
#

no they can't roam the farm, although I did make one spawn on the spouse patio, and it was buggy AF.

torpid sparrow
#

then i might keep toothless as a pet bc i think itd be rather mean to have him stay inside all day as a big dragon xd

inner harbor
#

you can replicate them roaming using MEEP or Custom Companions though.

#

(I did it with my kids pre-1.6. Was still a bit buggy though)

hallow prism
torpid sparrow
#

hmmm okay then yeah i think ill keep him as a pet

tender bloom
torpid sparrow
#

i think ill make two mods one as a pet and then one as an npc but he never gets adopted just lives in the cove

#

and then you can bring him gifts and stuff that would be nice

lucid iron
lucid iron
#

DROP_IN_PRESERVE

#

Then u can be like

#

MyFruit -> MyFruit Tea -> MyFruit Kombucha

#

Rather than having to do Tea Kombucha

ornate trellis
#

man, why do i always fuck up the texture path for building skins

lucid iron
#

-# local tokens

ornate trellis
#

:(

#

thats a really nice restaurant, right

lucid iron
#

they sell roasted errors in there

latent mauve
#

I mean, I feel like the Trash Bear would be right at home dropping down cooked meals from the bin

ornate trellis
#

i really dont get why i keep messing this up? i copy paste my code and i copy paste the image name

#

so how is it giving me error

latent mauve
#

You've loaded the texture and aren't just using the filepath, right?

ornate trellis
latent mauve
#

I made that mistake a ton of times with the NPC appearance textures, so I figured I'd ask. πŸ˜›

inner harbor
#

Also, I'm hoping to have the ESR/ES 3.0 beta out end of next week.

lucid iron
#

wag simple mode has kombucha but thats quite a lot

inner harbor
#

(this question is not somehing I'm doing but I"m asking for a friend)

#

ah I'll tell them, they might have that mod!

lucid iron
#

oh i know

#

this one's simple

#

i think vanilla roe -> aged roe is this too

inner harbor
#

coolio, thanks so much

#

one day I might add cider back into the game

#

oh NM it already exists

#

maybe I'll make rhum arrange. First I gotta make rum though.

torpid sparrow
#

my event for some reason is not having the camera center on the tile i write it to be no matter where i set the x y coordinates oh and also does not make the farmer appear where i put them

#

the event runs everything else just not that

inner harbor
#

(how would you make rum in SDV, placing sugar in the keg?)

lucid iron
#

in vanilla yea

#

ik cornucopia has sugar cane but it doesn't have rum

ornate trellis
lucid iron
#

u can do it like take sugar in vanilla, switch to sugar cane if cornu

calm nebula
#

Chue can I have boba

#

In stardew

lucid iron
#

no

brittle pasture
#

@golden basin latest version of Extra Animal Config supports GSQ on animal attack now, so you can condition it with something like SpaceCore's ring buffs + attack only if not has buff
I'm not doing the "trough can accept multiple items" unfortunately, it's too complicated when silos/autofeed is taken into the picture. You can do something like a crafting recipe that crafts any fish into "meat animal food"

#

also wow, the one time I'm taking a break from the channel 1.6.16 is out

crude plank
red egret
inner harbor
#

I didn't realize rhum arrange was French, I thought it was Malagasy in origin (and the name came because they speak French there). And here's me with already some French-esque NPCs... and essentially some pirates... Hmmm. Something to consider adding when I'm done with the other stuff.

lucid iron
#

this {{1}} and so on is getting treated as a token

red egret
#

idk what a token is, really

lucid iron
#

a token is a (set) of values Bolb

inner harbor
#

actually I think sugar cane in the ill maybe gave me the byproduct I need

lucid iron
#

ModId is a simple one, it'd simply be acceptablefudge9000.Vases

red egret
#

oh i should have replaced that

lucid iron
#

nop

#

contentpatcher.dll will substitute that in for you

#

that is why you simply put {{ModId}}

red egret
#

can you give me an example of a correct line?

inner harbor
#

yeh molasses

lucid iron
#
"{{ModId}}_vase1": "{{ModId}}_vase1/decor/1 1/1 1/1/1000/-1/{{i18n: vase1.name}}/0/Mods\\{{ModId}}_vase1\\red vase"
red egret
#

thank you

sweet wharf
#

Does anyone have a calendar for the game with all of the clinic visits that I can use to make sure I don't overlap my character's visit with another's?

lucid iron
#

in this case

red egret
#

aha the 1 needed replacement

lucid iron
#

which could be no translation ofc

#

just gotta make a i18n/default.json like this

{
    "vase1.name": "Red Vase"
}
red egret
#

oh

brittle pasture
#

also for anyone who cares I went back to the harmony mines for this; I managed to got the "add back hoedirt on daystart" solution working but then they weren't watered/DayUpdate'd

#

had to patch "natural dirt decay", "debris-based dirt decay", and "season start dirt decay" (the last one involves patching a predicate, funβ„’)

red egret
#

and if i want to add more names, is it each separately in the brackets or all in one?

halcyon nest
lucid iron
#

@outer glacier

halcyon nest
#

thank you!

lucid iron
red egret
#

aha thank you

calm quiver
#

Hey if anyone wants to use this building in a mod or something go ahead, just made it for fun last night and today

#

Aseprite file too

lucid iron
#

wow what is it meant to be?

#

nvm reading is hard

calm quiver
#

Yeah its got:

  • Impractically thick rope
  • Fish bucket with no lid
  • 17 build code violations
  • Pulley elevator
lucid iron
#

is it on a cliff to catch sky fish

calm quiver
#

The cliff is for the epic view

red egret
#

oh yay, success! it works! ty again!

tame orbit
#

hi friends
I want to make a mod where there is no consequences for not being in bed at 2am. In the sense of you the PC do not pass out, but rather see the daily save/level up/profit, then continue to be where you are to the next day

#

is something like that possible?

lucid iron
#

night owl?

tame orbit
#

omg I'm so sorry when I was googling it I didn't see it!!

lucid iron
#

that one implements consequences, but the general logic is the same

#

you will have to do C# either way

tame orbit
#

I'll def check it out to see if it's what I'm looking for! thank you so very much I appreciate it SDVpufferheart SDVemoteheart

proud kite
#

hi all - i vaguely remember someone saying there is a spreadsheet with modded npc festival location; does this exist or did it happen in my dream doggo_laugh

gaunt orbit
#

There is! I don't have a link on hand but I think there's a command or quote for it?

proud kite
#

yipee!

ornate locust
#

It stops aligning right towards the bottom unfortunately

#

but I don't know how to even try to fix that, I haven't used spreadsheets for much

twin wadi
ornate locust
#

Oh... yeah, I'm seeing that too.

#

I used this not THAT long ago and it looked fine until stuff stopped aligning

sweet wharf
#

So, I got curious and I made an entire calendar based around who had a clinic visit because I wanted to give my character a clinic visit so I'll post the picture here in case anyone needs it for their own characters and to adjust schedules for NPCs

thorny tiger
#

i did not know every clinic visit is on a Tuesday or Thursday

#

this is new information to me

twin wadi
#

hmm iirc maru works on tuesdays? so maybe that's why?

sweet wharf
#

And the 18th of Fall is the only Thursday where no one has a visit and it's not on a festival day either

true birch
#

Hey all, I'm looking for some help on a personal mod I'm working on.

It's a reskin mod for the obelisks, and I discovered when I went to implement (after making my graphics) that the code I wanted to use won't work for what I want it to do. I'm hoping someone can suggest another option (besides manually changing the image I want to mod in the files every season, which would be a pain).

More full explanation:
I found a cute reskin with different seasonal looks for the obelisks, but I'm running with a bunch of mods, including Ridgeside, Mount Vapius, and East Scarp, and want all the obelisks to match. Someone else already did an additional mod to that adds a matching reskin for the obelisk from Ridgeside, and I tried applying that code to add my reskins for Mount Vapius and East Scarp. It worked for East Scarp, but not for Mount Vapius. Looking in the Mount Vapius code, the obelisk seems to be implemented differently, and at this point I'm definitely out of my depth on how to get it to reskin over the Mount Vapius obelisk.

For reference, the reskin-of-RSV-obelisk mod on Nexus: https://www.nexusmods.com/stardewvalley/mods/31684

Nexus Mods :: Stardew Valley

δΈ€δΈͺCPζ¨‘η»„οΌŒηΎŽεŒ–ι‡Œε₯‡θ΅›εΎ·ζ‘传送晢呔。A CP mod retextured the sprites of the RSVObelisk.

brittle pasture
#

!json post what you have? but Vapius's obelisk is just a regular building like the others, you're probably picking the wrong texture name maybe

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.

true birch
#

Here's what I've got:

"Changes": [
{
"LogName": "Obelisk",
"Action": "EditImage",
"Priority": "Late",
"Target": "Buildings/Scarp_Obelisk",
"FromFile": "assets/{{season}}/Vapius_Obelisk.png",
"PatchMode": "Replace",
"When": { "HasMod: |contains=atravita.EastScarp": true }
}
]
}

#

Oh, sorry, that's the East Scarp one

#

I've got Lookup Anything, so I know I've got the right name for the obelisk

brittle pasture
#

I peeked in VMV's files, the texture name being used is Mods\\Lumisteria.MtVapius\\mtvapiusobelisk
so you need to edit that Target

tropic basin
#

Pro tip for any mixed C#/ContentPatcher modders out there: The behavior for setNewDialogue() with a nonexistent translation string is not what you’d call desirable. This will do what you want.

    character.setNewDialogue(translationKey);
}```
uncut viper
#

there is also another function to just check if a translation key exists that I don't remember off the top of my head

tropic basin
#

I'm sure there is but I couldn't find it

#

also if you want you can modify this method to do text substitution in C# by swapping out β€œis not null” with β€œis string <variable>”

#

of course then you couldn’t just do a one-argument setNewDialogue but whatever

#

there’s a method for that too

torpid sparrow
#

Could someone help me figure out why i can't run an event? it's in a custom location. Console just says the event can't be found. The location does show up (im in the map rn) but it just wont run the event when the target is Data/Events/locationname

uncut viper
#

did you load a blank.json to that location first?

torpid sparrow
#

oh i did not are they necessary?

uncut viper
#

for custom locations yes

#

or any location that doesn't have events in vanilla

torpid sparrow
#

i see

#

how would i do that

tropic basin
#

either that or you can just write out the (location).json and load that without editing it

uncut viper
#

otherwise the asset doesn't exist before you edit it

#

the blank json is the better method as it allows tokens

tropic basin
#

true

torpid sparrow
#

how do i load the blank json?

#

and is it completely blank

torpid sparrow
#

sorry ive never used a blank json for anything ive always been able to avoid it

uncut viper
#

just create a json file with nothing in it but {} and Load it to Data/Events/LocationName with low priority

tropic basin
#

the json should contain {}

torpid sparrow
#

okay i will do that and try things out thank you!

sweet wharf
#

So I was trying to validate my .json files and one came with an error, I'll send the link in a second message

brittle pasture
#

missing commas on line 57 to 61

sweet wharf
#

Yeah, I realized that myself, and I redid it, now it's giving me another error

brittle pasture
#

missing comma on line 127

sweet wharf
#

So many missing commas

brittle pasture
#

what editor are you using

devout otter
#

I know next to nothing C#, but I’m trying to fix a small issue I think (hope) I might be able to handle. I’m using a framework that lets you inject portraits into dialogue via Content Patcher. The problem is, when I change a portrait conditionally, the change happens one day too late in-game.

For example, if I set the portrait to change on Wednesday, it doesn’t actually update when Wednesday begins. It only changes after I sleep and wake up on Thursday. However, if I quit and reload the game on Wednesday, the portrait updates correctly.

#

I'm guessing this is the part that determine when a portrait is loaded (again. know next to nothing, so sorry if I'm completely offbase). Is there anything I could change to make the portraits load properly? ``` public override void Entry(IModHelper helper)
{
Instance = this;
HarmonyInstance = new Harmony(ModManifest.UniqueID);

    helper.Events.Content.AssetRequested += AssetRequested;
    helper.Events.GameLoop.DayStarted += GameLoop_DayStarted;
    HarmonyInstance.Patch(AccessTools.Method("Game1:drawObjectDialogue", new[] { typeof(string)}), prefix: new HarmonyMethod(AccessTools.Method(typeof(ModEntry), nameof(Prefix_OneString))));
    HarmonyInstance.Patch(AccessTools.Method("Game1:drawObjectDialogue", new[] { typeof(List<string>) } ), prefix: new HarmonyMethod(AccessTools.Method(typeof(ModEntry), nameof(Prefix_StringList))));
}```
lucid iron
#

Oh u gotta handle invalidation

uncut viper
#

(thats just the ModEntry which applies the harmony patches and assigns a method to the DayStarted event)

#

(not where the portrait is actually chosen)

devout otter
#

(So I am completely offbase.) πŸ˜…

lucid iron
#

we can link the sauce right, since it's on gh anyways

devout otter
lucid iron
#

yea it doesnt look like theres assetinvalidated implemented

lucid mulch
#

yeah you would want to handle invalidation to call PopulatePatcchDictionary

calm nebula
#

(Tbh as I said earlier, I really do not like the idea of using the dialogue string to index)

#

Among other things, translations, etc

lucid mulch
#

what is likely happening currently is your DayStarted event is triggering before CP's so you are populating your cache with the old version

#

other hack is to just put a low priority attribute on the daystarted event to have it run after CP, but wont solve locationchange/timechange CP patches without doing it properly with invalidation

tiny zealot
calm nebula
#

In dolphins case I suggested adding a dialogue command instead

#

And wellllll

tiny zealot
#

it stinks and i don't like it. maybe if everyone switches to the indirection in 1.6.16 (or the existing translation key thing we have now) it could work based on those

lucid mulch
#

can always do the arguably simpler but also equally as fragile and use the CurrentCommand index

calm nebula
#

The difference between "atra is willing to do implement" and "atra has time to implement" is fun and games

lucid iron
#
helper.Events.Content.AssetsInvalidated += OnAssetInvalidated;

private static void OnAssetInvalidated(object? sender, AssetsInvalidatedEventArgs e)
{
    if (e.NamesWithoutLocale.Any(an => an.IsEquivalentTo(Asset_QuestionDialogue)))
        _qdData = null;
}
#

need a thing like this

#

tho hm this would require lazy loading pattern instead

lucid mulch
#

replace _qdData = null with this.PopulatePatchDictionary() and Asset_QuestionDialogue with PATH and pretty muc hthere

tiny zealot
#

lazy loading is great because it makes invalidation this easy to support ^

lucid iron
#

is it ok to load things in an invalidate tho

calm nebula
#

We again try to nerdsnipe the chue

lucid iron
#

i try not to do it monS

#

nou

lucid mulch
#

modded assets need something to react to invalidation to cause a load

calm nebula
#

I'll do it when I have time toooooo

#

July 4th?

lucid iron
#

i didnt even finish gima and i have 2 days before button puts me on the isle of elba

lucid mulch
#

smapi itself reacts to invalidation to do the propagation phase for vanilla assets

tiny zealot
calm nebula
#

Anyways @devout otter I'm more or less willing to do a rewrite for you (for free) when my schedule allows

lucid mulch
#

that reminds me I still need to do my invalidation diagram

calm nebula
#

Until then, I'm going to try to nerdsnipe sinz

lucid mulch
#

I did the asset pipeline diagram but not the invalidation part to finish the loop

devout otter
lucid iron
#

in the meantime dolphin

#

do u wanna try doing invalidation?

#

i support dolphin C# adventures

uncut viper
#

you may alsso try writing your own C# mod that patches that mod and calls its populate function via reflection, which is not at all easier but is more fun to suggest

devout otter
brittle pasture
lucid iron
#

once u do this i think u can yeet the day started

#

or maybe it can be assetready?

calm nebula
#

Smh. Am I the only person who refuses to iterate a hashset when I don't have to lol

lucid mulch
#

tbh doing the lazy loading approach of setting to null and needing to always use a central handler to query the data and fetch when null, is only really needed if its an asset very infrequently read.
if its frequently read, just immediately setting the cache value to the new load value does the job fine

#

AssetReady is a weird lifecycle hook, and I'd only use it for other peoples assets

calm nebula
#

It really is tbh

lucid mulch
#

if you are the one calling load, reacting to getting the value is much better and safer

lucid iron
#

tho honestly i dont think theres a real diff between doing lazy loading to a field

#

and just go Game1.content.Load when u need

#

isnt it cached anyhow

lucid mulch
#

with smapi there, there isn't really a difference

lucid iron
#

i mostly do it in case i transform asset later

lucid mulch
#

you technically save a tiny bit of work, but not much, the cache is very early

calm nebula
#

Technically speaking there is overhead to asset name parsing

lucid mulch
#

you can call it with the parsed name

calm nebula
#

But yeah. For the bulk of things it's finnneeee

calm nebula
lucid mulch
#

ah yeah Game1.content is typed as LocalizedManager, though the runtime value is GameContentManager instead which does (and is LoadExact for the one where you feed it parsed names and whether to use the cache))

calm nebula
#

Anyways. I like lazy loads and I will not lie. All the other .... cannot deny

brittle pasture
#

calling load one and saving it somewhere saves me the effort of passing in the right type name but that's not particularly relevant probably lmao

lucid mulch
#

tbh an extension method into DataLoader would be a decent pattern

#

or skip the syntatic sugar and have your own util class do the pretty much same anyway

lucid iron
#

(im sorry we r bein nerds here)

calm nebula
#

Can you do a static extension method?

#

Dolphin go ahead you're actually modding

#

I'm eating dinner

lucid mulch
#

oh right they are adding new extension method syntax, that makes searching the current/old way more annoying

royal stump
#

(love that the first search result for that is a "no" from 16 years ago SDVpuffermlem)

calm nebula
#

Morning esca!

#

Can I nerdsnipe u SDVpufferheart

royal stump
#

SDVpufferchickmorning morning, and...probably

calm nebula
#

$USE_PORTRAIT <npc name or asset> command for dialogue

lucid mulch
#

the new extension syntax can do static extensions, not sure if .NET6 runtime will let it run though

gaunt orbit
#

I keep forgetting how old c# is and having to set time filters while doing research bc so much of it is ancient monstrosities written for wpf or asp.net

calm nebula
#

Isn't dotnet older than you are

#

Older than most of the channel

gaunt orbit
#

How old is it?

calm nebula
#

25

lucid mulch
#

dotnet goes back to the early 2000's as a part of windows

gaunt orbit
#

It is not older than me, but thank you that's very flattering

lucid mulch
#

public release is 2002-01-15

calm nebula
#

...but you're younger than Javascript I assume

lucid mulch
#

but its slightly older as it was used internally in windows longer

gaunt orbit
#

I'm 29

uncut viper
#

i am also older than d otnet

royal stump
calm nebula
#

I legit thought you were 26-27

ornate locust
#

Older than .net party, I guess

royal stump
#

I mean, idk much about that whole system or whether that's new/upcoming/mod

calm nebula
#

Most people think about older or younger than drinking afe

#

Here, we ask: older or younger than dotnet

royal stump
#

also I always forget C# predates me going to college, because profs acted like it was new

calm nebula
#

Dotnet can vote

gaunt orbit
#

And drink

lucid mulch
#

wikipedia cites 'late 1990s' but the earliest reference I've actually seen is a June 2000 post, which does probably mean it had a development tail going into 1999

uncut viper
#

dotnet cant vote unless its registered to

ornate locust
#

I'm also older than Javascript

lucid mulch
#

was originally called Next Generation Windows Services

brittle pasture
royal stump
#

I thought C# and Java were basically the same SDVpufferowo

calm nebula
#

Anyways, as resident old (older than the sea or the stars, or perhaps a medium sized language model, or perhaps a normal age...) get off my lawn

lucid mulch
#

now I think about it, it makes sense they called it .NET during peak dot com bubble

royal stump
#

(I have not used java)

patent lanceBOT
royal stump
#

oh no, my first quote probably

lucid mulch
#

If you want something basically the same as java, there was J#

calm nebula
#

.q esca

patent lanceBOT
#

No quote found. Wow, chat more, losers.

brittle pasture
#

what's the oldest language yall use
mine is probably ||Vietnamese||

royal stump
#

QBasic

#

I was like 6

brittle pasture
#

serious answer: Pascal

tender bloom
#

Lisp if scheme counts?

#

How old is lisp anyways

lucid mulch
#

pure lisp is like 40's-60's

royal stump
#

wiki says 65 years, impressive

calm nebula
#

Lisps are probably as old as speech tbh

lucid mulch
#

the various permutations and variants aren't

tender bloom
#

Looks like scheme is 70s

gaunt orbit
#

GML, for the 3 of you that know what that is (ask casey about it)

#

Oh wait oldest not first

tender bloom
gaunt orbit
#

That would definitely be java

royal stump
#

I mean, GML predates C# by official wiki dates SDVkrobusgiggle

calm nebula
#

Verilog (1984)

royal stump
#

so close enough

tender bloom
#

Tbf GML says 99

#

That’s not terribly new

royal stump
#

(wait no, it just redirected to game maker itself, so maybe the scripting was later)

lucid mulch
#

the oldest (non human) language I use is probably html.
its older than JS (which I don't actually write), definately older than typescript (which I do write) along with C#

gaunt orbit
tender bloom
#

Yeah I figured when you said Casey SDVpuffersquee

#

Wait a sec this isn’t the off topic thread

#

We’ve escaped confinement

gaunt orbit
#

Oh oops

lucid mulch
#

whoops

devout otter
royal stump
#

I guess HTML too if we're talking active use
(and pretending I still update my config editor)

calm nebula
#

The oldest language I can program is likely arm variant assembly

royal stump
#

that thing I hear about when I tamper with nintendo devices SDVpufferwow

gaunt orbit
#

Wait actually when was xslt invented

#

98, so still newer than Java by a few years

calm nebula
#

The youngest I can program in was designed and written by one of my coworkers lol

merry rampart
#

Downloaded Tea's Recolor tool off github. It says I need to run the exe but.... I'm not seeing it

gaunt orbit
#

Looks like you downloaded the source and not the release

royal stump
#

⬆️ check the Releases tab/page for the proper download files

merry rampart
#

these were the only two options

calm nebula
#

Tbh you could probably run that main.py file

merry rampart
#

i dont know how

brittle pasture
# devout otter Thank you! So if I'm understanding this correctly, I can incorporate this to the...

if you want to use that code as is, in your mod you'd create a new instance of BaseAssetHandler, pass it the type of the asset (in this case seemingly just a dict of strings to strings), instantiate a new instance, call RegisterEvents on it, and then every time you need data you just call .data on the instance you created
for your mod specifically I just want to show an example of how you'd add an asset invalidate event to clear the dictionary

gaunt orbit
#

Yeah, install requirements and then run main.py, assuming you have python already

#

(you can do pip install requirements.txt from command line and it should install whatever you need to run it)

merry rampart
#

i dont know crap about python

#

all the instructions say is run the exe. that's easy enough to do.... if i can find it

#

maybe tea took down the release. that's the only explanation i can think of

devout otter
royal stump
#

having found the tool, yes, they stopped using the exe due to licensing from the sound of it

/// NOTE THAT DUE TO CHANGE IN LICENSING FOR PYSIMPLEGUI THE EXECUTABLE IS NO LONGER AVAILABLE / SUPPORTED ///

merry rampart
#

welp

#

i'm gonna put this project back on the back burner then because i am not doing this recolor manually

dire kestrel
#

where is the trash can asset sourced?

tender bloom
#

May not get new features but it’s a copy of the last open source version of PySimpleGUI

tender bloom
#

It’s a meme but it’s also often true that if you can’t find it, it’s in cursors

rough lintel
tender bloom
#

I blame windows tbh

dire kestrel
tender bloom
#

Is this trash can the outdoor object, trash can animation, or trash can the tool?

rough lintel
#

^

vernal crest
#

Wow that was a lot of requests to join SMC. Many of which did not ping me >:(

rough lintel
dire kestrel
royal stump
#

cursors contains these, at a glance, though I imagine the maps sheets have one, etc

dire kestrel
#

ugh, i missed those. thank you! still sifting through tilesheets

royal stump
#

ah, here's the one in Maps/spring_town (and the other seasons), near the top

dire kestrel
#

right, _town was probably the place to start SDVpufferrise now it's festivals and whatnot

vernal crest
lucid iron
#

Wasn't it just not recommended for generic dialogue reasons

vernal crest
# lusty sail Or pinned here

The Junimos have a policy of only including the other language Stardew servers as friends. And invite links are otherwise banned (last time I forgot that and tried to give someone a link to SMC here I got put in gay baby jail and DH had to free me lol). You have to escape the maincord atmosphere before you start getting the mutual server links.

For instance I had a hunt around and found that SBV and RSV both have standing SMC invites.

vernal crest
lucid iron
#

It was joke yea

#

Hence sow confusion and chaos

vernal crest
#

(Whoops soz I am on a pinging roll and you got caught up)

vernal crest
somber hinge
#

hi :) new to this. I'm trying to figure out how to give ducklings a unique texture (vanilla just uses baby chicken). my unsuccessful attempt looks like this

  "Changes": [
    {
      "Action": "EditData",
      "Target": "Data/FarmAnimals",
      "Fields": {
        "Duck": {
          "BabyTexture": "assets/Animals/duckling.png"
        }
      }
    }
  ]
}```
I feel like I'm missing something obvious but I can't figure it out :p
lucid iron
#

You have to Load ur png somehow

sweet wharf
#

Commas

vernal crest
#

Not commas, trying to use a texture that's in the mod folder directly which isn't possible.

sweet wharf
#

Commas are a pain for me, it's just a matter of putting them correctly

somber hinge
#

yea it parses fine

#

reading abt the load action on the cp readme taught me how to replace an image. is there another way to use it?

vernal crest
#

You just write your own Target instead of using a vanilla one. Such as "Target": "{{ModId}}/Duckling".

#

And then you copy that Target into your BabyTexture field.

#

The {{ModId}} part is not intended to be replaced, by the way. Keep it exactly as-is. Content Patcher will replace it with your mod's ID from the manifest.

somber hinge
#

ok sick I'll give that a shot, thanks !

golden basin
torpid sparrow
#

Would it be possible to switch sprites depending on whether an event has been seen using a GSQ?

#

like prior to an event the pet uses one spritesheet, and then after the event, they use a different spritesheet

tiny zealot
#

not using a GSQ, i don't think, since i don't think pets can use Appearance the way NPCs do

#

but you could do it with CP's When

brittle pasture
golden basin
#

thank you!!!

torpid sparrow
golden basin
brittle pasture
#

there's a cooldown

#

when checking attack with GSQs to avoid performance issues

#

try waiting a couple seconds

golden basin
#
"LogName": "Attack On",
"Action": "EditData",
"Target": "selph.ExtraAnimalConfig/AnimalExtensionData",
"Fields": {
  "{{ModID}}_MaleMovoraptor": {
 "IgnoreRain": true,
 "IgnoreWinter": true,
 "SpeedOverride": 4,
 "IsAttackAnimal": true,
 "AttackDamage": 5,
 "AttackIntervalMs": 10000,
 "AttackRange": 5,
 "AttackMaxChaseTimeMs": 10000,
 "AttackCondition": "!PLAYER_HAS_BUFF Current {{ModID}}_MotherOfRaptors.Buff",
 "FeedItemId": "(O)684",
  },
},```
brittle pasture
#

and it was working before the condition? hmm

golden basin
#

yeah it was working before

lucid iron
#

did u try debug gq !PLAYER_HAS_BUFF Current YourActualModId_MotherOfRaptors.Buff

brittle pasture
#

oh yeah try Target instead of Current

#

though that shouldnt matter but idk

golden basin
#

or?? ok idk what

#
   !PLAYER_HAS_BUFF Current Fellowclown.TW_MotherOfRaptors.Buff | true```
#

and the result is true

brittle pasture
#

let me try myself

#

well that means the condition is true = the animal shouldn attack

#

is it true even when you took it off?

golden basin
#

yeah its true ith the ring off

brittle pasture
#

hang on, I can reproduce now, I think I may have made an oopsie

#

πŸ˜…

#

yeah I was stupid, after testing the code I added a last minute change to check the condition right before the attack in case it changed midway, and I flipped the sign

golden basin
brittle pasture
#

no worries, you found the bug in the first place so I should thank you SDVpufferheart

#

there's no rush

#

actually since I'm so confident that was the issue I updated EAC on Nexus too

tropic basin
#

I’ve been banging my head against what I thought was a frustrating out of nowhere bug but I think what’s actually going on is that my setNewDialogue() is being overwritten by the rainy day dialogue before I get a chance to trigger it

#

whatever, I saw that it was working before so I’ll just move on for now

rigid oriole
#

What are you trying to achieve?

brisk wedge
#

for translations, if the word is something like "seasons" or "spring", which already exist in the game in stringsfromcsfiles and have translations, is it better to just do those automatically or is it better to make your own label and put it in your i18n

spice inlet
#

for some reason this causes a null return on Game1.getLocationFromName for multiplayer clients when outside the location SDVpufferthinkblob

    {
      "Action": "EditData",
      "Target": "Data/Locations",
      "Entries": {
        "{{ModId}}_WildHavenCave": {
          "CreateOnLoad": {
            "MapPath": "Maps/skellady.WHF_WildHavenCave"
          },
          "DisplayName": "{{i18n:WHF.Cave.Name}}",
          "DefaultArrivalTile": {
            "X": 6,
            "Y": 9
          },
          "ExcludeFromNpcPathfinding": true,
          "ArtifactSpots": [],
          "FishAreas": {},
          "Fish": [],
          "Forage": []
        }
      }
    }
royal stump
#

(the latter part can be ruled out in local testing, but yeah)

spice inlet
#

that's the thing, the farmhand can go to that location just fine and then getLocationFromName also returns a GameLocation

#

just outside of it the same call returns null

royal stump
#

odd, since iirc that's how warps work anyway, but I did get a result for that before warping there

drowsy minnow
#

i am so happy
@vernal crest
sorry for the random @ but just wanted to say thank you so muchSDVpufferheart
i figured out the mail thanks to your previous help, ive switched the mystery bag names to no longer have spaces and removed the event thing i tried to use previously as was recommended SDVpuffersquee

red egret
#

Is it hard to make a farmhouse map?

vernal crest
unique sigil
# red egret Is it hard to make a farmhouse map?

farmhouses are very janky - it naturally has a lot of issues that currently can only be worked around using other frameworks like MMAP or noclip mode. i would say a starter farmhouse redesign is on the easy end, but i absolutely do not recommend upgrades 1 and above for beginner mapmaking.

red egret
#

So the best map to start with is the farm? Or perhaps a brand new map for a npc?

unique sigil
# red egret So the best map to start with is the farm? Or perhaps a brand new map for a npc?

farm maps surprisingly have a lot of moving parts. it is the easiest to make on account of you being able to just start by editing an existing vanilla farm map, but it may take a bit to figure out the code (especially editing Data/AdditionalFarms for custom farms) and map properties.

in terms of coding i'd say a regular custom location map (not farm, not farmhouse) is easiest

#

in any case, i suggest figuring out Tiled first before figuring out how to make a stardew map

red egret
#

Aha thank you

#

What's moving on a map?

unique sigil
#

oh, by "moving parts" i mean all the bits and bobs you need to figure out so they make a farm map work, not literally SBVPufferSquee

red egret
#

Ah okay xD

inner harbor
#

why on earth would Grandpa's Evaluation be patching to my Data/Events/EastScarp_Lighthouse file?

unique sigil
# red egret What's moving on a map?

in any case, Modding:Maps is where you go for mapping basics in stardew

Here is where you go to for Location data, and this page has the special data required for custom farms.

If you ever need a relatively simple working example, you can take a look at my map Cliffside Cove for reference. it has no additional gimmicks, it is just a custom farm map with a custom farm cave and location data SMCPufferThumbsUp

inner harbor
#

NM, might be a random line of code I accidentally incldued

wise forge
#

ahoy friends! can somebody remind me what the SMAPI command is to reload a pack? ^^;

lucid iron
#

patch reload <yourmodid>

wise forge
#

thank you!!

lucid iron
#

Assuming cp

wise forge
#

CP, yes

forest path
#

Hi all, I am trying to load a custom NPC location into the town map. So far I have:
created the house/interior in Tiled and saved as both TBIN and TMX
Editted the town map with my new house and where I want it
Started the code to load

However, I can't seem to get the house on the map. I am also unsure of what coordinates I need to use, if any. Here is the code I have so far:
{
"Action": "EditMap",
"Target": "Maps/Town",
"FromFile": "Assets/Town_Percy.tmx",
},

(the format, changes part of the code is already in the entire code, this is just the code piece thats nested in all of that)

Please let me know what else I need! I also have no idea how to make it so my character can "enter" the home once its loaded, to load the interior of the house as well

amber loom
#

You also want a from and to to just patch only a part of the map

#

I usually do that on tiled but you can fo it on the content json if you want to

lucid iron
ocean sailBOT
forest path
lucid iron
#

ah yes sve already got to town before you lol

#

do you have a Load targeting Maps/Town somehwere

cedar turtle
#

nasty things those cleaningthatcringebroom

forest path
#

I don't but what I'm starting to realize is that I'm probably better off creating my own little area for this NPC lol outside of the town map

lucid iron
#

basically only 1 mod may (exclusively) load an asset

#

but many mods may edit the same asset

#

i do think extra area is better, but it's unrelated to getting your thing to work

forest path
#

So can I edit the SVE asset then to include my little NPC house on its town map? (sorry if dumb question, I'm very new)

lucid iron
#

no you have to target Maps/Town

#

that is the asset everyone's loading/editing

#

!json

ocean sailBOT
#

JSON is a standard format for machine-readable text files that's used by Stardew Valley mods.

If you need help with a JSON file, you can upload it to smapi.io/json to see automatic validation and share the link here.

When making mods, it's recommended to edit your files in a text editor with JSON support, such as VS Code, Notepad++, or Sublime Text. These programs will check for syntax errors.

torpid sparrow
#

I would assume you use the SVE map to figure out where u want ur house to go but the code targets the vanilla town map?

lucid iron
#

yea (though personally i'd say check vanilla first

calm nebula
#

Tbh sve is big enough that I don't blame people for either supporting sve only or not supporting sve

#

People do that

#

It's fine

tropic basin
#

Is the wiki’s description of festival data inaccurate? It says that the game ignores a key without _y* if there are any corresponding _y* keys, but all the vanilla festivals have e.t. set-up and set-up_y2. If what the wiki said was how it worked, that would mean the first half of every vanilla festival was completely ignored. Does it mean to say the game just treats a key without a year as equivalent to _y1 if other year keys are found?

lucid iron
#

u can look at TryGetFestivalDataForYear

#

i think it is like

  1. count max num of years that have data
  2. take modulo of current year by that max
  3. see if theres a set-up_y[n] key otherwise use set-up
tropic basin
#

see that’s what I thought, but that is not what the wiki communicates

#

I think it’s just unclearly worded

lucid iron
#

If year variants are defined for a key, the original key is ignored (e.g., set-up will never be used if set-up_y* entries are defined).

#

i read * as "the year now"

#

but yes it does mean wildcard in general so i get u

#

worth rewording a bit

brittle ledge
# calm nebula It's fine

people can do what they like, but SVE-only tends to have much lower download numbers since you're cutting out a much wider chunk of the audience vs. vanilla-only or vanilla and SVE compatible. If you don't care about numbers/have a lore reason to be SVE only, go for it.

brittle ledge
ivory plume
#

(Fetching mod updates for the monthly stats, and... what happened this month that led to 1,152 mods updated and 56 mods deleted on Nexus, and another 70 deleted mostly by two authors on ModDrop? SDVpufferchicksweatsip)

torpid sparrow
#

Two authors deleted 70 mods between them? Damn that’s a lot

ivory plume
#

(On ModDrop, they were deleted by three authors: 51, 17, and 2 mods respectively.)

torpid sparrow
#

51!! Good lord I fear them

#

And admire them equally

crude plank
#

Who deleted 51 of their mods wow

uncut viper
#

what is the usual number of mods updated on Nexus?

calm nebula
#

Median or mean?

uncut viper
#

whichever

calm nebula
#

I expect a distribution that is like. Most people upload 2. Casey has like near 100

#

Median is a better measure

ivory plume
#

I don't track those stats, but I feel like the usual would be closer to <500 updated and <25 deleted? I don't have specific numbers though, I just noticed it this month because of the lengthy progress bar.

uncut viper
#

does updated include uploaded?

#

like the initial upload

calm nebula
#

Oh, I misread. Sorry

ivory plume
#

Yep, 'updated' means any change to the mod (including the initial upload), except for deletion.

torpid sparrow
#

I suppose the 51 deleted mods by one author is an anomaly, are their mods all similar to each other? Or are they a variety

uncut viper
#

ahh, okay. in that case that number doesn't seem too large to me

#

the deletions by two people is a lot though. guess someone just wanted to delete their mod drop account

torpid sparrow
#

Yeah ^

ivory plume
#

Maybe it's just been an active month for mods; I guess we'll see if there's any difference in the final stats from the usual.

torpid sparrow
#

I don’t know the age range for kidders but…school is letting out?

#

Modders*

ivory plume
#

Oh true, it could just be school summer vacation.

uncut viper
#

wonder if it happens in past June mod stats too

lucid iron
#

51 deleted at once just seems like "author decided that moddrop is bad vibes"

#

Or "author quits modding, scorched earth"

torpid sparrow
#

What is the opinion on moddrop? I’ve never used it

#

Not sure if I’ve ever even visited the site

uncut viper
#

my opinion is I'd not change that

lucid iron
#

I don't like the ui it's too busy

calm nebula
#

Moddrop seems barely maintained and the ui is slow

torpid sparrow
#

Yikes

iron ridge
#

very slow site, and the staff are horribly inactive

calm nebula
#

That said, there is Nexus auto sync

#

So you can add your mods there effortlessly

latent mauve
#

"probably passable as a mirror site but don't make it your primary mod hub"

uncut viper
#

(or secondary... or tertiary)

latent mauve
#

That's my opinion anyway

ivory plume
# uncut viper wonder if it happens in past June mod stats too

June last year was right after 1.6-1.6.9, so we can't tell anything from that year. June 2023 wasn't much different from previous months and June 2022 was maybe a bit more active, but the community was also much smaller then so it's hard to tell.

uncut viper
#

remind me in one year to check if this June was anomalous

#

or not

#

does the bot not understand "one year"

calm nebula
#

Remind @Button in 1 year to statistics

patent lanceBOT
#

Ugh I suppose, atravita (#6751770) (1y | <t:1782664598>)

torpid sparrow
#

Lowkey also interested in that

#

It’s nice that the modding community has grown so much

uncut viper
#

i dont know who thats gonna remind atra but it aint me

#

remind me in 1 year to june statistics

patent lanceBOT
#

DUDE!! Heck YEAH i can do that (#6751771) (1y | <t:1782664643>)

red egret
#

Can i see the stats for the last years?

calm nebula
#

Pathos pins them

iron ridge
#

and you can just search for from:Pathoschild Monthly mod stats time! for previous ones

#

i wonder what the current state of this is

red egret
#

That's so cool

#

Why are xnb mods unwanted?

lucid iron
#

It's cus they are bad compat

iron ridge
#

!xnb

ocean sailBOT
#

XNB mods often break the game and are not recommended. See:

For mod creators, see editing XNB files for help unpacking & editing them (including for use with Content Patcher).

iron ridge
#

it's like doing a content patcher Load operation on all the assets except you can't tell what broke and it's a whole thing to update or even uninstall them

lucid iron
#

And there's no reason to use em usually, if u come across one just convert it (and check if u need to edit things for new game update)

red egret
#

They will have a .xnb in them?

iron ridge
#

yes and you put them in your content fodler

red egret
#

Manually

#

So Stardrop won't even dl them?

iron ridge
#

don't think it will

brittle pasture
#

they're not mods loaded by smapi

#

you're directly overwriting game files

red egret
#

Alrighty

#

Also Pathoschild, thank you so much for everything you have done and are doing for SV!!! πŸ’–πŸ’―βœ¨οΈπŸ‘ŒπŸ‘

remote berry
#

hey, im making a custom farm map, and im trying to add custom fishing zones, but they do not work at all

#

could you help me understand whad did i do wrong?

#

from what i read on wiki it should be done in content.json

#

but all i ever catch is trash

grand scaffold
#

Could someone help me figure out what i need to fix?
This is my content.json: https://smapi.io/json/content-patcher/7aa7adbed630407db4401786d7731434
This is the warning SMAPI gives me:
Can't apply data patch "Stormlight Spheres > Include assets/itemsetup.json > Objects > entry #2" to Data/Objects: failed converting entry to the expected type 'StardewValley.GameData.Objects.ObjectData': Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List`1[StardewValley.GameData.Objects.ObjectBuffData]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly. To fix this error either change the JSON to a JSON array (e.g. [1,2,3]) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object. Path 'Buffs.Id'..

In the game, Stormbasket and Dun Sphere show up in CJB item spawner (the ones with crafting recipes, although it might be unrelated), but Infused Sphere doesn't even show up in CJB item spawner. Also, the two items that do show up don't show the sprites from the assets folder (they show the error 🚫 instead)

brittle pasture
#

side note, but I recommend you use the additional farm system instead of overwriting a vanilla map

remote berry
#

yea, i checked locations file, and farm was called farm beach there

#

i thought it should match locations.json

brittle pasture
#

what's the Farm_Island load for then SDVpufferthink

remote berry
#

the unpacked .tmx file is called farm_island

#

and farm change already works

brittle pasture
#

ah okay, hmm
well next issue is that you didn't add any fish into your location data

#

just empty fish areas

forest path
#

Hey all, when creating custom portraits for a custom NPC, do you need to have a .xnb file in the stardew valley game Portraits folder itself for your character? I got this error when loading my NPC: [game] NPC Percy can't load portraits from 'Portraits/Percy': Microsoft.Xna.Framework.Content.ContentLoadException: The content file was not found.
---> System.IO.FileNotFoundException: Could not find file 'C:\Program Files (x86)\Steam\steamapps\common\Stardew Valley\Content\Portraits\Percy.xnb'

amber loom
#

No but you need to load their portrait first

#

You can use png files

torpid sparrow
#

^

forest path
#

So I do have a load code:

#

{
"LogName": "Base Portraits",
"Action": "Load",
"Target": "Characters/ena.bakernpcpercy_Percy",
"FromFile": "assets/Image/EnaSpritesheet.png",
},

torpid sparrow
#

You can just put in ur own mod folder

forest path
#

is there something wrong with it?

remote berry
amber loom
#

Thats for sprite

forest path
#

oops sorry, just a sec

amber loom
#

It is asking for a portrait

forest path
#

{
"LogName": "Base Portraits",
"Action": "Load",
"Target": "Portraits/ena.bakernpcpercy_Percy",
"FromFile": "assets/Image/EnaPortrait.png",
},

#

I pasted the wrong one

brittle pasture
uncut viper
grand scaffold
#

so [] instead of {}?

brittle pasture
amber loom
uncut viper
royal stump
#

[ ] around the existing buff, like "Buffs": [ { "Id": ... } ]

uncut viper
#

just like Changes is a list [] with patches inside surrounded with {}

torpid sparrow
#

Iirc after you load in the portrait you have to also put it in your NPC data?

brittle pasture
remote berry
brittle pasture
#

yes, in your unpacked content folder

remote berry
#

i know there is "Fish": marker

#

but it doesnt contain everything that should be there

brittle pasture
#

thanks to LOCATION_FISH, which is "get fish from this location instead"

#

[[Modding:Item_queries]]

remote berry
#

oh okay

#

so this is how it is done

#

i see now

#

thanks a lot

grand scaffold
#

I've fixed the buffs [] problem, but i still have a problem of the textures not loading
updated code: https://smapi.io/json/content-patcher/b28bbfd82d26429e942929e12ef6ce50
ive tried multiple ways of formatting it. assets/Spheres, assets/Spheres.png andSpheres.png
SMAPI gives ```[game] Failed loading texture assets/stormbasket.png for item (BC)KitN.StormlightSpheres_Stormbasket: asset doesn't exist.
[game] Failed loading texture assets/Spheres.png for item (O)KitN.StormlightSpheres_Infusedsphere: asset doesn't exist.
[game] Failed loading texture assets/Spheres.png for item (O)KitN.StormlightSpheres_Dunsphere: asset doesn't exist.

forest path
#

But its still saying the same message

brittle ledge
amber loom
forest path
uncut viper
#

just realized the numbers werent put on the chart. ah well. just look at the json i guess lmao

#

a handful of people are off by a couple mods it seems but idk why and i didnt feel like taking too much time to figure it out rn. like i said, very quick and dirty Β―_(ツ)_/Β―

amber loom
brittle ledge
#

wow, I knew aedenthorn had a lot of mods but that's something seeing it in comparison SDVpuffersquee

uncut viper
#

potentially more, too, if aedenthorn has any content pack only mods, since this is only counting mods that have a C# component

brittle ledge
#

She has a few that are content packs for her own mods, I believe

royal stump
#

it's clear i need to make a 10th mod

uncut viper
#

there were about ~1300 authors who were cut off by the 10 mod minimum

#

that said given the aforementioned "off by a couple sometimes" error its possible that a few people with 8 or 9 mods were wrongfully culled

lucid iron
uncut viper
#

i dont know. the mod dump file i used doesnt have that information

lucid iron
#

U can use the repo for it i think (but y'know work Dokkan )

uncut viper
#

i know the repo exists and is there but i already have all the stuff set up to read this specific file and this specific file only

lucid iron
#

I also wonder what this looks like for content pack authors

#

Mod dump has stats for that right

uncut viper
#

(the mod dump does record whether a given mod folder is a content pack or a C# mod)

latent mauve
# forest path I changed the code now: { "LogName": "Base Portraits", "...

I can't download your file right now to check the character data (looking at this on mobile) but in case you missed it, the earlier comment was that your NPC's internal name (their ID) is missing the {{ModId}}_ prefix that your portrait target has. You may need to change your NPC's internal id / internal name.

The internal NPC name needs to match the NPC name used in the load target for its portraits and character sprites EXACTLY .