#making-mods-general

1 messages · Page 297 of 1

distant radish
#
[game] The 'otherPreciousGemsFound' stat is set to 0.
[Console Commands] Sent debug command to the game, but there was no output.```
#

I thought it was for Emeralds, Rubies, Diamonds and so on - but it returns 0 in an advanced save

calm nebula
#

Not every stat is used

#

A lot aren't tbh

distant radish
#

Since they are listed on the Wiki page I thought that all of those were used

brittle pasture
#

from a quick code dive that one is incremented every time you break a Gem Stone (the stone with the purple swirl)

distant radish
brittle pasture
#

mystic stones are the blue ones with multiple cyan swirls

distant radish
clear oxide
#

FTM is gonna take me some time to get used to it

rigid musk
#

It's definitely a great mod but there's a lot to use and remember

golden basin
#

question who is th creator of distant lands

brittle pasture
sour sleet
#

Is there a way of getting a fish to spawn on a stormy day or do you only have the option of rain?

brittle pasture
#

WEATHER Here Storm

sour sleet
#

Thanks!

#

Can you have more than one condition? I already have the SEASON Here condition

brittle pasture
#

add commas between them for AND

clear oxide
#

FTM seems hard to use without have knowlege of what it actually does for Custom Monsters, I want to do something like Extra Skin with a new name ?

brittle pasture
#

I admittedly don't have experience with FTM either, but looking at examples help

lucid iron
#

Why does your mod need FTM

#

I feel like you just need to handle people catching monsters spawned by FTM right

brittle pasture
#

(I admittedly have no context as to what they are working on)

#

(I admittedly use the word admittedly too much)

lucid iron
#

It sounds a bit like the thing in stardew druid

brittle pasture
#

oh, so the whole thing is in C# anyway

clear oxide
#

im trying to figure out the best possible way of adding new monsters without people having to know how to code

lucid iron
#

Make your own monster the framework

clear oxide
#

so new , i bearly understand what im doing now XD

lucid iron
#

It's your C# mod the world's your oyster

#

But yeah in your case i don't think u need to add monsters per say

#

Simply having a way to save the stats, class, and textures of monsters "caught" is enough

#

You can take a look at various framework mods to see how to implement one if you want ofc

#

It's low ambition compared to FTM (all it does is change look and drops of a monster, there's nothing for spawning)

tawny ore
#

I wonder how difficult it would be to update MTF

#

It's too bad that never took off, I was excited to see what other might come up with

lucid iron
#

Monster data didn't change that much did it blobcatgooglyblep

#

But it was always a demand thing, i feel like the combat system lacks depth

clear oxide
#

im trying to make something close to Rune Factory

tawny ore
#

The wiki doesn't mention much about Monsters, so doesn't seem like a lot would have changed

royal stump
# clear oxide im trying to figure out the best possible way of adding new monsters without peo...

SDVpufferlurk I'm not sure how it'll interact with a catching/taming mod, but:

  • FTM is a framework that spawns monsters (or other things) at certain times of day, controlled by content packs in other mods
  • those packs can use it to customize monsters in some ways, e.g. replace which skin they use, though it only customizes things those packs spawn (e.g. it can't edit things spawned by Stardew or other C# mods)
  • it can spawn custom monster classes added by C# mods in the same way as vanilla monsters (see the readme section here), so if you want to give content pack users the option to spawn things with custom logic, it can do that
  • all that said, FTM doesn't serialize any custom classes & just despawns them prior to saving* instead, so it might not interact well if your mod moves/respawns monster instances on its own
acoustic summit
trim sand
#

Content patcher question : can a separate content pack "deregister' a modded item, if for example you have Juniper Berries coming from multiple mods. And wanted to fully remove one completely in favor of the other?
I assume just setting the entry that defines item info to null like for recipes wouldn't work?

lucid iron
#

Well u can in fact edit an item into null but that's a Bad idea

#

Use selph mod instead

brittle pasture
#

you'd need to hunt down every reference of that item in crops/recipes/machines/shops/bush bloom/FTM spawns/who knows what else

lucid iron
#

If u r make mod with this in mind tho u can also be like

#

If cornucopia installed use cornucopia butter else create own butter

#

But that gets really messy if people install cornucopia in middle of play

#

There's various ways to just let you use both butter for things

trim sand
#

In this case is goal is just to not impact perfection but merge Copper Still and Cornucopias Juniper

#

I suppose might just be simpler to make the mod exist to add a recipe clone to copper still to use Cornucopias Juniper. Would still admittedly want either juniper to be equivalent.
Copper still juniper is used like two places, once for bush bloom mod, then again for its gin recipe. But I guess changing those places and making the copper still item not perfection tracked somehow would probably be better than yeeting it fully

indigo yoke
#

if I wanted to use content patcher to change a vanilla food buff, it would be something like this right?

lucid iron
#

Take out the "Buffs": [

#

Should be able to use Food as the id

indigo yoke
#

so like this then?

brittle pasture
#

You should make the Id field and the key match

#

also a good idea to add {{ModId}} to both

#

also you have double { { there, after the key

indigo yoke
#

you say ID field and I only see one thing labeled as ID

lucid iron
#

That's what i meant yes

#

Food

#

Are you trying to add just the custom field?

indigo yoke
brittle pasture
#

hold on, is this Food buff entry new or from another mod

indigo yoke
brittle pasture
#

ok, so new entry

indigo yoke
#

oh Rhubarb Pie doesn't give buffs. I thought it did

brittle pasture
#

anyway what I meant is change "Rhubarb Pie" to "{{ModId}}_SocializingBuff" and "Id": "Food" to "Id": "{{ModId}}_SocializingBuff"
in CP, when you edit a list/dict it tries to find the appropriate entry to modify by using the Id field, what you're doing here is "find the entry in Buffs with the Id "Rhubarb Pie"" and add/edit it

#

since you're adding a new entry (and thus neither "Rhubarb Pie" nor "Food" exists anyway) it doesn't really matter, but I recommend following best practices regardless

#

actually, hmm, on second thought probably use Food for both

#

(if there are multiple Buffs do all of them get applied when you eat it?)

indigo yoke
#

which is why (almost) all the food buffs have the ID of food

lucid iron
#

Beautiful organic hardcoding

#

But makes sense to me DokkanStare

#

I know rhuharb pie doesn't have buff but in the case where there is already Food, think u should be able to target all the way into CustomFields to add the socializing custom field, then do a different edit and target into CustomAttributes to efit the vanilla skill buffs

indigo yoke
#

that would be something like this?

#

target the item -> target the buffs -> target the 'food' buff -> target the custom fields

lucid iron
#

The blahblah.socializing is the key

brittle pasture
#

remove the second CustomFields block, you're already inside it via TargetField

#

but yes, looks good (assuming Buffs > entry with Id Food exists)

indigo yoke
#

? okay tyvm for the help! would give you duckie or cookie or upvote if they existed here.

lucid iron
#

Hold on

#

Data/Machines

#

Should be Data/Objects

indigo yoke
#

I'll correct that xD

#

it was a copy paste from another target edit

lucid iron
#

🍪
duckStackEnd

indigo yoke
#

okies, tyvm for the help. Time to do some YACS editing, adding some food buffs for cross-mod skills to some vanilla items.

woeful iron
#

I'm still buzzing that I was able to make a mod with all the support from folks here

#

Does the "(O)" stand for object?

#

like the object id?

brittle pasture
clear oxide
#

thanks everyone for helping me out today 😄 i got a lot done

inland cedar
#

I am using this way to open a chest inventory menu, however after close the menu sometime the game is stop until a button click. anyone know how can I solve that?

var obj = getNpcInventoryChest(npc);

if (obj != null && obj is Chest npcInventoryChest)
{
    DelayedAction.functionAfterDelay(() =>
    {
        var menu = new StardewValley.Menus.ItemGrabMenu(
            inventory: npcInventoryChest.Items,
            reverseGrab: false,
            showReceivingMenu: true,
            highlightFunction: null,
            behaviorOnItemSelectFunction: npcInventoryChest.grabItemFromInventory,
            behaviorOnItemGrab: npcInventoryChest.grabItemFromChest,
            message: null,
            canBeExitedWithKey: true,
            showOrganizeButton: true,
            context: npcInventoryChest
        );

        // This ensures the player can move again when menu closes
        menu.exitFunction = () =>
        {
            Game1.player.completelyStopAnimatingOrDoingAction();
            Game1.player.forceCanMove();
            Game1.player.CanMove = true;
        };

        Game1.activeClickableMenu = menu;
    }, 1);


}
#

hooked to OnButtonPressed btw

inner harbor
#

It would be kinda nice if you could edit map appearance with conditions the same way you can edit NPC appearance. I guess I'll stick to patching.

lucid iron
#

But it could be the delay action you have causing problems, do you need that yggy

inland cedar
#

gpt suggest that. still happen with or without tho

lucid iron
#

I have similar bit of code and it's just swapping in active clickable menu from buttons changed

#

Why are you asking llm for modding code lol

#

Another thing u might be bumping into is chest mutex

#

Though if it's a secret chest idk what would be holding the mutex (chests anywhere?)

#

I used global inventory to avoid all that

uncut viper
#

(also mods with ai-generated code/code in general that is AI generated aint allowed to be shared in here.)

inland cedar
#

lol damn even ai code

uncut viper
clear oxide
#

custom monsters , but it has to be hard coded sadly

indigo yoke
#

content patch failed

#

back to the pit with meeeeee

lucid iron
#

Did u yeet the existing item

#

I forgor if buff data is cached

calm nebula
#

Buff data not cache

indigo yoke
lucid mulch
rigid oriole
#

harmony and reflection crime question! suppose I dynamically generate a prefix. Harmony won't accept a DynamicMethod and asks me to "use a factory method instead that will return the dynamic method". has anybody actually done this and can point me down the right path?

pastel aurora
#

Sure, go ahead! I'm curious with the questline 👀

lucid mulch
rigid oriole
#

I do not want to manually write a bunch of (nearly) identical prefix/postfix pairs

#

And thus i wish to dynamically generate them

lucid mulch
#

What would the differences between them be?

rigid oriole
#

the prefix is essentially MyManagerClass.RegisterThisThing(a, b) and the postfix is essentially MyManagerClass.UnRegiisterThisThing(a, b). a and b are supplied by me (manually).

#

I theoretically have a DyanmicMethod that represents these prefixes and postfixes, but harmony is upset because it is a DynamicMethod

lucid mulch
#

Step1 regardless is register normal static methods as the prefix/postfix

rigid oriole
#
public static void PrefixPostfixPatch(Harmony harmony, MethodInfo original, string a, string b)
    {
        harmony.Patch(
            original: original,
            prefix: new HarmonyMethod(PrefixFactory(a, b)),
            postfix: new HarmonyMethod(PostfixFactory(a, b))
        );
    }

    private static MethodInfo PrefixFactory(string a, string b)
    {
        var helper = AccessTools.Method(typeof(PatchGenerator), nameof(PrefixHelper));
        
        var dm = new DynamicMethod("DynamicPrefix", typeof(void), Array.Empty<Type>());
        var generator = dm.GetILGenerator();
        generator.Emit(OpCodes.Ldstr, a);
        generator.Emit(OpCodes.Ldstr, b);
        generator.Emit(OpCodes.Call, helper);

        return dm;
    }

// ... more here
lucid mulch
#

If you want the dynamic method craziness just invoke them inside those static methods

rigid oriole
#

Can a prefix/postfix accept arbitrary parameters?

lucid mulch
#

They can access static state in your class

rigid oriole
#

a and b are not static state

#

they're string literals

lucid mulch
#

Are you intending to harmony patch the exact same method multiple times in this class

rigid oriole
#

I intend to use this patch generator to patch a bunch of different methods

#

I understand you may wonder why I want to do this

#

the prefix and postfix take no parameters

lucid mulch
#

static Dictionary<MethodInfo, Tuple<string, string>>

calm nebula
#

Definitely wondering the why rn

lucid mulch
#

You can do MethodInfo ___original or something to get the original method

calm nebula
#

BarleyZ, you can use the same function to patch multiple functions....

rigid oriole
#

ok suppose I want to prefix two methods from the game: MethodA and MethodB. The prefix for MethodA should look like this:

public static void PrefixA() {
  MyHelper.DoTheThing("someString1", "someString2");
}

The prefix for MethodB should look like this:

public static void PrefixB() {
  MyHelper.DoTheThing("someString3", "someString4");
}

I want to generate these prefixes automatically by supplying the two string literals because there will be a lot of these prefixes. Am I going completely in the wrong direction?

whole raptor
rigid oriole
#

I can generate a DynamicMethod that represents these prefixes, but Harmony is upset because it is a DynamicMethod and requests that I "use a factory method instead that will return the dynamic method"

rigid oriole
#

it is probably less cursed

lucid mulch
#

Profiler does that approach for its content pack and Api based monitoring

rigid oriole
#

I have been steered away from reflection crimes

#

appreciate you!

lucid mulch
#

ah its MethodBase __originalMethod

rigid oriole
#

as opposed to MethodInfo?

#

MethodInfo is-a MethodBase correct

calm nebula
#

yes, as is ConstructorInof, etc

lucid mulch
#

the caller hits PublichPatches.AddDetailsEntry to populate the data, and separately tells harmony to aim at the methods it wants

#

but all of profiler is 1 transpiler, 2 prefixes and 3 finalizers (the method called postfix got changed to a finalizer and forgot to rename the method)

rigid oriole
#

Yeah it sounds like the bulk of my mod I can get away with one prefix and one postfix that I apply to multiple game methods

#

or probably a finalizer rather than a postfix now that you mention that

lucid mulch
#

if all the postfix does is cleanup, you might want it to be a finalizer

rigid oriole
#

yup it's a cleanup

lucid mulch
#

as postfixes don't run if the method errors out, or a prefix skips the original

rigid oriole
#

i'm assuming nobody can skip someone else's finalizers?

lucid mulch
#

not that im aware of, short of just telling harmony to unpatch the method

lucid iron
#

i can skip ur finalizer by transpiling it

rigid oriole
#

please don't 😔

lucid iron
#

but yes baring crimes like this you good

rigid oriole
#

i can't believe even this time the answewr was hashmap

#

the answer is always hashmap /lh

lucid mulch
#

I am typescript brain, if a dictionary/object will do the job I will generally lean towards it

rigid oriole
#

i was on the brain of "i want my code to do this for me" and then you made me realize my code doesn't need to generate code it just needs a map

lucid mulch
#

I gathered that part, which is why I ignored your original question and asked what is the problem you are trying to solve

rigid oriole
#

i needed that 😔

#

i have written a lot of code for several different projects today and my brain is tired

#

i am still curious what the answer to giving harmony dynamic methods is even if I'm not going to do it

lucid mulch
#

Dictionary<MethodBase, DynamicMethodWhatever>

#

harmony needs sane static methods to aim at for the IL to be sane, once its invoked your method call the dynamic method yolo

rigid oriole
#

ah

#

to me the exception it threw implied that I needed a factory that gave the HarmonyMethod ctor the dynamic method and I was like "i'm doing that and you're complaining about it" haha

lucid iron
lucid mulch
#

lookup tables solve so many problems

rigid oriole
#

ur interviewer asks what your favorite food is? hashmap

uncut viper
lucid mulch
#

public static Dictionary<string, KeyValuePair<MethodBase, List<DynamicPatch>>> Prefixes
hashmap wins once again

rigid oriole
#

i cannot belive it

lucid iron
#

Do you think there's a hash out there pointing to me

lucid mulch
#

in discord for your message id, or your user identifier, yes

calm nebula
#

your social security number

lucid iron
#

@lucid comet re: compact shop inquiry (about search for descriptions) on nexus, the feature is pretty simple to do, but idm if you want to make a PR as practice

shut edge
#

//// "Fruit": [
{
"Id": "E{{ModId}}_Pufferfruit",
"ItemId": "{{ModId}}_Pufferfruit"////

#

welp that's not the codeblock command lol

#

anyway, anyone know why this example on the wiki has that E in the ID?

brittle pasture
#

typo probably

shut edge
#

that's what i was thinking

#

this page, if anyone wants to edit it

lucid iron
#

i did do hasmod but not as a token blobcatgooglyblep

#

u just give mod(s) required for an option

#

hm wait

#

whats the behavior if a mod in requiredmods of config is not installed

#

rn it simply isnt visible but the config still exists, maybe it needs to revert to default value

calm nebula
#

Invisible but still exists makes sense

lucid iron
#

yea ig i just wonder if it should actually be invalid token, or revert to default value

#

didnt do either of these in draft

sly perch
#

does this work ? to replace a mod's textures?

  "Format": "1.26.0",
  "Changes": [
    {
      "Action": "Load",
      "Target": "Mods\\Sword & Sorcery\\[CP] Sword & Sorcery\\Assets\\Items & Crops\\BlessedTools.png",
      "FromFile": "assets/BlessedTools.png"
    },
    {
      "Action": "Load",
      "Target": "Mods\\Sword & Sorcery\\[CP] Sword & Sorcery\\Assets\\Items & Crops\\StygiumTools.png",
      "FromFile": "assets/StygiumTools.png"
    }
  ]
}
lucid iron
#

format 1.26.0 is old

#

dont

#

these are not the correct targets either

sly perch
#

ahhh okay

lucid iron
#

you have to look at S&S's loads, then do an editimage targeting the same

sly perch
#

okay, thanks so much!! im so new to this, ive just been reading a lot of stuff online haha

lucid mulch
#

not 100% on the usecase so its hard to say what behaviour would feel good, because unready/invalid tokens would torpedo any patch they are used in

lucid iron
#

yea hm i think it's mostly for mods that are hoping to support different mod

lucid mulch
#

if its only used in separate patches to do the compat, then unready/invalid work great

#

but if they use it in Appearances for example directly in their main Data/Characters edit, the npc stops existing if its unready

lucid iron
#

otoh now that i made it i feel kinda ehh on the usecase, like why this instead of CMCT (besides it being built in ofc)

#

i do feel like a required fallback value is easier to use

#

and opens the possibility where the config's last human set value is saved

#

but always returns the fallback while mod not installed

lucid mulch
#

tbh if I was proposing this to Pathos, have the RequiredMods functionality as an independent PR to the preview image and page stuff

whole raptor
#

CMCT definitely narrows the use cases now that it exists, but it could be used for when there's some kind of override you want to disable, or allow customization for some things only when specific mod is installed SDVpufferthinkblob

lucid iron
#

yea it is like

#

changing more of how config work Dokkan

#

shelving it for later then

north palm
#

Was wondering if anyone here knows how to modify gift tastes? I just want to remove carrots and apples to Harvey's taste. Thank you.

lucid iron
#

need text operations

lucid mulch
#

reading the PR, the RequiredMods functionality is unrelated to the other functionality
the pages / preview image stuff adds value regardless

north palm
#

so im not sure how...

lucid iron
#

the operation is similar for a individual character too

north palm
#

so it's like?

{
"Action": "EditData",
"Target": "Data/NPCGiftTastes",
"TextOperations": [
{
"Operation": "RemoveDelimited",
"Target": ["Entries", "Harvey"],
"Search": "74",
"Delimiter": " "
}
]
}

lucid iron
#

yea assuming 74 is the thing

north palm
#

how can i know it will be the right number?

#

I'm sorry for asking too many questions sad

lucid iron
#

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

look at the original string

lucid iron
north palm
lucid iron
#

yea look for harvey in here

north palm
#

"Harvey": "It's for me? This is my favorite stuff! It's like you read my mind./348 237 432 395 342/That's such a nice gift. Thank you!/-81 -79 -7 402 614 418 422 436 438 442 444 422/Hmm... Are you sure this is healthy?/-4 424 426 330 233 232 238 234 223 222 221 220 216 211 210 208 206 205/...I think I'm allergic to this./296 245 397 396 394 393 392/Thanks. That's very kind of you.//",

lucid iron
#

ah ig u actually need to add the taste to neutral

lucid mulch
#

74 would be referring to a specific item (Prismatic shard)

lucid iron
#

carrots and apples are generic like?

north palm
#

oh so i should append apples and carrots to universal neutral?

lucid iron
#

no u just want to do it for harvey right

north palm
#

yes

lucid iron
#

this is the guide for how gift taste strings work but alas wiki ded for me rn

lucid mulch
#

harvey would like apples from fruit category

north palm
#

i'm making a replacement mod for harvey kid_hide_lad i know it's too big for a task for a beginner pepe_sad

lucid iron
#

replacement mod?

north palm
#

i want to replace him with another character

lucid iron
#

why not just make a new npc then LilyDerp

#

its about the same amount of work

north palm
#

but i only want to change some aspects only.. worry_hide

#

is it really advisable to just create a new npc?

proper bobcat
#

Generally, yeah, if you plan to release the mod (not trying to sound passive aggressive my apologies)

lucid iron
#

if you want to replace harvey entirely i suppose u can just replace the entire gift taste entry

#

cus at this point compatibility is dead anyways

#

the thing is just that the amount of stuff u have to edit/change for npc replace is about the same for add new npc

north palm
#

alright. I'll scratch this up and create a new npc instead 0b_love

#

thank you so much for answering all my queries

proper bobcat
#

Yeah, I think I told someone this before in this chat, but if you can do npc replacement you can do npcs, and it's easy to add fun stuff to it!

lucid iron
#

!npc

ocean sailBOT
#
Creating a Custom NPC

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

lucid iron
#

here be some guides AquaThumbsup

#

u can still have ur npc live in the clinic if u want, tho many ppl make new house

north palm
#

got it.. thank you very much Birb_Love

late pewter
#

For a Content Patcher mod that adds a craftable machine that makes a new item every morning: How do I exclude both machine and item from perfection? i.e. should not appear in the Collections menu.

shut edge
#

i think something is off with my optional requirement stuff towards the bottom maybe

#

like the mizu's turkey and quail stuff

lucid iron
#

you cant exclude the machine's crafting recipe without perfection exclusions

shut edge
#

"When": {"HasMod|contains=Mizu.QuailForAnimalHusbandry" : "true"},

lucid iron
#

but u can give the player this machine in other ways

shut edge
#

is there more to it than just having this line?

late pewter
#

What about the item?

lucid iron
#

the item u just dont put required for shipping

#

ExcludeFromShippingCollection

shut edge
#

the items are showing up in the store as error items (i don't have the reqs installed), i thought this would just make them not appear?

lucid iron
#

u need to have the when for the data shops edit too

shut edge
#

oh that would do it huh

#

thanks

late pewter
#

Like so?

lucid iron
#

yea should work i think, assuming rest of it is valid

late pewter
#

Sweet, thanks! I'll try it out. Weird this isn't a thing for the machine crafting recipe???

lucid iron
#

u need a mod for that

shut edge
#

yep, worked, rad

lucid iron
#

but if u just offer the machine in other ways, like buying from shop only

#

then u dont have to worry

trim sand
#

Silly question, for custom farm maps : how do I add extra initial buildings or placed objects? Sorta like how meadowlands has the coop and fencing from the start? Seems it doesn't live in map properties at a minimum

lucid iron
#

need a mod for that

trim sand
#

i... see i assume you mean Farm Type manager?

tiny zealot
#

yeah meadowlands coop is hardcoded, if memory serves

brittle pasture
#

spacecore actually

#

or buildings included

lucid mulch
#

Custom farm loader can do it iirc

ivory plume
# lucid iron <@226803198218731520> I added support for preview images and pages in CP gmcm in...

Thanks for the PR! It's too late for this month's update wave, but I'll play around with it for the May updates.

This change is in a bit of a gray area though. ConfigSchema is meant to be completely generic; i.e. it's a configuration schema which Content Patcher can display through GMCM or any future config mod, not a JSON representation of a GMCM menu. Introducing a Page field moves more towards a direct GMCM wrapper, since pages & page links are a GMCM concept rather than a general config option.

wild viper
#

!npc

ocean sailBOT
#
Creating a Custom NPC

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

lucid iron
#

but if i was make config mod, and content patcher supported such a thing, i'd probably support pages too

wild viper
brave fable
#

(perhaps a more generic group style would work?)

wild viper
#

Ok I give up

lucid iron
#

i don't see it as different than Section per say

ivory plume
#

Section is a pretty generic concept; any config UI is likely to support headers, while page links are a more specific concept.

brave fable
#

(not necesaarily as just a nomenclature change, but more separation than boxing-up like pages in gmcm appear to be)

ivory plume
#

(But even Section was a compromise that was pushing it a bit, since it's not part of the actual config schema.)

rigid musk
wild viper
#

Yup

#

Had hope for a good 5 secs

#

New record ngl

lucid iron
#

what of image then, r they more generic in some way blobcatgooglyblep

wild viper
#

I’ll make an attempt

rigid musk
wild viper
#

But what’s the whole reason an npc doesn’t work in the first place due to version difference

ivory plume
rigid musk
#

Many Many changes

wild viper
brave fable
#

(incidentally, akasaka hikawa shrine has two stonking great ginkgo trees for your appreciation. all in the name of modding field research, of course)

wild viper
#

All of know is one of the dependencies is pregnancy roles mods which is severely outdated

rigid musk
#

Are you trying to make a new npc?

#

Or edit one or

wild viper
#

Make an update to an old one

lucid iron
#

it's kinda hard to indicate that an image is associated with option

#

without going complex options

tender bloom
#

clearly i must go there

#

for research

lucid iron
#

so for a seasonal outfits mod of some kind they can use pages to group the previews with the options

tender bloom
#

I'd have to figure out where this is, but i bet I can do this

rigid musk
lucid mulch
#

Would also reduce the need of mods that have a C# component just to do a better gmcm integration and expose it as global tokens

lucid iron
#

what would a world with 2 different configuration mods look like NotteThink

lucid mulch
#

Though I do agree that the config scheme should be pure to just config.

A better big picture solution would be to have gmcm support extra page/config stuff via asset pipeline.
So a content pack can just edit data to define all the gmcm specific flavour on top

lucid iron
#

lets say i make that what kinda intergation should i PR into content patcher?

ivory plume
#

If there was a solid alternative, Content Patcher would most likely support both which would automatically mean something like 50% of mods would now support both.

lucid iron
#

there was some talk™️ about doing that but with stardewui as base

#

but it was unclear how exactly it should exist (gmcm drop in replace? new thing?)

ivory plume
#

Not sure how it could drop-in replace GMCM, unless you patched SMAPI to override the API it returns (not recommended please don't do this)?

brave fable
lucid mulch
#

(i do have the code in my repo for impersonating other mods if they are missing)

lucid iron
#

the theory was we (royal) either steal gmcm's unique id or we do the api intercept yes

lucid mulch
#

Actually I don't remember if I even do the 'if missing' step

lucid iron
#

but there r many problem with it even assuming crimes, namely being tied down to the existing api design

brave fable
#

(stumbling into two different shinto weddings on the same day also makes me wanna look at event scripts SDVdemetriums SDVdemetriums SDVdemetriums )

faint ingot
#

Does anyone know if there's a way in FTM to use the buried category with a spawn weight? (looking to have the buried item come from a random list)

lucid mulch
#

https://github.com/SinZ163/StardewMods/blob/main/SinZationalSixSupport/ModEntry.cs I don't directly even patch or override smapi, I just have a harmony patch for timing to have code run before Entry is invoked, where I will spawn multiple instances of ModEntry which would run on the other manifests/uniqueid's and in Entry/GetApi etc I can just check what manifest is in the instance and do different behaviour

#

the original idea was for redundant framework mods that 1.6 replaced, this mod could pretend to be them and map their behaviour 1:1 to vanilla concepts

#

it is very sensitive to very internal behaviour of smapi and how the mod loading gets bootstrapped.
But the core of it was that every other mod will see in the modregistry that the mod is loaded (because it is), it would show up in console/log as a loaded mod etc

Other option to do it without any quirks is to ship a stub GMCM mod that uses GMCM's identifier that just proxies calls to your real mods api

tender bloom
#

now possible!

lucid mulch
#

but I wouldn't advise a replacement config mod to just indefinitely use GMCM's identifier, so you can have a greenfields new api design under the real uniqueid.
and purely do backwards compat on GMCM's id

#

tbh I think it would be useful for smapi mods in general to be allowed to have multiple ids, or at least sub ids so you can expose multiple apis.
eg MyModId-v1 and MyModId-v2 being able to be exposed by the same mod so you can more safely do breaking changes and have backwards compat anyway

lucid iron
#

There's question of whether we'd actually want to impersonate gmcm for c# mods

lucid mulch
#

gmcm has been threatening a breaking update since before 1.6 released and still hasn't happened afaik

lucid iron
#

Vs just doing specific integration for content patcher and then let C# mods choose to update over

#

Custom options is most likely to be unhappy

#

I like the idea of a custom asset defined config menu tho

#

Then u can toss that into include

lucid mulch
#

you would still need the core of the config to be in ConfigScheme to actually be tokens

lucid iron
#

Yeah ofc

lucid mulch
#

but the preview images, page structure, extra text can be whereever

lucid iron
#

The tokens should exist for when you just edit configs by hand

trim sand
#

great... apparently ive done something horribly wrong in tiled. despite copying the tilesheet to my mod folder before importing it to the map. im also assuming the only reason the .xnb stuff is coming up is because it couldn't load the .tmx?

lucid mulch
#

can't safely have config tokens defined in an Include anyway because includes can have CP conditions gating them, and CP wants quantity of tokens to be fixed 2? ticks after GameLaunched

lucid iron
#

!tilesheetclimbing

ocean sailBOT
#

When creating or editing maps in Tiled, one common error is tilesheet climbing, marked by red text containing "invalid tilesheet path '../../..'. This is caused by SMAPI not being able to find the tilesheets needed by the map file. To prevent this error, make sure that you have a copy of all necessary tilesheets in the folder containing your WIP tmx file. Copies of vanilla tilesheets can later be deleted, but must be present while working on your map.

If you get this error with a completed map, an easy way to fix it is to open your tmx file in VS Code or a similar text editor, find all of the places with <image source=, and remove the filepaths to so that only the tilesheet names remain. For example, if the code says <image source="Content (unpacked)/Maps/townInterior_2" width="512" height="64"/>, change it to just <image source="townInterior_2" width="512" height="64"/>.

lucid iron
#

2 is when everyone can use the token/conds api

trim sand
#

... i think. i think the solution is give up here. and pretend this disaster never happened. since again i started by copying the waterfalls tilesheet to the directory i was working in.

lucid iron
#

its an easy fix just open the tmx as plain text

#

(it's an xml file)

uncut viper
# lucid iron I thought it's 1

i thought it was 3 for the conditions api being ready though i know a C# mod cant register a custom one any later than GameLaunched

lucid mulch
trim sand
lucid iron
#

well the loaded version says it does

#

look for block like this

 <tileset firstgid="1" name="cave" tilewidth="16" tileheight="16" tilecount="320" columns="16">
  <image source="Mines/mine_lava.png" width="256" height="320"/>
 </tileset>
#

check the source= path

trim sand
#

this is the only block anything to do with the tileset smapi is yelling about

lucid iron
#

oh embed your tilesheet

#

the tsx is what has the ref

trim sand
#

i just followed the instructions on the wiki for reusing vanilla tilesets.

#

aaand sure enough the .tsx has the wrong path

lucid iron
#

tsx r hard to use in actual mod imo

#

mostly useful for transfer anim

trim sand
#

in this case with the waterfalls tilesheet avoiding manually redoing animations felt ideal.

#

whatever goal is just to make it work. anything else be damned at this point

lucid iron
#

yea and by embeding it

#

you keep the anim

trim sand
#

id really prefer not to.
mostly because uh. i understand nothing about any of this.

lucid iron
#

do u trust me

trim sand
#

no

lucid iron
#

PecoSmile then perish

trim sand
#

^^ will do

lucid iron
#

more seriously, tsx cannot actually be loaded into the content pipeline

ornate locust
#

The default state of most tilesheets in maps and mods is embedded, from what I can tell

lucid iron
#

there's not rly big diff between having it separate and having it embeded

#

they still gotta live under the same folder

ornate locust
#

Yeah it's basically just hitting a button

trim sand
#

sorry. im realizing its not helpful to ask for help then be a jerk in response to said help.
I still just want nothing more than to set this whole project on fire. simply because i hate how it looks.

lucid iron
#

i think you should take a break and come back with fresh mind

trim sand
#

if nothing else, sorry for wasting ya'll time and just generically being a jerk

#

sigh
really am just slightly stupid in my rage.
still ugly as hell. but it mostly works. lots of ghost tiles and stuff on the wrong layer. and no barn despite using the spacecore method to place one.

grave flint
#

I think it looks good

trim sand
#

i mean the inside is copied directly from meadowlands. so that only sorta counts.

gaunt socket
#

Uhm hello, can I ask here any help for a rookie starter in moding?

trim sand
#

its generally more fruitful to simply ask your question to ask if people here actively giving out help are willing to put time into helping you with your problem

gaunt socket
#

I want to make a sprite mod for a simple skin mod and wonder if Aesprite is enough tool to work it

#

Sorry if my English is a mess

proper bobcat
#

For Stardew, all you need for these visual mods are an art program with some pixel support (Like Asperite) and something to edit code with like VS Code or Notepad++

#

Don't be too scared of the code though, there's plenty of documentation out there to replace sprites of npcs

gaunt socket
#

I see, thank you so much for the advise
I mean, one of my fav mods is the Anthro Furry Mod and really inspired me to learn it made a sprite mod for myself to other mods (obviously whit permission of author's mod)

trim sand
#

beginning to wonder if its the huge stump tiles thats created the random untraversable tiles seemingly randomly around the map. some issues still needing fixed yet.

tender bloom
#

Typically random tiles you can’t walk through are invisible buildings tiles

trim sand
#

i take it 'empty' tiles on a tilesheet isnt the same as actually removing the tiles from that layer

proper bobcat
#

No problem! One thing I'd also recommend is !unpack the game files so you know what to target in the mod's code

#

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

gaunt socket
proper bobcat
#

No worries, and good luck!

urban patrol
rose path
lucid iron
#

Missing closing "

#

Line 48 to 55

rose path
#

thank you

trim sand
#

minor issue i can't descern. since these bridges are on the buildings layer. and one works but the other. stops you at only one end.

#

also more progress on this jank thing has been made. barn and starting cow are now functional.

lucid iron
#

Try data layers

#

It's able to tell u about map collision

trim sand
#

im not sure i understand.

#

i assume by datalayers you mean the ones with tile data empty squares?

urban patrol
trim sand
#

ah cool.

#

if nothing else on the list before an inital version can be called done is somehow configuring an initial mushroom tree, somehow modifiying the getting started quest so its not the standard parsnip quest, and is instead ideally 'milk your cow', and some cross mod stuff like specifically generating Alchemistry forage on the farm in addition to normal forest farm spawns but only if the mod in question is actually loaded, assuming setting the map flag to spawn forest farm spawns doesn't already cause something to that effect.

#

hmm. seems theres at least a few issues i haddn't considered.

brave fable
#

it's best that you look at exactly how the Forest map handles these bridges in Tiled

#

everyone slips up on bridges with water

#

it's important to note that certain specific tiles are marked as Passable and Water in the original tileset properties, and you want to use those tiles in your own map

#

you've already exported and embedded those tilesets in your own map so the properties are there, just be sure NOT to right-click-copy tiles with the stamp tool from one map to another, since it'll add a duplicate tileset and you'll have a duplicate headache

#

of course, if one bridge works fine, just do exactly the same for the other.

rigid musk
orchid glade
#

asking here as well:

trim sand
#

if nothing else comparing between visually simmilar tiles in one section of the bridge, and also confirming that the tiles were actually different. (they were) and applying some invisble tiles to the sides of bridges to keep from walking off them into the water. we have properly working bridges. just leaves the extraneous details like getting started quest and such.

#

separate silly question because id nether thought about it. do the large/small bushes actually do anything? or are they just decorative/in the way

brave fable
#

you can shake them and it goes whoosh. also some small critters spawn beside bushes

#

large bushes will also count for salmonberry spawns at the appropriate time

#

additionally, any mods that let you chop or move bushes will work on them

trim sand
#

so probally not the sorta thing that ought be going on a farm map. the 3x2 ones also spawn salmonberry spawns? i thought just the 2x2 ones did

past knot
#

does anyone know which xnb i would have to convert to have the main cave map? like where the dwarf is and everything?

brave fable
#

i don't recall which size spawns berries, sorry

trim sand
#

fair enough.

brave fable
#

I believe that's Mine, but ideally you should be unpacking all files with StardewXNBHack

#

it's quick, easy, and essentially official

trim sand
#

goal was to have the berry spawning ones. just not sure if having the decorative bushes in the large "foraging" section of the farm thats all untillable grass is a good thought or not.

past knot
brave fable
#

i don't see why not, it gives the world a little more life and saves you having to paint the tiles onto each layer

#

generally the game just avoids placing bush entities (as opposed to tiles) out of reach of the player

trim sand
#

fair enough i suppose. if nothing else helps makes this paticular section feel more like part of the woods or kinda a forest 'edge' with over the river being the Glade/Clearing implied by the farm type title. (obviously screenshot with farm debris removed to give more forage spawn room)

#

i keep considering adding custom forage spawns over just using the forest farm mechanics directly. but also i have no idea the "expectation" when adding forage to the farm

runic sentinel
#

holy woa

trim sand
#

Considering this farm has blue grass and starts you with a barn + cow as a weird variant meadowlands, highly restrictive farming space but has foraging boons just kinda felt right.

hard fern
#

SDVpufferflat gift tastes are fun to come up with but kind of a pain putting in all the IDs

#

🤔 can we use include to include more than one file or do we have to make separate blocks for each file

brave fable
#

give it a try! the same as you would for multiple load targets.

orchid glade
#

Okay so after reading how GNMT works I'm ditching using gender switch in dialogue completely in favour of making all dialogue gender neutral. I thought I was being inclusive using ${male^female^non-binary}$ 😦

#

I made the assumption that "The non-binary value is only used if a mod overrides the player's gender" meant that this was the established method for gender neutral language mods, not a hypothetical use case that no mods actually achieve. Would there be support for editing the wiki to redirect people to the GNMT method instead?

hard fern
#

if you really wanted to keep the gender specific dialogue, you could just do a conditional thing, like an optional toggle for gender neutral dialogue. Not saying that making the whole thing gender neutral doesn't work, just an option

#

it also is kinda. more work

orchid glade
#

Well, if it were my mod, I;'d consider using the tokens provided by GNMT, but because I'm just translating, so only have control over the i18n, it needs to be a token-less implementation

hard fern
#

ah

#

yeah that makes sense

orchid glade
#

Also, while the tokens offer excellent customisation and granularity, man they are messy!

hard fern
#

my favorite part about the tokens im using in my mod is just the number of dynamic tokens i have for npc names

orchid glade
#

Oh?

hard fern
#

😔 it's not that special, i just have a not so insignificant amount of npcs which means a lot of dyamic tokens

orchid glade
#

What's your mod?

hard fern
#

im working (read: procrastinating) on an expansion of sorts

#

i wouldnt say it really expands anything actually important in terms of lore in the game, but i just wanted to get Out of pelican town and the valley itself XD

orchid glade
#

I'm sure it will be a great little (or large) expansion 🙂

hard fern
#

since i dont want to work on the art assets im doing the boring stuff (tm) like gift tastes

orchid glade
#

That's kind of the cool thing about mod making, if you're procrastinating on one sort of task, there are other completely different tasks to do as well

past knot
#

Hey hey im back to ask how to create a custom shop.

past knot
#

Also is it possible to have a dialogue action and make it drop an item in tiled?

lucid comet
#

i might come back to that offer once my brain wants to work decently again and i stumble over the next little thing of similar scope if thats okay SDVpufferlurk

lucid iron
#

Yeah sure DokkanStare

drowsy pewter
#

Does anyone remember the id for the secret woods location? Is it just Woods? Since I also see a Forest lol

calm nebula
#

Woods iirc

lucid mulch
#

not to be confused with BackWoods which is north of farm

brave fable
#

not to be confused with BuildingsWoods which has player collisions

ruby rapids
#

Hi there! So I have a bit of an issue. I created a separate SDV save (folder) to test my mods. I've noticed that some of the debug commands don't work. Like I cannot warp to characters and generate items (through debug). I want to test some dialogue when giving skill books as a gift... But Hack mod doesn't generate them and debug tell me "debug i ..." "debug f ..." are invalid commands. Anyone have any ideas how I can generate skill books or is that not possible atm?

lucid iron
#

Do you have the mod ConsoleCommands

north palm
#

hello.. me again XD

so i was making the new npc mod and looking at some ... on the dialogue.json I come across this. what does AcceptGift_(O)613

"AcceptGift_(O)613": "{{i18n:giftNPC_00{{Random: {{Range: 0,4}} }} }}",

ruby rapids
#

Ahhhh

ocean sailBOT
#

@ruby rapids You leveled up to Cowpoke. You can now speak in our voice channels and share images in all channels!

ruby rapids
#

thanks

lucid iron
north palm
#

613 is the item id?

lucid iron
#

(O)613

#

The (O) means object

north palm
#

how can i change it to something else?

#

i mean where can i find the data to chck the ids per item

hard fern
#

!unpack by unpacking vanilla objects.xnb file into json

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
#

Data/Objects

#

!itemids

ocean sailBOT
lucid iron
#

Also this site has em for vanilla

hard fern
#

oh i didnt know there was a command for that

#

neat

ruby rapids
#

This might be a "dumb" question. But if I want to add compatibility in my mod for another mod, (Like making a farmer portrait mod that reacts to RSV characters) do I need to ask permission from the original creator?

north palm
lucid iron
#

Well i think the author would be interested in you doing this

#

But as long as you aren't using their assets no I don't think you need explicit permission

ruby rapids
#

I am only asking because I am working on a farmer portrait mod that reacts too.... so many NPC mods. It would be painful to ask for all 20+ mods permission... but I would do it if it wouldn't be the thing to do.

past knot
#

Is there a tutorial on maping a custom shop???

gaunt orbit
#

[[Modding:shops]]

past knot
#

Thank you!

#

now the hardest question is giving it the ability to sell back items players lose when passing out

gaunt orbit
#

That would require c#

past knot
#

I know a little bit enough to use it

lucid iron
#

The adventurer guild already has recovery service

past knot
versed wyvern
lucid iron
#

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

lucid iron
#

Recommend using editor that has json support

#

They'll highlight exactly where error

versed wyvern
#

May I ask for someone to showcase my extra dust sprites mod for me? It may be a rather niche QoL adjustment but surely there must be others who are tired of living in the iron levels for several days every winter Y1 to get the Burglar's Ring genshin_oh
https://www.nexusmods.com/stardewvalley/mods/33489

Nexus Mods :: Stardew Valley

A small mod to spawn dust sprites in the rest of the Mines so you're not stuck on the iron levels every playthrough

lucid iron
#

Yeah sure, what blurb would you like

versed wyvern
#

Ah, that works, thank you muchly BlobBounce

proper bobcat
#

Dumb question uh, what's the path of the items object file in the XNB files? (I believe it's spring objects?)

lime seal
#

Question on game state query conditions: do mail flags fall under WORLD_STATE_ID? I know there's a separate check for literal mail PLAYER_HAS_MAIL, but if it's just a flag, is that world state?

hard fern
#

if you want the data then it's Data/Objects though

lucid iron
brittle pasture
proper bobcat
#

I've been looking in tilesheets the entire time🤦 Thanks mate

lime seal
#

thank you both! That helps

merry thunder
#

I am once again stuck and require assistance working with the fashion sense mod cryign

trim sand
#

this is probally an obvious question, but can map properties be edited via content patcher? asking because im trying to avoid actually having a separate version of the map but still being able to have some mod config to control what starting animal/building appear on the farm map, but also need to resultingly tweak the starting gift (a map property) accordingly so if they use config to start with a sheep instead of a cow you get the sheers instead of the milk pail... now that ive written this all out im realizing this is probally a fools errand.

primal rover
#

babystep into modding SDV. Green chickens doesn't sound like much but I've overheard their clucking about taking over the valley eventually

trim sand
#

also, minor understanding question.

    {
      "Action": "EditData",
      "Target": "Data/Locations",
      "TargetField" : ["Farm_Silver.VerdantGladeFarm", "Forage"],
      "When" : {
          "HasMod": "Morghoula.AlchemistryCP"
      },
      "Entries": {
          {
            "ID": "SpringAlchemyForage",
            "ItemID": "(O)Morghoula.AlchemistryCP_LostSouls"
            "Season": spring
          }
    },

this patch should only be applied when Alchemistry is loaded by the user, and add an entry to my locations Forage list of models correct?

ocean sailBOT
#

@trim sand You leveled up to Cowpoke. You can now speak in our voice channels and share images in all channels!

brittle pasture
#

yeah that looks fine

#

oh wait you're missing the "Key": in entries

#

substitute Key with the Id

trim sand
#

so it should be something like this? is this just how editing a list of models needs to look? since at least my understanding was if i was doing this just from the farm map level, it wouldn't need the key at all, and i was understanding the directions for using these target field things to basically just be how youd format it when setting the whole value form and upper level.

        "SpringAlchemyForage":{
            "ID": "SpringAlchemyForage",
            "ItemID": "(O)Morghoula.AlchemistryCP_LostSouls"
            "Season": spring
          }
brittle pasture
#

yep

#

Entries has to be a dictionary of key to value

trim sand
#

i see.

#

admittadly the thing im still not really sure of is weather having set SpawnForestFarmForage : T in the map itself actually works to spawn normal forest farm forages on my map or not.
i may also just not totally understand how forage spawns work.

proven spindle
#

Does anyone know what the notesFound player stat tracks? When I run debug getstat notesFound on a save where all vanilla secret notes have been found, it tells me the stat is 20, but there are 27 of them

#

I know 2 were added in 1.6 but that still leaves 25

ivory plume
#

The naming is a bit confusing, but NotesFound tracks the number of lost books found (not secret notes).

#

(We should probably create a Modding:Stats page to document how stats work, list the vanilla stats, how to track custom stacks, etc.)

lucid iron
#

How do you feel about a stats token

#

I remember there being some multiplayer sync silliness around it though

proven spindle
sleek igloo
#

Hi, I'm a pre 1.6 modder and I have a question about CP patching music

#

I'm having a tricky time understanding how to replace a track/sound instead of adding a new one SDVpufferlurk

brittle pasture
#

[[Modding:Audio]]

brittle pasture
#

if you target your change to an existing track it'd be a replace

ivory plume
tiny zealot
#

(you didn't ask this, but i am getting on my soapbox to implore you to use .ogg files and "StreamedVorbis": true when adding or editing music. it will save your users big-time in both download size and load times!)

sleek igloo
#

I did have a look at it I'm just having trouble remembering how the target string works as far as choosing an audio asset, like for example, I'm trying to replace the rain ambient track, would I target "Target": "Data/AudioChanges/rain",

#

?

brittle pasture
#

no, Target is always Data/AudioChanges

ivory plume
sleek igloo
#

so where do I define that I want to replace the rain sound?

brittle pasture
#

the ID field

#

Data/AudioChanges is a dictionary of ID strings to the model

sleek igloo
#

Can I have an example please, I can't quite wrap my head around it SDVpufferdizzy

ivory plume
#

It would be something like (adjust to match the actual rain data):

{
    "Format": "2.6.0",
    "Changes": [
        {
            "Action": "EditData",
            "Target": "Data/AudioChanges",
            "Entries": {
                "rain": {
                    "ID": "rain",
                    "Category": "Music",
                    "FilePaths": [ "{{AbsoluteFilePath: assets/your-custom-track.ogg}}" ],
                    "StreamedVorbis": true,
                    "Looped": true
                }
            }
        }
    ]
}
sleek igloo
#

Thanks pathos! also long time no see SDVpufferheart

ivory plume
#

Hi!

sleek igloo
#

bless, this is exactly what I needed, I couldn't find any examples of a replacer rather than a new song <3 (or if I did I misunderstood it SDVpufferfear

#

I feel like a noob again hhh

#

i went in thinking i spoke spanish but it's evolved into portuguese

brittle pasture
#

fwiw new songs and replacers would use the exact same code

primal rover
#

Thanks for your work Pathoschild. Making my first mod is a breeze and I think that's thanks to you

brittle pasture
#

if the ID doesnt exist it'd be a new song, otherwise it's a replacer

sleek igloo
brittle pasture
#

1.6 is definitely a change lol

sleek igloo
#

the content patcher formats and tokens are really confusing to me now

#

I used to be able to open an existing pack and more or less learn how to do the thing that way

#

now I get lost in a sea of confusing tokens and formats

brittle pasture
#

on the other hand once you know how to do one thing in CP you can do everything else

#

almost everything go through CP now

sleek igloo
#

you would think so but my brain is failing me SDVpufferchickcry

#

oh that, yes that is useful

#

I do love having less frameworks

ivory plume
#

Content Patcher is a bit lower-level, since it's a framework for editing any game content. The tradeoff is that it'll tend to be less simple than a specialized framework (e.g. Custom Music for music), but it's one format you can learn and then apply everywhere (instead of learning each framework separately).

sleek igloo
#

Yeah, but cp is so stable and causes less conflicts

#

I do not miss my sea of red when I opened the console window lol

#

it's just a matter of relearning how to CP, but it doesn't change how awesome it is to have all these tools, so thanks as always pathos SDVpufferheart

whole raptor
#

Truffle isn't considered an animal product? SDVpuffereyes

lucid iron
#

It's forage

gray bear
#

i mean, that makes, some sorta sense thonk

lucid iron
#

Cus pigs aren't laying truffles out of their bums i guess

#

Truffle juice separate issue

gray bear
#

we don't speak of the truffle juice

sleek igloo
#

okay, thanks guys! SDVpufferheart hope this works (it probably will assuming I didn't do anything dumb but that's always a factor xD)

whole raptor
gray bear
#

truly a category

lucid iron
#

But it gets to be iridium quality

gray bear
#

why is that a category

lucid iron
#

Some context tags r generated u can check what the actual in game tags are with lookup anything

gray bear
#

truffle is just truffle

brittle pasture
#

IIRC only two item in vanilla has that category - truffles and sweet gem berries

#

two items that just are™️

gray bear
#

just things that are™️ that you can sell to Pierre

lucid iron
#

Things that are worth money SDVpufferthumbsup

whole raptor
#

So should probably keep it as is if I'm making a variant of a truffle

trim sand
#

question is there a guide or something for setting up mod config? im struggling to understand examples.

trim sand
#

much appreciated.

#

realizing a minor error trapping problem... technically i haven't set the mod to require pokemon ranch, but part of its config is its options allowing starting with its building and one of a few animals from it. and right now i can't figure how to filter the setting of animal/building data in the spacecore farm extension data to a default if config is erroneous to the modslist.

lucid iron
#

Gate pokemon ranch specific patches behind HasMod

trim sand
#

im not quite sure i follow. since ive condensed the whole patch that sets buidling/animal to one patch. the reads tokens from the config. i guess somehow checking the building/animal tokens in a when condition to be sure the mod is loaded if their set to the pkr content. but also tokens are proving a bit confusing. can i include a value for something multiple times and have it fire for each or do i need to separate patches out per config option basically?

    {
            "Action": "EditData",
            "Target": "spacechase0.SpaceCore/FarmExtensionData",
            "Entries":{
                "Silver.VerdantGladeFarm":{
                    "Buildings": [
                        {
                            "Id": "Default Building",
                            "Type": "{{StartingBuilding}}",
                            "Position": "23, 4",
                            "Animals": {
                                "{{AnimalName}}": "{{StartingAnimal}}"
                            }
                        }
                    ]
                }
            }
        },
lucid iron
#

So there's 2 concepts here

#
  1. HasMod is a token you can use to check for a specific other mod's existence
#

It can be used for dynamic tokens too, which lets you make set of animals

#
  1. Includes is a way to have multiple patches in a separate file
#

You can gate edits that don't make sense without specific mod that way

trim sand
#

oh
Oh I see.

lucid iron
#

Something you can't do rn is dynamically change what values go in a config based on mod

#

Alas limitations

trim sand
#

But I can opt to not respond to config value for said mod if it's not loaded

lucid iron
#

Yeah

trim sand
#

in the same vein if multiple conditions are inside a patches When field, does it only fire if all of them are met or if any of them match like so ;

{
        "Action": "EditData",
        "Target": "spacechase0.SpaceCore/FarmExtensionData",
        "TargetField" : ["Silver.VerdantGladeFarm","Buildings"],
        "When": ["{{StartingAnimal}}": "White Cow", "{{StartingAnimal}}": "Brown Cow", "{{StartingAnimal}}": "Sheep", "{{StartingAnimal}}":"Goat"]
        "Entries":{
                "Animals": [
                    {
                        "{{AnimalName}}": "{{StartingAnimal}}",
                    }
                ]
        }
    },
lucid iron
#

When js a dictionary so u need the { }

#

And because it is a dictionary all keys must be unique

merry thunder
#

Does anyone know what this means??

lucid iron
#

You need to use the contains syntax here

merry thunder
lucid iron
trim sand
#

Noted. Will do.i appreciate all the help with what's probably basic questions

lucid iron
merry thunder
lucid iron
#

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

lucid iron
#

Edit your files with something that will validate you as you go

merry thunder
#

Okie, ty! :3

golden basin
#

i use sublime myself

#

its simple and easier to use

hallow prism
#

@sleek igloo it's nice to see you around again! hope you're doing well

stark spindle
golden basin
#

Honestly yes

stark spindle
#

is there a killer feature you like? im just curious since you have to pay for it right?

brittle pasture
#

sublime's "trial" is infinite

stark spindle
#

ooo i didn't realise that

brittle pasture
#

(it has been infinite since I last used it a cool 10 years ago. I dunno if the author is ever gonna change that lmao)

stark spindle
#

classic winrar model

#

I must give it a go.

#

Is there any syntax highlighting plugins specifically for stardew stuff for it?

whole raptor
#

Anyone knows an example of a mod adding new "recipes" to existing machines? SDVpufferthinkblob

brittle pasture
#

Cornucopia

brittle pasture
ocean sailBOT
#
How to make VSCode not scream at json comments

In Visual Studio Code, go to File -> Preferences -> Settings, then search for "associations", and in the "Associations" setting, click the Add Item button to add an item with key *.json and value jsonc (see image).
If you are making a content pack for Content Patcher, you should consider using its json schema so that VSCode can tell you if your patches are valid, you simply have to add

"$schema": "https://smapi.io/schemas/content-patcher.json"

at the start of your content.json file.

brittle pasture
#

dunno if it works with sublime tho

#

but just basic json highlighting (which it supports) should take you 98% of the way there

stark spindle
#

cool thanks ill take a look. I just find it super useful for writing events specifically.

brittle pasture
#

I might dare say that's what 90% of questions in this channel regarding adding rules to vanilla machines is about

whole raptor
#

I did not nearly as many lines as I thought...

whole raptor
brittle pasture
#

oil makers don't have generic rules, so you're safe

whole raptor
#

Hmm... how do I change the "Makes gourmet truffle oil"? SDVpufferthinkblob

brittle pasture
#

and your void truffle is neither a fruit nor veggie so it's double safe SDVpuffersquee

brittle pasture
hallow prism
brittle pasture
#

the former points to the latter

#

also what lumi said

lucid iron
#

Why does the desc say that when it also make regular oil

hallow prism
#

my feeling is that players will usually get that a void truffle can do what a truffle can do, and if you really are worried a letter may be read more than a changed description

brittle pasture
#

mr ape forgor

whole raptor
#

Oh so it's just a regular BC description, not per item being produced

whole raptor
sour sleet
brittle pasture
#

probably, json pls

sour sleet
#

Hang on I think I solved it. I am testing my custom fish in the pond and I have narrowed it down to it being a problem with a particular entry. I'm ok for the minute but I might need help in a bit if i can't solve it lol

trim sand
#

okay i cannot for the life of my figure out what Spacecore is expecting the field to be for editing stuff inside its FarmExtensionData as ive tried my farms ID, which is also what wored when refrencing the entry directly rather than trying to target it, ive tried to full field name as added to AdditionalFarms but im ultimately just not sure what im missing. sorry if its obvious.

      {
         "Action":"EditData",
         "Target":"Data/AdditionalFarms",
         "Entries":{
            "Silver.VerdantGladeFarm/VerdantGladeFarm":{
               "ID":"Silver.VerdantGladeFarm",
               "TooltipStringPath":"Strings/UI:Silver_VerdantGladeFarm",
               "MapName":"Silver_VerdantGladeFarm",
               "IconTexture":"Mods/Silver.VerdantGladeFarm/Icon",
               "WorldMapTexture":"Mods/Silver.VerdantGladeFarm/WorldMap"
            }
         }
      }
lucid iron
#

is helper.ModRegistry.IsLoaded reliable during Entry?

ivory plume
#

Yes, all mods are loaded before Entry is called.

north palm
#

hello i was wondering if i'm doing it correctly.. on my content. json there is

a dynamic token setup

        //For the internal NPC's name
        {
            "Name": "lr_cnt",
            "Value": "{{ModId}}_ZayneLi"
        }, ]```

