#making-mods-general

1 messages · Page 295 of 1

rough lintel
ornate locust
#

You need separate chair tiles. Chair tiles have no shadow

rough lintel
#

does that matter if we dont see the bottom of the couch though

ornate locust
#

It will layer the chair tile on top of your person and if there's a shadow there, it'll double the shadow and look weird. Maybe not such a problem with the wall there but if you use it elsewhere, just an fyi

rough lintel
#

oo okay

#

WE OUT HERE

ornate locust
#

Hey there we go

rough lintel
#

now, to finally figure out why the randomized custom companion dialogue isn't working

#

i did it just like smolhooman but it only shows line 1 🥹

#
"LogName": "Randomized Sammy Dialogue 0-5H",
"Action": "EditData",
"Target": "{{PeacefulEnd.CustomCompanions/Companions:atelier99.LaniCC.LSammy}}",
"Entries": {
"Companion": {
"DialogueSequence": [
{
"Text": "{{i18n:LSammy.Inspection.{{Random: 2, 3, 4, 5, 6, 7, 8}} }}",
"DisplayOnce": true,
},
],
}
},
"When": { "Hearts:LaniSBV": "{{Range: 2, 5}}" },
},```
this SHOULD work if i patch into the companions.json in the CC pack, but... bweh?
lucid iron
#

do u expect to get the lines randomly?

#

i didnt even know CC is loaded through content pipeline

rough lintel
#

yeah i do

#

you can randomize the lines with the CP integration bit

#

smolhooman does this with the CP part of Domestic Animals, sunberry does this with the Raccoon, but i cannot seem to m-

#

wait.

#

ok no yeah

#

i cant seem to make sammy do it :(

#

how smolhooman does it

    "LogName": "Random inspection dialogue for David the Guineapig (1)",
    "Action": "EditData",
    "Target": "{{PeacefulEnd.CustomCompanions/Companions:SmolHooman.DomesticAnimalsCC.DavidTheGuineapig_DA}}",
    "Entries": {
        "Companion": {
            "DialogueSequence": [
                {
                "Text": "{{i18n:DavidTheGuineapig_DA.Inspection.{{Random: 2, 3, 4, 5, 6, 7, 8}}}}",
                "DisplayOnce": true,
                },
            ], 
        }
    },
    "When": {
    "Hearts:Abigail": "{{Range: 0, 4}}",
    },
    },```
#

god i hate formatting

#

this is in the CP portion

#

in the regular companions.json in the CC pack, its just

  {
    "Text": "DavidTheGuineapig_DA.Inspection.1",
    "DisplayOnce": true,
  },
], ```
#

so like. Question Mark?

#

i did the same thing with LSammy.Inspection.1 in my CC pack, and then the {{i18n:LSammy.Inspection.{{random yadda yadda}}

latent mauve
#

Do you have enough entries to cover your .<randomnumber> variations?

rough lintel
#

yeah!

#

i can toss my files in here if that makes it easier. im genuinely not sure what's wrong, if anything

#

ive checked multiple days, and she only says line 1 😔

latent mauve
#

Mind sharing your i18n snippet for LSammy.Inspection.1 through LSammy.Inspection.8 ?

rough lintel
#

sure!

#
"LSammy.Inspection.2":"Sammy doesn't seem to have any interest in you.",
"LSammy.Inspection.3":"Sammy's busy licking her paws.",
"LSammy.Inspection.4":"Sammy slinks around your legs.",
"LSammy.Inspection.5":"Sammy sniffs your hand, but pulls away shortly after.",
"LSammy.Inspection.6":"Sammy hisses when you try and pet her too firmly.",
"LSammy.Inspection.7":"Sammy's tail puffs up as you get closer.",
"LSammy.Inspection.8":"Sammy approaches you cautiously, curious.",```
latent mauve
#

Also is LaniSBV the complete internal name of the NPC?

rough lintel
#

yes :D

latent mauve
#

Okay, just wanted to make sure since the {{ModId}}_ prefix is regularly recommended in NPC data, and can cause issues if you used it to define your NPC and don't use it elsewhere. 🙂

rough lintel
#

oh yeah i dont do that in her npcdata, it made the name too long so i just slapped SBV at the end

#

like everywhere else i do though 🤣

latent mauve
#

the extra space after 8}} and before the closing i18n }} shouldn't matter, right?

lucid iron
#

it doesn't

latent mauve
#

Yeah, I have no clue either

lucid iron
#

can you try a patch export

#

patch parse "{{PeacefulEnd.CustomCompanions/Companions:atelier99.LaniCC.LSammy}}" to find out the target's actual name

#

patch export that

latent mauve
#

my only other thought is because your target is a dynamic token, maybe it isn't updated yet

lucid iron
#

this is a mod provided token right

#

given the format

latent mauve
#

Yeah, Custom Companion creates the dynamic token

quasi dew
#

publishing an update yesterday means anxiously awaiting the inevitable glitches today : )

rough lintel
#

patch export the token?

#

with quotes?

lucid iron
#

u see where it says Parsed value

rough lintel
#

uh huh

lucid iron
#

patch export that

rough lintel
#

with quotes?

lucid iron
#

no quotes

#

well, quotes prob dont matter Dokkan

#

but yes thats the real target

rough lintel
#

didnt like it

lucid iron
#

CC never loaded this then NotteThink

rough lintel
#

BRUH

lucid iron
#

your ID are all correct?

rough lintel
#

yeah

#

it loads my OTHER changes, like spawning sammy and stuff

lucid iron
#

and u have tried talking to sammy before doing patch export

rough lintel
#

yes

lucid iron
#

can u do a patch summary and then send log

rough lintel
#

it even says in the log it applies!

#

what the flippy...

lucid iron
#

yea mystery

      [X]     | [X]        | [X]     | Default   | Lani NPC -  CC Data > data/DependencyData/CustomCompanions.json > Randomized Sammy Dialogue 0-5H (EditData {{PeacefulEnd.CustomCompanions/Companions:atelier99.LaniCC.LSammy}} => CustomCompanions/Companions/atelier99.LaniCC.LSammy)
rough lintel
#

SIGH...

lucid iron
#

can you try patch export CustomCompanions/Companions/skellady.SBVCC.SBVRaccoon just as test

#

if that doesnt work, patch export CustomCompanions/Companions/skellady.SBVCC.SBVRaccoon.json

#

wait no the syntax is smth else brb

rough lintel
#

yeah i was like both of those didnt work lol

lucid iron
#

ok CC is doing some strange thing here and patch export no work as result kyuuchan_run

rough lintel
#

yeah when i patch export that, it says it cant find Content\CustomCompanions/Companions/atelier99.LaniCC.LSammy.xnb

#

so i..... i dont know what it wants LMAO

lucid iron
#

patch export "CustomCompanions/Companions/atelier99.LaniCC.LSammy" "CustomCompanions.Framework.Models.TokenModel"

#

something something use meep fake farm animals instead of cc (pls disregard this agenda)

rough lintel
#

but thats not what she says in game

lucid iron
#

wat

rough lintel
lucid iron
#

well on one hand yay it worked on other hand ???

rough lintel
#

so it DOES change, but it... doesnt?

lucid iron
#

if u eep does it change

rough lintel
#

it does not

lucid iron
#

if u take away the When condition and completely restart game does it change

rough lintel
#

removing When, reopening game

#

oh my god it does the same garbage. shows the default line in game, but the actual dialogue text changes under the hood

lucid iron
#

from an asset perspective you are doing things correctly then

rough lintel
#

wat da game doin....

lucid iron
#

its just that i do not know what CC is doing

latent mauve
#

It's saying line 1, right?

lucid iron
#

how its using the asset think

rough lintel
#

yeah, lily

latent mauve
#

Where's your code that adds line 1?

rough lintel
#

in the Companions.json in the CC pack

#

which gets patched over in the CP pack... supposedly.

latent mauve
#

Is it possible that it's still taking priority over the random dialogue?

#

As far as which it checks conditions for first

#

(line 1 or your randomized)

rough lintel
#

well patch exporting says its displaying the randomized line, but the game itself displays (visually) the default line. so im... assuming its... priority is higher in the cp pack

#

but i genuinely dont know at this point

tiny zealot
#

hey so the vanilla Maps/Festivals sprite sheets apparently don't have a german version? is this odd y/n

rough lintel
#

maybe germans just say festival idk

tiny zealot
#

("Stardew Valley Fair", "SHOP", "STRENGTH" all in english in-game, since no lang version to load instead)

#

maybe nothing could fit and they gave up? /lh

latent mauve
#

My first thought is that maybe the translations were too long, yeah

lucid iron
#

german is missing a lot

rough lintel
#

at this point do i ask peaceful about this issue or do i just . give up

latent mauve
#

did you share your companions.json already?

#

