#making-mods-general

1 messages · Page 408 of 1

oblique meadow
#

It can be. Yes. But you have the basic vision. and can do 85% of the work amazingly. That last 15% comes with practice and trial and error

hallow prism
#

and studying vanilla/having fun with layers

gray bear
#

im too gay to have edges this straight

oblique meadow
#

and the hardest part? Not being overly critical on yourself

gray bear
#

that is, very hard

oblique meadow
#

feel free to ping me if you need anything. But play in the space. Be ready to erase / overwrite a lot. But you've got it 🙂

iron ridge
#

seems to not be my arguments for that, it doesn't like this either

public override void Entry(IModHelper helper)
        {
            var harmony = new Harmony(this.ModManifest.UniqueID);
            harmony.Patch(
                original: AccessTools.Method(typeof(StardewValley.Locations.Summit), nameof(StardewValley.Locations.Summit.UpdateWhenCurrentLocation)),
                prefix: new HarmonyMethod(typeof(ModEntry), nameof(ModEntry.UpdateWhenCurrentLocation_Prefix)),
                postfix: new HarmonyMethod(typeof(ModEntry), nameof(ModEntry.UpdateWhenCurrentLocation_Postfix))
            );
        }

        public bool UpdateWhenCurrentLocation_Prefix()
        {
            Monitor.Log("prefix called!");

            return true;
        }

        public void UpdateWhenCurrentLocation_Postfix()
        {
            Monitor.Log("postfix called!");
        }

https://smapi.io/log/8b84028ed71e4a0292177eb83d8e82db

ocean sailBOT
#

Log Info: SMAPI 4.3.2 with SDV 1.6.15 build 24356 on Unix 6.11.0.29, with 3 C# mods and 0 content packs.

gray bear
#

time to beleaf in myself

calm nebula
#

It's not a good error message

iron ridge
#

ahh ty

#

how do i specifically call a method on the base class?

lucid iron
#

There's a few ways, I'm guessing it's something overwritten?

#

And u just want to do the equiv of base.draw(b) or whatever

iron ridge
#

mhm, i'm prefixing a method that's an override

#

but can't do the equivalent of base.method() by calling extended.method() since that just creates an infinite loop

#

and it's not static

iron ridge
#

i assume in this case you're making it so you can call NPC.ChooseAppearance by running NPC_ChooseAppearance_Call?

lucid iron
#

Ye

iron ridge
#

okie

lucid iron
#

Child is subclass of NPC

iron ridge
#

makes sense

#

how would this work with arguments?

lucid iron
#

It's IL so u can write ldarg_1 and so on

iron ridge
#

ahh

lucid iron
#

Selph's furniture machines should have examples with args too

#

That's where i yoinked kyuuchan_run

iron ridge
#

i will do my best to yoink it too ty for the suggestion

#
public override void Entry(IModHelper helper)
        {
            ModEntry.smonitor = this.Monitor;
            var harmony = new Harmony(this.ModManifest.UniqueID);
            DynamicMethod dm;
            ILGenerator gen;

            var GameLocation_UpdateWhenCurrentLocation = AccessTools.DeclaredMethod(typeof(GameLocation), nameof(GameLocation.UpdateWhenCurrentLocation));
            dm = new DynamicMethod("GameLocation_UpdateWhenCurrentLocation_Call", typeof(void), [typeof(GameLocation), typeof(GameTime)]);
            gen = dm.GetILGenerator();
            gen.Emit(OpCodes.Ldarg_0);
            gen.Emit(OpCodes.Ldarg_1);
            gen.Emit(OpCodes.Call, GameLocation_UpdateWhenCurrentLocation);
            gen.Emit(OpCodes.Ret);
            GameLocation_UpdateWhenCurrentLocation_Call = dm.CreateDelegate<Action<GameLocation, GameTime>>();

            harmony.Patch(
                original: AccessTools.Method(typeof(StardewValley.Locations.Summit), nameof(StardewValley.Locations.Summit.UpdateWhenCurrentLocation)),
                prefix: new HarmonyMethod(typeof(ModEntry), nameof(ModEntry.UpdateWhenCurrentLocation_Prefix))
            );

        }
        public static bool UpdateWhenCurrentLocation_Prefix(Summit __instance, GameTime time)
        {
            GameLocation_UpdateWhenCurrentLocation_Call(__instance, time);

            return false;
        }

SDVpufferpensive not even sure how it's managing to infinitely loop into a stack overflow

calm nebula
#

It has to do with how vtables work

#

Tbh a reverse patch is easier

#

But yeah

#

Emit a Opcodes.Call.

iron ridge
#

oh i ithink i got it

urban patrol
#

i love you, this is fantastic. i had seen the {} item registry stuff in the spacecore example i found but had no idea what that syntax was, so thank you so much for the breakdown and explanation!!

tropic pelican
#

trying to get a portrait to work for the Traveling Merchant, but I can't seem to find what her character name is? I've gotten them to work for every other character, and when looking at other mods to see what they named the png, i can't seem to get those to work either SDVpufferwaaah does anyone know what i should name her png file to work in portraiture? THANKYOU112

obtuse wigeon
#

In portrature I have no idea but I'm pretty sure shes just called "traveller" in the game

hard fern
#

is the merchant actually a real npc to begin with? 🤔 i think she's just part of the cart itself. i

signal radish
#

I see another person who likes to go nuts with canopies! puffer_wow

hard fern
#

aah it looks so nice

#

im still a canopy novice, one day i'll get on your level maybe XD

signal radish
#

(That map is for Denver, when his creator is done updating him!)

obtuse wigeon
#

well I think I'm going to add multiple layers of canopies now, makes it look so much better!

blissful panther
#

Multiple layers...

#

That's what my farm map's missing!

oblique meadow
#

Canopies are great. With a few layers it makes it pop

blissful panther
#

Also Nova, hey!

signal radish
#

DH! I missed you, my friend. ❤️

signal radish
lucid iron
#

I'm not sure Portraiture is capable of applying on her out of the box

blissful panther
lucid iron
#

And also she only exists with a portrait if u put one in the data

#

Mods like portraits for vendors do it

oblique meadow
#

Secrets dont make friends

lucid iron
#

Based on breadcrumbs my theory is that joja has dumped toxic waste all over the farm and now your trees turn slimey

hallow prism
#

the when condition is the config i use in VMV so players can disable in case they use another mod adding a portrait

#

note that i load the portrait itself

#

otherwise calling it will do nothing

urban patrol
#

i have a silly question—when is a C# mod considered a framework? i assume my little “custom wedding reminder” thing doesn’t qualify?

#

or is a framework anything that allows extra features for CP mods?

hard fern
#

🤔 im no C# expert but i guess it would be a framework when the purpose of the mod is to add stuff that other mods can then utilize to do cool stuff

uncut viper
#

there is no one agreed upon definition of a framework

#

my personal definition is something is a framework if it doesn't do anything on its own but gives others tools to create unique things, and those things can be unique across all mod authors who use the framework

lucid iron
#

Yeah i agree with button here

#

I'll add that a mod can have both mod author features as well as user features

uncut viper
#

I'd also add that how generous you are with what counts as "unique across people using the framework" also depends on the intent of the framework

#

small frameworks that do one thing and do it well are still frameworks

pine elbow
#

i code witha dozzen different dictionarys and cheat sheets open

lucid iron
#

And while usually people here make content facing frameworks (something that tells you to give me some data somehow) there are C# facing frameworks too

#

spacecore skills is a big one

#

There was some discuss about whether a mod that adds some more game delegates, possibly named something like THETAs, is a framework or a library PecoSmile

uncut viper
#

the important thing to remember is that the specific name "framework mod" is entirely made up. you could always call your mod a framework, you just might get people questioning it. or you might not.

#

i would still call BETAS a library and not a framework

#

a bit muddier nowadays admittedly but still primarily a library in my thoughts

lucid iron
#

As you can see nic it's just how you feel about the thing Bolb

uncut viper
#

Content Patcher is undoubtedly a framework because if you give two people its features, the mods they create would/could be totally different

lucid iron
#

I think my personal criteria is a lot simpler, if it's a mod that does nothing user visible without a content pack for it, then it is framework

#

The ambiguous cases come when the mod does a lot of user visible things and happens to have some content pack extension options

uncut viper
#

would you say atracore is a framework?

lucid iron
#

Yeah personcores are C# frameworks

hallow prism
#

we also have now the fact that a lot of frameworks are more CP compatible and so people can use it for one or two features without making it a whole requirement, with an hasmod condition

lucid iron
#

I can theoretically use it to have atra's fancy span string ops

hallow prism
#

for me, betas as i use it is a framework, but that's the content pack modder perspective

lucid iron
#

And atra's fancy scheduler parser

calm nebula
#

Atracore is a mistake not a framework

hallow prism
#

hmm

lucid iron
#

I mean i think basically every personcore should just be a shared project instead

calm nebula
#

(There are sub dll loading problems. And atracore has shared caches)

hallow prism
#

i am scopecreeping myself by considering that harvey should adress you to another doctor if you date him. But then i wonder if i should have it for (new project) or for harvey apologizes or if i should even merge harvey apologizes in the (new project)

calm nebula
#

It's a mistake because I'm, actually, not a game dev and not actually good at this type of code lol

uncut viper
#

i still don't really understand what a shared project is, or rather what the benefit is over stuffing things into a dotnet template

urban patrol
#