and then on my disposition it was setup like this
 ```"Entries": {
                "{{lr_cnt}}": {
                    "DisplayName": "{{i18n:CharacterName}}", ```

on a festival setup  it will be like this?
```{
                    "Operation": "Append",
                    "Target": [
                        "Entries",
                        "Set-Up_additionalCharacters_y2"
                    ],
                    "Value": "{{lr_cnt}} 23 5 2",
                    "Delimiter": "/"
                },```
brittle pasture
#

yeah that looks good

north palm
#

okieee thankies 0b_love

merry thunder
#

I feel like Im bouta crash out, I've been trying to figure out this one issue for nearly 5 hours now

merry thunder
lucid iron
#

it still looks like a bounds problem, but sadly i dont know enough about FS to know what exactly is up

merry thunder
#

This would be so easy if I just understood how the coding locates where stuff is supposed to go instead of guessing breaksdown

brittle pasture
#

dont post that link

#

it's unauthorized and piracy

clear oxide
#

Sorry didn't know 😞

brittle pasture
#

also it has nothing to do with their problem anyway

#

!decompile do this instead if you need a decompile

ocean sailBOT
clear oxide
#

Oh okay 👍 thank you

lucid iron
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.

lucid iron
#

please use the json parser

merry thunder
#

Sorry!