(I'm getting sleepy, so apologies if I missed it)

rough lintel
#

here u go

latent mauve
#

!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.

latent mauve
#

Can't put it in there?

lucid mulch
#

working on the asset pipeline diagram made me find out the fact there is an _international option available in addition to localized variants which seems to only be used for crane game to replace text with iconography

rough lintel
#

OH DUH

#

lmao my bad

lucid iron
#
> ls *zh-CN* -1
bathhouse_tiles.zh-CN.png
coopTiles.zh-CN.png
desert_festival_tilesheet_text.zh-CN.png
DesertTiles.zh-CN.png
fall_beach.zh-CN.png
fall_outdoorsTileSheet.zh-CN.png
fall_town.zh-CN.png
Festivals.zh-CN.png
samshowtiles.zh-CN.png
spring_beach.zh-CN.png
spring_outdoorsTileSheet.zh-CN.png
spring_town.zh-CN.png
summer_beach.zh-CN.png
summer_outdoorsTileSheet.zh-CN.png
summer_town.zh-CN.png
townInterior.zh-CN.png
winter_beach.zh-CN.png
winter_outdoorsTileSheet.zh-CN.png
winter_town.zh-CN.png
rough lintel
#

here's the companion.json

lucid iron
#
> ls *de-DE* -1
coopTiles.de-DE.png
townInterior.de-DE.png
#

i guess they just didnt lol

rough lintel
#

also is it Condition or Conditions when doing a GSQ

lucid mulch
#

condition generally, but I think triggeractions has both?

rough lintel
tiny zealot
#

depends on the model, but the game is consistently Condition afaik
(secret note framework is Conditions, because i beefed it and misremembered. too late now!)

lucid iron
#

no trigger actions has Action and Actions (for a list)

lucid mulch
#

ah yeah

lucid iron
#

u can just have backing field condition

tiny zealot
#

thinkblob. maybe i'll fix it one of these days then

rough lintel
lucid mulch
#

condition isn't a Content Patcher thing its a GSQ thing

lucid iron
#

i dont really know if its worth doing if u already got consumers anyways

rough lintel
#

wh,, what does that mean

lucid iron
#

u can just open a Condition and use them as AND

#

sorry lani im talking about ichor secret note framework

rough lintel
#

oh no i meant sinz

#

as in, what

tiny zealot
#

oh, i have consumers. SNF is my biggest mod and it's not close

rough lintel
#

do i move the condition into the maptiles thing or something

lucid iron
#

anyways lani "Condition": "ANY \"SEASON winter, !WEATHER Custom_SBV_SunberryVillage Sun Wind, IS_FESTIVAL_DAY Any\"", doesnt do anything

lucid mulch
#

note those patches would all be overriding each other

lucid iron
#

it's not a field content patcher supports

lucid mulch
#

they are all fully setting the Companion entry to their value

rough lintel
#

how do i do that as a content patcher query then

lucid iron
#

u need to do these by the cp tokens When way

rough lintel
#

"Query: ('{{season}}' = 'winter') OR ({{Weather}} IN ('Rain', 'Storm', 'GreenRain', 'Snow')) OR ({{HasValue: {{DayEvent}} }})": true?

lucid iron
#

just have more things in the When block

rough lintel
#

can i do !({{Weather}} IN ('Sun', 'Wind')) instead

#

or do i move the ! somewhere else SDVpufferclueless

rough lintel
lucid mulch
#

all 3 patches targetting the companion target set the Companion entry

latent mauve
#

from the CCdocumentation if it helps with anything: Note: Custom Companion patches expect Content Patcher patches to utilize the Entries field. You are not required to pass over the whole Custom Companion model, you only need to specify which properties you would like changed.

lucid mulch
#

also the last 2 have the same logname

rough lintel
#

but its only if the when condition files right

lucid iron
lucid mulch
#

the last 2 have the same when, so the 6-10H only doing dialogue sequence would never happen

rough lintel
#

i just dont know how to do "THIS OR THIS OR THIS" in when conditions so i am. unshore

calm nebula
lucid iron
#

ah contains takes a set cool

lucid mulch
#

pretty much everything in cp tokens are sets

rough lintel
#
    "Time": "{{Range: 0600, 1900}}",
    "query: {{Hearts:LaniSBV}} >= 2": true,
    "Weather |contains=Sun, Wind": false,
},```
#

so this is the when so far

#

i still need to account for winter or a festival day, but aren't multiple conditions in a When treated like an AND?

lucid mulch
#

yes

rough lintel
#

if i want it to be OR do i do that longass query thing or do i do multiple Whens

lucid mulch
#

if you want unrelated things in an OR, you are doing a query

rough lintel
#

okay thats what i did earlier 😭

rough lintel
#

sorry i am The Question Asker tonight

lucid mulch
#

sure, though the last one is the only one with any of the animations

rough lintel
#

if the regular cc file has the animations and i just want to change the dialogue, do i need to do the whole animations thing too??

#

i am going to axe it bc i dont think i do need to do that

#

anywho. ok. back to the query

#

ok json validator said the query was fine, but idk if thats a good way to check '-'

#

lets tryyy loading up the game again

#

no dice

#

tried it on a new save too, sammy just doesnt want to say anything else lol

rough lintel
#

kept stabbing at it, im giving up for now 😔 ill maybe ping peaceful about it tmrw

fathom hound
#

just double checking, i can put a crop in a cask and out comes an artisan good? or are there limits to it only being in the liquor/cheese category

brittle pasture
#

casks are hardcoded in ways that make regular input => output rules illadvised

sour sleet
#

Is there a way of adding custom items to the pool of items requested by pelican town villagers on the bulletin board?

brittle pasture
#

namely that hitting a cask with a tool will immediately make it spit out the output

#

I recommend another machine if able

tiny zealot
fathom hound
#

alrighty keg it is SDVpetcatsad hope people dont accidentally think the stardrop itself is the tea,,

#

ill just make some artwork to showcase it better heh

lucid iron
#

I did a dum thing where i skip prefixed another mod's skip prefix in order to call a reverse patch of original vanilla function so that i can undo their skip prefix

#

Is there less stupid approaches here

spring marlin
#

is there a way to detect if the racoon shop is unlocked?(i found the mail flag for unlocking the greenhouse but i would like to be a bit more specific)

lucid iron
#

I think the racoons have mail too?

lucid iron
lucid iron
#

this is the thing that unlocks mrs racoon shop's first item so it makes most sense to have it

brave fable
#

finally, i found the funny tree. turns out it's gingko, not buxus. go figure 🍃

tender bloom
#

I like ginkgo trees!!

brave fable
#

(there's meant to be a huge ancient one at a temple not far from here. after lunch plans...)

inner harbor
#

Ive just noticed Shane's Dialogue often has two different elements divided by ||, but no one else does. Is that a 50/50 random?```
"Sun4": "Hmm... it's %time. Should I throw a frozen pizza in the microwave, or should I wait?$u||If the Tunnelers win, I'll knock back a cold one to celebrate.#$e#If they lose? I'll have a cold one to drown my sorrows.",

lucid iron
#

3 years...

brave fable
#

(though the one at akasaka hikawa is good too. and it has its own talismans)

#

i really respect that shane is ready to throw a pizza in the microwave at %time. no matter what time that is. he's prepared

inner harbor
#

6 am, 12 am 7 pm, 1 am.... Shanes always ready for pizza!

lucid iron
#

should i remove Custom Critters from wiki list of frameworks since it is broken

brave fable
tender bloom
#

wooooah

#

that's so cool

#

dinosaurs

fathom hound
#

wow, beautiful

#

what would be the cause for this??? is it a memory leak?

lucid iron
#

what is this mod again?

little steeple
#

Guys I'm thinking on working on compatibility with mobile devices on my mod, so is there anything I should keep in mind when working with mobile devices?

versed wyvern
#

Quick question, can we use line breaks in schedule entries to make them easier to read?

fathom hound
urban patrol
versed wyvern
#

Really? I didn't need to do any funky formatting to use them in events WoahThink

urban patrol
#

oh then maybe not! N++ always yells at me when i try to multi-line lol so if it works in events for you then go for it

versed wyvern
#

Oh yeah it looks terrible because Notepad++ thinks its invalid but it reads fine

urban patrol
#

excellent, then go for it

versed wyvern
#

Thanks for the info googlythumb

tender bloom
#

Mobile stardew is only moddable on Android, not on iOS

#

So you'll need an android device for testing, and you might need one for compilation if you need to compile against the mobile game

#

