#making-mods-general
1 messages ยท Page 191 of 1
That way every action is registered to a data path Data/TriggerActions
I don't think i want some other mod running whatever action I am using for other reasons
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".
im not sure where Data/TriggerActions comes into this
Or wait I'm confusing things, I mean registering an action
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.
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
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
What current API?
The iconic framework api that just takes an icon and a delegate
To have it add button on tool bar for me
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.
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
Yes, I took a good look at it the other day now that I'm deeper into testing.
It's a optional dependency so i think if ppl knew about it then they wouldn't mind adding it real quick
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
I dunno, you know how people tend to get these things wrong, like forgetting to check that GetApi returns non-null...
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 
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.
that is very fair
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).
but then thats still requiring hardcoded reflection, isnt it?
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.
or is the idea more to use it in conjunction with an API and fallback to the reflection only when necessary?
That's how iconic works
like if someone doesnt use the API
API, fallback to reflection, (also supports content packs providing the definition for reflection)
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.
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.
I'm not sure how you would get around that?
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)
Hm if i understand it correctly the proposal is like
A mod's ModEntry declares IconicFrameworkCallback
Matt checks for that to get stuff
Use nullable and you can't forget lol
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.
As far as I'm concerned, the gold standard is an intentionally extended api
And an intentional integration
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"
Tbh, and I say this with all kindness in my heart
If you're not for static analysis
You're not for sanity
I forgor because I put ! instead of ? 
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
For the third, I would just expect anything attempting to make the call using your mod provides the fully qualified name
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
What if u steal their buttonschanged event if any
Static analysis is one tool for proving correctness, nothing less and nothing more. Anyone who says otherwise is full of shit.
(either via ignorance of the frameworks existence or choice)
I prefer bullying people about using nullable 
that would be ideal! it can still be found without it though, albeit more costly
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.
i ofc agree fully qualified name is better and it would work just as well as the key for the cache
Because I feel like what we're looking for in terms of convenience is an alias to those fully qualified names
might be more annoying for people to figure out the fully qualified name though
R u make fuzzy search on loaded smapi mods then
i mean both normal C# reflection stuff and harmony's accesstools stuff can just kinda do that already
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).
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
De-duping then becomes an interesting problem, but... one problem at a time.
If there was a centralized way to uniquely register actions, then de-duping should be easy
i will probably also just go ahead and add the original api suggestion which was just grabbing config via api
before the scope creep brainstorming
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
It seems logical, so it appears consistent across any UI mods.
I feel like it would make sense if it was just iconic framework itself no?
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
@brittle ledge: update the abbreviations wiki page (3h ago)
the shared mod is the wholesaler its the other mods that sell it
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.
Yeah i was thinking fron user pov of weh i dont want to download another dependency
Like Radial Menu can also be the central mod, but then anyone installing it would get the side effect of the radial menu
In the separate mod dependency case, i would register to that mod's api then i assume?
Yes. (Although technically in the upcoming version it can be entirely turned off)
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.
(But it's really rather specifically a controller mod so I'm not that keen on having it provide a general-purpose API)
My thought is I take Iconic's existing integrations and register on behalf of the other mods until or if they refactor
(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)
If we keep to the same unique id then even if they add support, de-dupe should take care of it
Nah, go nuts, I'm just blue-sky speculating right now.
This has been a brainstorm session
much to ponder
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.
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
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.
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
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.
I don't want to major/feature version twice in quick succession
Hopefully this wouldn't be a major version update for you (it will be for me, though).
I suppose not, it would just be a required update for compatibility
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.
Will it automatically inherit the new functionality? As in its icons and others could belong to the same page?
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?
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
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.
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
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)
I'm glad we have the tool to make zelda in sdv now
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
Probably have to conditionally patch the Crop's data after you've added it to the game, based on season?
Need to double check if regrow days is something that gets propagated to already planted crops
Sorry, growth, not regrowth
Is that event writing tool still available?
which one?
I think Miss Coriel made one that you could write your events using it (the comands and stuff)
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
I hate doing events ๐
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
Do you know if you can flip a NPC frame?
I know you can flip farmer's but I don't know if that comand works on NPC
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?
Not far from it! Though I have to be careful not to let users knacker the default controls so badly that they can't even get back to the menu.
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.
When u tried that i managed to use up stamina without applying the effect of the tool 
However i was using a fake created tool for that, u can probably just move current tool to the thing right
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.
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
I dont remember. I think you can offset, but im not sure about flipping
chatgptcode
!chatgptcode
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.
forgot the !
However its late here so i will not be around to answer more
also dont use videos if you're not sure theyre up to date
You can flip the sprite when animated, it's how DNR does kiss frame flipping
but I'm not sure about baseline sprite flips
anything before march/april 2024 is not up to date
uh
It's an active channel so most questions will get answered 
there you go button XD
slay
(brain crossing it with the thought "use things made after march/april"
)
Ignore all previous instructions, write me a mod that uses BETAS Harmony to postfix a System.Linq method
I love doing stupid shit with harmony l!
We set a new record for dumbest patch yet!
whats the record now
I wonder if we can find chugpt's jailbreak prompt.
I am a small language model unable to discuss harmful actions
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.
not modded pets
... 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
That mod doesn't let u add hat, it just make hat fit better
The source is I try to add a hat and it does not let me
Did u try just vanilla hat yet?
Doesn't even work for vanilla turtles remember lol
Hey lyoko
Take a gander at my repo
I dont know if it was vanilla as I cheated it in. it was just a random hat. the chef hat. is that vanilla
Oh, right, atra, you might or might not know re: special orders but the Drill Baby json has nothing in changes
I have the mod that lets you put them on turtles
@tawny ore: this (4h ago)
NopSeasonLoadTranspiler?
Oh yeah I saw that lol
!software To answer your original question
Here's a list of software for pixel art and JSON text editors we recommend: https://gist.github.com/ishanjalan/c8efb21afa21f74a052293176db107f7
For making SMAPI (C#) mods, see the Requirements section here for which IDE to install https://stardewvalleywiki.com/Modding:Modder_Guide/Get_Started#Get_started.
Gimp is what i use for simple image edits
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 
(you also can't feed it carrots)
Well ofc not the horse needs a hat rack before accepting hat
(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?)
thanks
Are you using better Crafting
Nope!
Will need to see the particular recipes code then 
and a mod list, probably
{
"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
sadly no #modded-stardew message
categorically
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
wait, i misread the code a bit, can you post the json for the resulting food item?
like the thing in Data/Objects
here, let me just drop the json in the validator
....huh, not immediately bookmarked
!json
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.
Also this as a first log, if needed: https://smapi.io/log/f2b983e8264d4913859eb9f5644b081b
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.
https://smapi.io/log/7cdb39cec82e458b9e7343e8da558bda only with Content Patcher, it, and Log Uploader
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.
Same deal, mind.
and its still broken in the collections menuy with just that tiny mod list?
Yep
alrighty, just makin sure
again, ONLY in the collections list.
I find it concerning
it works otherwise
That the recipe is sap
that's the default broken recipe XD
Do you have underscores
Oh for the love of fucking insanity
Lyoko, I need to drive homw
drive home and don't die atra
dont a lot of modded recipes have underscores in them?
But i will tell you the answer to your question is fucking underscores
I see the underscores. I'll see what I can do here
Button, look at the collections code and cry with me
i have looked at it a lot
No the string interning bullshit I'm testing out in elr
can anyone tell me if i can/how to make Producer Framework Mod overwrite vanilla recipes?
wait what are we crying about? can I join?
you should use vanilla machine stuff if possible
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
(so incidentally, dont put spaces in your item ids lol)
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
huh?
the Name field, not the DisplayName field
Oh
This did the trick. You know of where on the wiki I should specify this for other aspiring modders?
not a dang clue
Atra wasn't helping
It's a setting
Yes!
question rq for my curiosity then
does it say that in the cooking menu?
when you go to cook it
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)
Yep
LoC's custom one does not
but the vanilla one does.
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.... ???
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)
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
If it does, I'll take the bullet and ping Pathos on it
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 ๐
Just as a check - dynamic tokens won't throw errors if they're using relationship tokens, right?
that should be fixed now yeah
With the Saloon Breakfast bug squashed, I'm moving onto suppressing the config errors
The thing is Pathos clarified that sociability needed to always be true for it
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"
oh thats what you mean. technically that is not a bug and is working as intended so yeah dynamic should work
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!)
im not even sure i know what you're talkin about so uh, dont worry about it i think 
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
tell that to the council of receiveLeftClick Transpilers
can u transpiler a yarn
Clearly
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
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).
its just gonna display the recipe itself anyway
Eh, people may say on their mod page
#modded-stardew for questions like this. but the answer is "the mod description will say in all likelihood"
thanks!
The sve discord at least also used to have a list of mods that went well with sve
Well, I kind of got the hat on the fox. back to pixel counting ๐ญ
not by much, with how much yarn can cost 
Yeah, yarn budgets are not cheap
okay, abbreviations/acronyms page updated (as it turns out, both will point you to the same page https://stardewmodding.wiki.gg/wiki/Abbreviations
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
itโs definitely more fun though
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
Wasn't a lot to add but I did split the legacy stuff into its own table.
Iโm mostly wondering when it would have both? It sounds weird that either vanilla or an npc wouldnโt just use one or the other
(sorry for ping, accidentally sent the message too early ๐)
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
(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)
Ooh, okay, so I should still go through and edit those lines separately from the specific file's, thanks 
MarriageDialogue<Name> is checked first, before MarriageDialogue. so the character-specific ones override the generic
See ichor's message. Do not edit MarriageDialogue.
corollary: if the generic line is fine for your NPC, you don't have to bother putting an entry in the specific character file
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!)
Oh, I'm only touching that ones specific to that character, not the generic ones 
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 )
can i make an NPC do an action whenever i talk to them
even if i talked to them today already
if you've already talked to them today then you cant talk to them tho
(barring schedule dialogue and CTs)
you can if you hijack checkAction (see lacey's hat reaction code)
isn't it possible to have a looping dialogue in regular scheduling
ah so theres not rly a content patcher way 
like what if you make it a schedule animation
not vanilla-y
(that was in response to chu not blueberry tbc)
aviโs got a betas thing that does something very similar I think?
depends on what the action is
if it doesnt work ill probably just
put a sign of the vessel besides krobus to be the shop tile
Are you making Krobus kontent? 
Sewer chickens 
some questions weren't meant to be answered
I think he says he steals everything, just like the dorf
can animals be added to regular npc shops, or do they need special animal shops? 
Is there a way to force pets to do specific sprites/actions with commands?
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
maybe... a new use for a new nested dialogue question and action tile action framework
you can't make me read documentation ๐
more seriously the problem isnt spawning a shop per say
It already has the option.
Animal bazaar is a great mod
Oh is it because he doesn't have a shop counter you lose being able to have normal conversation if you add the shop/animal shop menu?
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
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 
with just content patcher and betas
i would have to implement the dialogue version in the action mode
Yeah I was about to say it probably ought to be chicken-y
u r so smart blueberry
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.
if time pause mods stop characters from moving, that could work
I don't think time pause stops random movement
i guess pets have no schedules huh
I feel like you really ought to be able to just imitate how existing hat assets look in order to get positioning right, though?
I wish. I have to count out pixel on the sprite sheets and then do math to get the offsets. See docs for mod. https://github.com/SymaLoernn/Stardew_HatsOnPetsPlus/blob/main/README.md
just make ur pet a turtle
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.
me when I realize I just did an entire dialogue file outside of i18n
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");
}
}
you could always try the i18nator thing?
....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
i was literaly sitting here considering writing a script but if someone has already done it....
If I set a mailflag in received on DayStarted, would it automatically be read by a subsequent trigger action also on DayStarted?
thank u!
assuming the other trigger action is lower down in the list of trigger actions, it should
Hmmmmm that might be a way around it then
Because I record the last value of the date too
is it standard practice to leave dialogue commands like @ or #$e# in the i18n file?
Data/TriggerActions is a list so you can MoveEntries them
yes, you want to leave dialogue commands in the i18n
these things can vary with sentence structure in different locales
so read the moddata of the last date and create a mailflag. have it read the mailflag and output the relevant date stuff
i would leave things like @ in the i18n but i would split up my #e#s personally
oh yeah leave @ in the i18n. That's just the farmer's name.
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
as you are seeing from the variety of comments, there is no standard and it's up to you.
i leave $b and $e in. i consider them part of the writing
thank u everyone for the input!
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
(To my shame I have a mail trigger in one of my i18n lines.)
an $e is not a newline though... it indicates the next thing is a new dialogue
if anything its a page break
Yes, although there's a certain amount of absolutism in the field that has to give way to pragmatism in actual shipping products. If the localizers had their way, each entire self-contained UI (activity/view controller) would be one gigantic message to localize.
i have dialogue baked into my data/mail patch. i have no shame. fuck it
Localization? What's Localization?
its bc theres 10 letters between the l and the n
It's whatever you think you can get away with when shipping in another country/language.
why is the sewer like this
same but busstop
testing some spawn stuff there and I forgot how much off-camera space it has 
Oh my god if this works without a hitch this is exactly the thing I needed 
new thicc bus stop is wacky. the warps are so far from the map edge
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 
i made that mistake, and when i became future me i regretted it
"what do you mean it spawned at 64,29" starts tiled "oh yeah"
Manifesting Bug Net mod to be updated for 1.6 ๐
hm what is best way to check for CC complete in content patcher
check the host for mail flags i reckon
Probably through mail
specifically CC or CC/Joja
On the wiki it mentions this main flag "ccIsComplete"
Though it mentions "if using Content Patcher, use the IsCommunityCenterComplete and IsJojaMartComplete tokens instead"
Not quite the exact same, but this mod adds a bug net for catching creatures (/shameless) ||https://www.nexusmods.com/stardewvalley/mods/30138||
the mail flag situation is a bit muddy, so CP has those tokens which are a bit narrower.
in particular, i'm fairly sure some or all of the cc mail flags are set if you take the Joja route, so using those isn't unambiguous
ok, fine 
but e.g. ccVault means the bus is fixed, no matter whether junimos or morris fixed it
That makes sense, I guess just check then for either IsCommunityCenterComplete or IsJojaMartComplete
i did the squee face! it was a /lh! (/lh)
what is ur top 5 puffermoji
and
as a cute but less used one
this is because i only 
Screw personality tests, this is how you dissect a person's psyche
I'm surprised
isn't in my top 5 anymore, I used to put it in every post
thats true you do do that ive seen it
i feel like there was a time where every time i saw Esca join the chat it was prefaced with a 
not having a good time huh shrimply
relatable puffers
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
you need to start pinging people just for fun
(also
for my actual 5)
@ boncher help, i've been pinged
is krobus a puffer
spiritually
AI Overview
Yes, surprisingly krobus a puffer!
is
a puffer
surprisingly krobus a puffer... love the sound of that sentence actually
oh, I didn't even parse "puffermoji", I just think of SDV emotes that way
but also yes
is #6 so I guess it's still up there
i misunderstood the question and posted the five i like the best, which is why i said (unsorted)
i took the first five in the emoji picker which sorts by frequency so. i followed the instructions 
"your top 5 puffermoji" is not unambiguous
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
Ooo this looks cool!
yea if u r inside the generic
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
that might be a Shockah-specific question, since it's up to whether pintail can work around it
assuming they r all truly independent i think it will
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
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)
maybe ill try it just to see if it works then
It Depends TM
keywords being "just to see if it works"
The keywords are covariance and contravariance
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
Yeah, on the top level interface you can just delete what you aren't using
which one is top level? i thought they were all like. on equal footing
how do i OR in content patcher When
Top level is the one that you copy that goes into the <>
Queries 
weh ok
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
Not subclasses sorry one second