lucid iron
#

this is the thing i mean by parser

merry thunder
#

Oop

clear oxide
lucid iron
#

is your hair actually 65 pixels wide?

lucid iron
merry thunder
#

Oh! This is the png!

brisk wedge
#

if I have something like

[Notify]
public int a;
public int b => A + 1;
public int c => b + 1;

how do i get c to update in the UI?

lucid iron
#

they are variable leangth yggy

brittle pasture
#

the first row specifically, they're going from short to long

lucid iron
#

since the biggest one is 35 wide

#

can you try putting them all in 35 wide boxes

#

u can use Offset to align the hair with the farmer's head looks like

lucid iron
#

need this other attribute to manually say it do

#

you can always resort to handling propertychanged by hand in a pinch too

brisk wedge
#

Is there a way to tie changes to b to changes to c even though it doesn't have a [Notify]? I have like 6 a's that b is dependent on

lucid iron
#

c can't change though Think

brisk wedge
#

or like I'd rather not have to put [DependsOn] for all of the 6 a's on c

lucid iron
#

im kinda struggling to understand what you want here NotteThink

#

what i recommend doing is to look at the actual source generated

brisk wedge
#

uh like I have many a's, which are a bunch of filter parameters, and b generates a list based on those filter parameters, and c is actually a bunch of properties of b, and when I change one of the a's, I want to regenerate the list b, which should change the c's. I guess technically I don't need the intermediate list b and all the properties can be gotten by regenerating the list individually or something but this seems like I would forget something easily

