#making-mods-general

1 messages ยท Page 191 of 1

teal bridge
#

Sure, probably. But how do the UI mods know what the trigger actions are?

tawny ore
#

That way every action is registered to a data path Data/TriggerActions

lucid iron
#

I don't think i want some other mod running whatever action I am using for other reasons

teal bridge
#

There are tons of trigger actions and most of them are contextually irrelevant, the consuming mod needs to know which actions can be performed "at will".

uncut viper
#

im not sure where Data/TriggerActions comes into this

tawny ore
#

Or wait I'm confusing things, I mean registering an action

teal bridge
#

Trigger actions gives a way to represent some code as data, I guess. But IMO it's solving the easy part of the problem, not the hard part.

tawny ore
#

I'm just thinking where would you generically want to have a library of actions that can be performed where mods could add custom ones in addition to vanilla ones

lucid iron
#

I feel like the current api is nice and straightforward if i gotta be registering anything at all, but that is from pov of c# mod who use your thing

teal bridge
#

What current API?

lucid iron
#

The iconic framework api that just takes an icon and a delegate

#

To have it add button on tool bar for me

teal bridge
#

Oh. Yeah, that's fine I guess, if every mod out there is willing to use Iconic and register its actions. I think a lot of authors might hesitate at the dependency though. Thus I suggest some "passive", dependency-less registration.

tawny ore
#

Yeah Iconic sort of does a thing where mods can register actions they want the user to be able to perform via a UI interaction

#

And also has its own built in integrations via reflection

teal bridge
#

Yes, I took a good look at it the other day now that I'm deeper into testing.

lucid iron
#

It's a optional dependency so i think if ppl knew about it then they wouldn't mind adding it real quick

tawny ore
#

I tried to keep it simple for what it does, but I also can see how a reusable integration could be good that itself didn't have any side-effects

teal bridge
uncut viper
#

i feel like if i couldnt trust someojne to check that to make it not actually a required dependency i wouldnt be able to trust them to set up the passive ienumerable-on-modentry way correctly either SDVpuffersquee

teal bridge
#

My point is that it's a better sell to them if they can be assured that their mod can't break as a result of them doing the integration.

uncut viper
#

that is very fair

teal bridge
#

And they don't have to add an optional dependency which will confuse users on Nexus ('cause you know it will, as annoying as that is).

uncut viper
#

but then thats still requiring hardcoded reflection, isnt it?

teal bridge
#

I suppose, in a sense, you have to reflect on their ModEntry. But it's one general reflection for all mods, not one snowflake reflection per mod.

uncut viper
#

or is the idea more to use it in conjunction with an API and fallback to the reflection only when necessary?

tawny ore
#

That's how iconic works

uncut viper
#

like if someone doesnt use the API

tawny ore
#

API, fallback to reflection, (also supports content packs providing the definition for reflection)

teal bridge
#

Anyway, I can probably just implement some of this myself too, but since my mod and Matt's do similar things and maybe there are others out there too (tool pouch or something?) a framework could be useful.

teal bridge
# tawny ore That's how iconic works

I don't think so... Iconic is snowflake reflection. I mean yeah, the code to actually invoke the reflected method is common but it has no idea which method to invoke unless it's hardcoded/configured.

tawny ore
#

I'm not sure how you would get around that?

teal bridge
#

The way Lookup Anything integrates is that any mod opting in declares a specific property on a specific object, which simply does nothing if LA isn't installed or used.

#

(or one of the ways, rather)

lucid iron
#

Hm if i understand it correctly the proposal is like

#

A mod's ModEntry declares IconicFrameworkCallback

#

Matt checks for that to get stuff

calm nebula
tawny ore
#

The point of Iconic Framework's reflection is that it only integrates with mods which haven't specifically opted in as a benefit to the user. API integration is still the preferred path.

calm nebula
#

As far as I'm concerned, the gold standard is an intentionally extended api

#

And an intentional integration

teal bridge
#

Of course I have <WarningsAsErrors>nullable</WarningsAsErrors/> on all my projects. But the same mod authors who are likely to forget are precisely the ones who go "ewww nullable no way"

calm nebula
#

Tbh, and I say this with all kindness in my heart

#

If you're not for static analysis

#

You're not for sanity

lucid iron
#

I forgor because I put ! instead of ? kyuuchan_run

uncut viper
#

maybe like. if the idea is to let another C# mod call a specific method in another mods assembly
first priority: have the other mod register that method with its method name or signature or whatever via your api
second priority: if they didnt use the api, reflect into that mods modentry to see if they added the field on modentry for passive integration
third priority: if both of those fail, just search their entire assembly til you find it
is that correct

tawny ore
#

For the third, I would just expect anything attempting to make the call using your mod provides the fully qualified name

uncut viper
#

as i also thought the point was to be able to use methods that the other mod might not have specifically chosen to integrate with

lucid iron
#

What if u steal their buttonschanged event if any

teal bridge
#

Static analysis is one tool for proving correctness, nothing less and nothing more. Anyone who says otherwise is full of shit.

uncut viper
#

(either via ignorance of the frameworks existence or choice)

calm nebula
#

I prefer bullying people about using nullable SDVpufferthumbsup

uncut viper
teal bridge
#

If you do API integration then you can get the qualified name pretty easily by doing a per-mod API. But yeah, if it's passive then better they provide it themselves.

uncut viper
#

i ofc agree fully qualified name is better and it would work just as well as the key for the cache

tawny ore
#

Because I feel like what we're looking for in terms of convenience is an alias to those fully qualified names

uncut viper
#

might be more annoying for people to figure out the fully qualified name though

lucid iron
#

R u make fuzzy search on loaded smapi mods then

uncut viper
#

i mean both normal C# reflection stuff and harmony's accesstools stuff can just kinda do that already

teal bridge
#

I might go do some kind of POC. One of the things I'm looking to do is have Iconic register "actions" instead of entire pages, and allow other mods to register actions too (including one of my own, AFS, which doesn't use GMCM's keybind system).

uncut viper
#

you can give accesstools just a string name of a method you think exists somewhere and it'll do its damn best to find it

teal bridge
#

De-duping then becomes an interesting problem, but... one problem at a time.

tawny ore
#

If there was a centralized way to uniquely register actions, then de-duping should be easy

uncut viper
#

i will probably also just go ahead and add the original api suggestion which was just grabbing config via api SDVpuffersquee before the scope creep brainstorming

tawny ore
#

Even for mods that are interfacing with Iconic Framework directly, I could just conditionally delegate the action to Button's mod or handle it on my own

#

Like, if this external mod is installed then register the actions on those mod's behalf, and if not just do what I'm already doing

#

@teal bridge should this shared dependency also handle the necessary UI info like icon, name, description?

#

Just thinking hypotheticals here

teal bridge
#

It seems logical, so it appears consistent across any UI mods.

lucid iron
#

I feel like it would make sense if it was just iconic framework itself no?

tawny ore
#

Also both Iconic and Radial support actions and alternative actions, so should that be a thing too?

#

I mean Iconic could do it, and I wouldn't mind, but the idea is that the shared mod doesn't provide any side-effects of its own

#

And Iconic currently adds icons

patent lanceBOT
#

@brittle ledge: update the abbreviations wiki page (3h ago)

uncut viper
#

the shared mod is the wholesaler its the other mods that sell it

teal bridge
#

Primary and secondary actions make sense although I could also just allow two separate actions to be set up in the same slot, one for primary and one for secondary, so the mods shouldn't necessarily have to worry about that.

#

Right now, mod actions just ignore the secondary.

lucid iron
#

Yeah i was thinking fron user pov of weh i dont want to download another dependency

tawny ore
#

Like Radial Menu can also be the central mod, but then anyone installing it would get the side effect of the radial menu

lucid iron
#

In the separate mod dependency case, i would register to that mod's api then i assume?

teal bridge
#

Yes. (Although technically in the upcoming version it can be entirely turned off)

tawny ore
#

At least for Iconic having this optional dependency, I could make it seem-less where it works one way or another depending on if the central mod is installed.

teal bridge
#

(But it's really rather specifically a controller mod so I'm not that keen on having it provide a general-purpose API)

tawny ore
#

My thought is I take Iconic's existing integrations and register on behalf of the other mods until or if they refactor

uncut viper
#

(focus, would you mind if i also experimented around with the general concept a bit, or did you specifically have plans to turn your proof of concept into the actual mod at some point? i dont want to step on toes)

tawny ore
#

If we keep to the same unique id then even if they add support, de-dupe should take care of it

teal bridge
#

Nah, go nuts, I'm just blue-sky speculating right now.

tawny ore
#

This has been a brainstorm session

uncut viper
#

much to ponder

teal bridge
#

In the short term I'm also fine telling users to pick up Iconic if they want more seamless integration, or integration with non-GMCM mod configs. Though before I release, I want to modify so that Iconic is just registering the items themselves, and users can rearrange them as they please.

tawny ore
#

I'd prefer that too, tbh

#

Just working with what's possible as of the current API, but I don't feel like I should monopolize a whole page or make users have to pick between my own generic actions as the main page vs others they may have setup

teal bridge
#

Yes, well in the past I was extremely limited since I was relying on GMCM/SpaceShared for the config UI. Now there is, actually, a working UI for customizing the lists, so I can do that - just have to modify the API itself.