nod nod i see thank you for your opinions everyone

lucid iron
#

But it's as if you just copied over the .cs file and compiled it

uncut viper
#

so what's the benefit over stuffing it into a dotnet template
wouldn't that make a personcore better as all that reused code would be run only once

#

and from one central location

lucid iron
#

There's no benefit over stuffing it into a dotnet template cus that would be literally copying the code over on a filesystem level and that's like, fine tbh

#

I used it only because i have some stuff that only 2 mods need

uncut viper
#

I had thoughts of a personcore recently for a bunch of farm maps I wanted to make to hold all the special little extras I might wanna add for my farm maps only, that seems like a core would be better than shipping every map with its own dll

lucid iron
#

Rather than stuff I want on every mod like a static Log(Once)

#

Wow button joining the "c# person and their random map baubles mod"

uncut viper
#

it goes with my NPC plans which are very full of hyper specific custom ideas I plan on implementing for her alone

#

benefits of being a c# modder, I can do whatever I want

lucid iron
#

As for shared project vs personcore I think it kind of depends on the usecase too

gentle rose
#

I think for me C# mods intended to be used by others in the way button described (do as little as possible on their own, enable unique functionality) are all either cores or frameworks and it's largely based on how cohesive the things they do are and also kind of vibes

uncut viper
#

(speaking of thank you for reminding me I gotta move my console command stuff from CMF into my dotnet template still)

lucid iron
#

But my opinion is more that I don't want to make every single one of my mod dependent on a nebulously named chucore of unknown features

#

If I do actually need extended tas shenanigans in a 3rd mod one day I'll probably just turn it into a temporary animated sprites framework

gentle rose
#

personcore mods scare me

uncut viper
#

i think that makes more sense than every mod duplicating a harmony patch on some function though but changing the unique id check on top

uncut viper
#

just with a different name

lucid iron
#

No cus I would also just rip out all the special tas stuff in mmap/trinkets and move it over to the new mod properly

#

So that it is an actual framework someone can use by itself

uncut viper
#

that sounds like you'd be making a core mod

lucid iron
#

I haven't done this bc i don't have particularly good unifying concept for a standalone temporary animated sprites mod

urban patrol
#

not-a-core Core

uncut viper
#

whenever you do you need to figure out how to add an IS to that acronym

#

Standalone
Temporary
Animated
Sprites
I
S

lucid iron
#

Wow

gray bear
#

Is
S'awesome

proud wyvern
#

i was going crazy looking at the code, that already had the line changed to IDictionary. glad you solved it

crude plank
uncut viper
#

maybe "I Suppose"

lucid iron
#

But yeah not knowing the specifics is why it's just a shared project and i live with the fact that some ppl's games have 2 assets with type Dictionary<string, TASExt> whose TASExt are actually different classes all together

uncut viper
#

i was mostly indifferent till I'm now learning you have duplicate content pipeline assets /lh

#

duplicate internals is one thing

lucid iron
#

I think it actually is possible for me to load the TASExt from the other mod

#

Cus i used helper.GameContent

uncut viper
#

would need to load them as JObjects

lucid iron
#

Not Game1.content

uncut viper
#

unless you hard reference the other mod dll

lucid iron
#

So I don't think I'm poisoning the cache per say

uncut viper
#

it's possible for me to load your asset in my mod and I don't even have the TASext class

lucid iron
#

Yeah dynamic go brr probably

hallow prism
uncut viper
#

no I literally just use JObjects from newtonsoft whenever I need to do that

hallow prism
#

oh no that would make stasic, which isn't a thing

#

ah well

lucid iron
#

I'll amend my statement to

#

Load and hopefully actually use in helpers

uncut viper
#

stasic does still sound cool though

#

they are perfectly usable if you reference newtonsoft

lucid iron
#

It's not really something i explored more than a 👁️ tho

uncut viper
#

I did this for Searchable Collections Page

#

before secret note framework got an API that's how I loaded the note says

#

Note data*

hallow prism
#

asics : animated sprites improved considerably superior

lucid iron
#

Wouldn't i need functions that took JObject and turned them into the right classes tho

uncut viper
#

no it's JObjects all the way down

#

Keep drilling down till you hit a value type

lucid iron
#

I'm confused tbh but I'll trust that the reflections crime lord knows what is up Sleepden

uncut viper
#

it's not even reflection!

crude plank
uncut viper
#

I would link it but apparently I didn't put that mod on GitHub and I'm not at my desk

lucid iron
#

Even though i absolutely could with no trouble since that's a base game class

#

The vague ass ideas i had for a unified TAS thing is

  • make concept of position tracker that can be specified from content through [idk im working on it :)], this could be say a map tile, an item, etc
  • make tas spawning stuff be rooted on a position tracker
brittle pasture
ocean sailBOT
#

Log Info: SMAPI 4.3.2 with SDV 1.6.15 build 24356 on Microsoft Windows NT 10.0.26100.0, with 11 C# mods and 2 content packs.

brittle pasture
#

(I can look at it myself a few hours from now, pls don’t feel obligated)

brittle pasture
#

SDVpufferwaaah
thanks for the quick fix

proud wyvern
#

there is a setting in Pintail that makes it ignore access modifiers of types, but still look at access modifiers of methods

#

but SMAPI doesn't set it

uncut viper
#

(dont judge my code too much chu this mod is old im better now i promise)

proud wyvern
#

(yes, i do constantly search for "pintail" in this server)

lucid iron
#

Oh it's a little different than what i was thinking

#

I have like a record that the live state of the tas and it takes TASExt as ctor arg

#

That was the "annoying to use across 2 mods using this shared project" bit

#

But i made my peace with it

brittle pasture
#

I egosurf for my mods every day too

proud wyvern
#

i used to do that a bit too

uncut viper
#

i also search for my acronyms sometimes though mostly to see if anyones having trouble or falsely attributing crashes to them again

proud wyvern
#

yeah i search for Pintail to see if anyone is having any trouble

#

everytime i see a new message about it, i dread i'll have to look into its source code again

#

but i kinda feel obligated

uncut viper
#

is it used in other communitiues too, or is it mainly stardew?

proud wyvern
#

Cobalt Core modding

clever turret
#

I'm guessing making machine output value scale logarithmically with the input item price (so that processing more expensive things gives less of an increase) is not something that can be done exclusively with content patcher/extra machine configs, is that correct?

proud wyvern
#

but i'm the author of its mod loader, so it's a given

uncut viper
#

ah i see, the obligation came free with your xbox sort of situation

lucid iron
#

Shockah can i pintail the content

proud wyvern
#

the obligation here is because i pestered Pathos about it several years back and ended up making Pintail into a lib, which SMAPI now uses

#

you can Pintail a lot

lucid iron
proud wyvern
#

but a dictionary is gonna be a total pain in the ass

brittle pasture
#

buckets are probably good enough™, items more expensive than 2000g don’t exist in my book

obtuse wigeon
#

I tried to do a similar thing but couldn't figure out the best way to do it, in the end I think the recipe.json file is somewhere around 200 lines long just for some recipes that produce the same thing

clever turret
#

And if I wanted a properly smooth curve I could theoretically make a bucket for every whole number input (up to say 2000)?

obtuse wigeon
#

(oof I lied, it's not 200 lines long, it's 3000, yes thousand)

clever turret
#

Horrendous, I will not be doing that

brittle pasture
#

if you wanna dip into c# for this it’s a perfectly fine good first mod

hallow prism
#

basically, CP price changes are limited

#

but PFM if i remember well can have stuff like "base price * multiplier + addition" which allows better modularity of price

#

however my math knowledge isn't good enough to remember what a logarithm is looking like really, so...

brittle pasture
#

last I checked PFM has even less options than vanilla quantity modifiers

#

(just multiply + add)

clever turret
brittle pasture
hallow prism
#

yes but they have annoying limitations

#

as far as i remember you were able to do only either addition or multiplication of base price but not both

brittle pasture
#

you can do both, and then some

#

I think you accidentally set the quantity stack mode to Max or Min instead of Stack

lucid iron
#

Well i guess you just have to implement a log price modifier

#

Maffs

hallow prism
#

no, i remember the stack thing

#

i can't remember the exact use case i

#

ah yes

#

i wanted also a max price

#

so i can't have an item like "price is 2* the initial price +500 while being max 15000"

lucid iron
#

For that you can just make a second rule with cond on item price perhaps NotteThink

hallow prism
#

which PFM allowed as far as i remember

brittle pasture
#

you can do a Set operation conditioned on the output item price being larger than 15000

#

well not 15000, but some input value that would have the output being larger than 15000

hallow prism
#

mm

brittle pasture
#

so “set price to 15000 if the input’s price is larger than (15000-500)/2 = 7250”

hallow prism
#

this is good to keep in mind but :

  • math
  • still less straightforward than PFM
  • math
  • i am not sure how i would even set that

But it's good news for MissSweetBean

brittle pasture
#

it’s less straightforward but way more powerful SDVpufferrad

hallow prism
#

yes

brittle pasture
#

still wont help with log though sadly

hallow prism
#

but that is true of C# as well and it doesn't mean i want to do it 😄

#

but fair!

oblique meadow
#

Silly question. Is there a way to re-trigger a DynamicToken at the start of each day?