ocean sailBOT
#

@brisk wedge You leveled up to Cowpoke. You can now speak in our voice channels and share images in all channels!

lucid iron
#

there is some degree of auto depends on happening, but if you want something more complex then you have to handle it

#

in some of my mods i have a mix of both 3sSmolMiku

#

so if u want u can do it like

#
// somewhere after getting context
context.PropertyChanged += context.SpecialPropertyChangedHandler;

internal void SpecialPropertyChangedHandler(object? sender, PropertyChangedEventArgs e)
{
    if (e.PropertyName == nameof(A))
    {
        foreach (string depPropName in ListOfDependentNames)
        {
            PropertyChanged?.Invoke(this, depPropName);
        }
    }
}
#

this is meaning of can always resort to handling propertychanged by hand

#

the [DependsOn] attribute is basically same thing tho LilyDerp

lucid iron
trim sand
#

tokens question : is there a way to when using a config value as a token, is it possible to convert the value to all lower case at that time or do i just need to edit my config values so they get read properly? in this case its the config value is needing to corospond to a animal ID, which in the case of the modded animals im wanting to use are all lower case unlike vanilla which are normal

stable grotto
#

what's the action tile property called to allow a player to sit down?

calm nebula
#

There isn't one. Check data/chairtiles

trim sand
#