(I don't own an android, so none of my mods work on mobile in the slightest)

odd ginkgo
#

Does anyone know if this crazy idea is possible- making the ginger island boat journey minigame play during an event scene - but with a patch to make it a custom scene- but just for that event? I have hope because SVE somehow does it to go to Fable Reef, but I can't figure out how

little steeple
#

Thank you too, now that I know that I think I should finish the rest of features pending first

tender bloom
odd ginkgo
median forum
#

i'm guessing i shouldn't have more than 10 portraits on a sheet, huh

devout otter
#

Just depends on if you could keep track of them all. Swords and Sorcery has almost a hundred per sheet.

median forum
#

damn, that's cool

#

so for the 11th one would i put $10 in the dialogue coding?

devout otter
#

Yeah, and so on.

median forum
#

oh awesome

#

thanks!

median forum
#

...just realized that this is just that much more work for myself to make the mod compatible with seasonal cute characters

rigid musk
#

Mmm.. seasonal outfits... GruHolUp

median forum
#

i really want to be compatible with that mod since i use it but also. sprite editing bad. why did i make like six extra sprites.

rigid musk
#

Because uhh.. because

median forum
#

i might commission someone ngl

#

because of my vision

rigid musk
#

Your vision must be realized !

median forum
#

i could've probably just written a fanfic and gotten this out of my system

rigid musk
#

But mod cool

#

Also I bet on my life Nino Kito will play this if he hasn't done a Pierre marriage mod yet

#

Yay video? I think?

median forum
#

i've only seen one pierre marriage mod and it's this yandere meta thing?

#

like monika from DDLC??

rigid musk
#

(I am still mortified that he played mine when it wasn't done, I'm going to explode)

#

Then he's absolutely gonna play it there's there's way he doesn't

#

If he doesn't I'll.. uh.. uhhhh .. i don't know really, be super shocked?

median forum
#

i see.

rigid musk
#

You know i had someone ask me to make fizz marriable-

median forum
#

so uh mine's a bit of a different take on the character

rigid musk
#

That's not a mod where you marry them though kekw

median forum
#

if you marry him he goes to prison because you turn him in for tax evasion

#

i should do that instead of just shutting the route down if you choose to be rude

rigid musk
#

No no, alternate marriage route where you turn him in for tax evasion..

#

Are you gonna relate your mod to the wizard situation

median forum
#

oh yeah

#

that comes up during a big fight

rigid musk
median forum
#

my take is that ||he knows but he still loves his daughter so uh oh well i guess||

rigid musk
#

If you end up having any conversation topics let me know I'd love to include compatibility with Qi

I feel like he would say something about it simply because it relates to the wizard

median forum
#

bless

rigid musk
#

Pierre isn't a bad father, he's just a little old school about how he goes about it

median forum
#

||wrt caroline he just tries not to think about it, i think. it's been a loveless marriage for a minute||

#

yeah idk why people act like he's a huge jerk. i can't stand abigail's immaturity; i think it reminds me too much of myself as a teenager

#

that reminds me, i gotta write some dialogue for her............

#

if i ever get this heart event programmed

rigid musk
#

I think he's a jerk relating to how much he works and the credit he steals for your crops, but he's not like.. that bad in comparison to Lewis... eugh Lewis

rigid musk
#

I should begin to make my apple orchard mod which still has no name but I really REALLY don't wanna sprite trees..

median forum
median forum
rigid musk
#

pain and i have to make at least 10 of them

#

Unless I want to make them all look exactly like the regular apple tree.. which feels not very cash money

median forum
#

yeah that's just like. phoning it in.

lucid mulch
inner harbor
inner harbor
#

I appreciate you.

rigid musk
#

I appreciate the hard work you've put in to the things you've made! You're definitely one of my inspirations for making mods :D

fathom hound
brave fable
#

but ginkgo though..

spring marlin
#

is there an easy way to see the shop ID of a shop i have open?(i tried with pierre but debug mode just showed that i had a shop open but not its ID)

crisp rivet
#

Is a sprite that is 256x360 in size too big?

hard fern
crisp rivet
#

im making dinosaur

#

each 64*64

hoary lake
#

How possible would it be for the friendship bonus to scale with the price of the requested item for help wanted requests?

#

And perhaps a bonus multipler if they like or love the item

brave fable
#

very possible! one small harmony patch. maybe even a prefix. just a little one

brave fable
# crisp rivet each 64*64

64x64 is very big if you're drawing it by hand. 1 tile is 16x16, so your animal would be 4 tiles large. it's possible, but animals larger than 2 tiles have pathing and collision difficulties, 4 wouldn't fit anywhere easily hahah

median forum
#

!commissions

ocean sailBOT
median forum
#

i might be a bit out of my depth with animations.

trim sand
#

i hate to bug. but content patcher things throwing me for a loop.
trying to make mead benefit from the price of the honey used to make it. which ultimately seems like im either missing something really obvious having tried both DROP_IN_ID and DROP_IN_PRESERVE to try and fetch the name component i feel like i might just be missing something in how honey stores that data, but also the results are still only seeing the base honey price for whatever reason. quality does get copied properly. though i guess this might be why the only mod that does this relies on Producer Mod Framework. but producer mod framework can't set the quality a level lower than the input quality, and i don't think i can content patcher a PFM recipe to use vanilla Quality Modifiers.

{// Mead
            "Action": "EditData",
            "Target": "Data/Machines",
            "TargetField": [ "(BC)12", "OutputRules", "Default_Honey", "OutputItem", "#0" ],
            "Entries": {
                "CopyPrice": true,
                "ItemId": "FLAVORED_ITEM Mead DROP_IN_ID",
                "PriceModifiers":[
                    {
                        "Modification": "Multiply",
                        "Amount": 2
                    }
                ],
                "CopyQuality": true,
            },
            "When": { "Keg": "true", },
        }
brave fable
#

drawing a 64x64 pixel animal in 4 unique directions with 4 frames each plus eating sprites sounds like a lot of work too hahah

#

again 64 is 4x 16 in both directions so it's really that much more work than small animals even before you consider the change in detail

spring marlin
#

is there a way for Content Patcher to detect if the beginning of a string matches another string?

#

argh why are these different D:

iron ridge
spring marlin
#

first one is walk over a tile, second one is for click on a tile

#

also could i use this to trigger a click tile action when walking over a tile?

spring marlin
#

oh my, i figured out how to run a tile action on touch action("PlayEvent no false false <tile action you wanna do>", i just used 'no' as an invalid event ID, any random thing should work)

spring marlin
calm nebula
#

Incoming joke mod idea: vim navigation of the game menus

#

duckd

golden spire
#

eew

tiny zealot
#

stardew vimley

fossil osprey
coral oasis
#

Hello, I was wondering if there is a way with Content Patcher to detect if another mod is installed and then include additional files?
or do I just put a config option and make the player manually activate it to handle compatibility with other mods?

tiny zealot
#
{
  "Action": "Include",
  "FromFile": "my/otherfile.json",
  "When": {
    "HasMod": "othermod.uniqueId"
  }
}```
coral oasis
#
                "Action": "Include",
                "FromFile": "compat/Alchemistry/FishPonds.json",
                "When": {"HasMod{22743}}" : true
            }```
#

like that or?

tiny zealot
#

copy the other mod's unique id from its manifest.json and use it like i showed above

coral oasis
#

okay, thanks

tiny zealot
#

alternately, you may see this construction:
"HasMod |contains=othermod.UniqueId": true

#

it has the same effect, but it's not allowed to have the same key twice in an object, so if you need to check for the presence of multiple mods you'll have to specify them each in that way instead of using the plain "HasMod" twice

coral oasis
#
            {
                "Action": "Include",
                "FromFile": "compat/Alchemistry/FishPonds.json",
                "When": {
                "HasMod": "Morghoula.AlchemistryCP"
                }
            }
#

so this should work?

tiny zealot
#

that looks right. try it out!

lucid iron
#

Yeah should be fine

coral oasis
#

thanks 👍

lucid iron
#

Also best to add a false dependency

#

Ensures your mod loads after other mod

tiny zealot
#

it's best to check how the other mod does its work, since load order doesn't matter if the other mod is using priority

coral oasis
#

I'm just wondering cause my mod rewrites the entire FishPondData file, would it cause issues if loaded after other mods that also edit the data. The way I was handling it before was just to load and replace the entire file which caused other mods not to have their fishponddata register. (compatability nightmare) now i'm fixing it to use EditData instead.

lucid iron
#

Well yes u absolutely should use EditData Dokkan

coral oasis
#

as well as including direct compatability with a couple mods

#

look, i first made the mod years ago before editdata existed XD

lucid iron
#

But i guess it depends on the goal here

#

EditData is in CP 1.x

#

Still if the goal really is something like

#

I wish to edit every fish pond data ever

coral oasis
#

yes, every vanilla entry has been tweaked, and I would like to also include additional mods as requested by users

#

so having priority is kinda needed

lucid iron
#

Then you could consider doing a Load yes, then EditData to do compat

#

But if i have another mod that's like, i wish to make 1 small change to fish pond data

#

And get unexpected structure

#

I will fail when installed with your mod

coral oasis
#

yeah i've run into that issue, and has a few comments about such scenarios

lucid iron
#

So even if you do load u would want to keep structure similar if possible

coral oasis
#

the file structure is basically the same as vanilla game

#

just with a bunch of edited values

lucid iron
coral oasis
#

so basically what I have run into with my own playing is say I have SVE, then the SVE fish will just default to the default class outputs, I.e roe, and not their custom output from the SVE fishponddata

#

but no crashing or mods refusing to load

lucid iron
#

That sounds like a later EditData that you are doing then, not a Load yggy

coral oasis
#

🤷 it's been "Action": "Load", since I made the mod

lucid iron
#

Guess it's possible that sve also did a Load, mystery

#

I suppose you just have to actually decide on scope tho

#

Do u wish to actually change modded fish ponds

#

If no then edit data targeting vanilla pond data makes sense to me

tiny zealot
coral oasis
#

it worked fine pre 1.6 too 🤷

#

And I had to basically rewrite the entire fishponddata.json when updating to 1.6

#

cause of all the background changes to file strucuture

lucid iron
coral oasis
#

but if i'm already having to build in mod compatability anyway, might as well change output values for the mods to to align more with my mod

#

lets go with the example of what I am trying to fix right now, cause a couple people commented on my mod saying that the fish ouputs for the Alchemistry mod wouldn't drop in fish ponds and would just give roe

#

my mod is loading the fishponddata.json and overwriting all vanilla values

#

and then alchemistry comes and does "editData" and "should" include their data aswell

#

but doesn't

tiny zealot
#

(of course, the other benefit of using EditData is you can use CP's tokens, which aren't parsed when using Load)

coral oasis
#

but I guess if my mod was say at the end of the mod order it could be overwriting everything before it?

tiny zealot
#

have you loaded in with both mods and tried a patch export on the fish pond data to see what the actual result is in-game?

tiny zealot
coral oasis
#

I could, i've just been going off of what others are saying, cause I myself dont use the Alchemistry mod

lucid iron
#

Oh is it cus fish pond data is a list

tiny zealot
#

or they simply end up in the wrong order so you get roe

lucid iron
#

Yeah maybe, tho in theory it shouldn't matter if u kept all the same keys/Id

lucid iron
#

Probably best to actually reproduce and see what is up

coral oasis
#

yeah i'll do that now

tiny zealot
#

if the mod is as old as it sounds (predating EditData?) then i wouldn't be surprised at a format mismatch

coral oasis
#

i'm not sure if it actually predates EditData, I just remember that when i first made the mod the wiki said to use load, so that's what I did

lucid iron
#

EditData is at least as old as CP 1.4.0

#

And the release notes makes it sound like it existed before

calm nebula
#

A chue now knows the history of CP

coral oasis
#

I'm not to sure honestly

lucid iron
#

Well let's not worry about that Dokkan

coral oasis
#

for some reason at the time I had the idea that I needed to use load lol

tiny zealot
#

anyway i'm not trying to place blame. just thinking about causes

coral oasis
#

yeah, i know don't worry

lucid iron
#

If you want to keep Load then double check your copy is absolutely the same as vanilla

#

Which had change as recently as 1.6.9

#

But for future maint u can just change to EditData with a Early priority

#

If u want other mods to potentially append their changes to vanilla fish after u replace the entire output

coral oasis
lucid iron
#

Priority Early is a field in EditData action

coral oasis
#

hmmm, okay

lucid iron
#

The idea here is you use Fields to mass edit the fish pond outputs for all vanilla fish

#

Then i can come and do targeted edit on just tuna if i want

coral oasis
lucid iron
#

patch export Data/FishPondData

#

Do this on console after loading into a save

tiny zealot
#

with the set of mods installed that you are debugging

coral oasis
#

yup

#
[Content Patcher] Can't apply data patch "Alchemistry > Alchemistry - Load Fish (from data/Items/Fishing/FishPonds.json) > EditData Data/FishPondData > entry #2" to Data/FishPondData: this asset is a data model, which doesn't allow adding new entries. The entry 'Morghoula.AlchemistryCP_VampireAnemone' isn't defined in the model, must be one of: Item, Next, Parent, Previous.
[Content Patcher] Can't apply data patch "Alchemistry > Alchemistry - Load Fish (from data/Items/Fishing/FishPonds.json) > EditData Data/FishPondData > entry #3" to Data/FishPondData: this asset is a data model, which doesn't allow adding new entries. The entry 'Morghoula.AlchemistryCP_Newt' isn't defined in the model, must be one of: Item, Next, Parent, Previous.
[Content Patcher] Can't apply data patch "Alchemistry > Alchemistry - Load Fish (from data/Items/Fishing/FishPonds.json) > EditData Data/FishPondData > entry #4" to Data/FishPondData: this asset is a data model, which doesn't allow adding new entries. The entry 'Morghoula.AlchemistryCP_MoonlightJellyfish' isn't defined in the model, must be one of: Item, Next, Parent, Previous.
[Content Patcher] Can't apply data patch "Alchemistry > Alchemistry - Load Fish (from data/Items/Fishing/FishPonds.json) > EditData Data/FishPondData > entry #5" to Data/FishPondData: this asset is a data model, which doesn't allow adding new entries. The entry 'Morghoula.AlchemistryCP_ZombieFish' isn't defined in the model, must be one of: Item, Next, Parent, Previous.```
lucid iron
#

Oh i know this problem your load didn't get interpreted as a List yggy

coral oasis
#

huh....

#

interesting

lucid iron
#

It's a CP thing but since it is thought to be a data model you cannot append anything

#

In the file you Load do you have {} or [] on the outside?

coral oasis
#

[]

lucid iron
#

Weird why it do this then Thqnkqng

coral oasis
#

idk, cause all I did when i made the mod was rip the fishponddata directly from the vailla files and edit the values

lucid iron
#

It's not something you can change tho

#

Just gotta live with it and switch to EditData ig

coral oasis
#

seems like it lol

#

this is quite an interesting edge case, and I have no idea why it is doing the things it's doing

lucid iron
#

Well it is mostly c# implementation details

coral oasis
#

so if i switch over to EditData can I just use the same file I already have, or do i have to rewrite the whole thing again to work with editData

lucid iron
#

Related to how loads happen

#

You will want to remove everything outside of ProducedItems

coral oasis
#
                "Action": "Load",
             "Target": "Data/FishPondData",
                "FromFile": "assets/FishPondData.json"
            },