Right now I have this:

    "Format": "2.7.0",
    "ConfigSchema": {
        "Ammo": {
            "AllowValues": "Baby,Eevee,Pam,Random",
            "Default": "Baby"
        }
    },
    "DynamicTokens": [
        {
            "Name": "ChosenAmmo",
            "Value": "{{Config:Ammo}}"
        },
        {
            "Name": "ChosenAmmo",
            "When": {
                "Ammo": "Random"
            },
            "Value": "{{Random:Baby,Eevee,Pam}}"
        }
    ],```
But i'd like to re-trigger daily when random is chosen
hallow prism
#

i mispoke of poor data/machines format and apologize to the fields i hurt /lh

#

it should already change daily

#

how are you testing the changes?

oblique meadow
#

Im in game and sleeping

#

Wait. I just got unlucky apparently and got the same one 4 days in a row....

#

slept one more time and it changed

#

ugh

hallow prism
#

you don't have that much values so it can happen (althought i understand the frustration)

oblique meadow
#

Sorry to bother

hallow prism
#

no

#

rubberducking happens

oblique meadow
#

...I should add a Rubber Duck

hallow prism
#

it is usually when i have the adrenaline of "i asked for help" that i notice the typo i missed the 5th previous times

#

because OF COURSE

clever turret
#

Alright, a related question: does the game store an item's value as its base price and then only apply profession modifiers when sold/rendered through the price catalogue, or does it hold the value modified by professions in the item's data?

brittle pasture
#

former

clever turret
#

Lovely, that's what I had hoped

urban patrol
#
[game] Can't parse tile property 'Action' at Buildings:25,13 with value 'DLX.PIF_Door_Warp_INTERNAL_USE_ONLY' in location 'handwrittenhello.dbda_CrystalAndNiko': required index 1 (Point tile > x) not found (list has a single value at index 0).```
this is an error from PIF - personal rooms, right? any idea why it's got an issue with my custom map? this is the door and tile data at (25, 13)
lucid iron
#

Oh hm do you have a placed pif door

urban patrol
#

no i know nothing about PIF

lucid iron
#

Why...

#

It's a fairly easy fix but I don't understand how it's even happening in the first place Thqnkqng

#

@spice inlet hello remember the internal use tile action i added in my PR? Can you change it so that the action name no longer contains the word Warp? For some odd reason it's hitting map warp point parsing logic and emitting a base game warning.

calm nebula
#

Just ignore it is harmless lol

lucid iron
#

There shouldn't be any issues changing it since it's internal use only kyuuchan_run

urban patrol
#

i'll let the player know it's a harmless PIF issue and they can ignore it until PIF is updated 👍

lucid iron
#

To explain what this is, i added this so that PIF can do door zones on it's furniture

#

It's not meant to be placed into a map ever

#

Hence my confusion about why this is getting fired

urban patrol
#

yeah "internal use only" kind of implies you shouldn't see it lol

#

if it'll help you debug i'm happy to send you my map

lucid iron
#

Do u have pif installed

urban patrol
#

nope

#

this is from a report on nexus, no log

lucid iron
#

How r u getting this at all then

#

Ok whatever then Sleepden

hard fern
#

logless...

lucid iron
#

I mass renamed a bunch of mmap's (non internal) warp actions to wrp specifically to avoid this warning lol

urban patrol
#

yeah did you guys know "submit a log with every bug report" actually means "do whatever you want" lol

spice inlet
lucid iron
#

Thanks! Apologies for the trouble

spice inlet
#

not your fault the game has magic strings like that ^^;

#

the error didnt pop up during testing either and apart from causing confusion it appears to cause no harm

#

many of the bugs I get at work rn are like that now that I think about it

lucid iron
#

Just lurking in the codebase, waiting to ambush you

spice inlet
#

the customer reports an issue, qa reproduces it and opens a bug, I recreate the test case, no bug. Check with qa to make sure test case is correct. yes. she cant reproduce the bug anymore either

urban patrol
#

absolutely classic

#

tbh that's me whenever i have to report anything to IT. i'm sorry i swear it wasn't working before

hard fern
#

SDVpuffersweats i can't change this smoke without C# can i

calm nebula
#

Nope

hard fern
#

😔 sigh

#

i refuse to do C# for a furniture recolor

#

i'll just have to never turn the cauldron on

lyric fern
#

Just want to ask, is this mod possible to do with Content Patcher?

The logic is simple;
If condition is met, change item description.

The condition could be anything like:

  • if player in [place]
  • if season is [season]
  • if [item] is placed in [place] (statue of perfection is placed on farm for example)

And whether to have double condition, for example if season is [season] comes first then if player in [place] after

gaunt orbit
#

The first two are possible, the third is not (with just cp)

lyric fern
#

Ah okay, can we make it have multiple condition though?

Like if condition one is met, it will have A, but if condition two is also met, it will be A + B, in this case would be text a and b concatenated/combined, or have an entirely different text if both conditions are met

hard fern
#

you can have multiple conditions

urban patrol
#