so clearly im missing something important. both AnimalName and StartingAnimal are config values, Animal name works correctly. but, if the logs are to be believed its just pulling {{StartingAnimal}} as a string into the animal id end of the assignment instead of the value of the config. im not sure what im doing wrong. since it worked before assigning the values in the config directly.

       {
            "Action": "EditData",
            "Target": "spacechase0.SpaceCore/FarmExtensionData",
            "When": {
                "StartingBuilding": "Barn",
                "StartingAnimal": "White Cow, Brown Cow, Sheep, Goat"
            },
            "Entries": {
                "Silver.VerdantGladeFarm": {
                    "Buildings": [
                        {
                            "Id": "Default Building",
                            "Type": "Barn",
                            "Position": "23, 4",
                            "Animals": {
                                    "{{AnimalName}}": "{{StartingAnimal}}"
                            }
                        }
                    ]
                }
            }
        },
lucid iron
#

oh congrats you are second person to bump into this organically

#

AnimalName is a dynamic token or some kind?

trim sand
#

AnimalName is the one that works. and both of those are from my mods config

lucid iron
#

yea theres some issue with token resolution when the key is a token

trim sand
#

huh. interesting.

lucid iron
#

if AnimalName is not that important to you, perhaps just hardcode something LilyDerp

trim sand
#