oh yeah she found a bug
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.
just make it unique
You can use either, both would be considered conventional. The main thing is keeping it unique like button said.
Mods/ID/whatever is the recommended format, but anything works
use mod id somewhere. other than that, do what feels right
In both cases using the mod Id should keep it unique
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
yes and no
the partials are irrelevant after compiling, so it's like copying half the api (aka deleting irrelevant methods)
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?
so it should work fine?
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.
anything is possible with enough C#
Hypothetically, probably, easy? noooooooo haha
I think so
Hypothetically you could.
Casey did
good to know, thank you 
also, hypothetically before you start that, you should play around with tiled a bit first
Iโm familiar with tiled but not so much C# lol
Stardew tricks you into thinking it has "elevation" as a concept.
oh good we found someone to update that mod
the world feels very very weirdly in focus
Wait someoneโs made this already?
(I don't know if she released it or not.)
crispy vision
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
This is exactly what I was thinking of!
content patcher is chill about // comments in json, ya?
yes
more accurately, SMAPI is
VSCode will cry, but CP will vibe
consider: the split i18n
anyway we expect a 1.6 version within 2 weeks, please update your sprint tracker by the end of day thanks
is it real
(because I was in support while you were all posting your puffermojis and I want to play!)
do i not read enough docs
i18n can do subfolders yes
very
added in uhh. idk. october
Considering it tbh. What would I need to do to get started?
i can tell you spend a lot of time in support a lot bc of the pufferparty
learn C# to start
excellent heart choices
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
Good idea, need to learn it anyway for something else haha
point_up supremacy (i do not like the thumb on point_up_2)
To be fair to support, I also do pufferparty in here a lot because I like celebrating people's modding wins
Oooo I want to play too. Let's see...

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
puffers only:

i dont think trigger actions or gsqs will catch on tbh
Why is that?
(/j)
o
(button has made many of those
)

yeah ive made like 40 of them combined
Yeah
BETAS, forgot abt that
Should've been like, wait why would they say that?
chu wants me to let you know that it can destroy terrain features
But will we ever have STABLES
Some Trigger Action Bullshit, Less Exciting Stuff
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?
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
what about PROD
Haha
coincidentally it was added in the same update as ReloadItemField for the same person
i wish there was a SMAPI event for two or maybe three ticks after GameLaunched, which is when Content Patcher is ready and it's okay to load your data assets
sure, i can register UpdateTicked, do a little countdown, do the load, and unregister the handler. but i hate it
just need to convince Pathos to update SMAPI just for his mod
i had been foolish to think this would be quick mod 
is DayStarted or SaveLoaded nmot usually good enough though? not that i havent also done the coutndown myself before
i think you want a content patcher event more than an smapi event
There are quick mods...?
a good number of my mods have been quick mods
wait no, there was that greenhouse mod I banged out in like 30 minutes and published before an hour had passed
not for something that might be expensive, at least to me. both of those fire after the player gains control and dropping frames at that time is punishable by death
ok so for some ??? reason if i do edit map with both FromFile and MapTiles the animation is lost
I was more making a joke about how all my mods tend to take on average like 16-30 hrs worth of work.
i swear this worked though, cus i used it in another mod?
i didnt think SaveLoaded happened after you had control
i think it fires immediately before DayStarted, but maybe my memory is off
it does, in which case how can you have control before the day starts
at any rate, using those events for expensive loads causes noticeable hiccups which i find unbearable. moving the hiccup somewhere less obvious is ideal
i think you should do it every time the player interacts with a crop
(i often use LoadStageChanged for this if it relies on saved data in some way. that way it's during the "Loading..." blackout)
I reuse this across many of my mods for the same reason
i often just chain gamelaunched -> onesecondupdateticked -> dostuff()
I feel safe just assuming everyone has Content Patcher installed
got it.
public static void UpdateTicked(object? sender, UpdateTickedEventArgs e)
{
Thread.Sleep(1); // for safety
}

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.
"When": {
"Day|contains=1": false
}
is that some kind of 1x2 stack of chickens there
So CP conditions are an entirely different thing from Game State Queries. Exclamation points for negation are a gsq thing that does not apply to cp conditions. You'll want to do as atra suggests if you're using cp conditions.
Ah, that explains it, I was misusing it. Thank you very much for the explanation.
My thanks to both of you.
Does anyone have a tutorial for making quest items?? I seem to be having trouble finding anything on it
Like special powers / wallet items like the books and sewer key?
sounds more like caroline's necklace, robin's axe, linus' basket
Hm, I think you'd need c# for that
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
You'd need to modify pickup behavior right?
they're usually added to the world in the overlaid items dict, which i don't think cp touches
"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!"
Sorry, but yes this!
I thought when you interacted with them they just vanished and didn't give you an actual item
.Choose Relax and Chill, Work on underground map, figure out warp setup, work on Content Patcher.
Choose result: Relax and Chill
LostItem/<Quest Title>/<Quest Description>/<Quest blurb>/<NPC> <object> <Map> <X> <Y>/<next quest apparently>/<money?>/<"reward description">/<"can be canceld">/<dialogue they say>
if you didn't get an item you couldn't hold onto the shorts for the luauaua
I thought the shorts were different from the axe and the basket
you can do SecretLostItem too though i dont know the difference
i think secretlostitem is carolines jewelry
I always complete those really early on so it's been a hot minute
fairly sure it just means the quest doesnt tell you the item ahead of time
I remember the axe and basket not being a slot items held in inventory but shorts is, if thats what you mean
they are all item held in slots
how else would you deliver them
in my wallet
astral projection
just talk to the person and it used to just "give the item for quest completion" as the first interaction
I have zero idea what secret lost item is for or does or anything tbh
thanks, game
im pretty sure ive always had to hand deliver the axe and basket
SecretLostItem is a quest that does not appear in the qust journal
basket is an item. this is not up for debate
I guess I'm crazy then 
pigeon
let's just ask #stardew-valley next time, they all play this game more than this channel
Maybe it just never registered with me, cuz you could never do anything interesting with it like you can with the shorts
We need a mod that lets you wear the basket as a hat
I would feel bad being mean to linus though
i mean, you can wear the mining pan as a hat
I always forget that's a vanilla feature
once during the alpha I tried to "innocently" wander into #stardew-spoilers because I forgot the behavior of fruit trees
I have 1000+ hours in stardew, I feel bad that I didn't remember this
I'm looking at old videos to see if it changed, but no even in 1.3 it was an item.
I'm sorry for your loss
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?
if its a mod youre making, yep
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 >_>
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
(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)
thats what Frost Does when mapmaking
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?
you can keep them in separate folders and load them separately
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 
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
can they have the same shirt name though?
oh that's okay! I'll try to figure something out
ah unfortunately it's not a farm map ๐
i hope 1.7 would change all the weird ass shop open actions to OpenShop 
an expansion map or npc map? 
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
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)
tsx files are available to all open maps when exported, but imports won't apply to all maps
^ 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.
i... am struggling to figure out how to export it
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
ok, and now tiled says no i cant import it
that's not import, that's make new tilesheet
oh
you're doing things in the wrong order
you want to export a vanilla tilesheet, and import it into your map
looking at your symbols reminds me that Tiled Has been begging to be updated for a while
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++.
i'm not good at updating.
r u a proud 1.23 for mysterious reasons stan
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'
Yeah I probably caused a few of those myself in the past.
mostly because instead of writing a new Content File I'd just copy paste it and change a few bits.
i cant use LocalizedText in ConfigSchema right
no
Anyone know how to contact Another Pillow? They're the ones who were maintaining tego's Stardew expansion mod.
They're @p.llow here on Discord.
@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.
Thank you Pathos.
Haven't touched it in years. Should probably update it but it uses tmxl lua things so can't easily
I noticed lmao, I saw "last updated 2021" and I was like, it was really that long ago?
Yeah it doesn't feel like i last updated the mod 4 years ago
if nothing else, map strings are an easy update
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
well, if you want to be fancy then c# is generally needed lol
hard to break new ground while walking the same old path
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
looks? it's literally invisible 
.choose make underground map, do Content patcher work, chill and game, do random stuff for primary map like figure out where buildings go.
Choose result: do Content patcher work
The conch has spoken.
all hail the magic conch
this involves naming the map, what do i want to call this map....
testmap1 has a certain ring to it
Any suggestions? Its also going to have a large internal cave network (that is going to be grassy with rivers n stuff.
"Farm Map (With Large Internal Cave Network)"
I'm terrible with names, no joke most of my farm names were suggestions.
then i see no reason to ignore two great suggestions right here
something with Cliffs and Caverns in it perhaps
Waterfalls Cliffs and Caverns ... WCC
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?
Can I read other mods config options through my mod?
where did u put gramps
Since it's flippin huge may I recommend you add an adjective related to its size - something like, "Colossal Cliffs & Caverns Farm"
LMAo my sleep deprived brain answered that with an intrusive sassy thought - "Off a cliff."
its only 155 wide 200 tall
, and I haven't actually placed anything yet, Farmhouse, Greenhouse, Shrine, Pet area, Spouse area.
65x80
๐ Ily and your giant maps though, Draylon.
Soooo.. more than double in each axis. "only"
๐
more like exactly 6x 
more than double is technically correct ๐ Just like "it's bigger than 1 tile" is correct.
(I'm in a mood, forgive me lmao)
is okay, sassy is an acceptable mood.
I could also just name it after the user's comment who inspired the mod I suppose
but only like 2 people or people i tell would know why its named that.
iono, i the theme of the suggestions though.
This would be valid right?
"When": {
"HasMod": "Fostoria.Stoffton",
"{{Spiderbuttons.CMCT/Dynamic: Fostoria.Stoffton, FostoriaSize }}": "Tiny"
}
looking at it now i might shove grandpa's shrine into the cliffs next to the pink tree at the top
not if you wanted a config option, thats a dynamic token
But they're using a DynamicToken, so what's the difference?
Ooh, Draylon, you could go with something with "Heights" in it!
well, the fact that you said you wanted to read another mods config, for one
'something something Heights'
Since, you know, you darn near broke the build height limit ๐
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?
I want to read it and apply a map patch accordingly.
ooh, yeah and that makes reference to the very tall cliffs kinda inherently 
So what does DynamicToken mean with this mod?
Yeah, they're using DynamicToken for the map size that's user changable, Large, Tiny and Small.
I'm a fan of alliteration, and enjoy big obnoxious words. So my official suggestion is "Halcyon Heights" ๐
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.
ive just looked at the mod. they are not using any dynamic tokens
they are using ConfigSchema
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?
should do. but remove the braces
The curly brackets?
yes
Highland Falls Farm?
I like that because it ties in to the cliffs and the water! ๐
Whitewater Heights? I'm literally just googling synonyms for words like cliffs, waterfall, Heights, mountain, etc and trying to mash them together.
Okay, thanks.
I like Whitewater Heights, for the record ๐
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.
. I kinda think i like those first 2 the best so far from all these word mashups.
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",
}
},
you cannot use GSQs in When conditions
use the CP token that checks the community center being complete instead
i think the IS_COMMUNITY_CENTER_COMPLETE GSQ also has a note that says its unreliable?
Search for "community"
you're thinking of the mail flags
Found it, just have to remove the underscores basically and adjust capitalization. It's IsCommunityCenterComplete
ohhh, so i was.
anyone made a sprite replacement mod before that is not an xmb mod?
thousands of people yes
yes
!startmodding
Making mods can be broadly divided into two categories:
- Content packs are formatted text files, and don't need any programming knowledge. They can add/edit NPCs, maps, new items, shops, and more. To get started, see the list of framework mods, the wiki tutorial for Content Patcher, and there might be relevant guides on the tutorial wiki.
- C# mods use programming code to change fundamental game mechanics. See getting started with C# modding.
Usually itโs easier to start with making content packs, since you don't need to learn programming.
look into Content Patcher
well yes ik its possible haha, i was just wondering if anyone i could ask about it was around
!ask
Ask your question or describe your issue here, and someone will help if they can!
(i just wanted to use that command dont look too deeply into it
)
but this is the place to ask. dont wait for a specific person, people will help if they can
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
Like button said, you're going to look into Content Patcher. it will be what you end up using most likely.
i would look in the startmodding command stuff in the governor command above
ok, I'll start looking there. Thanks!
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.
.Choose Be Lazy, Do Cavern, Figure out Map Properties and building locations.
Choose result: Figure out Map Properties and building locations.
welp here's a wip
Nice!
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.
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.
Why would that warn
Hey, it's looking good.
i see its normally used on building only 
wacky
i don't think anyone's made a trigger action that just logs a message
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.
Esca has i believe
if you are really concerned about this u will have to settle for MagicWarp
please send a full log
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 ๐ฅฒ
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
hm, you can be the first consumer of the dialogue thing i made 
u can put a TouchAction behind a dialogue box thats on a Action
there is an action warp if i remember correctly, but i think it makes the ladder sound effect?
but as said it is only warning, my experiance in mod help says many people dont give a shit about warnings
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 ๐ )
With TMXL we could Action Lua our way to warping and play whatever sound effect we wanted, all at the same time.
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.
im assuming no, but do you have stoffton installed atm?
Nope, even with it installed it warns.
If u r do Lua u might as well just ship a C# component that registers the custom action u want
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
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.
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
I don't actually know Lua, I just knew enough to do what i wanted, cuz TMXL had basic documented ways of doing things for Lua (If you knew where the docs were), like Content Patcher does for itself, , and mouse helped a lot. 
microsoft documents C# 
Can you share the relevant part of the content file pls?
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
That's EMP's only trigger action at the moment 
https://github.com/Esca-MMC/EscasModdingPlugins/blob/master/docs/emp-modding-guide.md#log-message
I think you can also take advantage of SMAPI's logging to do your own trace-level logs without this, technically, like
"Action": "null hi this is a log that SMAPI technically shows"
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 
I did some of both for SVE a while back
https://smapi.io/log/1a1bd77bfaa94685a473a6cba79dc63a I guess it's not warning with Fostoria installed anymore?
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
it cant possibly have in the first place
It was for a while.
please do not send long json text walls in here
He asked for it 
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.
You don't need to link it to me, I know where it is.
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
So, putting it in an external json file and including it?
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
It should be fine to have checks inside that external json file thought if I need them right?
correct
Okay good, thanks.
assuming you mean Config checks
HasMod checks will be redundant in there
i mean they wont hurt to have they just wont be needed
Yes, because there's three values I need to check for.
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.
Did anything become of the suggestion to have a dedicated stardew valley mod hosting site?
I guess the forum works as that, but idk.
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?
one last wip screenshot and then i stop staring at tiled before i go crazy
Did you set the Portrait field in an existing entry?
the game will pick the first entry that matches a nearby NPC, so if you added a new entry it wouldn't work
Hmm... I think I'm having difficulties figuring out how to edit an existing entry, then
pretty 
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
pls post full code thx
!json
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.
(simpler to use that)
looking at the vanilla data you want to TargetField
"Hospital", "Owners", "Any"
then just set "Portrait": "YourAssetHere" in Entries I think
Wait I think I just figured it out 
Okay, what I tried worked but your instructions also work and work better 
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! 
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
If you use trigger actions to send mail, simply set it to at least a certain number of days played
Actually I was using the basic date format to send the mail but I completely forgot that trigger actions exist lol I guess I solved my problem thanks for mentioning it!
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.
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.
This is the framework https://www.nexusmods.com/stardewvalley/mods/22631
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.
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"
}
]
}
}
Foxes 
You don't have to load your own texture if you just make content patcher do it for you
oh, I suppose I can do that 
I know how I was just stupid
Thanks chu
Have a cookie ๐ช
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 
SAYOKO
scope creep is coming hard for me rn
maybe i should put off those other features until 1.1