content patcher can have AND and OR conditions, yes, although i believe you need to define every possibility (so if you had A and B, you'd need A, AB, B, neither)

lyric fern
#

Cool.. that's all i wanted to know. Thank you very much guys!

lucid iron
hard fern
#

but i want the smoke...

#

just pink

lucid iron
#

You can add the smoke with mmap if you want

#

I never tried it with toggle tas but i can look into it

urban patrol
#

can i check a dictionary in C# to see if it contains a key which is a valid spouse name? i'm trying to write this condition (which is all sorts of wrong but the closest way i knew how to express what i want). i'm trying to return a spouse-specific message if it exists, but the default message if a modded NPC hasn't had a message added

lucid iron
#

you don't have direct access to the dictionary here

urban patrol
#

do i have it somewhere else, or not at all

lucid iron
#
string line = Game1.content.LoadStringReturnNullIfNotFound($"yourasset:{spousename}") ?? Game1.content.LoadString("yourasset:default")
#

this is what i recommended earlier

urban patrol
#

oh i must have missed that, my bad

calm nebula
#

LoadStringReturnNullIfNotFound

#

Never change

urban patrol
#

so with this i don't need an if/else?

lucid iron
#

to break it down a bit this is what it says as multiple lines:

string? line = Game1.content.LoadStringReturnNullIfNotFound($"yourasset:{spousename}");
if (line == null)
{
    line = Game1.content.LoadString("yourasset:default");
}
// now line will definitely be a usable string
urban patrol
#

oh that makes it clearer yeah

lucid iron
#

the ?? is called the "null coalescing operator" and it's like fancy way of saying if this is null do another thing afterwards and put value in same place

#

im sure there's uh, roslyn details for what it actually does

uncut viper
#

i think your multiline explanation is basically what it does

#

but in IL form

gaunt orbit
#

The cursed part about ?? is that you can use it to throw exceptions.

gaunt orbit
# uncut viper but in IL form

In this case I think so but sometimes it will use Dup instead. I think maybe when it would require allocating an extra local otherwise?

urban patrol
#

if i want to make the code cleaner?

lucid iron
#

well you can put it in a property

#

but you shouldn't keep the line around unless you want to implement invalidation handling

urban patrol
#

i thought invalidation handling is what i was doing by returning the default if spouse key doesn't exist

#

does invalidation handling mean something else

gaunt orbit
#

What chu means is that if you store it anywhere because the data might change and you'll have know when to recheck it

#

So either don't store it or keep an eye on the asset

uncut viper
#

Invalidation handling = What if someones Content Patcher patch on your asset changes?

#

Like, what if a When condition no longer applies, so they are adding something different to your custom asset now

urban patrol
#

and if i did it outside of the methods, it would be storing it? and wouldn't be checked after being edited by someone else?

uncut viper
#

(ofc not just for CP but mostly CP)

lucid iron
#

well if you did the loadstring directly at where you need it

#

game will try to fetch from the content manager cache, or get from asset requested edit

gentle rose
#

harmony patching the content manager is both fun and nutritious

#

don't knock it until you try it wren

#

it enabled me to do things that are absolutely possible to do in other ways

calm nebula
#

You're a worse criminal than your dog

gentle rose
#

look I spent like a week actually caring about writing good code, I needed a break asap

lucid mulch
#

I love it when people say certain harmony stuff is a crime and they are some of the only harmony usecases I've done

lucid iron
#

phantom thief sinz

#

only do the most heinous of crimes

lucid mulch
#

"dont harmony patch smapi", "dont harmony patch the content manager", "dont harmony patch other mods harmony patches"

uncut viper
#

ive done 2 out of 3 there

#

unless you count patching SMAPI loading tilesheets for ATA as both 1 and 2

brave fable
#

harmony is a path to behaviour some would consider... undefined

uncut viper
#

(i wouldnt)

autumn tide
#

does anyone know where the sprite of shane from his 6-heart event is? I know where the portrait it but I can't seem to find the actual sprite SDVpufferflat

lucid mulch
#

for the purposes of 1 and 2, 2 doesn't count as smapi

brave fable
#

it's in LooseSprites/Cursors near the seagulls at the bottom around the rainbows

uncut viper
#

have you checked cursors

autumn tide
#

oh okay

autumn tide
#

how did you have that memorized omg 😭

brave fable
#

built different 😌

lucid iron
#

cursors is like choosing C on the exam when you don't know

brave fable
#

i showed my working, that's worth a pass

autumn tide
gaunt orbit
#

In 1.5 I was transpiling SGame.DrawImpl for Reasons™
(and now I don't have to)

late gull
#

Quick question - How do I go about adding multiple object properties of the same type (e.g Action) to an object in Tiled? Do I just type each property on a separate line? Thanks, first day learning.

lucid iron
#

you cannot

#

what's the goal here

late gull
#

I want to warp and playSound at the same time

lucid iron
#

you will need a framework for that

urban patrol
#

i use spacecore and betas for that but i believe you can do it with just betas now

lucid iron
#

i think u can also do it just with spacecore right

urban patrol
#

maybe that’s what i’m thinking of instead

lucid iron
#

trigger location changed condition on your custom location spacechase0.SpaceCore_PlaySound

uncut viper
#

you can achieve the same result with both BETAS and SpaceCore (though technically BETAS is slightly more flexible)

lucid iron
#

it's one way tho, not ideal

#

but yea take ur pick Sleepden

urban patrol
#

are you trying to replace the door sound with something else?

late gull
#

I see, thank you for the help! I just have two minecart warps between the upper and lower levels of my map and wanted to add a minecart sound to them

lucid iron
#

i thought minecarts have it

uncut viper
#

i also thought minecart networks played a sound by default

#

apparently not though, i dont see it in the decomp

#

interesting

lucid iron
#

berenstain beared

uncut viper
#

false memories...

brave fable
#

new mod where using the minecart network requires you to complete one bespoke level of Junimo Kart before you arrive

urban patrol
#

and if you fail you die

lucid iron
#

oh you know

#

i think this might be a CS feature of sorts

late gull
#

Is that when using the MinecartTransport property? I'm just using warp because its two minecarts on the same map file and I don' t want them connecting to anything else

brave fable
#

is CS custom shops, computer science, or cee sharp

lucid iron
#

central station

tired matrix
lucid iron
urban patrol
lucid iron
#

you can make a minecart network independent of the Default one though

brave fable
tired matrix
#

i have this, is it right? still not working tho

brave fable
#

good! now use that Target as your Texture value

urban patrol
tired matrix
#

Omg im stupid ybrofl

#

thank u guys

urban patrol
#

nah i made that mistake many a time

tired matrix
#

ahh still not working

#

getting that red circle

urban patrol
#

spawn a new item

uncut viper
#

trash the old item and spawna new one

tired matrix
#

I gave this mod so many stuff its making me go crazy lol

#

WORKS!!!

#

Thanks girls ure awesome

lucid iron
#

do i need to do anything to a WeakReference on a IDisposable

#

nvm this is a silly question i should just not use a weak ref blobcatgooglyblep

oblique meadow
#

Take the ref to the gym. Get it good protein intake. Will be a strong ref in no time

lucid iron
#

that'd be pretty bad

royal stump
#

extra-strong refs that keep your data in ram even when the game/system is shut off

uncut viper
#

why keep it in RAM? too volatile. theres a perfectly good system drive you could fill up to the brim instead

royal stump
#

(also idk because my solution has also been "just use normal refs" SDVkrobusgiggle)

lucid iron
#

i believe people call that malware

uncut viper
#

is it malware if i name my mod "Fills Your System Up To The Brim Framework"

calm nebula
#

IDisposable is "please, gc, clean up for me if i fuxk up"

#

WeakReference is "please, don't let this become a memory leak"

lucid iron
#

so the actual usecase i have is

  • i need to assign a crib (Furniture) to a Child
  • i have a ConditionalWeakTable<Child, CribAssign?> atm
  • when child is older than 2, i will do a manual remove of the child from the CWT
  • at this point i could handle all the unassigning bits, but what if i make CribAssign an IDisposable
uncut viper
#

to me that sounds like whatever is removing the child should also just remove the cribassign

lucid iron
#

yea i dunno, i do think i am being very extra kyuuchan_run

odd raptor
#

Hello
i am getting this error
error CS0234: The type or namespace name 'Framework' does not exist in the namespace 'GenericModConfigMenu' (are you missing an assembly reference?)
I am following the instruction in https://github.com/spacechase0/StardewValleyMods/tree/develop/GenericModConfigMenu

GitHub

New home for my stardew valley mod source code. Contribute to spacechase0/StardewValleyMods development by creating an account on GitHub.

brave fable
#

delete line 2 in IGenericModConfigMenuApi

#

(using GenericModConfigMenu.Framework;)

somber canopy
#

How does the meadowlands farm start with a coop? I'm making a map that I'd like to also start with a coop. I'm looking through that farm in Tiled & map properties and not seeing it there

brittle pasture
#

it's hardcoded

uncut viper
#

its hardcoded to

#

but theres a mod to let you do exactly that

brittle pasture
#

you need either spacecore or buildings included

tired matrix
#

same path just another item (a cooking one)

somber canopy
tired matrix
#

i checked the templates and everything but it seems right?

vernal crest
#

Did you set the texture to the right thing before you spawned the item in game?

tired matrix
#

Suddenly the other one isnt working anymore too

#

Dammit

vernal crest
# tired matrix

Did you change your Load patch? The one I'm replying to? Or accidentally delete it?

vernal crest
#

Can you show a screenshot of it?

tired matrix
#

Yep

#

Oh fixed it somehow

#

Idk how

hard fern
#

maybe you made a typo and fixed it without realizing

vernal crest
#

I recommend that you press Shift+Alt+F on your keyboard to fix your file's formatting by the way

tired matrix
#

Probably lol

vernal crest
#

It's much easier to see if you have made mistakes if your indentation is right

tired matrix
#

But is the template for adding to the shop right and recipe? I dont even know i just got it from wiki but there wasnt any ready

ivory plume
#

@lucid iron For your animal & building MigrateIds PR:

  • Do you have a test save to make sure they still work fine after my changes?
  • What happens if you don't remove the interior location when migrating to a building type whose data doesn't have one? I'm just a bit worried about players accidentally losing everything inside a building (e.g. animals, machines, etc) if a mod author makes a mistake in an update.
lucid iron
#
  • i had one but ive deleted it sorry, can make another
  • mods like lookup anything explodes because the reference for interior remain on the building unless i manually remove it and it's also just inaccessible, i felt this behavior is expected and basically like removing a location adding mod, but perhaps more warning is needed
vernal crest
# tired matrix But is the template for adding to the shop right and recipe? I dont even know i ...

No, your hotpot's ID should be {{ModId}}_BeefHotpot (or {{ModId}}_Beef_Hotpot if you want) and so should its "Name".

Your recipe patch should not have the "Hotpot": { bit on line 40, the ID of your recipe should be {{ModId}}_BeefHotpot (or {{ModId}}_Beef_Hotpot if you want) the same as your object, and you need to actually add your {{ModId}}_BeefHotpot object as the yield because at the moment your recipe doesn't produce anything (you have the wrong number of fields, check the wiki page again).

Your shop entry needs to have the key changed to {{ModId}}_BeefHotpot (or {{ModId}}_Beef_Hotpot if you want). Same with the Id and ItemId field. If you want the shop to sell the recipe instead of the object, you have to add "IsRecipe": true. And your MoveEntries bit is wrong - you need to be moving your item entry before a different, already existing entry in the shop.

Here's a tutorial: https://stardewmodding.wiki.gg/wiki/Tutorial:_Adding_Recipes_with_CP#New_Cooking_Recipe_for_an_Existing_Item

tired matrix
#

If i put the gifting thing next to like {{i18n:food}} for example in the dialogues on content, it wouldnt work, would it?

vernal crest
tired matrix
#

Just the command to give a gift in one of the dialogues

vernal crest
#

You can just write out your mod ID in full there

tired matrix
#

In i18n? So it works in the default json?

#

I thought it wouldnt since it doesnt work in dialogues

vernal crest
#

What is your mod's ID?

tired matrix
#

mylittlestar

vernal crest
#

The whole ID

tired matrix
#

mylittlestar.Xavier

vernal crest
#

Okay so in the default.json instead of writing {{ModId}}_BeefHotpot you'd write mylittlestar.Xavier_BeefHotpot

tired matrix
#

omg

#

Im stupid

#

Changing it rn

#

Ty

#

I swear im not dumb ok my head is just different (doesnt work right) SDVpufferwaaah

ornate locust
#

It's easy to forget you can just do that

#

I've had my own "wait, the token stands in for text, I can just use the dang text" moments

brave fable
#

alternatively you can pass item name as a token to the i18n

#

which is better

#

if you're just going to write the text again why even use tokens

lucid iron
#

i would just split the dialogue into 2 keys tbh

brave fable
#

well yes, ideally you'd be adding your individual translated display texts to the gifttastes string, not the other way around

#

e.g.. "{{i18n:gift.loved}}/10 20 30/{{i18n:gift.liked}}/40 50 60/{{i18n:gift.disliked}}/70 80 90/{{i18n:gift.hated}}/100/{{i18n:gift.neutral}}"

#

or however gifttastes are fielded

#

then you can use your {{ModId}}_myfunnyitem text in the item IDs as usual

vernal crest
#

If I understood correctly, this is about an NPC giving the player the dish

#

I would personally just put the command to give the item outside the i18n

brave fable
#

ah. i mustve been on autopilot

#

then yes, either put the whole command outside of the i18n and in the token string, or pass the item name as a token to the i18n

inland rain
lucid iron
# ivory plume <@275089066607771648> For your [animal & building `MigrateIds` PR](<https://gith...

the CoopToSilo save has 1 coop with 1 chicken inside, and a patch like this will turn it into a Silo
https://smapi.io/json/content-patcher/14cf434245844218a71cb5c2b9bbc55c
at this point the game will start having StardewValley.GameLocation.updateEvenIfFarmerIsntHere exceptions every so often, though it didn't crash ought-right
the second save is after sleeping on CoopToSilo, and a opposite patch can be used to turn Silo back to Coop. this does actually keep the chicken around

urban patrol
#

@red egret if you're interested, i ended up making that wedding reminder mod that you suggested! #mod-showcase message

ivory plume
lucid iron
#

I also sleep gn puffernight

tame burrow
#

Sleep well Chu. Go to bed knowing I now understand Localized Strings because of you and will be making much use of them

late pewter
#

Does anyone know from experience if for Alternative Textures, can you Skip IDs?
For example:

"ManualVariations": [
    {
        "Id": 0,
        "Name": "1-NonSeasonal.Empty.Basket",
        "Keywords": [
            "Empty",
            "Basket",
            "NonSeasonal"
        ],
        "ChanceWeight": 0
    },
    {
        "Id": 1,
        "Name": "2-Seasonal.Seed.Weed",
        "Keywords": [
            "Seed",
            "Weed",
            "Seasonal"
        ],
        "ChanceWeight": 0
    },
    {
        **"Id": 5,**
        "Name": "3-Seasonal.Tea.Bush",
        "Keywords": [
            "Tea",
            "Bush",
            "NonSeasonal"
        ],
        "ChanceWeight": 0
    },
#

I skipped from "Id": 1 straight to "Id": 5

#

Will [AT] accept that and still merrily list options in order or will it throw a fit?

late pewter
#

Ok so I just checked: [AT] doesn't throw a fit in the sense that it doesn't print angry red text to the console: But it DOES refuse to acknowledge the non-serial ID even exists.

#

...This sort of complicates things.

red egret
mighty current
#

chances are this is me being stupid, but schedule isn´t working. npc spawns in but doesn´t move

{
"Changes":
[

    {
        "LogName": "Ogami Schedule",
        "Action": "EditData",
        "Target": "Characters/schedules/{{ModId}}_ShirouOgami",
        "Entries": {
            "spring": "610 BusStop 29 18 2/a900 Hospital 4 14 2/a1500 Town 32 55 3",
        },
    },

],
}

ornate locust
#

Schedules won't start working until you've slept a day, if you put them in a save in progress

mighty current
vernal crest
mighty current
vernal crest
# mighty current i haven´t, might i ask how i would?

Add this patch before your EditData one.

{
    "LogName": "Load blank json",
    "Action": "Load",
    "Target": "Characters/schedules/{{ModId}}_ShirouOgami",
    "FromFile": "blank.json" // this can be in a subfolder if you want
},

Your blank.json file should contain a closing and opening curly bracket pair like this:

{}
mighty current
# vernal crest Add this patch before your EditData one. ``` { "LogName": "Load blank json",...

like this?

{
"Changes":
[

    {
     {
"LogName": "Load blank json",
"Action": "Load",
"Target": "Characters/schedules/{{ModId}}_ShirouOgami",
"FromFile": "blank.json" // this can be in a subfolder if you want

},
"LogName": "Ogami Schedule",
"Action": "EditData",
"Target": "Characters/schedules/{{ModId}}_ShirouOgami",
"Entries": {
"spring": "610 BusStop 29 18 2/a900 Hospital 4 14 2/a1500 Town 32 55 3",
},
},
],
}

vernal crest
mighty current
#

HE IS MOVING !!!

#

thank you for the help ❤️

brave fable
#

is there a standard style people have gravitated towards for mod-added custom GSQ IDs

lucid mulch
#

modid or just mod author prefixed

brave fable
#

in uppercase? with period?

lucid mulch
#

iirc normal casing with a period seperator

#

the one thats shipped with ContentPatcher is Pathoschild.ContentPatcher_MigrateIds

#

so guess it is underscore seperator then

uncut viper
#

thats a trigger action not a GSQ

lucid mulch
#

ah true

uncut viper
#

GSQs are almost always {{ModId}}_GSQ_NAME_LIKE_THIS

#

e.g. Spiderbuttons.BETAS_HAS_MOD or EscaMMC.EMP_IS_TIME_PAUSED

brave fable
#

i bet that sure looks a lot better with an acronym uniqueid than with blueberry.BlueberryMushroomMachine.CP_MY_FUNNY_GAME_STATE_QUERY

uncut viper
#

(though i guess maybe a not so good example to use two mod ids where the mod name is all caps'd (though i did just guess what EMPs is idk what it is)

lucid mulch
#

Esca.EMP_IS_WORLD_READY from their docs

uncut viper
#

im sure all internal IDs would look better if we didnt follow the mod id convention

#

but we do in order to prevent conflicts no matter how unlikely

lucid mulch
#

when VS eventually loads I'll dump the list of GSQs my modded save has to see if there are other examples

gray bear
#

this is nice

brave fable
#

your VS might need to lose a little weight

lucid mulch
#

there isn't perfect consistency

#

most common is modid_UPPERCASE_ID
but there are some that modid all lowercase, some that modid all upercase.

VMV has both

VMV.HasSeenActiveDialogueEvent
VMV.MONSTER_NAME

and whatever this is, does the inverted convention

NAT_NIV_DonatedSpecific
NAT_NIV_CaughtSpecific
uncut viper
#

having both is diabolical

#

i feel like its just beneficial/less confusing to stick to what mod authors already expect a GSQ to look like, which is screaming snake case to match the 100 or so odd vanilla ones that set the example in the first place

brave fable
#

thrilled to see the love of cooking is the only mod in the list which uses screamingsnakecase and a unique id (maybe unlockable bundles counts)

#

really i'm the one breaking convention here

hard fern
#

why is the snake scramnign

#

&screamind

brave fable
#
  1. why isn't the snake screaming
#
  1. if you were smart, you'd be screaming too
lucid mulch
#

I find the ones that put their modid after the PLAYER_ prefix hilarious

brave fable
#

i think it's actually spacecore doing that for custom skills lol

#

i definitely didn't pick it for the cooking skill

#

cute that it makes them uppercase to match gsq style

lucid mulch
#

ah yeah, they all also ended in _LEVEL

inland rain
#

does anyone have an idea why the nexus mods site is no longer remembering form entries for autofill? at some point it stopped remembering things I put in forms and it only has very old autofill options in its forms. I'm using Firefox

iron ridge
#

firefox dropdowns for past input is just quite unreliable

obtuse wigeon
#

the firefox cache is also quite volitile, depending on your privacy settings it gets cleared after a little while I think?

obtuse wigeon
#

Are comments on nexus weirdly escaping characters for anyone else?

lucid iron
#

oh i saw that happen

obtuse wigeon
#

I haven't replied to comments on nexus recently so it started happening sometime between now and a week ago, at least the comment still is there

gray bear
#

why firefox, we trusted you sad_panda

fast plaza
#

can't remember off the top of my head, whats the standard form for QualifiedItemIDs for mods?

#

Like is it (O)[ModName].ItemName?

brave fable
#

preferably "(QUALIFIER){{ModId}}_ItemName"

fast plaza
#

awesome, So if my mod was called abc and the item was called def and it was a standard object it should be (O){abc}_def ?

#

or is that double brackets

#

so (O){{abc}}_def?

tiny zealot
#

{{ModId}} is a content patcher token which CP replaces with your mod id. don't use literal braces

brave fable
#

no, your item would be "(O){{ModId}}_def"

tiny zealot
#

use the item's actual id as seen by the game, and prepend it with the qualifier, which for object is (O)

fast plaza
#

Is content patcher a seperate thing from SMAPI? my mod is currently just using SMAPI and harmonylib

tiny zealot
#

yes

lucid iron
#

If you are doing stuff in C# then just do normal string interpolation

brave fable
#

are you writing your qualified item ID in a C# mod? if so, you can't use CP tokens or tokenisation

tiny zealot
#
  1. is this for your item in your mod, or are you specifying an item from another existing mod?
fast plaza
#

this is an item in my mod but I wanna make it work with the standard for other mods for compatability reasons

#

ngl I was using item ids like 3501 etc. which I'm trying to fix way later than I should be

tiny zealot
#

definitely do not use number ids

lucid iron
#

I guess it's probably worth asking like

brave fable
#

for an item from your own mod, you might use $"(O){this.ModManifest.UniqueID}_def" for the qualified ID (assuming it's called from a ModEntry instance)

fast plaza
#

just wanna get things up to standards so I don't mess up other mods

lucid iron
#

Do you actually need C# here lol

fast plaza
#

yes my mod adds a loooot of C# stuff

tiny zealot
#

(it may still be easier for you to outsource the content parts of your mod to a CP pack)

#

for example, if you have an NPC, using CP is likely to save you work since it already has many helpful features that you would have to implement yourself

lucid iron
#

Then yeah get ur mod id from Manifest.UniqueID (did i spell it right)

brave fable
#

yeah it's fine to divide your mod in half and add all the content via CP. i'm just wrapping up doing that for Mushroom Propagator

#

imo it's much, much better

lucid iron
#

I also just put my own mod id in a const string cus it is not like I want to change it often

oblique meadow
#

Content patcher is ridiculously powerful in what it can offer. With a bit of creativity I’ve managed to do some things that should’ve technically been with C#

brave fable
#

also weighing up renaming the solution and projects from BlueberryMushroomMachine to MushroomPropagator

#

i'm happy to rename the whole mod, but it does involve wiping all the git history

#

which is rotten

lucid iron
#

❎ rotten
✅ fertile fungi grounds

brave fable
#

while true,

tiny zealot
#

i am fond of telling people that my NPC started as all-C# and i switched to CP for most of it when i found myself reimplementing content patcher poorly

calm nebula
#

It should not delete all git history

#

Git, unlike my nemesis, handles a renamed file

fast plaza
#

hah yeah I'm sure I've done tons of stuff that content patcher already does better

brave fable
#

i'll push develop and see how well github likes it

fast plaza
#

but I'm not in a position to change it rn cuz the structure is very dependent on the items being in the C#. Thanks for the help with the IDs though guys!

lucid iron
#

--force solves everything trust

brave fable
#

believe me, because of the whole content pipeline structure and separation of assets from codebase, there's no amount of coupling that can stop you from moving all the basics out to CP

#

it might be dramatic, but it's doable and a huge improvement

brave fable
#

anyway i'm not gonna tell you how to make your mod, just tell you how i made mine

tiny zealot
#

that's for the id itself. the qualifier is separate and you put that on if you need it

fast plaza
#

thanks for the advice!

gray bear
#

i am making yet another child, and fighting more pixels, someone save me from myself

lucid iron
#

I like having purely content mods and purely c# mods for vague feelings based reasons personally

fast plaza
#

the qualifier is definitely gonna get confusing. Hoping I dont break anything here

#

oh well, I'm sure I will, but shoulda started with stringIDs rather than numericIDs

lucid iron
#

Just so u know if ur mod is already released people will get error items bc you changed id

fast plaza
#

yeah its not yet thankfully

#

I'm changing it before release so I don't have that problem later

gray bear
#

[sweats in error sushi]

lucid iron
#

Content Patcher has a traction for fixing this (migrateids) at any rate

#

Bea u probably could have used it

gray bear
#

i did not know this

brave fable
#

qualifiers are pretty simple, it's only adding new ones that gets hairy. it's worth noting that you can't use the qualifier in certain contexts, such as Data/CraftingRecipes keys, but you have to in others, such as in Data/CraftingRecipes output fields 💫

#

or rather you have to if there's ambiguity

gray bear
#

i am once again sadge about things i don't know

brave fable
#

i thought ignorance was meant to be bliss

fast plaza
lucid iron
#

I think it was made to migrate JA to 1.6 CP

gray bear
#

no its torture

#

i just did that manually

lucid iron
#

Is there a mod that adds a new qualifier

tiny zealot
brave fable
lucid iron
fast plaza
#

true true

brave fable
#

per se*

gray bear
#

ya'll got cores

brave fable
lucid iron
#

Why do keep making them

tiny zealot
#

(i don't, but chu calls lacey my core mod because it's full of weird core mod shit. its name does contain the word "core" but that's mostly unrelated)

gray bear
#

LaceyCore

lucid iron
#

What if u just make one qualifier (BB)Thingymajig

brave fable
#

it's almost a requirement to make a new qualifier if you create a new item class and have it created through the ItemRegistry

#

because they're entirely different classes of items

lucid iron
#

I guess that's the other part I don't understand cus I am allergic to new classes too

brave fable
#

if i made one qualifier the definition would have a dozen branches

#

you'll find there's only 3 results in this channel if you search BaseItemDataDefinition and 2 of them are me

lucid iron
#

I think i been getting by with just (O) from a special item query

tiny zealot
#

my strategy is to avoid creating items that aren't (O) 😌

brave fable
#

highly recommended

gray bear
#

thonk
i was considering having a config to move sushi stall to central station but then it's like:

  1. im gonna get comments about where the stall is if they enable it by accident
  2. ew, maps
  3. effort, mostly
#

also do people who use CS even like, go places

hallow prism
#

once CS has the rotating shop feature it'll be easier to have it as an additional content

lucid iron
#

Yeah I don't think it's there atm

hallow prism
#

and people may have both shop at the same time but honestly since they warp, why couldn't the npcs anyway

lucid iron
#

However I was always confused that the sushi stall is in the forest instead of the beach

hallow prism
#

i would say it's the kind of things i would personally keep as a "future scope creep"

gray bear
#

there are fish everywjere

lucid iron
#

Yeah but you shouldn't eat fresh water fish raw, parasites

gray bear
#

fairy vendor does fairy magic to remove them for the sushi, clearly

brave fable
#

surprised that git is okay with renaming the whole project, history shows up fine in vs and github. very cool

tiny zealot
gray bear
#

vanilla has u making sashimi with anyr aw fish

lucid iron
#

Is the fairy FDA certified

tiny zealot
#

if your farmer isn't horfing down cheap raw fish and algae to make more energy for more fishing what are you even doing

brave fable
#

yes farmer. throw a pufferfish into the luau soup. doom us all

gray bear
#

FDA stands for
Fairy
D
Administration

#

im not good with acronyms

tiny zealot
oblique meadow
#

Fairy Doeswhatshewants Administration

gray bear
#

exactly b_nod
if you wanna file a complaint, you must give your name

hallow prism
#

dynamic dialogues my beloved

#

(featuring DSV for haley/emily portraits, and quinn in the background)

gray bear
#

cool!
shouldn't the 2nd one be "Emily has a lot of different ones" or even "different types"?

#

look at me, talking about grammar. who am i

hallow prism
#

oh yeah, i often have extra or missing s

brave fable
#

skipping letters like it's french. smh SDVchargeorge

hallow prism
#

the cheese is distracting me

calm nebula
tender bloom
#

Yup

#

But we like the fairies better

gray bear
#

ah, t'was a joke, should've added /j
FDA probably doesn't exist for stardew

#

unless it's the actual fairies being like "eat a raw fish"

tender bloom
#

Probably it’s fairies in Stardew

#

Making it so none of our wine goes all gross

#

Despite the fact that we literally just learned to make wine

gray bear
#

u put it in a keg and forget about it till its done. magic i'd say

brave fable
#

god i wish i updated instant farm caves before updating the mushroom propagator

gray bear
#

what does intant farm caves do?

brave fable
#

i wish to see a demetriums never again

#

you know farm caves? instantly.

gray bear
#

kek_anim instead of the cutscene u just get it at game start?

brave fable
#

without delay.

gray bear
#

he do be talking a lot

calm nebula
#

Can't you just

#

Use a trigger action

lucid iron
#

Just give yourself 14499 money only

dire spindle
#

I was thinking of making a mod which replaces the regular NPC’s to Attack on Titan characters, but it might take effort so if anyone wants to help me it’s definitely appreciated! SDVemoteheart

lucid iron
#

Can you rewrite his event to make it skippable

gray bear
#

code for that wouldn't be very difficult

lucid iron
#

I point this out because you don't need to replace vanilla NPCs you can just add new

brave fable
#

has any one of them made a titan for them to attack

gray bear
#

in general there's a lot of mods that replace NPCs

dire spindle
gray bear
#

don't think so? wouldn't that require c#

#

how big is a titan

lucid iron
#

Sure go for it

dire spindle
lucid iron
#

But take a look at the npc guides anyways

tiny zealot
#

isn't there like a boss monsters mod or framework or something

dire spindle
humble timber
#

replacing vanilla NPCs other than visually is actually arguably way more difficult than just making new NPCs , i was originally going to do replacers for my pokemon expansion and decided it was very not worth lmao

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:

tiny zealot
#

i assume you'd use that (i don't know anything about attack on titan. i assume the titans are big)

gray bear
#

yeah aede made one ichor

lucid iron
#

Yeah compat very hard for lore things

humble timber
#

changing schedules.. houses. dialogue. etc

lucid iron
#

But hey you should only care about compat in ur own mod list

brave fable
#

i'd argue replacing a vanilla npc is simpler if you're not going the full distance, since you're fine to change only as much as you like, all the rest is done for you in one way or another

dire spindle
gray bear
lucid iron
#

We r ofc gonna warn u so u know what's the deal

gray bear
#

if it's only visual then yeah replacing is not difficult at all

humble timber
dire spindle
#

Yeah I was just thinking visually

humble timber
#

Realized it was better to go full expansion for my case

tiny zealot
brave fable
#

visually is simple enough, just it's impossible to account for all the instances where names and nicknames appear in various dialogues and events in the game. it's best not to worry about that though since it can't be helped

dire spindle
#

Yeah that’s true 😭

brave fable
#

there's C# mods out there that will try and replace them for you, but nothing's all-encompassing

gray bear
#

dialogues and not using display names instead of static ones

dire spindle
#

Maybe I could just keep the names, imagine a portrait of Eren being named Clint 😭

gray bear
#

easier as a game maker, not so much for a mod maker

humble timber
#

current idea is that it's actually not Horribly far from pelican town but not super close either

gray bear
#

shane would adopt a chicken pokemon

humble timber
#

is. hang on i cant even think of
oh torchic

gray bear
#

someone put this on shane i beg /lh

tribal ore
#

Does CP have an if/else syntax? I doubt it, but wanted to double check. Would love to write something like:
"Min": ( conditiontrue )? "VAL1" : "VAL2"

#

But I'm guessing I just have to keep creating paired dynamic tokens

hallow prism
#

CP has query

#

they can do a lot of stuff but you need the proper format

#

i can't really help with that as i don't like the logic involved but if you need help you may need to provide some context

tribal ore
#

Alright. I've used query but don't like the syntax. Was hoping for a shorthand

#

Ah well xD

karmic vortex
#

if i wanted to change the machine assets in industrialization redux to something else would using the method used in bogs resource rituals be the best way? link to bogs: https://www.nexusmods.com/stardewvalley/mods/26331 link to industrialization redux: https://www.nexusmods.com/stardewvalley/mods/22351

Nexus Mods :: Stardew Valley

I love the mod Resource Generators so I reached out to them to see if I could make a retexture of the machines to fit with my mods better. They approved and im so excited to bring to you a ritual summ

Nexus Mods :: Stardew Valley

Bring automation to next level! Completely made with only Content Patcher, Industrialization Redux is an 'upgraded' version of Industrialization for PFM, with changes, bug fixes and compatibility fixe

hallow prism
#

it will be hard to tell for people not familiar with those mods

karmic vortex
#

for industrialization, the asset files contain one large sprite index rather than individual files

hallow prism
#

you may want to provide examples of the goal and the method you want to use

#

large file is slightly better in term of performance, althought it is probably negligible on this scale

#

so it's about what is the easiest for you (what is the most logic, easier to maintain and such)

karmic vortex
late gull
#

Sorry if this is a dumb question - if I export a vanilla tilesheet (e.g. outdoors.tsx) to load and use in a custom map, do I have to include that tilesheet with my mod's assets?

humble timber
#

no

hallow prism
#

no, it's not dumb, and no, you don't include vanilla assets

#

you can have them in the same folder if needed if they are prefaced by a dot like .spring_whatever

#

i find it cleaner to not have them at all in mod release, but i know different people work differently on their mod

late gull
#

Thanks, that's what I thought but for some reason outdoors.tsx can't be loaded unless its in the same folder as the map file

#

Ah shoot, I didn't realize in my process of learning to not copy tiles between maps... That means I'll need to include the tilesheet with the dot preface, I assume?

hallow prism
#

i'm not sure of the reasoning?

late gull
#

Sorry, I'm quite confused right now because I'm learning so I might not be able to communicate what I mean in the best way. I exported outdoors.tsx from the Mountain map to use to in my custom map. In the process, I copied the train tunnel tiles from the Mountain map and pasted them to my custom map. Now when I try to load my custom map, it refused to load unless outdoors.tsx is in the same folder as the map file. I am not quite sure what to do from here

hallow prism
#

you need to embenning the tilesheets if i remember right

#

this option (yours is likely not in french)

#

honestly i'm not quite sure of the details so you may want to have a backup and tinker with stuff

gray bear
#

if it's a tsx file ur doing it wrong

hallow prism
#

not really, it is convenient to import some datas as far as i remember

#

all the tiles animations

gray bear
#

if they're just using map tilesheets like spring_outdoorstilesheet is it also fine? will the game recognize it.

hallow prism
#

i mean, it's why i suggest the embedding, but potentially, i don't remember what is the content of the file exactly

late gull
#

The method I've been using is Map > Add External Tilesheet which loads a tsx file. It doesn't prompt to embed it. Should I be adding a new tilesheet instead, checking embed in map, and setting up the animations myself?

gray bear
#

there should be a checkmark, lumina showcased it

#

I am unsure how smapi handles tsx maps

lucid iron
#

Badly tbh

#

Anyways you can embed it afterwards

tame burrow
#

Tene Nova got me using tsx sheets bc they save all the animations in vanilla on export. I just always forget to embed it

gray bear
#

if you embed it you can remove the tsx file later?

late gull
#

Thanks, I've found the embed button on the tilesets tab and it now works without the tsx file 🙂

gray bear
finite ginkgo
gray bear
#

the modding maps page only refrences tile animations

finite ginkgo
#

There's no functional difference between just the png and a tsx after being embedded, all the data is in the map afterwards

#

The tsx just comes with the data already bundled in

hallow prism
#

yeah it's really convenient if you set everything on a map in term of anim and for whatever reason needs to export it to another but can't copy the map as a base or whatever

gray bear
#

ah, I understand now, thank you Ender and Lumina 💜

lethal herald
#

Hi, I'm a new to mods.

#

I wanted to know if there's a way to ALWAYS show me a menu like the one shown in dialogs or schedules ($q), or something similar, when I right-click on an NPC, for example Robin.

#

Using Content Patcher.

lethal herald
lethal herald
#

Thanks, I'll check it out.

trim ruin
#

Hello SDV Modding community!

I'm determined to make a whole new Bachelor Mod with doing the coding and all. With just one problem... I don't know how to code or even find my way around Visual studio code. I wanted to do it entirely myself but I figured very quickly that I'm absolutely gonna need help. I've downloaded the september 2022 version (1.72.2) of VSC, SMAPI, ContentPatcher and .NET v6.0.428 like the Stardew Mod wiki instructed and have already added C# but the .NET doesnt even show up in VSC. Instead it installs .NET Install tool (is it supposed to...?)
The wiki then says to "create an empty Class Library project. (Don't select Class Library (.NET Framework)!)" - The option to "create an empty class library project" doesn't even show up for me and I'm honestly overwhelmed...
I hope some more experienced modders can help me figure out the the problem(s) and help me solve them. ✨

lucid iron
trim ruin
hallow prism
#

then you don't need C#

#

you may be able to do everything with CP unless you really want fancy stuff

#

Content Patcher

#

!npc do we have a command

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:

gray bear
#

this is quite a nice command

hallow prism
#

(dear junimos, i'd like to report a bug, i used a command and it was the correct one, i believe there is an error somewhere /j)

humble timber
#

lmao

ocean sailBOT
#

makenpc is now an alias for npc!

gray bear
#

figured that'll be helpful? idk

trim ruin
hallow prism
#

sure! note that it is still a lot of work, but you can do it step by step and get help

humble timber
keen mortar
#

hi! anybody know where to start if i want to make a dialogue expansion mod for npcs? SDVpufferheart

obtuse wigeon
#

Oh.. wow... either SVE or Alec revisited do this to the forest map... it's so laggy!

gray bear
#

what, happened

hallow prism
#

lot of tiledata

obtuse wigeon
#

It seems many tiles have multiple layers of tile properties

hallow prism
#

ok, time for a break before tackling {break}

urban patrol
obtuse wigeon
#

Oh, odd? I've never seen it happen before, even with the same map

lucid iron
#

It's actually due to a smapi bug fix

#

The rotation data are now baked into the tiles

obtuse wigeon
#

Ahhh so patch export maps will always look like this from now on?

calm nebula
#

Yeah

#

Oops sorry

lucid iron
#

Atra can you fix it thx

#

Just PR CP to clean these outta the export plz

gentle rose
#

is this from the alpha version of content patcher for .16

lucid iron
#

No it's just current smapi

gentle rose
#

ah

calm nebula
#

Look, the second I get some free time I'm taking a long well deserved nap

#

And then I'll putter around a bit

#

And THEN I'll consider cleaning that up

tribal ore
#

Any mods that will show the number of days before a CT expires to the user?

lucid iron
#

Do u wanna make one

#

I think the problem is localizing CT names

tribal ore
#

I don't really want to make one, no :/ I was hoping I could recommend one to users who get impatient when timers don't run out quickly

#

"If you want to see how long before X happens, install this mod"

#

If there isn't one... maybe I'll think about making one eventually

lucid iron
#

I think the best thing you can do as mod author is just send some mail

#

Or hud message even

tribal ore
#

sigh Yeah. Mail requires an in-universe explanation for immersion. At least, I feel like they do

#

HUD messages are interesting. But is that a C# thing only or can I do that with just CP?

lucid iron
#

Farmer the unusually large chicken statue you ordered is ready please come pick it up -Leah probably

tribal ore
#

My problem is that, for wedding proposals, I introduced random timing between when you reach 10 hearts and when the proposal happens. So even for the proposals that require letters to start, I'm not going to have NPCs saying "Hey farmer, I'm going to propose to you in 10 days. Mark your calendar."

#

People can turn random timing off. But they get impatient

lucid iron
#

Patch the calendar then

tribal ore
#

Hmmmmm

uncut light
#

Hey, I'm not sure if this is the right channel but I was trying to debug a mod and the game would fail to launch. I put in the right game path, the debugger would update the mod, but it would fail to launch automatically. It got fixed when I moved the project to the same drive as stardew is on, is that a bug with the debugger or was there just an issue with the project I was using?

lucid iron
#

I do kinda want to make a calendar display mod

uncut light
lucid iron
#

A C# ide, has known bug for debugger stuff

uncut light
#

No I was using VSCode

gentle rose
#

vscode or visual studio?

uncut light
#

Visual Studio Code

gentle rose
#

(also, what's your beagle's name bcaHeartEyes4You)

#

btw this is absolutely the right channel dw

#

but most people here use either Rider or VS so it's hard to tell tbh SDVpufferthinkblob it may well be an issue with the debugger

uncut light
#

I had fixed the issue by moving the project to the same drive, but I'm mostly just wondering if it was an issue with what I'm using or I should make a github report about it

gentle rose
#

both rider and vs are free for non-commercial use though so I really recommend downloading those if you're going to be dealing with c# stuff!

gentle rose
mellow knot
#

@brave fable saw the mushroom propagator update !! One of my OG favorite mods hehe. I was wondering, I saw that other objects can be added via config, but would you be ok with CP mods that add objects and matching growth sprites to the propagator? I was thinking an add on for either WAG or Rose and The Alchemist could be a lot of fun for folks (and me. Im folks. lol)

lucid iron
pine elbow
#

learning how to make pixel art

gray bear
#

!pixelart

ocean sailBOT
#

Where to Start With SDV-Style Pixel Art
If you've never done pixel art before, don't stress! It's easy to pick up the basics - the key is to start small, ask for feedback, and incorporate that into your work.

To start, you'll want an art program. See a list of recommended programs in the !software command.

Here's some good beginner tutorials!
http://pixeljoint.com/forum/forum_posts.asp?TID=11299&PID=139322
https://medium.com/pixel-grimoire/how-to-start-making-pixel-art-2d1e31a5ceab

To start off, try opening an existing portrait and changing the outfit. Start small: edit a shirt pattern, change a jacket collar, or remove a scarf and draw the clothes underneath. Ask for feedback too! The best way to improve is learning how to identify what's wrong and why, so then you can work out how to fix it.

Here's more good tips from the artist of "Celeste":
General pixel art 1: https://www.patreon.com/posts/pixel-art-1-6971422
General pixel art 2: https://www.patreon.com/posts/pixel-art-part-2-11225146
Outlines: https://www.patreon.com/posts/outlines-14106192
Shading: https://www.patreon.com/posts/shading-13869731
Portraits: https://www.patreon.com/posts/portraits-8693396

SDV has a few quirks to remember too:

  • Colour limits: Limit the number of shades you use - stick to six including the outline.
  • Hue shifts: Rather than making shadows and highlights lighter or darker versions of the base tone, SDV shifts the hue too. Eg. a base orange will have yellow highlights and red shadows. This goes for skintones too!
  • Light source: SDV uses a top-right & slightly forward light source - check the vanilla art for reference.
    Most importantly, don't hesitate to ask questions and get advice from people. Have fun!
gray bear
#

!pixelartinfo

ocean sailBOT
trim ruin
#

Alright, I'm as far as creating the manifest.json file and used the code on the wiki as a template. I do have a question about the UpdateKeys Space: Do I NEED to have a ''Nexus: X/Y'' number thingy and if yes - where and how do I retrieve it from?

gray bear
#

Nexus one is achieved by making a mod page on nexus

#

u want this bit here

trim ruin
#

Oof I assume that means I need it lol Thank you!

uncut viper
#

(you don't NEED it though)

gray bear
#

(changes with different mods ofc)

trim ruin
#

Oh!

gray bear
#

oh yeah it's optional, can always add it later

uncut viper
#

just don't forget to add it before you publish your mod

trim ruin
#

ahh I see

gray bear
#

making a mod page is a finallizing step so just, keep it as "Nexus:" for now

trim ruin
#

so I can just put "0000" in the blank until I have it?

uncut viper
#

could also just put []

trim ruin
#

Alright thank you!

gray bear
#

smapi will complain, but nothing will break

uncut viper
#

I wouldn't put a real number because then SMAPI won't tell you that you're missing the update key

#

but in this case the SMAPI telling you it doesn't have an update key is good bc it hopefully means you won't forget it

#

hopefully

gray bear
#

hopefully indeed

trim ruin
#

I'll just write placeholder in it then haha

gray bear
#

no don't, do that

uncut viper
#

writing the placeholder is the opposite of what was just recommended

trim ruin
#

Oh

gray bear
#

["Nexus:"] or just []

uncut viper
#

The first one would need quotes bea

trim ruin
#

ahh alright, Thanks

lucid iron
#

Tbh if you are worried at all just go make a page now

gray bear
lucid iron
#

you can get the number before you ever upload a file

nova mirage
#

hello guys

gentle rose
#

idk if this is the right place to look for minecraft and 3d modelling commissions ngl 😅 considering this is a stardew modding channel

uncut light
#

Very new account?

gray bear
#

i don't think we allow for self promo either

gentle rose
#

is it not? there's the commissions command and everything

uncut viper
#

You can put commissions on your dn but can't promo yourself

gentle rose
#

ah I see

nova mirage
gray bear
#

that is different. see rule 5

lucid iron
#

Can you invent sdv 3D before you offer sdv mod 3D comms

gray bear
#

someone tried doing that once no

lucid iron
#

I mean i think it'd be cool

gentle rose
#

tbf they only offered minecraft mod comms

gentle rose
obtuse wigeon
#

FPS stardew

uncut light
#

If you mod minecraft enough its basically indistinguishable from stardew

gray bear
#

elaborate

gentle rose
#

with enough mods anything is possible

lucid iron
#

Idk i seen minecraft vids where someone plants wheat

#

Basically sdv already trust

gray bear
#

it does got farming, combat, mining

#

fishing?

brittle pasture
#

can you romance shane in minecraft tho

lucid iron
#

Mc villager noises mod...

gentle rose
fading walrus
fringe steppe
#

Is there anyone with the tractor mod here ...

gray bear
#

what do you consider a shane

lucid iron
#

Instead of good VAs we just give everyone villager noises

gentle rose
lucid iron
#

It'll be great trust

#

-# voxbox when

brittle pasture
fringe steppe
#

No i just have a question about the tractor mod

#

☹️

gentle rose
#

oh, then what selph said

gray bear
#

still modded-farmers, we make tractors here

#

well by we i mean just pathos

fringe steppe
#

Sorry im a bit slow shsjajajs

gray bear
#

no worries Bloberoji_Pat

gentle rose
#

dw, hopefully they have an answer

#

well pathos didn't make a tractor, he put a tractor costume on a horse

gray bear
#

i think he fixed it showing on the animal tab?

lucid iron
#

I thought tractor was originally made by someone else

gentle rose
#

just invisible now

gray bear
#

o

#

i didn't know this lore

obtuse wigeon
#

While Pathos has made many mods, they also maintain many many mods that have been either abandoned or not updated in a very long time, CJB suite is one

gray bear
#

Stop Killing Mods

#

!pathos

ocean sailBOT
#
uncut viper
#

and somehow has time for all of them

#

and official dev work

gray bear
#

what is a pathos

obtuse wigeon
#

I'm struggling with my few, I have no idea how pathos does it, I swear they own the time turner or something

uncut viper
#

and maybe another job on top of that? Unsure

#

Pathos is the closest I've seen to an actual modding machine I think

gray bear
#

maybe he just has a time machine

uncut viper
#

(/complimentary)

obtuse wigeon
#

Have we thought that maybe Pathos is not just one, but many many people disguised as one

brittle pasture
#

and erinthe SDVpufferwoke

obtuse wigeon
#

Pathoschildren

uncut viper
#

if they are a collective, then at least they are all nice

gray bear
obtuse wigeon
#

Is there a mod that lets you set a machine to only do specific recipes?

gray bear
#

what u mean

obtuse wigeon
#

Like sets a furnace to only process Iron bars, but not Gold or Copper

#

even though they''re in the same chest

#

forgor to say for use with automate

brittle pasture
#

Machine Control Panel

obtuse wigeon
#

Ahh perfect thank you! this will make it easier to debug which things aren't working

obtuse wigeon
#

Unfortunatly it doesn't Quite seem to do what I'm looking for, unless I'm completly missing it, it only lets me set machine rules for areas and not specific instances of machines

lucid iron
#

Yeah that's what it do atm PecoWant

#

What is the goal here

obtuse wigeon
#

at this point I don't even remember the original premise for this mod

#

no more working on it tonight, brain = mush

lucid iron
#

Well machine control panel isn't a framework anyways

#

It does do more processing than LA in terms of determining what recipes and what output so you can use it to check stuff easier

obtuse wigeon
#

That's what I was intending to use it for, as a diagnostic tool than a framework

ivory plume
#

(Little experiment for Data Layers: an 'auto' layer which chooses the best overlay for whatever you're holding.)

gentle rose
#

is there a mushroom log range data layer btw?

ivory plume
#

Nope, though it's on my list of ideas for future versions.

ivory plume
#

Yep! That's on my list of ideas too.

lucid iron
#

I made a standalone thing for wiki graphic purposes

ivory plume
#

(And the 'auto' layer could show it when you select a fishing rod.)

lucid iron
#

But i wanted to PR the player version to data layers too

#

Dunno how we should display the fishing area though

ivory plume
#

Color-coded might be fine, with the default group borders so you can count depth even without color?

blissful panther
#

Yeah, solely colour-coded without configuration could be a bit of an accessibility problem.

That auto-layer feature would probably turn Data Layers into something I use and have enabled all the time, though.

obtuse wigeon
#

Color coded only could work fine as long as the brightness/ contrast also changes with fishing depth

#

(or unique shapes for each fishing depth in a different brightness contrast or numbers like the image)

lucid iron
#

I was lazy so i just drew actual numbers (for this one off thing)

#

Did you know you can get 0 fishing depth sometimes

obtuse wigeon
#

The numbers work great, I just dislike pixelated fonts

#

0 depth fishing spots?

lucid iron
#

By fishing area, I meant the big white bordered box saying "RiverAndLargePond"

#

It's very at odds with the current data layer ux

blissful panther
late gull
#

Do I have to do anything specific for season changes on my custom map? The tileset doesn't change with the seasons.

lucid iron
#

Is it outdoors

late gull
#

Yeah it is

lucid iron
#

Are your tilesheets named like spring_blah and is sourced from content

late gull
#

Main one is outdoors.tsx, i am using spring_town too but only for one of the buildings.

gray bear
#

rename to spring_outdoors ?