i guess it'll be easy enough to just remove the predefinable name since you can freely rename your animals/

#

also turns out the capitalization thing is also a problem. but at least we arent passing an unparsed token to the animal ID

oak wolf
wild viper
#

!npc

ocean sailBOT
#
Creating a Custom NPC

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

lucid iron
#

add the player into events NotteThink

#

i thought u can just use the normal farmer actor

oak wolf
#

Add dialogue for them, I mean.

lucid iron
#

this error means you don't have a portrait loaded to Portraits/{{PlayerName}}

stark spindle
#

looks like its loaded into "Target": "Portraits/{{ModId}}_{{PlayerName}}",

oak wolf
lucid iron
#

so PlayerName is actually whatever you named your player

#

it might be better to call this fake npc Farmer so that u dont have to deal with the token blobcatgooglyblep

oak wolf
#

Yes. The png in my assets folder is named the name of my character. I've tried farmer as well, and it didn't work.

lucid iron
oak wolf
#

Oh good, i love being a victim. 😂

lucid iron
#
{
  "Action": "EditData",
  "Target": "Data/Characters",
  "Entries": {
    "{{ModId}}_FarmerNPC": {
      "DisplayName": "{{PlayerName}}",
      "TextureName": "{{ModId}}_{{PlayerName}}"
    }
  }
}
wild viper
trim sand
#