lucid iron
#

And rewrite it as a dict

coral oasis
#

so if i take this and then do

lucid iron
#

It will be quite a bit of work yea

coral oasis
#
{
                "Action": "Include",
             "Target": "Data/FishPondData",
                "FromFile": "assets/FishPondData.json"
            },
lucid iron
#

No

coral oasis
#

then add the edit data to the data file and then change stuff around?

lucid iron
#

Include is for including more patches

coral oasis
#

hmm okay

lucid iron
#

Im on phone so i can't type a proper example

coral oasis
#
    {
        "Id": "Lionfish",
        "RequiredTags": [
            "item_lionfish"
        ],
        "Precedence" : 0,
        "SpawnTime": 1,
        "BaseMinProduceChance": 1.0,
        "BaseMaxProduceChance": 1.0,
        "WaterColor": null,
        "ProducedItems": [
            {
                "RequiredPopulation": 9,
                "Chance": 0.02,
                "Precedence": 0,
                "Id": "(O)857",
                "ItemId": "(O)857",
                "MinStack": 1,
                "MaxStack": 1
            },

there is some additional stuff after this, but this is how it's currently structured

lucid iron
#

But the gist is

  • Action is EditData, Target Data/FishPondData
  • Use Fields with the key being whatever is in each entry's Id, and the entry being { "ProducedItems": [ your new produce data ] }
coral oasis
#
{
    "Id": "Lionfish",
    "RequiredTags": [
      "item_lionfish"
    ],
    "Precedence": 0,
    "MaxPopulation": -1,
    "SpawnTime": -1,
    "BaseMinProduceChance": 0.15,
    "BaseMaxProduceChance": 0.95,
    "WaterColor": null,
    "ProducedItems": [
      {
        "RequiredPopulation": 9,
        "Chance": 0.02,
        "Precedence": 0,
        "Condition": null,
        "Id": "(O)857",
        "ItemId": "(O)857",
        "RandomItemId": null,
        "MaxItems": null,
        "MinStack": -1,
        "MaxStack": -1,
        "Quality": -1,
        "ObjectInternalName": null,
        "ObjectDisplayName": null,
        "ObjectColor": null,
        "ToolUpgradeLevel": -1,
        "IsRecipe": false,
        "StackModifiers": null,
        "StackModifierMode": "Stack",
        "QualityModifiers": null,
        "QualityModifierMode": "Stack",
        "ModData": null,
        "PerItemCondition": null
      },
lucid iron
#

If you want to change population gates then u also put that in the entry

coral oasis
#

here is vanilla as reference

lucid iron
#

Do not include anything you aren't changing from vanilla

coral oasis
#

yeah I figured

lucid iron
#

And read the cp docs earlier for detail on what Fields do

coral oasis
#

alright, I'll try and sort this out

whole raptor
#

Is PlatinumCats on this server? SDVpufferthinkblob

lucid iron
#

@ivory plume it seems like doing Load with non blank data on data sometimes result in them not being recognized as a List or a Dictionary afterwards, preventing EditData, is this intended behavior?

#

@pastel aurora yea

#

Not very active but sometimes come post previews

whole raptor
#

Oh, nice, then I can avoid my behated Nexus DMs SDVpuffersquee

coral oasis
#

So, since EditData uses fields and can't take from a file... i'd have to fill the content file with all the data entries, meaning for my use case wouldn't Include be a better thing to use, then do the edit data and entries in another file?

whole raptor
#

@pastel aurora Hi! If I'm not mistaken the original Truffle Foxes were made by you? If so would it be alright if I released a Void recolor of them? I made one for personal use, but as I didn't see anything like it out on Nexus yet, I thought that I could maybe share them with other void enthusiasts SDVpuffersquee
... I might expand it to a custom animal with a whole new questline (I'm already getting scope creeped) 👀

lucid iron
#

Either way you will need a patch that's Action EditData

coral oasis
#

I know, but since there is so much data in the fishponddata file doing edit date directly in content.json would lead to a lot of clutter

#

making future work harder to do

coral oasis
#

Thanks for the help

lucid iron
#

I feel like it's worth clarifying in docs cus

#

Originally i thought it only bonked new assets

#

But it appears to bonk vanilla too when it's not events

uncut viper
#

yeah when I was messing with it to change it I also thought it'd only affect new ones

#

it doesn't always do it, I was able to load over some vanilla things just fine

lucid iron
#

Perhaps due to fish pond data being list

coral oasis
#

my duct tape solution seems to have worked and not require a total rewrite

#
"Changes": [

    {   "Action": "EditData",
        "Target": "Data/FishPondData",
        "Entries": {

I basically just appended this to the file and then shoved everything into it's own entry

#

probably not the "right" way to do it, but it works

#

yup it works without needing to specifically add compatability patches now, so other mods won't just have their fishpond drops overwritten with roe

hoary lake
coral oasis
#

SVE Fishponddata file structure is quite interesting to look at, held together with more duct tape than my fishponddata lol

coral oasis
#

yeah I should do that, thanks

lucid iron
#

The reason why I mentioned Fields instead of Entries is that

#

Entries replace the whole thing

#

With Fields u only replace the Fields given in your edit

#

If u already have things in entries form u can change to fields easily, the annoying part was the [] to {} which u did already

coral oasis
#

It is already doing that though, so idk... cause it's only editing the stuff directly specified

lucid iron
#

I think u are just getting default data no?

coral oasis
#

two seconds

lucid iron
#

But like if u specified entire fish data from RequiredTags to WaterColor

#

Then yeah no difference

coral oasis
#
{
    "Id": "Lionfish",
    "RequiredTags": [
      "item_lionfish"
    ],
    "Precedence": 0,
    "MaxPopulation": -1,
    "SpawnTime": 1,
    "BaseMinProduceChance": 1.0,
    "BaseMaxProduceChance": 1.0,
    "WaterColor": null,
    "ProducedItems": [
      {
        "RequiredPopulation": 9,
        "Chance": 0.02,
        "Precedence": 0,
        "MinQuantity": null,
        "MaxQuantity": null,
        "Condition": null,
        "Id": "(O)857",
        "ItemId": "(O)857",
        "RandomItemId": null,
        "MaxItems": null,
        "MinStack": 1,
        "MaxStack": 1,
        "Quality": -1,
        "ObjectInternalName": null,
        "ObjectDisplayName": null,
        "ObjectColor": null,
        "ToolUpgradeLevel": -1,
        "IsRecipe": false,
        "StackModifiers": null,
        "StackModifierMode": "Stack",
        "QualityModifiers": null,
        "QualityModifierMode": "Stack",
        "ModData": null,
        "PerItemCondition": null
      },
{
            "Lionfish": 
            {
                "Id": "Lionfish",
                "RequiredTags": [
                    "item_lionfish"
                ],
                "Precedence" : 0,
                "SpawnTime": 1,
                "BaseMinProduceChance": 1.0,
                "BaseMaxProduceChance": 1.0,
                "WaterColor": null,
                "ProducedItems": [
                    {
                        "RequiredPopulation": 9,
                        "Chance": 0.02,
                        "Precedence": 0,
                        "Id": "(O)857",
                        "ItemId": "(O)857",
                        "MinStack": 1,
                        "MaxStack": 1
                    },
#

output on top, and the data in the mod on bottom

lucid iron
#

Fields means u only need to specify ProducedItems

#

That's what i meant

#

Can delete all the data u aren't changing Dokkan

coral oasis
#

yeah there are a few things that could be deleted there, but that is a lot of work to go through all the fish lol

#

as most of the stuff is edited on every fish expect for a couple things

lucid iron
#

Yeah do as much or little as desired since the blocking problem is solved at least

coral oasis
#

yup, thanks a bunch. definitely good to get this worked out so i dont have as many compatability issues anymore

#

now I can work on aligning other mods to mine through patches like with SVE and Alchemistry to more closly follow the changes I've made to vanilla outputs

eternal trellis
#

Hey guys, two questions, 1. is it possible currently to make a new food item and 2. Is it possible currently to add this new food item to a vendor?

golden spire
#

yes and yes

eternal trellis
#

Great, are there any tutorials on how to do this?

coral oasis
lucid iron
#

So if your new food item is cooking you can follow this tutorial

#

Idk offhand if there's a tutorial for adding stuff to shop but it's simply an EditData

#

!unpack

ocean sailBOT
#

Follow this guide to unpack the game's content files in order to see and explore how the game data is structured.
It's helpful when making your own mods, or just to learn about how the game works!

lucid iron
#

Do this so u can look at vanilla data

eternal trellis
shadow pagoda
#

I am trying to debug my mod that makes it easier to complete the CC whether you do the og or joja route. Mod can be found here https://www.nexusmods.com/stardewvalley/mods/32839. Bug report can be found here https://github.com/BlckHawker/Instant-Community-Center-Cheat/issues/2.

Since it's rather tedious to put items into the respective slots over and over again, I thought I can use the command debug completecc to speed up the process. I'm reading the wiki [insert link] and it claims that the command would set the appropriate flags to true to instantly complete the CC. But when I tried running my mod after running the command, the mod thinks the CC is still incomplete. Can someone tell me what I'm doing wrong?

Here's the appropriate code block https://github.com/BlckHawker/Instant-Community-Center-Cheat/blob/main/ModEntry.cs#L207. What should be happening is a global message with the string Community Center is complete, no items to add appears, but rather it's still telling the steps as if the command was never ran.

lucid iron
#

Or do u have new sprites to make into items

eternal trellis
#

I would try to add only the food items. I get why they were never added in base game, they are supposed to be unhealthy.

#

But why wouldn't i be able to pound protein bars.

lucid iron
#

Yeah so u need to do these things

  1. Load the sprites to a target
  2. EditData Data/Objects and add your new items
  3. EditData Data/Shops and add your items to the shop
#

I understand if none of this makes sense offhand, do consult the content patcher author guide first

golden spire
#

I would just concentrate on making a single item and just spawning it into the game via CJB

coral oasis
#

Yeah you'd need to make the items from the ground up with all the stats
energy, health, buffs/debuffs,value, etc.
cause all you have right now is the names of the items, but they don't actually exist within the game

eternal trellis
lucid iron
#

One step at a time

drowsy pewter
#

find a mod that adds a couple items and do what they do

coral oasis
#

you can also reference vanilla files to get an idea of how they are implemented into the game by unpacking the game files

eternal trellis
coral oasis
#

yup, one of the ways I do things when modding games, rip it from the vanilla files and change values around

#

obviously it's a little more complicated than that, but taking a look at the vanilla files for food objects, and also the content patcher documentation should give you at least some idea where to start

eternal trellis
#

Cool, thanks. Is there a tool to make sprites? They seem to be pixel art for the most part, but not sure what dimensions.

golden spire
#

!software

ocean sailBOT
coral oasis
#

you can also reference off of someone else's mod that also adds in items to get an idea of how it should look

coral oasis
#

but I would start by understanding how to implement an item into the game using a vanilla sprite, and then once you have that down you can work on the art

uncut viper
#

all of the regular items are 16x16 pixels when not using a mod to increase that, you'll be able to find most of the vanilla ones in your unpacked content folder in Maps/springobjects.png

#

your sprites must be 16x16 pixels as well, even if you do not actually draw anything to fill up the entire 16x16 space. aka, leave some transparent space around your sprite if you need to in order to make it 16x16

coral oasis
#

also the sprites need to be png to have transparency, so don't forget that

#

although now that I say that, does SDV even accept anything other than png for sprite textures?

lucid iron
#

xnb

gaunt orbit
#

monogame supports other formats but I don't know which ones specifically

#

It has a whole bunch of weird pixel formats so probably there's corresponding file formats for at least some of those?

coral oasis
#

🤷‍♂️ safest to use png lol

gaunt orbit
#

Ah here we go, from the docs:

.bmp, .dds, .dib, .hdr, .jpg, .pfm, .png, .ppm, .tga

uncut viper
#

i dont think content patcher will accept anything other than png, though.

coral oasis
#

jpg seems like a bad choice to use

gaunt orbit
uncut viper
#

out of the formats you listed

coral oasis
#

although for 16x16 compression wouldn't matter, just transparency

uncut viper
#

i dont know how to pack things into xnbs, so i dont know anything about that

gaunt orbit
#

It seems like if you told it to load an image it would just use Texture2D.FromFile

#

Does it not do that?

uncut viper
#

¯_(ツ)_/¯

#

the docs say png

brittle pasture
#

xnb definitely works

uncut viper
#

i know xnb works, im talking about other image formats

#

hence "out of the formats [wren] listed" aka bmp, dds, etc.

#

"The relative file path in your content pack folder to load instead (like assets/dinosaur.png). This can be a .json (data), .png (image), .tbin or .tmx (map), or .xnb file."
this is from the CP docs, so i assume it enforces not putting in a jpg directly

gaunt orbit
#

So it doesn't seem to check file extension, but it does use skbitmap instead of texture2d

uncut viper
#

SMAPI itself seems to enforce it

#

in at least some areas

#

e.g. ModContentManager.LoadExact<T>

#

as well as the skbitmap thing you mention when loading the raw image data instead

gaunt orbit
#

Hmmm interesting

#

That's unfortunate

uncut viper
#

is it?

gaunt orbit
#

Seems like it also doesn't have support for Effects

uncut viper
#

one could always harmony patch SMAPI to add support for a new file type, of course

#

i believe StardewUI does that

gaunt orbit
#

Yes, transpiling smapi sounds like a great idea lol

uncut viper
#

dont need a transpiler, just prefix that function

#

LoadExact

gaunt orbit
#

Fair enough

uncut viper
#

its how it loads its starml files

gaunt orbit
#

I suppose technically effects and other images formats could be loaded through xnb

lucid iron
#

Wait i thought people loaded mgfx stuff

#

Cloudy skies and gentle night lighting

gaunt orbit
#

They probably have it compiled to xnb

lucid iron
#

They weren't xnb

gaunt orbit
#

Huh?

#

How's that work

lucid iron
#

But mgfx is monogames own format so I guess it just worked shrug

#

Something I attempted but didn't get very far with is to try and make sdv load fbx LilyDerp

gaunt orbit
eternal trellis
#

I can use png no problem.

lucid iron
#

Need 3d parsnip

ivory plume
lucid iron
#

Yeah a content pack

#

The case here was someone doing a Load on Data/FishPondData

#

And this made all other mods unable to append

ivory plume
#

I'd be interested in a minimal repro content pack so I can look into what it's doing.

lucid iron
#

Yeah sure I'll make one after work, want me to just directly open issue?

ivory plume
#

Sure! It might be a little bit before I can take a look, working on some changes for 1.6.16 currently.

lucid iron
#

We can just tell ppl to not do this Dokkan

coral oasis
#

Whohooo i caused a bug to be found 😛

eternal trellis
#

What do you guys think? I guess this is the easy one.

lucid iron
#

P

eternal trellis
#

Protein bar

lucid iron
#

It's hard to tell with discord upscaling tbh

eternal trellis
#

Oh, thanks.

#

I'll post it there.

tiny zealot
odd ginkgo
#

I am beyond pleased to report that I figured out a workaround for the boatjourney minigame... instead I made a series of maps using the boat journey sprites, and ChangeToTemporaryMap to slowly fade through each boat position

#

no C# required... the boat doesn't move along the water like in Vanilla, but it gives the illusion

#

oh baby we cookin now

lucid iron
#

Boat ukimasu

coral oasis
#

what's the point of the (O) in the new file structure before the item ids?

uncut viper
#

it tells the game its an Object

#

and not a BigCraftable or a Hat or a Tool

spring marlin
coral oasis
#

hmm interesting

tiny zealot
#

you don't always need it, but generally you do if different kinds of item could be acceptable in a given context, like for sale in a shop

coral oasis
#

so not necessary, but should have it just to be safe

tiny zealot
#

check the documentation for the thing you are editing. that will tell you whether it's necessary

coral oasis
#

probably not necessary, but vanilla fishponddata has it so i'm doing it anyway

brittle pasture
# coral oasis hmm interesting

back in 1.5 item IDs don't have that identifier and relied on context clues, that's why you get bugs like gifting wallpaper with the ID 74 to villagers, and they react as if they were gifted a prismatic shard (also ID 74)

coral oasis
#

and bringing SVE fishponddata up to current standard for the patch for my mod

coral oasis
#

lol

tiny zealot
#

staircase shorts also killed by qualified item ids. a sad day

coral oasis
#

gotta love repetetive ", paste, ", scroll, repeat

gaunt orbit
#

Personally I miss hatching wallpaper into dinos

coral oasis
#

is the SVE dev in the discord? figure I might as well give them the updated code if they want it before I edit it further

golden spire
#

They are but probably better to discuss that in the SVE Discord or the github(I assume) of the C# in question

coral oasis
#

All i'm doing is making the data for the fish ponds match the formating of the updated vanilla way, which is all content patcher stuff

#

cause they way it is in their files is the old way with "min/maxquantity" and without the object tagging on ids

fathom hound
dry sundial
#

MY FIRST TIME USING C SHARP

#

wait

#

WOW

#

PATHOSCHILD REACTED

#

I'M REALLY CRYING

tiny zealot
#

(pathos is a regular person! and he's nice)

odd ginkgo
#

celebrity in chat

lucid iron
#

(its perhaps bad privacy to show random people full screen screenshots)

dry sundial
#

idk how i change it

lucid iron
#

Lots of things let you take partial screenshots and it's fine to just delete what u already posted

dry sundial
golden spire
#

pathos is a real human? I thought he was a set of floating theatre masks D=

proper bobcat
#

He....he isn't?

dry sundial
proper bobcat
#

Also yes hi, please protect your personal info-

dry sundial
#

now i make a best photo

dry sundial
tender bloom
#

I thought pathos was an LLM 😛

golden spire
#

he'd be getting more stuff wrong if he was

proper bobcat
#

He's too helpful to be a LLN

golden spire
#

making strange syntax that makes no sense

dry sundial
dry sundial
#

hello, how i import sv tiles on tiled?

latent mauve
#

If you mean using the vanilla tilesheets in Tiled, it's usually easiest to unpack the files and open an existing map, then "Save As" to create a working copy in the unpacked Maps folder.

#

Because there are some things like animations that aren't preserved if you add the tilesheet yourself in Tiled, rather than using a map where it's preattached as a base.

dry sundial
#

this error apearr, i understand the error, but idk why this apear

latent mauve
#

Okay, you can't open PNGs in Tiled, you have to open the TBIN or TMX

#

PNGs can be attached to a tileset (which creates a TSX file unless you choose to Embed it in your map), but aren't opened directly from the File > Open menu.

#

What are you trying to do with the Barn?

#

If you're changing the outside appearance of something in the Buildings folder, that's not a Tiled or Map operation, that's something you'd do in an image editor program.

#

To the PNG

odd ginkgo
#

I recommend using Paint Dot Net, it's a free open source image editting program, very lightweight, and really good for pixel art. When you open the program for the first time, and click on the paintbrush, you can change it to pixel mode by clicking on "Aliased Rendering", which is a curved line on the toolbar right next to the "Normal" button near the end

#

or, use the pencil tool for a 1x1 pixel tool only

#

If you're using the tilesheet for the png actively in Tiled, then any changes you make in paint dot net appear instantly in Tiled for real time editting

#

for example, what my paint dot net screen looks like next to my Tiled screen

#

you can load the tilesheet png in through this button, but make sure the png is in the same folder as the map you're editting, and that you import it as a 16x16 tilesheet - Tiled will create a TSX file with the same name as your image

#

and then save everything (but not Save As, just Save)

high maple
#

Hello! I've have been trying to figure out how to affect tiles in a cone shape and I'm having trouble figuring it out. At first I tried building the cone from line calculations and figuring out how to get the tiles within the lines but then I found a different method. But now I have a problem with the new method I found. The cone is formed correctly when the player is facing left or right but when facing down, nothing happens and when facing up, the cone is made twice, reflecting over the x-axis. I know it has something to do with the acos but I'm not sure what the correct trig function I need for this situation. Does anyone who is familiar with trig and triangle calculations know what I need to do to fix this?

dry sundial
#

hello, i want to create mods with C#,but idk how i insert my custom music on the game

lucid iron
#

You basically want to take some degree of area from a circle area right

high maple
#

oops, heres a better one

lucid iron
#

Please use pastebin or something

#

Github gist etc

#

The fact that it is being made twice makes me think there's some sign not being accounted for

rancid musk
#

You should be using Atan2 to determine the angle, not Acos

#

You're only taking the sample's X coordinate into account with your use of Acos when calculating the theta. And then, after using that value as an angle, you're using Atan2 to calculate the angle again?

#

Just calculate the angle once with Atan2, then you can convert it to degrees and normalize it if you want before checking if it's within range.

#

Also, minAngle and maxAngle should not be so deep in that loop. They don't change after they're set.

high maple
#

the other atan was for the direction thats for the hit result class I made. Ive tried using atan2 for the angle itself before but I think I couldnt get it to work right.

calm nebula
#

Tbh for a 45 degree sweep you don't need trig anyways

rancid musk
#

atan2 is the function you want for calculating the angle between the positive x axis and a ray between (0,0) and (x, y). If you had trouble with it before, it's probably because values weren't normalized.

Rather than converting your angles to radians, I'd just convert the atan2 output to degrees, normalize everything to the range 0..360, and make sure you have two different in-range checks depending on if maxAngle is less than minAngle, indicating wrapping.

calm nebula
#

You don't even need trig for a 45 degree angle, just travel out by a specific vector, then out to the side, and have those two vectors rotated correctly

high maple
blissful panther
#

(I would like to present my latest Stardew breakage.)

calm nebula
rancid musk
#

Can't wait to go home and play D👽W LEY by 🎶 oncerned Ape

blissful panther
#

The fun part is that the log is 100% clean.

lucid iron
#

Monogame icon...

#

Suspicious

blissful panther
#

This is me throwing everything I possibly can against the wall to get Rider's debugger attaching to Stardew so I don't have to boot into Windows to do anything Stardew related.

lucid iron
#

Oh are u debugging from decompile now

#

Horror

blissful panther
#

This current attempt is me loading SMAPI's main assembly and starting it manually after a delay to allow the debugger to attach to my launcher first.

lucid iron
#

DH surely just having a vscode open is less painful than this pippleDot

blissful panther
#

It would if hot reload worked there.

lucid iron
#

Did u try the whole dotnet watch thing

rancid musk
#

I've tried C# in vscode, and it is such a mess.

lucid iron
rancid musk
#

Which version of Rider are you using?

lucid iron
#

But i am not really using the gui anything besides lang server

blissful panther
blissful panther
rancid musk
#

Well, the docs say it requires .NET 8 as the target framework. So... have you tried recompiling the game and SMAPI and everything targeting .NET 8? lol

#

I was looking and 2023 mentions .NET 6... but that version says it only works on Windows.

blissful panther
#

.NET 8 as the target framework for debugging on Linux?

rancid musk
blissful panther
#

Hmmmm...

#

I haven't tried explicitly disabling hot reload...

rancid musk
#

I'll be honest in my mind I immediately went to hot reload and not just any debugging

#

But that sort of thing also makes me think there's funky .NET version requirements.

calm nebula
#

Pretty sire yeah that is the case

blissful panther
#

It's possible it's trying to enable hot reload while debugging even though it knows it should be impossible in this situation.

#

Okay, hot reload disabled... attempt time.

#

Aaaannnd no change, yeah. SMAPI doesn't even get launched, it just... stops trying while just waiting for the debugger to attach.

#

Same going via dotnet watch, too. Running via debugging does get SMAPI launched, but breakpoints don't get hit.

tawny ore
#

Have you tried turning it off and on again?

rancid musk
#

Have you tried installing Rider via Wine?

blissful panther
#

Well, I suppose since I've gotten this far with a custom little launcher, why not try launching SMAPI via .NET 8 to see if that nonsense works.

#

...I will try that after my chaos. Not a bad idea.

calm nebula
#

Have you tried running rider with proton

rancid musk
#

(I mean I meant proton when I said wine, lol)

brittle pasture
#

isnt proton unrecommended if you're not running a game

rancid musk
#

DH would be running a game though, ideally 😛

brittle pasture
#

lmao true

lucid iron
#

It's just wine with extra graphics api things right

#

I have done extremely silly things in which i use proton to install a gog windows game

#

So that i can get the game into the particular prefix

brittle pasture
#

from proton-ge's readme:

Proton runs in a container, which uses a runtime environment and libraries specifically built for use within that container. Not running it as intended results in the container and therefore its runtime not being used, and severely breaks library compatibility. It causes wine to search for libraries on your system instead of those it was built with/intended for within proton. It may work, if enough libraries match, but it is not correct and not supportable due to library differences across distros.

potent vigil
lucid iron
brittle pasture
#

I see you set up the dynamic token above to avoid repeating the mod ID every time, so you can use that instead

#

ie. Characters/Dialogue/{{San}}, which will expand into Characters/Dialogue/YonaKao.ChoiSanMod_San

#

also loading data/<Data/Character>.json is probably wrong, you have some spare < and > there

#

that seems like you're loading the npc data, which you're already doing below

prime gull
#

Is there a condition that links a child to its parent? Like if i had a child with Haley. Then divorced her. Is there a way I can have the child retain something edited about it based on Haley?

lucid iron
#

No

prime gull
#

Ah

lucid iron
#

You would need to do indirect ways

prime gull
#

Is there a mod or framework that does?

lucid iron
#

Like say, save a mailflag for haley child

#

Yeah but it's wip

prime gull
#

Ahh okk

lucid iron
#

And probably do more than u desired

prime gull
#

Fairs

#

Thank you!!

lucid iron
#

This is a framework for having more children

#

And one of the things it does is give the child a persistent internal id

#

So that you can indeed keep the appearance even if you divorce

#

If your usecase is narrow enough (e.g. only for 1 npc spouse) it's probably possible to do what you want with series of mailflags

pine elbow
#

so, im gonna update a recolor mod for personal use, specifically yri's retro recolor, and i wanna know how do i add in the updated tilesheets and what apps do you guys recommend for me to use? i have csp

#

i might also update their tree recolor to match

rough lintel
#

by updated do you mean just adding in new files, or changing old ones?

rough lintel
#

adding in new files just means loading in the tilesheets like how the others are loaded in the content.json

#

like loading a new image

#

pretty shrimple

pine elbow
#

how to do that... i am not familiar with json

rough lintel
#

OH

#

oh oh i thought you like. ok hold

#

whats the command

#

sorry im at work

pine elbow
#

I M SORRY 💔 💔 💔

rough lintel
#

LOL

pine elbow
#

it's ok i can learn how to do that on ky own don't worry

#

i am a fast learner SDVpufferthumbsup

lucid iron
#

!startmodding

ocean sailBOT
#

Making mods can be broadly divided into two categories:

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

lucid iron
#

Look at the wiki tutorials for content patcher

#

[[modding:maps]]

lucid iron
#

Also helpful

crisp rivet
#

I thinkn its too big...

#

what sould i do to..?

brittle pasture
#

barn animals can be at most 32x32 otherwise they can't exit the door
coop animals are even smaller, only 16x16

blissful panther
#

And I think that's a dilophosaurus? So on the smaller scale, anyway!

crisp rivet
#

thak you !

whole raptor
lucid iron
#

That's literally the reason (cant leave door

stark spindle
#

Ha I do love the giant dinosaur though

blissful panther
#

I believe you can make the animal door bigger, but I don't think that helps.

brittle pasture
#

it does, but rip retex compat

lucid iron
#

Dino house

golden spire
#

Starassic Park

stark spindle
#

You need to have the big gates to enter your farm.

golden spire
#

“what do they got in there, King Kong?”

lucid iron
#

I wonder what the real upper bound is

#

Can u make a 320x320 Godzilla farm animal

golden spire
#

I imagine it working but very very very jankily

lucid iron
#

The best kind of working

stark spindle
#

just mod harder

golden spire
#

what if you combine lots of smaller animals together like some kind of transformer

lucid iron
#

Rat king

trim sand
#

Goofy question.
How difficult would it be to have a mod that makes the rancher profession also effect the sale value of animals? (Possibly also shepherd/Coopmaster applying a bonus again but only to the appropriate animals)
Realizing this is on the list of "mechanics nobody wants or cares about using" so why do I even care...

lucid iron
#

Hard

#

Animal husbandry is sorta close (in that you get meat to sell)

brittle pasture
#

maybe even no harmony if you want to go the asset edit route where you change the price of every animal in Data/FarmAnimals depending on player profession. That is probably worse performance-wise though

#

heck, if you're willing to list out every animal manually that can be a CP mod

trim sand
#

Hmm. Harmony patch of some persuasion or something else?
Wouldn't be my first rodeo on that front.
Admittedly I use animal Husbrandy mod, but also pokemon ranch which doesn't exactly make sense for meat output for most of its farm animals.

#

Also just feels super weird nothing effects that whole system.

lucid iron
#

Doing edit data like this wouldn't be so bad (the token only updates at launch and whenever you get profession up) just very manual

trim sand
#

In theory there's like three variables in animal data that hold professions they get "boosted" by, potentially I'd be able to determine which profession is assigned to a given animal, or I guess maybe I'd be better off checking the building they live in for weather to add the building specific value bonus.
Honestly still probably wouldn't be all that viable on average but also getting over a 1000g for max heart chickens with Sheppard+Coopmaster feels like a cool thing to have exist.
Admittedly id be concerned about multiplayer with the manual method.

#

I guess I'll have to look into c# patches and how best to see what I need to target

orchid acorn
lucid iron
#

It either means you have extra {{ or you are missing }}

orchid acorn
#

FML wahhhh visual studio and json validator are saying I don't have any issues

#

and I added like 20 new dynamic tokens

lucid iron
#

They can't

#

Bc this is a within string microsyntax of content patcher

orchid acorn
#

needle in a haystack type stuff

#

I wish you could like, use highlighter colors in VSC

uncut viper
orchid acorn
#

Never done fallback keys before, is this correctly put maybe?

"Value": "{{i18n:{{Random:{{GenericKey}},{{GenericKey}},{{SeasonKey}},{{SunberryKey}},{{InLawKey}},{{AuntKey}}|defaultKeys={{Mia.FallbackKey}} }}",

lucid iron
#

It exists DokkanStare

orchid acorn
#

pika oh that is. so specifc. I owe you my life THANK YOU

lucid iron
#

Linkoid (who made the extension) is on this server tho I haven't seen em recently

lucid iron
#

Need one to to close off Random i think?

orchid acorn
#

that would be the se-OH that's closing my fallback key UKediFacepalm

#

THANK YOU

#

❤️

#

thank god I had like a million more of these, love stumbling into it first try

uncut viper
#

(also fallback keys are very new so id be more surprised if you had done them before)

orchid acorn
#

yeah soph just taught me hamnod

#

got into the wonderful world of dynamic tokens this week thanks to her SBVLmaoDog

#

time to reformat all of sterling's dialogue. again. (after Mia)

#

YEP that was it

#

thanks for the second pair of eyes AND the extension suggestion

lucid iron
#

Did anyone tell you about the best thing since sliced bread

#

LocalTokens

orchid acorn
#

Airyn and Soph MENTIONED them but I haven't actually looked into them/know what they do

uncut viper
#

introducing localtokens now would be a rather large mod structure overhaul, fair warning

orchid acorn
#

What are they used for?

lucid iron
#

Templating

uncut viper
#

you can define tokens on a per-patch basis, basically, most significantly define tokens for a single Include only

stark spindle
orchid acorn
#

🤔

uncut viper
#

so you could include a file and say "in this file, {{Thing}} is actually "One""

#

and then reuse that same fromfile but in a DIFFERENT include but make it "Two" instead

orchid acorn
#

Basically like - I changed my dialogue to a Dialogue Token dynamic token

             "Name": "DialogueToken",
             "Value": "{{i18n:{{Random:{{GenericKey}},{{GenericKey}},{{SeasonKey}},{{SunberryKey}},{{InLawKey}},{{AuntKey}}|defaultKeys={{Mia.FallbackKey}} }} }}",
        },```

And I said it'd be cool if I could just somehow use this same dialogue token for Mia, Henry AND Sterling instead of just Mia as I'm currently doing and local tokens were suggested
#

WAIT. WAIT I'M SEEING IT.

#

OKAY I GOT IT.

#

oh I gotta give this a try

uncut viper
#

what is {{Mia.FallbackKey}} anyway?

orchid acorn
#

So this is my generic key for example

        {
            "Name": "GenericKey",
            "Value": "Mia.Dialogue.Generic.{{HeartLevel}}.{{Random:{{Range:1,30}}}}",
        },```

So I'd change ``Mia`` for a local token instead- and then the game would know that in my Miadialogue.json include, {{Name}}=Mia, and in Sterlingdialogue.json {{Name}}=Sterling, right?
#

and then I could just use the same dynamic token for all my character's dialogue

#

or am I misunderstanding?

orchid acorn
# uncut viper what is `{{Mia.FallbackKey}}` anyway?

One of her generic dialogues :]

//Fallback Key
{
"Name": "Mia.FallbackKey",
"Value": "Mia.Dialogue.Generic.EarlyHearts.1",
},

soph said it was good in case I made a mistake in the dialogue it chooses for the day so it'd always have something to default to

whole raptor
uncut viper
#

localtokens and how to convert things to use them are still kinda hard for my brain to wrap around but i dont think you'd have the dynamic token at all if you used localtokens instead i think

#

bc you cant put a localtoken on a dynamictoken itself

lucid iron
#

Local tokens are kinda like, scoped dynamic tokens

whole raptor
#

I did recently discover the beauty of local tokens thanks to chu too SDVkrobusgiggle

lucid iron
#

Basically if you can imagine say 3 patches where u only gotta change a few words

uncut viper
#

if you had two different fromfiles anyway i dont know if theres really much point to using a localtoken?

lucid iron
#

You can make 1 include and do LocalTokens for those words to change

orchid acorn
#

OHHHH I see UGiggle

lucid iron
#

However if the change is more complex, i.e. different number of patches in general

#

Then it's not quite the tool

whole raptor
#

I wonder how many mods actually use LocalTokens SDVpufferthinkblob

gaunt orbit
#

I've heard of a few people using it, but it's still pretty new

lucid iron
#

It's a 2.5.0 feature

golden spire
#

and I like to keep things mostly simple, makes my life easier

uncut viper
#

i think a lot of people still dont really think about templating in general when thinking about how to structure their mod, bc it hasnt really been an option

#

but a localtoken setup while maybe complex to wrap your head around at the outset can make things much, much, much simpler and cleaner if you do keep templates in mind from the getgo and make full use of it

#

with very long included templates

#

rather than just using them for like one or two patches

whole raptor
#

Yeah definitely, I had a lot of fun with just templating portraits/characters builders, I'm sure it'd be way more satisfying for mods with multiple NPCs or something similar

brave fable
#

thing is templating has the biggest benefit for a long run-on series of similar changes, which a lot of people don't plan for when starting up their mod

calm nebula
#

It's best for item mods jmo

brave fable
#

unless you're writing it up from the outset with the idea you're going to make, say, 100 similar apples and you don't want to make them just coloured objects or artisan products

calm nebula
#

Or you know

#

28 fertilizers

uncut viper
#

i think a lot of the time localtokens are also like. almost what someone wants but not quite. the content pack authors ever yearn for the for loops that they cannot have

brittle pasture
#

decided for funsies to look into what changes I need to make to allow ostriches to fit through coop doors. 2 hours later I would like to announce that
||I give up||

nocturne pumice
brave fable
#

change the ostrich bounding box size to 1x1 on every pathfinder call. done ✅

golden spire
#

just let them roam free, no coop needed.. problem solved

lucid iron
#

502...

#

selph what if u just

#

teleport them outside

#

dont think about the door

#

the ostrich tardis

brave fable
#

the tardis has a door tho?

lucid iron
#

but its big enough for an ostrich

calm nebula
nocturne pumice
calm nebula
#

Yes?

#

They leave one map and at the same frame enter a different map

#

What are you trying to do anyways

nocturne pumice
#

oh ok ic so i need to check the location

#

nw i think i get it now

brave fable
#

i think it's just the order that makes it look unusual there, since they're added to the new location before leaving the old

#

the all-too-brief willy superposition sequence

nocturne pumice
#

yeah, and also they are different locations so it makes sense

lucid iron
#

hm so for the mystery typing, it doesn't seem like actual problem once u have ponds and tried to toss in a fish (triggering the real loading)

#

that seems consistent with the previous experiments with custom assets

#

@coral oasis when you were testing w/ alchemistry, did you interact with a pond before trying patch export?

pine elbow
#

oh.... god

#

i thought changing the tilesheets would be easy

#

this is HARD

#

what the hell where do i start... i just wanna put 1.6 tiles..

#

is tiled for retextures as well..

golden spire
#

tiled is just for making the map, you can see which tilesheets are in a map.. it's not for painting tile textures

lucid iron
#

for u, its just easy way to look at the map

pine elbow
#

i am going to go insane.

golden spire
#

what are you finding hard?

pine elbow
#

also finding the changed tiles

#

like the new tiles

#

it was hard..

#

well this totally isnt overwhelming

golden spire
#

have you extracted the game's contents?

#

you dont need to touch xnbs

tender bloom
#

There also isn't a specific place where all the new 1.6 stuff is iirc, but there should be some tilesheets that are definitely more relevant

#

You can also use Lookup Anything on a tile in the game to figure out which tilesheet it's from

golden spire
#

currently playing "Chip's Challenge 2" and some of these levels... multicoloured (insert word of choice)....

#

what a mess of tiles these are

lucid iron
#

wait do we need hard reference to use the content patcher conditions api

pine elbow
#

im gonna convert them to pngs

latent mauve
#

If you've run the extracter, you shouldn't have xnbs

#

!unpack

ocean sailBOT
#

Follow this guide to unpack the game's content files in order to see and explore how the game data is structured.
It's helpful when making your own mods, or just to learn about how the game works!

pine elbow
#

oh..........

#

sigh

latent mauve
#

kohl, the extracted files from the unpacker will go into a duplicate of the Content folder named Content (unpacked) and will automatically give you the proper non-XNB file types to change, including pngs. 🙂

brittle pasture
#

yeah dunno why that's the case, I used CP API for a test mod once and the copying the interface method works fine

lucid iron
#

idk why im translating this part tbh kyuuchan_run

#

there r very few C# modders in zhcn i feel

calm nebula
pine elbow
#

extracted all the files... now i have done it correctly

lucid mulch
#

also those lines in the docs are 3-4 years old and predate pintail being added to do interface proxying

lucid iron
#

unearthing ancient tomes...

brittle pasture
#

probably not as ancient as the issue on SMAPI that says "you should consider bundling Harmony"

lucid mulch
rancid sapphire
#

Reading all the trouble ppl having adding mods to the game.
Makes me doubt if I shall go that way 🤔
What do you say, is it common with problems adding mods, or do the usually work fine if installed correctly?

lucid iron
#

are you trying to install mods or make mods

rancid sapphire
#

Install mods

lucid iron
ocean sailBOT
lucid iron
#

adding mods is easy tho its just that we have a dedicated section for helping ppl who had trouble

#

selection bias

rancid sapphire
#

Okey thanks 🙏

lucid mulch
lucid iron
#

oh i figured out it's just when you do patch export

#

patch export guessed wrong type, not really bug

#

the schema is like this, but cannot use tokens in here much like rest of config

"ConfigSchema": {
  "AngryAbby": {
    "AllowValues": "true, false",
    "Default": true,
    "PreviewImage": {
      "Target": "Portraits/Abigail",
      "SourceRect": {
        "X": 0,
        "Y": 0,
        "Width": 64,
        "Height": 64
      }
    }
  },
},
old edge
#

hello is it possible to force a green rain weather day the next day?

brittle pasture
#

set Game1.weatherForTomorrow probably

lucid iron
#

look at debug commands GreenRain

brittle pasture
#

that one instantly calls down green rain

#

hmm actually my suggestion likely wouldn't work out of the box either, unless you can get it to run after the day update logic (EDIT: nah, this should work, it just won't override forced weathers like sunny festivals or storms on Summer 13)

lucid iron
#

tbh u r maybe better off doing custom weather in cloudy skies than trying to mess with green rain

#

there are some, bizarre behavior with this preview impl if your config controls the Load of something...

old edge
#

hmmmnngg...

#

I scoured the decompiled code and came up with this ```cs
private void OnDayEnding(object? sender, DayEndingEventArgs e)
{
if (Game1.player.mailReceived.Contains("greenRainMossyDew"))
{
Game1.weatherForTomorrow = Game1.weather_rain;
Game1.netWorldState.Value.WeatherForTomorrow = Game1.weather_green_rain;

    Game1.player.mailReceived.Remove("greenRainMossyDew"); // Prevent repeat rain
    Monitor.Log("Green Rain triggered for tomorrow!", LogLevel.Info);
}

}

brittle pasture
#

you probably want Game1.weatherForTomorrow to be Game1.weather_green_rain as well

old edge
#

oh

#

It's because I made a Mossy blade

#

and want it to appear on a green rain day but I want it to occur the next day after an event is seen and the mail flag was sent last piece of the code was triggering this weather anomaly.

brittle pasture
#

finally did it, bleh
a huge special thanks to @lucid iron for the suggestion I should have gone with in the first place instead of wasting time looking into bounding box and pathfinding

#

the "worst" part is that I didn't have to handle the animal going back inside, it just works™️

#

it's the going outside part that these oversized poultry can't do

#

this is so, so, so late, but I finally did it lmao

drowsy pewter
#

Oh wow

sour sleet
#

Congrats!

brittle pasture
#

I'll release this as a standalone mod that makes all big birds (that I know of) be able to live in coops as well as barns some time later

#

then my plans of consolidating ostriches/mizu turkeys/vmv geese with their brethren is finally reality

lucid mulch
# lucid iron oh i figured out it's just when you do patch export

Ah yeah, there is a second argument for the type to have export get it right.
Also less of an issue for normal vanilla assets as propagation would make sure vanilla reloads it, but FishPondData doesn't get propagated as the vanilla code flows read the asset every time anyway

#

hmm for vanilla assets I can probably fix that in content patcher anyway, because I can use reflection on DataLoader to link asset names to types

lucid mulch
#

ok got it fixed, just testing a case insensitive variant now, did find a bug in the ShinyFish mod as a result, where it tries to (indirectly) load Data/FishPondData while editing Data/FishPondData.

less of an issue when no one handles the load, becomes more of a problem when someone does.