#

The main impediment right now is design rather than code, I just haven't figured out a workflow for Iconic (and any other integrations) that I'm happy with.

tawny ore
#

Sweet. Just let me know when you have the API set in stone, and I can prepare a co-release at the same time.

#

Although if we're talking about refactoring around this new hypothetical actions mod, then it may be worth waiting to see how that pans out

teal bridge
#

Going by current pace, probably in a week or so. Since I'm depending on bleeding-edge Stardew UI features, I have to get that release out first.

tawny ore
#

I don't want to major/feature version twice in quick succession

teal bridge
#

Hopefully this wouldn't be a major version update for you (it will be for me, though).

tawny ore
#

I suppose not, it would just be a required update for compatibility

teal bridge
#

The old API will continue to work. You can migrate to the new one when you're ready. I'll use AFS as the test case.

#

Er, well, the part of the old API that hasn't changed, that is. Still have to do the change I mentioned a few days ago, to that enum that no longer exists.

tawny ore
#

Will it automatically inherit the new functionality? As in its icons and others could belong to the same page?

teal bridge
#

If I'm understanding your question, you're asking if Iconic items could be combined on the same page as other custom non-Iconic items?

tawny ore
#

Yeah, if it's still registering a page instead of individual actions, will it act as if it registered the actions?

#

Just wondering if no action on my part would work with that future state you described

teal bridge
#

Ah, well I didn't really want to take away the ability to register actual pages, the original idea was for something like the S&S menus Casey was doing where all the items were actually closely related.

#

That said, given that Iconic is currently the only integration that's actually out in the wild, I guess it's possible to come up with some kludge where mods that really want their own distinct pages have to opt-in with an extra flag or something. But... it's pretty uggo.

#

See, as of today a page is an actual page. Pages in the mod menu are a real thing, just like pages in the inventory menu. So if you register a "page" with specific items, it's fairly brutally hacky to have items rearranged on that page or even moved to another page and somehow figure out how to retain that info and apply it consistently.

tawny ore
#

Ah, don't do that for me. I'd rather just update Iconic as soon as it's ready.

#

I'd like for it to work that way so I'm interested to support it

teal bridge
#

Yup, it'll be fine though, I promise it won't be a complicated change for you.

#

Probably simplify things actually since you just won't need the page at all.

#

(And for anyone wondering, yes, this was a severe case of scope creep, it started out as "fix or replace the dumb broken pile of hacks in the GMCM menu" and turned into a full-on rewrite)

lucid iron
#

I'm glad we have the tool to make zelda in sdv now

true galleon
#

Iโ€™m coding a new crop, is there a way to make regrowth cycles different for different seasons? Ie. a crop takes longer to grow in spring than summer

lusty elm
#

Probably have to conditionally patch the Crop's data after you've added it to the game, based on season?

lucid iron
#

Need to double check if regrow days is something that gets propagated to already planted crops

true galleon
#

Sorry, growth, not regrowth

dire canopy
#

Is that event writing tool still available?

hallow prism
#

which one?

dire canopy
hallow prism
#

i don't remember seeing it around

#

honestly i think you may be better doing that yourself now that event writing was improved tremendously by 1.6
you can return to line (or whatever this is named)
and the testing logs errors and usually why they are error

dire canopy
#

I hate doing events ๐Ÿ˜…

hallow prism
#

you can always test it a bit while waiting to see if someone knows about the tool

#

well, those two helped me go to "brr, events, scary, don't like making them" to "hey i can do events, it's ok"

#

it still is easier for me to do them in batch to remember how they are done, but still, great improvement

dire canopy
#

I know you can flip farmer's but I don't know if that comand works on NPC

wanton pebble
#

What would cause a recipe to be correct in the cooking menu, cook fine, but not show times cooked and the correct ingredients in the collection menu for cooking?

teal bridge
#

That actually makes me wonder... can you call performUseAction on a tool that isn't selected? It doesn't literally let you swing the pickaxe with X and sword with Y, but now I'm wondering if it technically could.

#

Then it would literally be Zelda/ARPG controls.

lucid iron
#

When u tried that i managed to use up stamina without applying the effect of the tool 1oo

#

However i was using a fake created tool for that, u can probably just move current tool to the thing right

teal bridge
#

Ah well. There's probably some clever hack (switch tool, use tool, switch back) but I'll investigate that later, maybe for a 1.1.

gentle pebble
#

Im making a mod and its my first time trying to make one I am mostly watching youtube videos and looking at stardew files which I can access would chat gpt also be able to help for parts? or is it not reliable

hallow prism
lucid iron
#

No

#

Please just ask here

#

Chugpt at ur service

ocean sailBOT
#

Please stop trying to get ChatGPT to write your C# mods for you, especially if you don't know how to write C#. It won't work without heavy editing, and it wastes everyone's time.

Large language models fundamentally are reguritating something from their inputโ€”which is roughly speaking, the written output of humanity up until 2021 or so, for ChatGPT. For specific, niche topics like "is this framework going to do what I want" or "which things does Game1.cs have access to", it probably has no idea! But it's good at detecting that people in the past have....said things about frameworks and written things in C#, so it does its best to assemble words and symbols into a nice order for you. Sometimes it tells you true things, and sometimes it tells you false things, and if you can't detect when, you're in trouble. When you're writing code, this usually produces garbage, because you can't be "sort of similar", you have to be exactly correct or it won't work.

wanton pebble
#

forgot the !

hallow prism
#

However its late here so i will not be around to answer more

uncut viper
#

also dont use videos if you're not sure theyre up to date

wanton pebble
#

You can flip the sprite when animated, it's how DNR does kiss frame flipping

#

but I'm not sure about baseline sprite flips

uncut viper
#

anything before march/april 2024 is not up to date

wanton pebble
#

uh

lucid iron
#

It's an active channel so most questions will get answered wew

wanton pebble
#

there you go button XD

gentle pebble
#

slay

uncut viper
#

(brain crossing it with the thought "use things made after march/april" SDVpuffersquee)

uncut viper
calm nebula
#

We set a new record for dumbest patch yet!

uncut viper
#

whats the record now

teal bridge
#

I wonder if we can find chugpt's jailbreak prompt.

lucid iron
uncut viper
#

wow

#

well played

reef kiln
#

This is going to be a stupid question. but I want to add hat to my pet fox. The Hats for pets mod let me do it. but I need to get the pixel count x and y to set it up. What program is the best to find those? Photoshop does not really make it easy.

wanton pebble
#

blinks

#

don't pets already let you add hats natively?

uncut viper
#

basically any image editing program will do

#

i believe so yes

reef kiln
wanton pebble
#

... I might need a source on that one frog

#

because I swear it works for any pet, just might have to alter where it gets placed

lucid iron
#

That mod doesn't let u add hat, it just make hat fit better

reef kiln
#

The source is I try to add a hat and it does not let me

lucid iron
#

Did u try just vanilla hat yet?

calm nebula
#

Hey lyoko

wanton pebble
#

Oh god, that's right

#

Hi atra!

calm nebula
reef kiln
#

I dont know if it was vanilla as I cheated it in. it was just a random hat. the chef hat. is that vanilla

wanton pebble
#

Oh, right, atra, you might or might not know re: special orders but the Drill Baby json has nothing in changes

reef kiln
patent lanceBOT
#

@tawny ore: this (4h ago)

uncut viper
lucid iron
ocean sailBOT
lucid iron
#

Gimp is what i use for simple image edits

gentle rose
#

speaking of hats, I found a fun thing when writing some code for avi which is that you can't put a hat on a horse that doesn't have a stable SDVkrobusgiggle

#