Yatta
and we have config powered starting animals.

clear radish
#

Hi! Regarding events, I would like a box to pop up on the screen because I want to add a comment during the conversation. Should I still use speak, or is there a better method for this?

clear radish
hallow prism
#

Wiki should have more info

trim sand
#

just leaves somehow figuring out how to modify the getting started quest depending on chosen farm type...

fierce vault
trim sand
#

thats admittadly just pokemon ranch compatibility with the farm map im making. config to choose weather you start with a regular barn or pokebarn, and which animal starts inside. invalid combinations default to regular barn and a cow. but for a regular barn you can pick cow goat or sheep, for pokebarn you can pick vulpix, alola vulpix, rowlet, miltank, or wooloo.

clear radish
#

thx!

trim sand
fierce vault
#

Neat idea

lucid iron
#

the error a little different now

oak wolf
#

A fixable different i hope?

lucid iron
#

try giving the farmer npc an Appearance entry

oak wolf
#

Will do. 🫡

lucid iron
#

make it unconditional any season indoor + outdoor

trim sand
# trim sand if you start with an animal that needs a tool you get it to start with + 5 hay, ...

Admittedly some of those choices like Vulpix make more sense when you factor in the custom rewrite I've done so for example Vulpix finds foragables from Alchemistry when the mod is loaded. In addition to the eggs/held items that get dropped overnight normally.
But that's a whole separate project that needs a whole lot more work yet. If nothing else I can basically say I'm not doing anymore farm maps.

oak wolf
lucid iron
#

its incorrect, use the actual target

#

Portraits/{{ModId}}_{{PlayerName}}

oak wolf
#

Even when that target doesn't exist? There is no {{playername}} in the portraits folder of the game since its a custom npc.

lucid iron
#
    {
      "Action": "Load",
      "Target": "Portraits/{{ModId}}_{{PlayerName}}",
      "FromFile": "assets/{{PlayerName}}.png"
    },
#

you loaded it

oak wolf
#

WOuld changing the {{playername}} to something that isn't a token work, do we think?

uncut viper
# lucid mulch First I've heard of this

it happened consistently back when I was trying to debug it whenever there was any combination of dynamic or config token in both the key and the value of an entry. Dynamic + Dynamic, Config + Config, config + dynamic or dynamic + config

#

if that info provided any sort of insight to you

lucid mulch
#

does it need to be local/dynamic tokens?
does it also happen using global tokens?

trim sand
#

Brief bit of study on how quests work later, I can see how to edit the data of a quest but that seems to need be determined before loading a save. So I have no idea how to restrict my change to only saves using a specific farm type.
Or otherwise replace what quest they get from opening the starting gift in the farmhouse.

uncut viper
#

it didn't happen with globals

#

just dynamic and config
Don't believe localtokens existed when I was testing so IDK if it breaks with those too

#

(they might've existed tbh but I didn't try them)

lucid mulch
#

(Local is the internal name of config and same tier as {{ModId}})

uncut viper
#

Yeah I know I just wanted to add

#

I also didn't try aliased token names because tbh I forget that's a thing lol

fierce vault
#

Anyone know where player made fences are?

lucid iron
#

i vaguely suspect it's graph theory™️

uncut viper
#

I vaguely suspect it's above my skill level to debug

#