(you also can't feed it carrots)

lucid iron
#

Well ofc not the horse needs a hat rack before accepting hat

wanton pebble
#

(Before it gets lost, I'll repeat my q a moment: What would cause a recipe to be correct in the cooking menu, cook fine, but not show times cooked and the correct ingredients in the collection menu for cooking?)

reef kiln
wanton pebble
#

Nope!

lucid iron
#

Will need to see the particular recipes code then yggy

uncut viper
#

and a mod list, probably

wanton pebble
#
{
            "LogName": "Orange Juice Recipe",
            "Action": "EditData",
            "Target": "Data/CookingRecipes",
            "Entries": {
                "AgentLyoko.SaloonBreakfast_FreshOrangeJuice": "635 2/77 7/AgentLyoko.SaloonBreakfast_FreshOrangeJuice/modmail/{{i18n:SB.OJ.Name}}/",
            },
        },
#

annnnnnnnd I can grab my log in a moment, but a user actually reported it earlier and I replicated

uncut viper
#

did they give a log?

#

is the resulting item a Cooking item?

wanton pebble
uncut viper
#

categorically

wanton pebble
#

But the resulting item is a cooking item and it cooks correctly

#

it's just broken in the collections menu. Otherwise it works perfectly.

#

hm, gimme a moment longer to grab log. I've been learning then immediately cooking, but I'll get a log of the day after so it saves I have the recipe, then give OG log and then hopefully just it in a log

uncut viper
#

wait, i misread the code a bit, can you post the json for the resulting food item?

#

like the thing in Data/Objects

wanton pebble
#

here, let me just drop the json in the validator

#

....huh, not immediately bookmarked

#

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

wanton pebble
ocean sailBOT
#

Log Info: SMAPI 4.1.10 with SDV 1.6.15 build 24356 on Microsoft Windows 10 Pro, with 85 C# mods and 169 content packs.

wanton pebble
ocean sailBOT
#

Log Info: SMAPI 4.1.10 with SDV 1.6.15 build 24356 on Microsoft Windows 10 Pro, with 4 C# mods and 1 content packs.

wanton pebble
#

Same deal, mind.

uncut viper
#

and its still broken in the collections menuy with just that tiny mod list?

wanton pebble
#

Yep

uncut viper
#

alrighty, just makin sure

wanton pebble
#

again, ONLY in the collections list.

calm nebula
#

I find it concerning

wanton pebble
#

it works otherwise

calm nebula
#

That the recipe is sap

wanton pebble
#

that's the default broken recipe XD

calm nebula
#

Do you have underscores

#

Oh for the love of fucking insanity

#

Lyoko, I need to drive homw

wanton pebble
#

drive home and don't die atra

uncut viper
#

dont a lot of modded recipes have underscores in them?

calm nebula
#

But i will tell you the answer to your question is fucking underscores

wanton pebble
#

I see the underscores. I'll see what I can do here

calm nebula
#

Button, look at the collections code and cry with me

uncut viper
#

i have looked at it a lot

calm nebula
modern ether
#

can anyone tell me if i can/how to make Producer Framework Mod overwrite vanilla recipes?

gentle rose
#

wait what are we crying about? can I join?

lucid iron
#

you should use vanilla machine stuff if possible

uncut viper
#

the hovered recipe grabs the name of the ClickableTextureComponent and splits it by spaces to find the item ID
the ClickableTextureComponent's name is created by combining the ItemId of the item, plus a space, then some other values

#

so i am unsure where the underscores come into play

calm nebula
#

Oh.

#

I forgot the spacer

uncut viper
#

(so incidentally, dont put spaces in your item ids lol)

calm nebula
#

Thought it was underscores lol

#

Hmmm

uncut viper
#

by all accounts i dont see how it could possibly be skipping getting some description

#

oh

#

try changing the Name to match the ItemId

#

in Data/Objects

#

(or rather i think it should match the recipe ID, but in this case thats identical anyway)

#

the name is an Internal name and should really match the item id anyway

wanton pebble
#

huh?

uncut viper
#

the Name field, not the DisplayName field

wanton pebble
#

Oh

wanton pebble
uncut viper
#

not a dang clue

wanton pebble
#

Got it. That's one annoying bug squashed

#

Thank you Button and Atra

uncut viper
#

does it actually say times cooked now?

#

do any of them actually say it?

calm nebula
#

Atra wasn't helping

calm nebula
wanton pebble
uncut viper
#

question rq for my curiosity then

#

does it say that in the cooking menu?

#

when you go to cook it

wanton pebble
#

let me disable LoC's custom one...

#

(sorry, had to go to main menu to disable it, it's under features so no choice. Loading back in now)

#

LoC's custom one does not

#

but the vanilla one does.

uncut viper
#
case "Cooking":
{
  description += (Game1.player.recipesCooked.TryGetValue(id, out var timesCooked) ? Game1.content.LoadString("Strings\\UI:Collections_Description_RecipesCooked", timesCooked) : "");
  if (this.hoverItem == null || this.hoverItem.ItemId != id)
  {
    this.hoverItem = new Object(id, 1);
    string last_minute_1_5_hack_name = this.hoverItem.Name;
    switch (last_minute_1_5_hack_name)
    {
      ...
    }
  this.hoverCraftingRecipe = new CraftingRecipe(last_minute_1_5_hack_name, isCookingRecipe: true);
}

i asked bc im pretty sure that description += at the top literally does nothing then lol

#

it was breaking bc of the new CraftingRecipe at the bottom using the Name and not the ItemId

#

so it defaulted to torch

#

but even if that was the case that description thing at the top shouldve still like.... worked

#

but if it wasnt displaying anywhere, then.... ???

wanton pebble
#

My brain may be a little fried right now, so what you're saying is this is a vanilla bug technically?

#

(I know, standardization, but still)

uncut viper
#

maybe?

#

i guess one could try editing that Strings\UI thing to something custom and see if it applies

#

maybe ill try that real quick

wanton pebble
#

If it does, I'll take the bullet and ping Pathos on it

uncut viper
#

it shouldnt be empty bc id was valid, they used that to create the object in the first place

#

last time pathos got told of a vanilla bug he said hes a mod author right now and vanilla bugs dont exist to him ๐Ÿ˜›

wanton pebble
#

Just as a check - dynamic tokens won't throw errors if they're using relationship tokens, right?

uncut viper
#

that should be fixed now yeah

wanton pebble
#

With the Saloon Breakfast bug squashed, I'm moving onto suppressing the config errors

wanton pebble
#

one sec, let me grab...

#

.

#

The fix was suggested there to be dynamic tokens

#

I don't want to solve the patch fix and then result in dynamic tokens always going "aaaaaaaaaaaaaaaaaah"

uncut viper
#

oh thats what you mean. technically that is not a bug and is working as intended so yeah dynamic should work

wanton pebble
#

Yeah. I'm working backward on my bug fix list - next up after this is finally frickin' integrating Buttons/EMP into DNR for the missed stuff system

#

(I'm sorry it's taken so long!)

uncut viper
#

im not even sure i know what you're talkin about so uh, dont worry about it i think SDVpuffersquee

#

im sure i knew at one point

#

also update i cant actually tell so easily whether that description += thing does anything bc. the same UI string is just used for the Cooking menu too, despite being called Collections_

#

luckily im stupidly stubborn enough and want to know badly enough that i guess ill write a quick transpiler to load a different string to see

#

thats dumb why would i do that i should just skip prefix instead if its for a test

#

never mind theres way too many private fields and this. ill do a transpiler. ignore me yapping

calm nebula
uncut viper
#

tell that to the council of receiveLeftClick Transpilers

calm nebula
#

I'm freeeeeee

#

Maybe

#

Maybe not

lucid iron
#

can u transpiler a yarn

calm nebula
#

Clearly

uncut viper
#

okay, i can pretty reliably confirm that description += thing in the collections page code is not used for cooking

#

so its just useless

#

in fact im not sure why it bothers having a description at all if its a Cooking type

wise holly
#

Hello!! Is there an easy way to understand which mod is compatible with SVE (and 1.6)? I had stopped playing the game before the 1.6 update and I'm completely lost now. Will start a new game anyway but I want to make sure I use compatible mods (ideally with an expansion such as SVE).

uncut viper
#

its just gonna display the recipe itself anyway

calm nebula
uncut viper
wise holly
#

thanks!

calm nebula
#

The sve discord at least also used to have a list of mods that went well with sve

reef kiln
#

Well, I kind of got the hat on the fox. back to pixel counting ๐Ÿ˜ญ

gentle rose
fervent horizon
brittle ledge
#

okay, abbreviations/acronyms page updated (as it turns out, both will point you to the same page https://stardewmodding.wiki.gg/wiki/Abbreviations

Stardew Modding Wiki

The modding community is a fan of acronyms and abbreviations. See a table below for some of the more common ones.

1.5 Abbreviations: Mods that are obsoleted or no longer actively developed, but may come up in conversation

gentle rose
#

itโ€™s definitely more fun though

versed wyvern
#

Does anyone know if the MarriageDialogue file's dialogue is ever used if MarriageDialogue(name) seems to have a corresponding key for the same situation? Like how there's a Rainy_Day_NPC line in the former but also Rainy_Day_0-4 in the latter

brittle ledge
#

Wasn't a lot to add but I did split the legacy stuff into its own table.

gentle rose
#

(sorry for ping, accidentally sent the message too early ๐Ÿ’€)

versed wyvern
#

Well every vanilla NPC has both because the character-specific dialogue files were added in a patch iirc

#

It seems like there are a handful of situations in the former not covered by the latter, so I think some of the keys are still used, but I'm wondering if a dialogue edit mod needs to bother with the ones that appear to be obsoleted by the latter

calm nebula
#

(rainy_day_NPC can still be used)

#

(but if, say, a character has their own Rainy_Day_0, they won't use the Rainy_Day_0 in the generic file)

versed wyvern
#

Ooh, okay, so I should still go through and edit those lines separately from the specific file's, thanks Noted

tiny zealot
#

MarriageDialogue<Name> is checked first, before MarriageDialogue. so the character-specific ones override the generic

wanton pebble
tiny zealot
#

corollary: if the generic line is fine for your NPC, you don't have to bother putting an entry in the specific character file

wanton pebble
#

That will affect other NPCs who default back to the general one, which is why I left ping on in this instance

#

(And I'd rather avoid that snafu!)

versed wyvern
#

Oh, I'm only touching that ones specific to that character, not the generic ones remFive

wanton pebble
#

Then you're good!

#

So just fill up all the MarriageDialogue<NPC> ones you think you need

#

(Sorry, I just remember Shiko's code from way back when whenever this comes up XD )

lucid iron
#

can i make an NPC do an action whenever i talk to them

#

even if i talked to them today already

uncut viper
#

if you've already talked to them today then you cant talk to them tho

#

(barring schedule dialogue and CTs)

tiny zealot
#

you can if you hijack checkAction (see lacey's hat reaction code)

brave fable
#

isn't it possible to have a looping dialogue in regular scheduling

lucid iron
#

ah so theres not rly a content patcher way bolbthinking

brave fable
#

like what if you make it a schedule animation

uncut viper
#

not vanilla-y

lucid iron
#

well ill just

#

give krobus a tile action where he stands

uncut viper
#

(that was in response to chu not blueberry tbc)

gentle rose
#

depends on what the action is

lucid iron
#

if it doesnt work ill probably just

#

put a sign of the vessel besides krobus to be the shop tile

versed wyvern
#

Are you making Krobus kontent? poge

lucid iron
#

im making krobus sell chimkins

#

i have no plans to explain where he got chimkins from

versed wyvern
#

Sewer chickens PogCrazy

gentle rose
#

well, where does he get the eggs from in vanilla SBVLmaoDog

#

I assume same place

brave fable
#

some questions weren't meant to be answered

versed wyvern
#

I think he says he steals everything, just like the dorf

gentle rose
lucid iron
#

they need special animal shops

#

i didnt like the vanilla menu

reef kiln
#

Is there a way to force pets to do specific sprites/actions with commands?

gentle rose
#

wouldnโ€™t having krobus open a new animal shop when you interact with him block his regular shop from opening though? or are you making a combined one

brave fable
#

maybe... a new use for a new nested dialogue question and action tile action framework

lucid iron
brave fable
#

you can't make me read documentation ๐Ÿ˜Œ

lucid iron
#

more seriously the problem isnt spawning a shop per say

reef kiln
#

It already has the option.

lucid iron
#

it's more ensuring krobus gets to talk to you

#

im gonna have to see who wins here

reef kiln
#

Animal bazaar is a great mod

reef kiln
lucid iron
#

the code that opens krobus shop when u arent roomies with krobus is in NPC

#

rather than GameLocations

#

still i dont feel like spending all that much effort dehardcoding this so if it doesnt work then i'll simply settle for a second tile besides him

gentle rose
#

if you can open it using a trigger action (which it looks like you can) you may be able to frankenstein aviโ€™s infinite yapping npc code into doing this for you SDVpufferthinkblob

#

with just content patcher and betas

lucid iron
#

i would have to implement the dialogue version in the action mode

brave fable
#

put a 2x2 chicken pen next to him. solved

#

or a 1x2 stack of chickens

#

up 2 u

versed wyvern
#

Yeah I was about to say it probably ought to be chicken-y

lucid iron
#

u r so smart blueberry

reef kiln
#

Is there a mod to freeze my pet in place. I am having a very hard time getting this hat correct as he won't stay still.

rigid oriole
#

if time pause mods stop characters from moving, that could work

versed wyvern
#

I don't think time pause stops random movement

rigid oriole
#

i guess pets have no schedules huh

versed wyvern
#

I feel like you really ought to be able to just imitate how existing hat assets look in order to get positioning right, though?

reef kiln
lucid iron
#

just make ur pet a turtle

reef kiln
#

I already have the turtle hats mod. I am trying to get them on the Foxes from the fox mod. I am the kind of person that doesn't like it when some of my pets can and others can't do something.

rigid oriole
#

me when I realize I just did an entire dialogue file outside of i18n

lucid iron
#

doomed

public override void MakeMapModifications(bool force = false)
{
    base.MakeMapModifications(force);
    if (Game1.getCharacterFromName("Krobus").isMarried())
    {
        setMapTile(31, 17, 84, "Buildings", "st");
        setMapTile(31, 16, 1, "Front", "st");
    }
    else
    {
        removeMapTile(31, 17, "Buildings");
        removeMapTile(31, 16, "Front");
    }
}
gentle rose
wanton pebble
#

....Man, I might have to leave this moddata thing for tomorrow. I'm a lil tired and I'm now remembering why I stopped was because I couldn't use the moddata inside an i18n key

rigid oriole
wanton pebble
#

If I set a mailflag in received on DayStarted, would it automatically be read by a subsequent trigger action also on DayStarted?

gentle rose
#

uh let me find a link, it seems pretty robust

rigid oriole
#

thank u!

uncut viper
wanton pebble
#

Hmmmmm that might be a way around it then

#

Because I record the last value of the date too

rigid oriole
#

is it standard practice to leave dialogue commands like @ or #$e# in the i18n file?

uncut viper
#

Data/TriggerActions is a list so you can MoveEntries them

brave fable
#

yes, you want to leave dialogue commands in the i18n

#

these things can vary with sentence structure in different locales

rigid oriole
#

ok cool cause separating them out seemed like way too much work

#

oooooo true

wanton pebble
#

so read the moddata of the last date and create a mailflag. have it read the mailflag and output the relevant date stuff

uncut viper
#

i would leave things like @ in the i18n but i would split up my #e#s personally

wanton pebble
#

oh yeah leave @ in the i18n. That's just the farmer's name.

brave fable
#

i would include $exit and $break commands.

#

they're not far removed from punctuation and the length of a translated dialogue line might change the best place to put a break/exit

tiny zealot
rigid oriole
#

thank u everyone for the input!

brave fable
#

i remember from my limited time working in mobile development that one of the deadly sins of localisation is adding lines together with hardcoded newlines. i don't see {i18n:line1}#$e#{i18n:line2} as being any different to that sin

devout otter
#

(To my shame I have a mail trigger in one of my i18n lines.)

uncut viper
#

an $e is not a newline though... it indicates the next thing is a new dialogue

#

if anything its a page break

teal bridge
brave fable
#

i have dialogue baked into my data/mail patch. i have no shame. fuck it

calm nebula
#

Localization? What's Localization?

uncut viper
#

its bc theres 10 letters between the l and the n

teal bridge
#

It's whatever you think you can get away with when shipping in another country/language.

lucid iron
#

why is the sewer like this

royal stump
#

same but busstop
testing some spawn stuff there and I forgot how much off-camera space it has SDVpetcatangy

versed wyvern
tiny zealot
versed wyvern
#

I've just been writing all my dialogue in the main content file because I don't want to think about splitting my attention between two files

#

Left that problem for Future Me but I will soon become Future Me snuffFear_s

tiny zealot
#

i made that mistake, and when i became future me i regretted it

royal stump
lucid iron
#

splitting files is great

#

its just like #include <stdlib>

sour sleet
#

Manifesting Bug Net mod to be updated for 1.6 ๐Ÿ˜

lucid iron
#

hm what is best way to check for CC complete in content patcher

uncut viper
#

check the host for mail flags i reckon

acoustic summit
#

Probably through mail

uncut viper
#

specifically CC or CC/Joja

lucid iron
#

yea im attempt to find the mail flag name

#

either

acoustic summit
#

On the wiki it mentions this main flag "ccIsComplete"

#

Though it mentions "if using Content Patcher, use the IsCommunityCenterComplete and IsJojaMartComplete tokens instead"

acoustic summit
tiny zealot
uncut viper
#

bulletin board is not SDVpuffersmile

#

the flag for it i mean

tiny zealot
#

ok, fine SDVpuffersquee
but e.g. ccVault means the bus is fixed, no matter whether junimos or morris fixed it

acoustic summit
#

That makes sense, I guess just check then for either IsCommunityCenterComplete or IsJojaMartComplete

uncut viper
#

wdym ok fine!! i was corraborating, not correcting

#

adding on if you will

tiny zealot
#

i did the squee face! it was a /lh! (/lh)

lucid iron
#

what is ur top 5 puffermoji

uncut viper
#

two exclamation points is also equivalent to a /lh i think

#

its like a barter system

lucid iron
#

here r mine

acoustic summit
#

SDVpufferheart SDVpufferwaaah SDVpufferwow SDVpuffersquee and SDVpuffercowboy as a cute but less used one

uncut viper
#

i smile just a lil more than chu does

lucid iron
#

this is because i only PecoSmile

acoustic summit
#

Screw personality tests, this is how you dissect a person's psyche

royal stump
#

I'm surprised SDVpufferlurk isn't in my top 5 anymore, I used to put it in every post

uncut viper
#

thats true you do do that ive seen it

tiny zealot
#

(unsorted)

uncut viper
#

i feel like there was a time where every time i saw Esca join the chat it was prefaced with a SDVpufferlurk

hard fern
#

...these are my top 5
SDVpufferflat SDVpufferwaaah SDVpufferchickcry SDVpufferdead SDVpufferlurk

#

i think my puffer is going through some emotions

uncut viper
#

not having a good time huh shrimply

brave fable
#

relatable puffers

royal stump
#

in part I just don't actively name-search my mods to do tech support anymore, so I'm not pinging people about 12h-old posts as much

uncut viper
#

you need to start pinging people just for fun

royal stump
#

(also SDVpufferthumbsup SDVpufferheart SDVkrobusgiggle SDVpufferthinkblob SDVpufferdizzy for my actual 5)

uncut viper
#

@royal stump hi Esca!

#

(a one time bit, dont worry)

royal stump
lucid iron
#

is krobus a puffer

tiny zealot
#

spiritually

brave fable
#

AI Overview
Yes, surprisingly krobus a puffer!

lucid iron
#

is SDVdemetriums a puffer

uncut viper
#

surprisingly krobus a puffer... love the sound of that sentence actually

royal stump
#

oh, I didn't even parse "puffermoji", I just think of SDV emotes that way
but also yes

#

SDVpufferlurk is #6 so I guess it's still up there

tiny zealot
#

i misunderstood the question and posted the five i like the best, which is why i said (unsorted)

uncut viper
#

i took the first five in the emoji picker which sorts by frequency so. i followed the instructions SDVpuffersmile

tiny zealot
#

"your top 5 puffermoji" is not unambiguous

uncut viper
#

yeah but i chose by frequency so therefore its in my best interest to assume i did it right

#

also quick C# question can you cast to a generic T type

lucid iron
#

yea if u r inside the generic

uncut viper
#

thank u

#

another question for a dumb idea that im not actually going to do but curious if it works: if i split up an API into different files and made it a partial interface would that still work if someone else tried to use it by just copying one of the partial sections

royal stump
#

that might be a Shockah-specific question, since it's up to whether pintail can work around it

lucid iron
#

assuming they r all truly independent i think it will

uncut viper
#

what do you mean truly independent

#

theyre partials

lucid iron
#

like u arent defining an enum in one of the interfaces or something

#

to use in all

uncut viper
#

hm

#

wait an interface can include an enum

lucid iron
#

cus if they r all just interface with some methods then its same as me copying a regular full IApi and removing the other stuff

royal stump
#

I'd assume it works the same since partial probably doesn't matter once it's compiled, and it's supposed to tolerate interfaces with missing bits
(on the user side)

uncut viper
#

maybe ill try it just to see if it works then

lucid iron
#

ig the bigger question is like

#

ytho blobcatgooglyblep

uncut viper
#

keywords being "just to see if it works"

calm nebula
#

The keywords are covariance and contravariance

uncut viper
#

but the initial thought was bc for the CMCT API thing if i wanted to split up the API into different files for config or translation or dynamic token for instance

#

so people can just grab the one they need

#

i dont think i actually want to do it

#

covariance and contravariance are scary words

calm nebula
#

Yeah, on the top level interface you can just delete what you aren't using

uncut viper
#

which one is top level? i thought they were all like. on equal footing

calm nebula
#

Mumble tired go look at a khloeapi

#

I have socks and I'm tired I'm sorry

lucid iron
#

how do i OR in content patcher When

calm nebula
#

Top level is the one that you copy that goes into the <>

calm nebula
lucid iron
#

weh ok

uncut viper
#

i only see one partial interface in khloes repo but i dont see where theres like, another piece of it. i see where its like... subclassed? i think? isnt that different

calm nebula
#

Not subclasses sorry one second

royal stump
calm nebula
#

oh yeah she found a bug

languid aurora
#

Is there a convention for naming custom assets you're loading into the game? I've seen both Mods/<mod id>/AssetName and <mod id>/AssetName for both data and textures.

uncut viper
#

just make it unique

acoustic summit
#

You can use either, both would be considered conventional. The main thing is keeping it unique like button said.

royal stump
#

Mods/ID/whatever is the recommended format, but anything works

tiny zealot
#

use mod id somewhere. other than that, do what feels right

acoustic summit
#

In both cases using the mod Id should keep it unique

calm nebula
#

public interface MyFancyAPI
{
    public IMyReturnValue MyFunction(IMyParameter arg);

    public int IrrelevantOtherMethod();
}

public interface IMyReturnValue
{
  public int Property {get; set;}
}

public interface IMyParameter
{
  public int OtherProperty {get; set;}
}
#

so, when I said top level, I meant MyFancyAPI, the interface you put into the <>

#

you can delete IrrelevantOtherMethod if you don't plan on using it

#

same thing with IMyReturnValue. If you don't intend on using that property, you can delete it.

#

BUT

#

for IMyParameter, since the api is the consumer of that, you can't delete OtherProperty

#

.... I think

#

I'm tired, I may be very wrong

uncut viper
#

that makes sense to me i think

#

but isnt that different from partial interfaces

calm nebula
#

the partials are irrelevant after compiling, so it's like copying half the api (aka deleting irrelevant methods)

sour sleet
#

Hypothetically, would it be possible to create a mod with a blank grassy area to sculpt how the player wants with a โ€œterraformingโ€ mechanic to add cliff and rivers like in Animal Crossing?

uncut viper
#

so it should work fine?

languid aurora
#

Yeah mostly just asking if there was a convention the mod authors would be more likely to recognize when skimming other's mod code. In that regard I think leading with Mods/<mod id>/ is probably best since it's the most "obvious" to me.

uncut viper
acoustic summit
calm nebula
calm nebula
#

Casey did

uncut viper
#

good to know, thank you SDVpufferheart

calm nebula
#

also, hypothetically before you start that, you should play around with tiled a bit first

sour sleet
#

Iโ€™m familiar with tiled but not so much C# lol

acoustic summit
#

Stardew tricks you into thinking it has "elevation" as a concept.

calm nebula
#

Anyways, enjoy!!!!

#

I got new glasses today

brittle pasture
calm nebula
#

the world feels very very weirdly in focus

sour sleet
proven spindle
calm nebula
#

(I don't know if she released it or not.)

languid aurora
calm nebula
#

I'm also running on about....four hours of sleep today and four yesterday so the world is both very clear and fading in and out of focus

#

it's very weird

sour sleet
rigid oriole
#

content patcher is chill about // comments in json, ya?

uncut viper
#

yes

rigid oriole
#

woohoo

#

giant i18n time (with comments ๐Ÿ˜Œ)

uncut viper
#

more accurately, SMAPI is

acoustic summit
#

VSCode will cry, but CP will vibe

calm nebula
brittle pasture
rigid oriole
vernal crest
#

SDVpufferheart SDVpufferparty SDVpufferthumbsup SDVpufferwow SDVpufferpensive (because I was in support while you were all posting your puffermojis and I want to play!)

rigid oriole
#

do i not read enough docs

uncut viper
#

i18n can do subfolders yes

calm nebula
uncut viper
#

added in uhh. idk. october

sour sleet
uncut viper
#

learn C# to start

calm nebula
#

these are my emojis

uncut viper
#

excellent heart choices

calm nebula
#

I do a lot of pointing up, don't ask me why there's a fish, I have hearts, and there's at least one kekdog and blob heart

#

may I also point you at the knitting heart

sour sleet
#

Good idea, need to learn it anyway for something else haha

gaunt orbit
tiny zealot
#

point_up supremacy (i do not like the thumb on point_up_2)

vernal crest
proven spindle
#

Oooo I want to play too. Let's see... SDVpufferfall SDVpufferwow SDVkrobusgiggle SDVpufferthumbsup SDVpufferyoba

acoustic summit
#

I just spent like 6 hrs making a whole new docs for the new features (And to leave gdocs behind)... but my mind is like "there must be more to add for people to use". But idk, GSQs + Trigger Actions enables a lot more than I realized. Powerful stuff

brittle pasture
#

puffers only: SDVpufferheart SDVpufferwoke SDVpufferparty SDVpufferthumbsup SDVpufferthink

uncut viper
#

i dont think trigger actions or gsqs will catch on tbh

acoustic summit
#

Why is that?

uncut viper
#

(/j)

acoustic summit
#

o

royal stump
#

(button has made many of those SDVkrobusgiggle)

gaunt orbit
uncut viper
#

yeah ive made like 40 of them combined

acoustic summit
#

Yeah

#

BETAS, forgot abt that

#

Should've been like, wait why would they say that?

uncut viper
#

chu wants me to let you know that it can destroy terrain features

gaunt orbit
#

But will we ever have STABLES

uncut viper
#

Some Trigger Action Bullshit, Less Exciting Stuff

acoustic summit
#

I'd like to make a mod which actually uses them soon, both to learn them and to do cool stuff, so I probably will be dabling in the dark arts of it all

#

What would you say is the nichest trigger added in BETAS?

uncut viper
#

my only motivation in life comes from the validation of others so if theres anything you ever want me to add to it then send me a ping,

#

ReloadItemField

#

oh trigger

lucid iron
#

what about PROD

uncut viper
#

MorningStarted then

#

MorningStarted happens very slightly later than DayStarted

acoustic summit
#

Haha

uncut viper
#

coincidentally it was added in the same update as ReloadItemField for the same person

tiny zealot
#

sure, i can register UpdateTicked, do a little countdown, do the load, and unregister the handler. but i hate it

uncut viper
#

just need to convince Pathos to update SMAPI just for his mod

lucid iron
#

i had been foolish to think this would be quick mod bolbonfire

uncut viper
#

is DayStarted or SaveLoaded nmot usually good enough though? not that i havent also done the coutndown myself before

brave fable
#

i think you want a content patcher event more than an smapi event

lusty elm
#

There are quick mods...?

uncut viper
#

a good number of my mods have been quick mods

lusty elm
#

wait no, there was that greenhouse mod I banged out in like 30 minutes and published before an hour had passed

tiny zealot
lucid iron
#

ok so for some ??? reason if i do edit map with both FromFile and MapTiles the animation is lost

lusty elm
#

I was more making a joke about how all my mods tend to take on average like 16-30 hrs worth of work.

lucid iron
#

i swear this worked though, cus i used it in another mod?

uncut viper
#

i didnt think SaveLoaded happened after you had control

tiny zealot
#

i think it fires immediately before DayStarted, but maybe my memory is off

uncut viper
#

it does, in which case how can you have control before the day starts

tiny zealot
#

at any rate, using those events for expensive loads causes noticeable hiccups which i find unbearable. moving the hiccup somewhere less obvious is ideal

uncut viper
#

i think you should do it every time the player interacts with a crop

tiny zealot
#

(i often use LoadStageChanged for this if it relies on saved data in some way. that way it's during the "Loading..." blackout)

brave fable
#

i often just chain gamelaunched -> onesecondupdateticked -> dostuff()

tawny ore
#

I feel safe just assuming everyone has Content Patcher installed

calm nebula
#
public static void UpdateTicked(object? sender, UpdateTickedEventArgs e)
{
    Thread.Sleep(1); // for safety
}
lucid iron
stoic galleon
#

Hi, I have a question about conditions. Specifically when you want to define one through exclusion. I read on the wiki that since 1.6 we can use ! to do that, but how exactly do we have to use it? I tried it, but SMAPI tells me it doesn't recognize the token in my content json. I want it to happen any day but the 1st. My content json looks like this: When { "Day": "! 1"}

#

Thanks in advance.

calm nebula
#
"When": {
"Day|contains=1": false
}
brave fable
#

is that some kind of 1x2 stack of chickens there

gaunt orbit
stoic galleon
#

Ah, that explains it, I was misusing it. Thank you very much for the explanation.

#

My thanks to both of you.

past knot
#

Does anyone have a tutorial for making quest items?? I seem to be having trouble finding anything on it

gaunt orbit
brave fable
#

sounds more like caroline's necklace, robin's axe, linus' basket

gaunt orbit
#

Hm, I think you'd need c# for that

brave fable
#

i'm only aware of being able to work with these in c#, but of course you can also check out data/quests for the relevant quests

calm nebula
#

do you need c#

#

I doubt you do

gaunt orbit
#

You'd need to modify pickup behavior right?

brave fable
#

they're usually added to the world in the overlaid items dict, which i don't think cp touches

calm nebula
#

"100": "LostItem/Robin's Lost Axe/Robin lost her favorite axe. The last time she remembers using it, she was cutting wood south of Marnie's ranch./Find Robin's lost axe./Robin (O)788 Forest 110 81/-1/250/-1/true/Hey, you found my axe! What a relief... I almost chopped my toe off with the other one I was using. Thank you!"

past knot
gaunt orbit
#

I thought when you interacted with them they just vanished and didn't give you an actual item

brave fable
#

oh you absolutely get an item

#

you can dupe them even

lusty elm
#

.Choose Relax and Chill, Work on underground map, figure out warp setup, work on Content Patcher.

patent lanceBOT
#

Choose result: Relax and Chill

calm nebula
#

LostItem/<Quest Title>/<Quest Description>/<Quest blurb>/<NPC> <object> <Map> <X> <Y>/<next quest apparently>/<money?>/<"reward description">/<"can be canceld">/<dialogue they say>

gaunt orbit
#

... Huh, interesting

#

Can you tell that I've been seized by the cheeto curse? Lol

lusty elm
#

yes, you're orange.

#

which curse? we have like 40

brave fable
#

if you didn't get an item you couldn't hold onto the shorts for the luauaua

gaunt orbit
#

I thought the shorts were different from the axe and the basket

uncut viper
#

you can do SecretLostItem too though i dont know the difference

brave fable
#

i think secretlostitem is carolines jewelry

gaunt orbit
#

I always complete those really early on so it's been a hot minute

brave fable
#

fairly sure it just means the quest doesnt tell you the item ahead of time

lusty elm
#

I remember the axe and basket not being a slot items held in inventory but shorts is, if thats what you mean

brittle pasture
#

they are all item held in slots

uncut viper
#

how else would you deliver them

calm nebula
#

in my wallet

brittle pasture
#

astral projection

lusty elm
#

just talk to the person and it used to just "give the item for quest completion" as the first interaction

calm nebula
#

I have zero idea what secret lost item is for or does or anything tbh

#

thanks, game

uncut viper
#

im pretty sure ive always had to hand deliver the axe and basket

calm nebula
#

SecretLostItem is a quest that does not appear in the qust journal

brave fable
#

basket is an item. this is not up for debate

lusty elm
#

I guess I'm crazy then rooThink

hard fern
brittle pasture
#

let's just ask #stardew-valley next time, they all play this game more than this channel

lusty elm
#

Maybe it just never registered with me, cuz you could never do anything interesting with it like you can with the shorts

gaunt orbit
#

We need a mod that lets you wear the basket as a hat

#

I would feel bad being mean to linus though

lusty elm
#

i mean, you can wear the mining pan as a hat

gaunt orbit
#

I always forget that's a vanilla feature

calm nebula
lusty elm
#

I have 1000+ hours in stardew, I feel bad that I didn't remember this rooBlank I'm looking at old videos to see if it changed, but no even in 1.3 it was an item.

brittle pasture
#

I'm sorry for your loss

lean flame
#

hey guys I've never posted here and was looking for help with something I'm doing with fashion sense, is this the right place to post?

hard fern
#

if its a mod youre making, yep

lusty elm
#

to be fair though, most of those hours (like 600) were vanilla before i started modded playthroughs and then modding, like 5 years ago, and those hours do include modding time... and I generally only do 1 or 2 runs a year, only playing like 1-2 years ingame >_>

lean flame
#

I'm not very experienced and I only change anything just for my own gameplay, I've done a few AT converts and stuff but now I'm working on converting a CP shirts mod into a FS mod

hard fern
#

(oh i just got the idea to make my map in tiled and just have placeholder assets for buildings so i can at least get that part of my mod out of the way. less work for me!)

#

(problem: i am bad at making exterior maps)

lusty elm
#

thats what Frost Does when mapmaking

lean flame
#

and well theres like 500 shirts that all need a folder as far as i know, and i copied and pasted the shirt.json files into the folders, and forgot that they need unique names. is the only way to fix this is by going through ech one and changing the names?

brittle pasture
#

you can keep them in separate folders and load them separately

lusty elm
#

Personally, I just figure "The player can figure that out" and dont worry about building placements, speaking of which I have no idea where im putting the greenhouse, shrine, pet area, spouse area, or farmhouse on that new map I made SDVpufferchicksweatsip

brittle pasture
#

you can put each shirt into its own FS pack, but I think you still need to write the json for each pack

#

anyway that's about all my knowledge on FS, my apologies

lean flame
#

can they have the same shirt name though?

#

oh that's okay! I'll try to figure something out

hard fern
lucid iron
#

i hope 1.7 would change all the weird ass shop open actions to OpenShop SDVpufferpensive

lusty elm
hard fern
#

an expansion map haha

#

...which leads me to my question, does anyone know how to get the tilesheets to be animated properly when you have to add one to a map

vernal crest
#

Import it as a tsx

#

But be careful because it might import the tsx to every map you have open at the time

#

(By which I mean do not have any other maps open when you import export the tsx)

brave fable
#

tsx files are available to all open maps when exported, but imports won't apply to all maps

lusty elm
#

^ yeah, you export the tilesheet off a map that has animations, replace the tilesheet on the map you want with the exported tsx, then embed it. Or if you need one of us can go over how to animate tiles if you need to animate something custom.

hard fern
#

i... am struggling to figure out how to export it

brave fable
#

worth noting that not all vanilla maps animate the same tiles in the same tilesheets. for example, forest only animates light dirt water's-edge tiles, and mountain only animates dark dirt water's-edge tiles

#

press the export button โœจ

#

it's in the tilesheet viewer pane

hard fern
#

ok, and now tiled says no i cant import it

brave fable
#

that's not import, that's make new tilesheet

hard fern
#

oh

lusty elm
#

3rd is export, 5 is what you want to swap it for the tsx, and 2 is to embed it

hard fern
#

yeah i cant do that

#

it's greyed out?

#

i cant click it

brave fable
#

you're doing things in the wrong order

hard fern
#

wait i

#

i cant count

brave fable
#

you want to export a vanilla tilesheet, and import it into your map

hard fern
#

๐Ÿ˜… yep i figured it out

#

thanks

lusty elm
#

looking at your symbols reminds me that Tiled Has been begging to be updated for a while

hard fern
#

oh yeah

#

how long has that been there...

lusty elm
#

Mines been there for years tbh

#

Reminds me of what I was still using like CP version 1.7 in my Content Patcher Files all the way up to like 1.26 when i mentioned it and people were like YOU NEED TO UPDATE THE NUMBER, and i'm like "oh, okay."
Or when i was using notepad to edit jsons for the first like 2-3 years of modding, until people pushed me to update to at least notepad++.
rooThink i'm not good at updating.

lucid iron
#

r u a proud 1.23 for mysterious reasons stan

brave fable
#

it could always be worse. once upon a time when i pushed a loc git branch to remote, my os drive filled up to 0 bytes free from 250gb. thought i had a virus, but then i ran spacesniffer and found fork had made a 250gb log file when it failed to push

#

i made an issue on the fork git page and within 5 minutes the lead developer replied with 'your fork version is 2 years out of date'

lusty elm
#

mostly because instead of writing a new Content File I'd just copy paste it and change a few bits.

lucid iron
#

i cant use LocalizedText in ConfigSchema right

uncut viper
#

no

winter dust
#

Anyone know how to contact Another Pillow? They're the ones who were maintaining tego's Stardew expansion mod.

ivory plume
#

They're @p.llow here on Discord.

winter dust
#

@iron ridge are you still maintaining Tego's Stardew Expansion mod? I noticed it still uses PyTK and TMX Loader, I'm re-adding compat support for it along with Fostoria, it seems to somewhat work but the map strings are all broken since SDV 1.6.

winter dust
iron ridge
winter dust
iron ridge
#

Yeah it doesn't feel like i last updated the mod 4 years ago

brave fable
#

if nothing else, map strings are an easy update

rigid musk
# brave fable sounds more like caroline's necklace, robin's axe, linus' basket

In relation to this - a lot of quest types are hardcoded but there are a few you can do (namely lost item quests is a big one, as well as monster slaying ones, item delivery quests, and harvesting quests... I think there might be one more type you can do but I didnt work with that one so i wouldnt know off the top of my head)

#

Needing C# To do fancy quests makes me big sad

brave fable
#

well, if you want to be fancy then c# is generally needed lol

#

hard to break new ground while walking the same old path

rigid musk
#

Yeahh... unfortunately I am still blind in the ways of code

#

One day I will learn more C# and I WILL make my own iridium bomb mod and I WILL feel cool about it (I had the idea a few years ago before I believe... Apryll? made one a few months ago - but people make mods for the same thing all the time and also different implementation = different mod = i dont care if someone already made it i have to do it)

#

But looking at anything C# related confuses my smooth meatball brain right now so I will stick to Content Patcher/Frameworks and editing my silly little Jsons

#

But that Blacksmith role does look mighty fine

brave fable
#

looks? it's literally invisible SDVdemetriums

rigid musk
lusty elm
#

.choose make underground map, do Content patcher work, chill and game, do random stuff for primary map like figure out where buildings go.

patent lanceBOT
#

Choose result: do Content patcher work

winter dust
rigid musk
#

all hail the magic conch

lusty elm
#

rooBlank this involves naming the map, what do i want to call this map....

brave fable
#

testmap1 has a certain ring to it

lusty elm
#

Any suggestions? Its also going to have a large internal cave network (that is going to be grassy with rivers n stuff.

uncut viper
#

"Farm Map (With Large Internal Cave Network)"

lusty elm
#

I'm terrible with names, no joke most of my farm names were suggestions.

brave fable
#

then i see no reason to ignore two great suggestions right here

rigid musk
#

something with Cliffs and Caverns in it perhaps

#

Waterfalls Cliffs and Caverns ... WCC

normal trout
#

Quick map question. Is there an easy way (read: using map properties or a quick content patcher bit of json work) to add the pretty floating flower petals/leaves to a custom map location, like the ones you see in the secret woods?

winter dust
#

Can I read other mods config options through my mod?

uncut viper
normal trout
#

LMAo my sleep deprived brain answered that with an intrusive sassy thought - "Off a cliff."

lusty elm
#

its only 155 wide 200 tall rooBlank, and I haven't actually placed anything yet, Farmhouse, Greenhouse, Shrine, Pet area, Spouse area.

normal trout
#

"only"

#

Aren't most of the default farms less than 100? ๐Ÿ˜‚

lusty elm
#

65x80

normal trout
#

๐Ÿ’œ Ily and your giant maps though, Draylon.

#

Soooo.. more than double in each axis. "only"

#

๐Ÿ˜‚

lusty elm
#

more like exactly 6x rooVV

normal trout
#

more than double is technically correct ๐Ÿ˜œ Just like "it's bigger than 1 tile" is correct.

#

(I'm in a mood, forgive me lmao)

lusty elm
#

is okay, sassy is an acceptable mood.

#

I could also just name it after the user's comment who inspired the mod I suppose rooThink but only like 2 people or people i tell would know why its named that.

#

iono, i the theme of the suggestions though.

winter dust
lusty elm
#

looking at it now i might shove grandpa's shrine into the cliffs next to the pink tree at the top

uncut viper
#

not if you wanted a config option, thats a dynamic token

winter dust
#

But they're using a DynamicToken, so what's the difference?

normal trout
#

Ooh, Draylon, you could go with something with "Heights" in it!

uncut viper
#

well, the fact that you said you wanted to read another mods config, for one

normal trout
#

'something something Heights'

#

Since, you know, you darn near broke the build height limit ๐Ÿ˜‚

uncut viper
#

do you want what is written in the other mod folders config.json file or do you want the dynamic token the other mod uses?

winter dust
uncut viper
#

which one?

#

dynamic token is not config

lusty elm
#

ooh, yeah and that makes reference to the very tall cliffs kinda inherently rooThink

winter dust
#

So what does DynamicToken mean with this mod?

uncut viper
#

a dynamic token is a content patcher thing

#

its not something CMCT made up

winter dust
#

Yeah, they're using DynamicToken for the map size that's user changable, Large, Tiny and Small.

normal trout
#

I'm a fan of alliteration, and enjoy big obnoxious words. So my official suggestion is "Halcyon Heights" ๐Ÿ™‚

winter dust
#

I want to read that DynamicToken's value to apply a map warp patch.

#

Because the warps aren't in the same location when each map changes size.

uncut viper
#

ive just looked at the mod. they are not using any dynamic tokens

#

they are using ConfigSchema

winter dust
#

I must've been thinking of another mod using them then.

#

So I just use Config then and it should work like I've defined?

uncut viper
#

should do. but remove the braces

winter dust
#

The curly brackets?

uncut viper
#

yes

lusty elm
#

Highland Falls Farm?

normal trout
#

I like that because it ties in to the cliffs and the water! ๐Ÿ™‚

lusty elm
#

Whitewater Heights? I'm literally just googling synonyms for words like cliffs, waterfall, Heights, mountain, etc and trying to mash them together.

winter dust
normal trout
#

I like Whitewater Heights, for the record ๐Ÿ™‚

lusty elm
#

Ridgeside Rapids is uses alliteration, but y'know Ridgeside, dont want to confuse ppl. I like the Word Precipice, but its hard to match it and make the name flow. rooThink. I kinda think i like those first 2 the best so far from all these word mashups.

normal trout
#

Unrelated question:

I'm trying to do an EditMap patch to add a little room to a custom map of mine after the community center is complete, and if the config option for it is true. I'm struggling lmao, how would I do that? I tried this because I think this is how the map property works, but it did NOT work because I need a token instead, and I am smrt.

{
            "Action":"EditMap",
            "Target":"Maps/Greenhouse",
            "FromFile":"assets/PATCH_MagicGarden.tmx",
            "ToArea": { "X": 22, "Y": 23, "Width": 3, "Height": 2 },
            "PatchMode":"Replace",
            "When":{
                "EnableGarden":"true",
                "IS_COMMUNITY_CENTER_COMPLETE":"true",
            }
        },
uncut viper
#

you cannot use GSQs in When conditions

normal trout
#

Yeah I just found that out.

#

So what would be the correct way to make it happen?

uncut viper
#

use the CP token that checks the community center being complete instead

lusty elm
#

i think the IS_COMMUNITY_CENTER_COMPLETE GSQ also has a note that says its unreliable?

vernal crest
#

Search for "community"

uncut viper
normal trout
#

Found it, just have to remove the underscores basically and adjust capitalization. It's IsCommunityCenterComplete

lusty elm
frozen whale
#

anyone made a sprite replacement mod before that is not an xmb mod?

uncut viper
#

thousands of people yes

lusty elm
#

yes

uncut viper
#

!startmodding

ocean sailBOT
#

Making mods can be broadly divided into two categories:

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

uncut viper
#

look into Content Patcher

lusty elm
#

its actually the easiest type of mod i think?

frozen whale
#

well yes ik its possible haha, i was just wondering if anyone i could ask about it was around

uncut viper
#

!ask

ocean sailBOT
#

Ask your question or describe your issue here, and someone will help if they can!

uncut viper
#

(i just wanted to use that command dont look too deeply into it SDVpuffersquee )

#

but this is the place to ask. dont wait for a specific person, people will help if they can

frozen whale
#

so i started on the pixel art for a Harvey sprite, but i am not sure what to do with it when im done lol. Ive never made a mod before

lusty elm
#

Like button said, you're going to look into Content Patcher. it will be what you end up using most likely.

uncut viper
#

i would look in the startmodding command stuff in the governor command above

frozen whale
#

ok, I'll start looking there. Thanks!

vernal crest
#

It can also be helpful to download someone else's mod that does what you want to do so you can copy how they're doing it.

lusty elm
#

.Choose Be Lazy, Do Cavern, Figure out Map Properties and building locations.

patent lanceBOT
#

Choose result: Figure out Map Properties and building locations.

hard fern
#

welp here's a wip

lusty elm
#

Nice!

normal trout
#

Is there a way to push a note to the smapi log for my mod ๐Ÿค” I want to use Action | ObeliskWarp which I know will throw a warning into the log - I want to put a note in the log that this warning is expected and can be ignored with no issues.

winter dust
#

So, with the event "There was a strong wind last night", is that an attachable event or nah?

#

Cause it appears sometimes when you're sleeping. Didn't even realise it existed until recently.

winter dust
normal trout
#

And it does, in fact, throw said warning.

lucid iron
#

i see its normally used on building only yggy

#

wacky

#

i don't think anyone's made a trigger action that just logs a message

winter dust
# uncut viper should do. but remove the braces

ContentPatcher is saying this is invalid syntax for the When condition:


            "When": {
                "HasMod |contains=Fostoria.Stoffton": true,
                "Spiderbuttons.CMCT/Config: Fostoria.Stoffton, FostoriaSize": "Tiny"
            }

Not sure how or why.

uncut viper
#

Esca has i believe

lucid iron
#

if you are really concerned about this u will have to settle for MagicWarp

normal trout
#

MagicWarp isn't a click action though, it's a step on the tile and warp kind of thing. It's not what I wanted to do ๐Ÿฅฒ

ocean sailBOT
#

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

lucid iron
#

hm, you can be the first consumer of the dialogue thing i made PecoSmile

#

u can put a TouchAction behind a dialogue box thats on a Action

lusty elm
#

there is an action warp if i remember correctly, but i think it makes the ladder sound effect?

lucid iron
#

but as said it is only warning, my experiance in mod help says many people dont give a shit about warnings

normal trout
#

Yeah, I'm doing a magical junimo thing, so I wanted the magic warp sound for a reason specifically

#

Yeah, that's fair. It wasn't a dire thing, just a question I had.

#

I'm just going to deal with the warnings and move on. I'm likely not sharing this edit of the mod anyway, as it's adding a really custom thing I specifically want, that's super OP (a huge freaking magical forest orchard to fit all my custom trees, tacked on to my greenhouse ๐Ÿ˜‚ )

lusty elm
#

rooOld With TMXL we could Action Lua our way to warping and play whatever sound effect we wanted, all at the same time.

normal trout
#

But even in custom mods I make for myself, I lke to try to make them as if I were going to share them, so I wanted to poke around here.

uncut viper
winter dust
lucid iron
#

If u r do Lua u might as well just ship a C# component that registers the custom action u want

uncut viper
#

i forgor the log has a modlist

#

it shouldnt be erroring when it is installed though. would you mind sending a log for that too?

#

it erroring when it isnt installed is technically working as intended, i suppose, if thats how CP when conditions work. it wasnt saying the syntax is invalid. its saying the condition is invalid, bc you're checking for the config of a mod that isnt installed. presumably this means that CP checks all the conditions even if the first one fails? so you cant check if a mod is installed at the same time you check that mods config, bc you dont know if its installed yet. you could get around this by using an Include thats only loaded if the mod is installed and the patch inside checks the config

#

but again though that shouldnt happen if the mod is installed. are you sure you installed Fostoria.Stoffton and not the other stoffton

winter dust
#

Yeah I installed the latest version of Fostoria.

#

Because that's how I got that mods manifest ID.

#

The entire when condition is just invalid so it doesn't apply any other patches after the first instance it encounters.

uncut viper
#

i would still need a log for when it is installed.
and i know the entire condition is invalid, im talking about how CP goes about checking that

lusty elm
lucid iron
#

microsoft documents C# SDVpufferthumbsup

inner harbor
uncut viper
#

to be clear if the mod isnt installed and you try to use the token like that, that warning should happen

#

it is functioning as intended

#

by combining the HasMod and CMCT token into one When condition its like the C# equivalent of if (Thing is not null) and (Thing.Value is "true") except CP apparently doesnt short circuit if the first part fails so it still tries to check the value of a null thing

royal stump
#

oh, cc @normal trout for the above, now that I read up a bit
the null one won't really help if you want players to notice it alongside a warning, I suppose

#

relatedly, I should probably get around to adding TouchAction sound and warp stuff to EMP, if those aren't available yet SDVpufferthinkblob
I did some of both for SVE a while back

ocean sailBOT
#

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

uncut viper
#

it cant possibly have in the first place

winter dust
#

It was for a while.

uncut viper
#

please do not send long json text walls in here

winter dust
#

He asked for it shrug

uncut viper
#

... use the uploader

#

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

winter dust
#

You don't need to link it to me, I know where it is.

uncut viper
#

regardless, it is literally not possible for CMCT to log that warning if the mod is installed, since it only logs that warning if SMAPI says its not. so in order to use it in the manner you want you'll need to put it behind a conditional Include

#

assuming Stoffton is not a hard dependency

winter dust
#

So, putting it in an external json file and including it?

uncut viper
#

if you write all your patches inside an external json using the Config CMCT token, and then use an Include to use that external json, but put the HasMod on the Include and not the patches inside it, that should work

#

that way the included json will never be used and should not cause any warnings if stoffton is not installed

winter dust
#

It should be fine to have checks inside that external json file thought if I need them right?

uncut viper
#

correct

winter dust
#

Okay good, thanks.

uncut viper
#

assuming you mean Config checks

#

HasMod checks will be redundant in there

#

i mean they wont hurt to have they just wont be needed

winter dust
inner harbor
#

Firstly, not a "he", secondly, I realize now this is way beyond my area of expertise and Button had already answered the only question I could've tried to answer. Sorry.

winter dust
#

Did anything become of the suggestion to have a dedicated stardew valley mod hosting site?

#

I guess the forum works as that, but idk.

versed wyvern
#

Hmm... is there no way to load a different portrait for a vanilla shop? The NPC standing in the shop tile takes priority over whatever Owners may be set in the shop's fields?

hard fern
#

one last wip screenshot and then i stop staring at tiled before i go crazy

brittle pasture
#

the game will pick the first entry that matches a nearby NPC, so if you added a new entry it wouldn't work

versed wyvern
#

Hmm... I think I'm having difficulties figuring out how to edit an existing entry, then

versed wyvern
#

There doesn't seem to be a name to the default entry that I can target and if I just add Portraits: " " as an entry, with the shop and Owners as TargetField, I get an error like failed converting String value to the expected type 'StardewValley.GameData.Shops.ShopOwnerData': Error converting value "Portraits/HospitalShop" to type 'StardewValley.GameData.Shops.ShopOwnerData'. Path ''.. so that's definitely formatted wrong

brittle pasture
#

pls post full code thx

wanton pebble
#

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

wanton pebble
#

(simpler to use that)

brittle pasture
#

looking at the vanilla data you want to TargetField
"Hospital", "Owners", "Any"

#

then just set "Portrait": "YourAssetHere" in Entries I think

versed wyvern
#

Wait I think I just figured it out mothmanhype

#

Okay, what I tried worked but your instructions also work and work better vampyyay

#

I was gonna try doing just the shop for TargetField and editing the whole Owners section, but this way will overwrite less stuff

#

Thanks for the help! henyadance

grand gale
#

if I install a mod that sends a mail on a specific date and I already passed that day, can I receive the mail anyway or it will go nowhere? I'm trying to send a mail with a content patcher condition: if the condition matches then edit mail data. idk if there's a better way

calm nebula
grand gale
reef kiln
#

I give up. I can't get the hats to line up on the pets. I don't get the logic it uses to determine where to draw the hats.

tiny zealot
#

what kind of pet are you using? it's hardcoded by animation frame for cats and dogs specifically:

            if (!(value == "Cat"))
            {
                if (value == "Dog")
                {
                    hatOffset.Y -= 20f;
                    switch (this.Sprite.CurrentFrame)
                    {
                    case 16:
                        hatOffset.Y += 20f;
                        direction = 2;
                        break;
                    case 0:
                    case 2:
                        hatOffset.Y += 28f;
                        direction = 2;
                        break;
                    case 1:```
etc.
reef kiln
#

The documentation say each pixel is a 4 offsets, but that does not seem to be true.

#

I did get the hat to fit when the fox was sleeping but the offsets where 28 x, 16 y. But the pixels are only 2 pixels off center. So the logic escape me. I don't want to have to trial and error all 32 frames, like I did for the sleeping sprite. So I am taking a break.

sleek flint
#

So I am currently making a small framework and I want to ask where does the path for texture loading start? Do they automatically start from the mod folder like with normal CP texture loading path, or do I need to specify in my framework's code? For example, here do I write "assets/chair_icon.png" or do I need to be more specific?

"CustomFields":{
   "Cataloger/Filters": {
      "Filters": [
         {
            "Name": "Chairs",
            "IconTexture": "assets/chair_icon.png",
            "Filter": "category_furniture/chair"
         }
      ]
   }
}
lucid iron
#

You don't have to load your own texture if you just make content patcher do it for you

sleek flint
#

oh, I suppose I can do that SDVpufferclueless

sleek flint
#

Thanks chu

#

Have a cookie ๐Ÿช

lucid iron
#

To answer your actual question normally you can't directly access the path from which another mod was loaded from, unless that mod is targeting you with ContentPackFor

#

There are ofc indirect ways blobcatgooglyblep

sleek flint
#

Btw what does your bio mean?

#

I am trying to understand it but I can't.

lucid iron
sleek flint
#

SAYOKO

tiny zealot
#

scope creep is coming hard for me rn

gentle rose
tiny zealot
#

maybe i should put off those other features until 1.1