(and by vaguely I mean I'm sure)

#

is the quest from the starting gift the "harvest 5 parsnips/get 5 eggs" quests?

wild viper
#

should I use visual studio code or notepad

uncut viper
#

VSC

wild viper
#

ok

trim sand
uncut viper
#

those quests should exist in Data/Quests to edit

trim sand
#

but also i need to only change the quest if one specific farm type is chosen

uncut viper
#

I don't remember if the quest is given on save creation or only upon opening the box, but if it's the latter, that should be easy

lucid iron
#

the hardcoded part is which quest u get

#

Game1.player.addQuest((Game1.GetFarmTypeID() == "MeadowlandsFarm") ? "132" : "6");

fierce vault
#

Oh, found it in loose sprites

lucid iron
#

game literally calls this when u open starter chest

uncut viper
#

You can conditionally edit quest 6 though and it's fine, once you actually receive the quest it's baked into your save anyway

trim sand
#

ok. so which chest is given is hardcoded. conditionally editing quest 6 is the thing im not sure how to achomplish

#

globally is extremely easy.

uncut viper
#

I believe there's a farm type token you can use in a When condition

lucid iron
#

yea so there is some room for this

#

when u load into save content patcher reloads

uncut viper
#

it doesn't need to apply before save creation, only before the quest is given

lucid iron
#

as long as u r edit data behind farmtype token then u shuld be good

trim sand
#

oh thats actually really convienient.

oak wolf
lucid iron
#

are you actually referring to this fake npc in all these event loads (scary amount of them btw)

oak wolf
#

Yes, the npc was added to all of those events, and I know it isn't the prettiest presentation. 😅

lucid iron
#

well no the issue is more

#

u r gonna be incompat with everyone who also loads event, if thats the desire then sure Dokkan

#

can u post one of these event jsons for ref

oak wolf
#

Yup, grabbing it.

lucid mulch
#

(FarmHouse and BusStop are the ones im interested in, as they are what are playing at the time of the error)

uncut viper
#

(also ftr that log doesnt seem to match that json, as the log says Portraits/dwe without any modid before it, but i dont see any dwe sans modid token in the json

brave fable
lucid mulch
#

also since its a Load and not an EditData, the contents of those events cannot use tokens at all (like {{ModId}})

lucid mulch
brave fable
#

(which frameworks are ftr dwe and sans)

lucid mulch
#

but Data/Characters seems fine*, so its what the event is or isn't doing that would explain the error

oak wolf
lucid iron
#

ah u used dwe

#

need {{ModId}}_dwe

lucid mulch
#

(needs to be contentpatcher.farmerspeaks_dwe, a load cannot contain tokens)

lucid iron
#

right i forgor that too kyuuchan_run

#

incidentally the mod id format is usually author.ModName

#

e.g. ArsonistSK.FarmerSpeaks

brave fable
#

(you could just load a {} json file and editdata your data in to the same target with tokens as-is)

uncut viper
#

(well pls dont load a blank over Data/Events/Farm)

#

(or any existing location)

lucid iron
#

yea if switching to EditData and these r all vanilla events, no load is needed

brave fable
#

(true, absolutely do not do that)

oak wolf
#

So if I'm understanding right, I can either use contentpatcher.farmerspeaks_dwe wherever the npc is referenced with Loads or switch the Loads to EditData and keep {{PlayerName}} token?

trim sand
#

took some work. but we now have alternate getting started quests. just leaves rewriting my pkr stuff into its own content pack to ship first so the regular vulpix/rowlet quest show up for those who just have alchemistry+pkr.

#

Figured given the alchemistry/pkr compat custom names on their related quests was appropriate. The rest of the options are variants on the meadowlands one. All of them going to "Feeding Animals" the same as meadowlands

lucid mulch
lucid iron
#

i wonder if u actually need a real npc entry

#

could u just fake it with changePortrait

oak wolf
# lucid iron could u just fake it with changePortrait

I think I tried that once, but the names underneath the portrait don't change, so, like, Robin would suddenly be different person shaped. That being said that's basically what I did to try and get day to day dialogue working, so at this point with as much trouble I'm having with this npc buisness I might try and pivot to that...

oak wolf
lucid iron
#

changeName is the other one

oak wolf
# lucid iron changeName is the other one

Ohhhhhhh...... I could definitely try to fake it then..... don't have enough time to try it tonight, but I will certainly try! Don't suppose theres a similar command for changing names/portraits in the day to day dialogue that I'm unaware of?

violet valley
#

Making a mod. Is it possible to make an NPC spawn in a farm building lol?SDVkrobusgiggle

lucid iron
#

i dont think so NotteThink

violet valley
#

ok i didnt think soSDVpufferthumbsup

violet valley
#

oh

lucid iron
#

im not sure if u can do it for building (maybe if they aren't instanced)

violet valley
#

hm ok

#

do you think so if i write a c# mod for it?

lucid iron
#

well u can do anything in C#

violet valley
#

yeah lol

lucid iron
#

its just question of how annoying it'll be

violet valley
#

yeah i'll maybe try at some point

lucid iron
#

gonna be compat hell though

lucid mulch
# uncut viper (and by vaguely I mean I'm sure)

found it.
it should happen for global tokens too (as long as they aren't immutable)

When the key contains tokens (that are mutable) it will save a Setter method as a contextual so that when the token changes, it knows to replace the JProperty (newtonsoft) with a new one with the correct new name.

The problem is, the code for handling when the value contains a token does the same thing, though doesn't replace the JProperty it just sets the value.

When the key changes (i.e. resolves its first value) it will call that setter, replacing the JProperty and now the setter on the value is pointing to an unmounted JProperty and is for all intents and purposes a noop.

lucid iron
#

that make sense DokkanStare

#

could we somehow make the inner scope token resolve first

lucid mulch
uncut viper
#

i feel like if it happens wiht globals too surely it wouldve been noticed a lot more and been far larger a problem? and i could have sworn i tested it with globals too and it didnt break, i believe i used the season token for testing. its been a while though.
either way it seems like good info to leave on the github issue at least. set blueberry free at last

oak wolf
lucid mulch
#

the Entry key itself doesn't count, needs to be deeper

primal rover
#

I did it, first mod!
I made a bunch of colorful chickens and managed to post it to Nexus (which was the hardest part lol). Not sure why the download zip gets renamed to include a bunch of numbers but I'll take it.

tiny zealot
#

it do be like that on nexus (the bunch of numbers). probably to guarantee unique filenames

primal rover
#

I bet people will rename it if they don't like it. Just a bummer it happens.

Next up is seeing how far my C# "skills" can take me on a Mac for more extensive SDV modding. I read it should be doable

primal rover
#

Oh sweet, am I even allowed to share links here?

pine elbow
#

Nod nod

primal rover
lucid iron
#

we can do showcase on your behalf if you need DokkanStare

primal rover
#

Feel free to give me a shout if I messed anything up

pine elbow
#

Yoinkkkk

lucid iron
#

did you do it via skins btw

primal rover
#

I don't know what it is so probably no

primal rover
lucid iron
#

this is a way to have multiple appearances for an animal

lucid iron
tiny zealot
#

chu spreading the animal skins gospel again smh /lh

lucid iron
#

i have many agendas Dokkan

primal rover
lucid iron
#

yep it is a content thing

#

u can look at elle's animals for example

#

in SDV modding there's basically 2 kinds of mod, mod that is done via editing content, and mod that is done via changing C# code

#

and sometimes, the changing C# code mod helps expose features to content

#

you can do a lot of stuff with other people's C# basically Dokkan

primal rover
#

I did read a bunch of docs but this went to: let me try and get a green chicken in game the non-lazy way to publishing a mod in a few hours 😄

Maybe I thought it needed C# because I went on a random egg hatch with color detour.

lucid iron
#

random egg hatch with color?

primal rover
lucid iron
#

!decompile

ocean sailBOT
lucid iron
#

check the source column

primal rover
# lucid iron random egg hatch with color?

Yes I thought it'd be cool to investigate the chickens randomly dropping a color egg. Or maybe a random color hatch. But then I stuck to the basics to not get overwhelmed and leave this pack unfinished 😄

lucid iron
#

to change the chicken's produce you'd need to make them new farm animals

#

which is also a thing you can just do in data AquaThumbsup

#

check mizu's quail for example

primal rover
#

I will have to bookmark this chat. Perhaps I have some more time to read docs as well tomorrow. Thanks you all for being so helpful.

And regarding the #mod-showcase . How about a blurb: "Recolor your chickens, because why not?"

It was all I could come up with when writitng my manifest.json as well

simple girder
#

hello, hello! i'm trying out a monster quest for fleurine, and during testing, the quest worked just fine up until the solution. it reverted to lewis' green slimes quest dialogue, flavor text, and reward. but i can't quite find any reason why? this is the code from her QuestData if anyone has any ideas as to why it might be happening. no errors showed up in the log, either.

"totsFleurine_BatTrouble": "Monster/{{i18n:Fleurine.Quest.BatTrouble}}/{{i18n:Fleurine.Flavor.BatTrouble}}/{{i18n:Fleurine.Solution.BatTrouble}}/Bat 10 totsFleurine true/0/1000/0/true/{{i18n:Fleurine.Reaction.BatTrouble}}"

#

this happened only when turning in the quest! up until then, the quest was functioning perfectly, tracking the bats etc.

wild viper
#

isnt there a new mod that can replace pregnancy role for mods that need that dependency

lucid mulch
pine elbow
#

Would it be possible to add a new weapon as a drop from a monster in the content patcher? If so, for example, is it possible to add data in the middle of the string in the middle of the monster's drops?
Example code for a monster
"Dust Spirit": "40/6/0/0/false/1000/382 .5 433 .01 336 .001 84 .02 414 .02 97 .005 99 .001/2/.00/4/3/.00/true/2/Dust Sprite",

How would I add elements in the middle? I imagine it would be with textoperations, but I have no idea how.

drowsy pewter
#

Is it not performant to check trigger actions on location change or is this okay? I have about 12 quest items and I need to be able to track when a player obtains them. I can check if they have it in their inventory on location change and use the trigger action to set the mailflag once. I could also just check when the player uses the item, but this may be a delay of days or weeks so inaccurate

drowsy pewter
#

Heres an example of changing a slash deliminated string

#

Set 0 to be the position in the array

brittle pasture
#

so you may be out of luck (until 1.6.16 comes out and you can convert that to an untimed special order instead)

#

(which is infinitely more pleasant to code than the quest format)

drowsy pewter
#

Ah

#

This is what textoperations to add something looks like (gift tastes). You can combine both and only target the X field you want

                    "Target": ["Fields", "Maru", 7],
                    "Value": "Cornucopia_Basil", 
                    "Delimiter": " "```
brittle pasture
#

(I said I need a second opinion because the wiki says dialogue reaction should work for monster slaying quests, but I can't find the code where that's being passed in)

uncut viper
#

i recall it being said that it was broken for monster slaying quests specifically, but when i looked i didnt see how it was broken, but i didnt look too hard

wild viper
#

Is there a new mod that can replace pregnancy role for mods that need that dependency.

brittle pasture
#

the broken quest we discussed some time ago was fishing quests

#

which was broken in a new, novel way

gentle rose
#

Squint

-# what tilesheet are fences in

drowsy pewter
#

fence sheets or fence item icon

uncut viper
brittle pasture
tiny zealot
brittle pasture
#

I think they want stuff like male farmer getting pregnant, which the field doesn't cover

gentle rose
tiny zealot
brittle pasture
#

yeah
actually I remember you mentioned asking this for an old 1.5 mod? If that mod used the dependency just to restrict the NPC to adoption you can just use the vanilla data

#

no need to use that mod

brittle pasture
#

yeah I made that before remembering that you asked in modded-farmers before, to update an old NPC mod

wild viper
#

its just an old mod required it but its outdated, im updating it now and the problem is that dependency

brittle pasture
#

if it's for personal use and you just want to get it working then just remove the dependency; editing the NPC data is optional

wild viper
#

ill just remove the dependency and have the npc not avaliable for pregnancy

#

yup

simple girder
inland rain
brave fable
half tangle
#

I'm trying to figure out why forest to farm warps are being weird... Specifically in the vanilla farm types the only one behaving as I expect it to is the beach farm. With each of the others, if the player walks from the forest to the farm, the player's position is one tile west of the tile I would expect it to be. Typically the expected tile is 41, 64 but the actual tile where the game places the player is 40, 64. In the case of the beach the game correctly places the player on the expected tile 82, 103. In the case of meadowlands (which even uses the ForestEntry map property) the game places the player at 52, 74 instead of the expected 53, 74.

Game1.warpFarmer seems to be what is handling these, but I cannot figure out the discrepancy for the non-beach farm types between what I'm seeing in game and what seems to be in the code.

#

I can just simply code around this for my case, but it would be really helpful to know why the game is behaving like this

brittle pasture
#

hmm color_sea_green is not counted as green in the dye pot