#making-mods-general
1 messages · Page 425 of 1
Sorry if that explainatio was janky
My discord is slow right now, so sorry for the typos as well
Anyone know? I can’t
Sorry
at its simplest, they could release their mod as an exact copy of yours, plus new expressions, and with your own mod listed as a dependency in the manifest. without your mod installed, the dependency check would fail, and theirs won't load
technically it would still be useless to download your files, but you'd get download credit
unfortunately i can't brain up a solution at this time of night though, sorry
Can't they just editImage the portrait to add the new expressions
You load them, they edit them
Or if yours is already just an EditImage (shouldn't be, should really be a Load), it doesn't matter which order it goes in providing they're not touching the expressions you've already done
Unless EditImage can't extend the image down but I thought it could
So, someone is asking about making a krobus mod, and they want to use my portrait mod as base and add expressions to it that I have not. Are You saying they could feasibly add more expressions onto my mod without having all the rest of the portraits form my mod sitting in their files as well?
Can I ask a question? Let's say I'm making npc... Where do I start? The portait or sprite?
as an alternative, if you like their added expressions you could negotiate merging their changes into the main mod and splitting the DP
start wherever you feel most comfortable! both the sprite and the portrait can open up a lot of character to your npc. i'd argue the sprite is far more work than the portrait, but the portrait has higher standards/expectations
if you're just setting up your project for the first time though, just use an existing NPC's portraits and sprites to help you get started quicker.
art is the least load-bearing part of npc creation, even if it's arguably one of the most important for first impressions and character believability
Uh... How many pixels are sprites usually-
T-T it's a personal project lol. I'm trying to yeet Haley and Emily parents back to the valley wonder if their name was ever mentioned
It irked me to see them absent from the most important times of their daughter lives
Tyyy blue!
Personally i start with portraits since i hate walking sprites
I thought so but now I am questioning myself so...let me check
there's a guide to making npcs but i don't remember the command 😌 it'll cover the basics
!npc
Keep in mind that making NPCs is a complex process that requires learning many different aspects of Stardew modding.
Here are a few links that can help get you started on all that you need to know:
-
Tiakall has a great tutorial on making a custom NPC for 1.6.
-
NPCs no longer use dispositions, check the wiki page for the new NPC data.
-
Feel free to jump into the https://discord.com/channels/137344473976799233/1277457201077813280 thread for more interactive feedback and help!
-
Fireredlily has a WIP NPC Builder Please do report any errors you get with it into the NPC thread!
Very hard to remember
unbelievable.
thank u
(Sorry that my thoughts turned out so long)
I don’t want to outright reject their idea, but I’m not necessarily comfortable with my art being the cover of a mod which I have not written, and which will change the npc in new ways that I don’t know anything about. It’s also possible (or I at least don’t want to close the door completely) that I could make a krobus mod myself someday, and it would my odd for my art to be used for someone else’s characterization of him.
I also am not particularly comfortable with adding someone else’s art to my own mod, which is entirely my art right now. It’s just a lot of unknowns, and I don’t think I really want to be a part of a collaboration right now.
I'm still going to find out the answer about extending the image, but it sounds like regardless of whether it's possible for them to do that without including your assets in their mod or vice versa, you don't want to do it. And that's okay.
yes aba you're right--also think its totally okay for you to say no to them!
That's why we have art permissions, so artists can say no if they're not comfortable
I think I’d be ok with it if the new art was entirely on their end, and is a compatibility config option that only works with my mod installed, while also not being the thumbnail of the mod.
you can say that to them
Okay woo I was right, totally possible to add extra portraits to the bottom of an existing portrait sheet without including the original sheet. The first screenshot is from the patch export (so after my edit has been applied in game) and the second screenshot shows the entire content of the file in my mod folder. You can see that Sam has his last two real portraits and then the ones I added, but I don't have those real portraits in my file.
You created Inversam
Ok, thank you Aba! This is helpful info for sure. And thansk to everone else for their insight too. I’ll figure out how I want to respond.
Inverting him really made his eyes freaky on the left one haha
If you do this then watch out for compat hell
This was letting Parcy know about whether it was possible for someone else to add portraits to their mod without including Parcy's assets in their download, so compat with other things isn't super relevant (if someone wants to use another Krobus mod there's likely going to be other compat issues even without the portrait extension).
Ah ok
Hm so one case i seen is lemurkat's dwarf mod (last smolanu) where a particular portrait mod is highly recommended
I think this setup makes the most sense
(Also Parcy was leaning pretty heavily towards saying no regardless, I just said "yes it's possible to extend the portrait sheet without using your assets" and then doubted myself so I had to check lol)
From what I understand, the idea was that this second mod wanted not to edit any of Parcy's existing portraits but instead add new expressions
I wish u could go wider than 2 rows sometimes
(Maybe to romance Krobus IDK)
Or somehow have named portraits from arbitrary source
Parcy's Krobus portraits are very cool so I can understand why someone might want to maintain compat with them if they added new expressions, but I can also understand Parcy feeling a bit strange about it
I did give permission, and let them know that will be entirely on their end, and advised them that they should have basegame portraits as the default incase the player does not want my mod. I also mentioned that I don’t think that any updates I add should seriously mess things up on their end since my new upates will be configurable, but… maybe I could’ve been wrong?
If your updates will add new expressions below Krobus's current ones then it will break their mod. You could get around that by just adding your new ones below where theirs would be when your sheets were combined or just let them deal with it.
If you're adding new outfits but keeping the same number of expressions, it won't break theirs.
i just noticed the tortilla trend what is happening
It became center of everyone's ~~obsession ~~attention
huh, just noticed this.
seems really cool tbh
this is what the tortilla situation reminded me of
Are you sure? Is it a different format from objects or something that's already in there?
Hey, so I have a "hopefully" simple question. I made custom animation for my character and defined it and all the frames in the content.json and then referenced it in the schedule.json but the animation doesn't play :/ does anyone know what the reason could be?
https://smapi.io/json/none/02180de6587b417b86b57784aa6dbdb4 Schedule
https://smapi.io/json/none/9bf452743f9d408ca40420d781d3d1f3 Content
you have called the animation {{ModId}}_Taq_training in Data/animationDescriptions, but in your schedule you have referred to simply Taq_training
Oh so should I call it {{ModId}}_Taq_training?
yes
Omg I am the silliest. Thank you! I figured it was something simple 😭
thank you for prefixing your NPC's id with {{ModId}}. the compatibility goblins thank you 
I just tried to follow the guide as best as possible 🫡 I don't think anyone would care to download the mod once it's done though XD I'm really just doing it for me. The guide didn't mention that you should call it {{ModId}} in the schedule too, so that's why I was confused 🙁
if I want a mod of mine to add something after CP has patched it, is it priority high or late?
Im confused about the terms
@brittle ledge potential error in the NPC tutorial
for this, you want Edit, and the priority is Late (or, more accurately, later than the patch you want to come before yours)
Data/Furniture is a big ol / separated string
I'll just leave this here in case ther is confusion when I'm gone. So I copied the content.json one to one. But for schedule it just says "JortsCat_Catnap" and not "{ModId}_JortsCat_Catnap"
there are two types of priority: one for loads and one for edits.
loads are High/Medium/Low (/Exclusive), and only one can actually apply, so the highest-priority one wins.
edits are Early/Default/Late, and they all apply, so the priority determines the order
you can add arbitrary numbers to each one if you need to be more granular than that, so e.g. Medium+1 is higher than Medium but below High
can I also do Late +1 (when in content patcher content pack)?
yes, Late+1 is after Late (but before e.g. Late+10)
in case it's important to know, the keywords have numerical values:
High (1000), Medium (0), Low (-1000)
Early(-1000), Default (0), Late (1000)
so don't try to do Medium + 1200 or you will exceed High 😅
Thank you, I wasn't sure where the confusion was but yes, it's using the NPC internal name in the schedule animation and that should match everywhere. 
(Jorts and Jean predate {{ModId}} so I had to backport that into my examples)
if mod name
Example edits a room with Prio Late+1
and then a mod with name
ExampleX edits a room with Prio Late
which is the one loaded last?
and is the folder name or the modID here the indicator of load order?
late+1 is later
I’m sure without priority/dependencies there’s ordering based on… something, filename included, but I wouldn’t rely on it (I have had reports of my mod’s changes not applying on Windows because I forgot to add false deps; issues that wasn’t happening when I tested my mod on Linux)
Oh, no harm at all! Your guide was INCREDIBLY helpful. I'm just really new with programming in general and know nothing about Json or c# so I always need extra help 😞
see yesterday in m-f when i tried to explain how it works
mod load order is not really defined or reliable unless dependencies enforce it, so use priority or dependencies if it's important and don't rely on Works On My Machine
(i recommend using Priority in most cases, since it's more granular, it's per-patch, and it avoids the risk of introducing circular dependencies)
dear modding community i wonder if you could help explain my own actions to me
i am looking at the code for my toast mod and i have the mail with recipies set to show up after 4 hearts
however, for some reason i don't remember, penny is set to 5
maybe it's a typo but i figured i'd ask if anyone knows offhand a particular reason i might do that
Maybe because she has a 4-heart event which includes a letter?
possibly
that makes sense
thanks
hmm how would the dwarf sign a letter...."- a neighbor"?
Sounds reasonable to me, though I've got to admit I've never received a letter from a dwarf
maybe i should write it like it's just a loose paper in your mailbox
Honestly, given that the dwarf is canonically known to regularly take things from people's homes in the middle of the night and does not understand private property, I would not ever expect them to leave a signed note LOL
"there's a piece of paper in here. Its covered in dirt stains for some reason"
"Wanna know how I make this? Here's how. Add more cave carrot as you see fit."
Leave clues that it probably is from the dwarf but without signing it
"DwarfToast.text": "Hello human. In the spirit of cultural exchange, I am sending you this concept for a dish that combines human and dwarven foods. ^ -
this is what i have currently
i would say note that the letter is unsigned
something like "hey friend. This is how you make some of my favorite recipes" and leaving the playre to guess who sent that XD
Could also be a little doodle at the bottom instead of a signature
Dwarf doesn't speak our language after all
Mentioning cave carrots should tip off anyone who's ever talked to the dwarf 😄
We speak theirs
counterpoint (not serious): when dwarf says they don't understand private property, they are just trolling you/making an excuse because they know you don't know their culture enough to disprove it
haha
dwarf is canon nonbinary, though, there is that
Them, then
I will correct the pronouns in my message
hmm maybe i should do like uh
you find an odd scrap of dirty paper in your mailbox. it's in dwarvish. you translate it and it seems to be a recipe?
oh i love that
sidestep the "voice" of the dwarf altogether i suppose
belloo , just piping in here to ask how do i remove a modded farms quarry/make it so rocks dony respawn every single day in a specific area because i really dont know what to remove without fucking up the code in FTM 💔
depending on the farm, it might have a config.json?
Sadness
this is what ther quarry part of the code is, if it helps
Glad to hear it! I'm always happy to hear if anything's unclear since it's written for folks who are relatively new to CP and JSON. I just fixed that, along with tweaking a few other things here and there. 
set max spawns to zero maybe yea
the coordinates are presumably where they spawn
maybe you can set those to zero or something too
welp, i set the min and max rates to 0 so lets see
"DwarfToast.text": "Inside your mailbox you find an odd scrap of dirty paper. It's a note written in Dwarvish. Upon translation, it seems to be a toast recipe?",
hopefully i am comma-ing correctly there
I think a comma after "mailbox" is possible, but optional
i was thinking that too
The other one is perfect.
kinda wild that gunther and marlon are still ungiftable. maybe that'll be a 1.7 thing
hmm
mood
sorry
all good
I don't think you need a comma after "mailbox" here, no
okay ya that worked for the most part me thinks, the boulders came back
there's mods for that 
yeah
i usually have them haha
"GuntherToast.text": "Greetings, Farmer. Recently, while dusting the display cases, I found my mind wandering about the Dinosaur Egg. I bet one of those could make enough mayo for several orders of Tomato, Mayo, and Toast!
this is an awkward concept to write but maybe that works (although dino mayo doesn't make several mechanically)
Ah, I wasn't entirely wrong, it's the same structure as recipes, so i18nifier still works if you paste it in that section... I should probably somehow make it more clear 😅
if you didn't see me mention it the other day, the dialog mode works for mail, also
That is intended, although it'd probably be better to separate it..
ah, it is i who did not read
Is the display name at the same space though 
Yep, 7
Another quirk is that ppl may want to use LocalizedText instead of i18n in that spot anyways, otherwise existing furniture items don't update
Oh? Really? Interesting..
(this applies to objects too pretty sure)
"MarlonToast.text": "Here's an old Guild tip for you. If you find yourself desparate enough, you can eat slime globs. I wouldn't suggest eating them on their own, but on a slice of toast with some cave carrots it becomes...tolerable. ^ -Marlon",
I think they update fine, just not midgame
which can happen if you change languages, or conditionally patch the name for some reason
(does not apply to flavored items)
is this correct? or are the " on the wrong spots?
"When": { "HasSeenEvent": "anyPlayer 9333220" },
@latent mauve: add an article explaining how to set the home for Pelican Valley Loft NPC Apartments on the mod page (12h ago)
"LeoToast.text": "Hi @. Back on the island, I ate a lot of mango and coconut. Mostly since they were easy to find. Willy and I tried some on toast recently and it was really good! Here's how we made it. ^ -Leo",
there we go, got my new toast letters written
art is done too so now i need...the item data, and mail triggers hmm
ughh I am going crazy over:
[20:13:56 TRACE SMAPI] Content Patcher edited Maps/spouseRooms (for the '(CP) Spouse Room Renovation' content pack).
[20:13:56 TRACE SMAPI] Content Patcher edited Maps/spouseRooms (for the '(CP) Spouse Room Relocation' content pack).```
when I have these two as false dependencies AND Prio: Late+1 (Relocation has Late+1)
ugh, fine.
Version 1.2.1
Fixed: Donated items not being counted as donated items because they were donated items, preventing some museum rewards from being correctly rewarded.
that's a good changelog
if you're using Priority, you don't need a false dependency. just pick a higher value, so if Relocation is Late+1 you could use e.g. Late+10.
another possibility is that your Priority is at the wrong level and isn't applying, so make sure it's top-level on the specific patch (posting your json may help here)
toast madeness is setting in. i have set a hotkey on this streamdeck to paste Toast when pressed
ToastToastToastToastToast
so if i wanna use HasDwarvishTranslationGuide
"Condition": "PLAYER_HAS_CRAFTING_RECIPE Current {{ModID}}_LightToasterDog, PLAYER_HAS_CRAFTING_RECIPE Current {{ModID}}_DarkToasterDog, PLAYER_HEARTS Current Dwarf 4",
do i just add a Current HasDwarvish?
there is a mailflag for HasDwarvishTranslationGuide
I don't know why you'd need the rest of those conditions
i seem to be using trigger actions currently
You could just do PLAYER_HAS_MAIL as your GSQ
PLAYER_HAS_MAIL <player> <mail id> [type]
Mostly just wasn't sure why you needed that much complexity if all you were trying to use was the DwarvishTranslationGuide flag
nah i want one of these that ALSO has that
ah, I see
so you need to have the guide, and the friendship
you can’t gain hearts with the dwarf without the guide anyway
if you’re already conditioning on dwarf friendship you don’t need the guide condition
true
ah yeah that makes sense, cool
now how would i do one of these for a complete museum...
museumComplete and HasRustyKey exist
oh these are content patcher conditions i'm using aren't they
...ok no they are not, i am very confused by own old work jeez
who knows how mods might change this, though
also cryomancer are all of these supposed to have the same LightToasterDog and DarkToasterDog conditions or are they placeholders? bc if theyre meant to it might be easier to make a separate GSQ that checks for those two and sends a single mailflag you can check for everywhere else instead? for readability mostly
those both come in a mail anyway so probably i could just set them all to "hey did you get this mail"
this is just...how i did it at the time i guess
yeah basically the same thing. it'd condense your trigger actions down a lot for sure
"{{ModID}}_BuzzToastSendMail": {
"Id": "Buzz_Send_Toaster",
"Trigger": "DayEnding",
"Action": "AddMail Current BuzzToastDelivery Tomorrow"
this mail gives the toasters
yes but my problem is that i dont understand until i see actual examples first 😔 cus there r like 5 different ones i see so idk how it works and when i read it im so lost im not sure how i would write the full thing in a coded way
so what would it be like, PLAYER_HAS_MAIL Current {{ModID}}_BuzzToastSendMail
PLAYER_HAS_MAIL Current BuzzToastDelivery
BuzzToastSendMail is the ID of your trigger action not the mail itself
ah right
your mail flag itself should probably have the unique ID in it tho
"Id": "Maru_Send_Toast",
"Trigger": "DayEnding",
"Condition": "PLAYER_HAS_MAIL Current BuzzToastDelivery, PLAYER_HEARTS Current Maru 4",
so like that?
but if the mod is already released it might be a bad idea to mess with mail flag IDs now
thatd do it i think yeah
cool
assuming the BuzzToastDelivery letter is the one that gives the other recipes
that's a simple enough change
the LightToaster and DarkToaster
that should be correct yeah
you could also probably LocalToken all this too, though it wouldnt save too much writing, but would reduce the chance of typos or copy paste errors. def more complex tho
but somethin to look into if you ever wanted to mess with local tokens
if you just want dialogue for a specific item use the first one
i think i'm getting hung up on the difference between a trigger action condition and a GSQ
if you need examples check out the dialogue files of vanilla characters that have unique gift responses
the Condition in a trigger action is a GSQ
when the GSQ is true, the Trigger Action will happen (when the given Trigger happens i.e. DayEnding)
PLAYER_HAS_MAIL is a GSQ so you've already been using them
and PLAYER_HEARTS
ok so like museumComplete would just be adding ",museumComplete Current"?
if something is WRITTEN_LIKE_THIS it is generally a game state query. not always in modded stuff, but in vanilla stuff it holds true
if its not written on this page, there is not a vanilla GSQ for it
but the rustyKey is likely tracked in another way that can be accessed via a different GSQ
yeah i want one for rusty key or museum complete, and then uhh something for marlon, probably enemies killed or mines progress
right, but that's a mail flag
yes
use PLAYER_HAS_MAIL Host
thats what the PLAYER_HAS_MAIL game state query is for
which you're already using for other actual mails
mhm, the problem was also that the other mods remove tiles, (they're empty afterwards), so I couldnt set maptile properties...
okay 😭 i shouldve thought of that thank u
(to clarify you use Host instead of Current since in this case the game considers the sewer unlockable if the host has the rusty key instead of if having to be unlocked for every player)
yes
ok, thanks. mildly convoluted, lol
i dont believe a farmhand can even get that mail flag at all unless a mod manually gives it to them
"Condition": "PLAYER_HAS_MAIL Current BuzzToastDelivery, PLAYER_HAS_MAIL Host HasRustyKey",
the setter for Farmer.hasRustyKey specifically gives it to the host
so this would fire off if the host has the key and you've gotten the toasters
yes
cool
it may or may not matter to you though but they will fire as soon as the player receives those mails in any mailbox
including if its coming to them tomorrow but hasnt actually been received or read yet
yeah i might want to set this out like, a week
well you cant check if the player has mail coming a week away bc the game doesnt know either
you'd need a middleman stat or mail flag or CT or something to time it
the options described on the Trigger Actions page for that action are what you get
you cant just add an arbitrary amount of time to wait to add mail
ah i see
the game doesnt track mail like that anyway. it can only send mail at most 1 day ahead
(i suggest more solid naming for mails, if you can throw a {{ModId}} here)
well this is probably ok. you'd at least get the key and then this one on two separate days yeah?
Button suggestion is to set something that does last multiple days (CT or stats) and then use a different trigger that checks expiry to actually send the mail
i think it may be an existing released mod already so altering existing mail flags would probably lead to some issues with existing saves. new mail flags are fair game ofc tho
here's my current file
lol, fair
"{{ModID}}_GuntherToastSendMail": {
"Id": "Gunther_Send_Toast",
"Trigger": "DayEnding",
"Condition": "PLAYER_HAS_MAIL Current BuzzToastDelivery, PLAYER_HAS_MAIL Host HasRustyKey",
"Action": "AddMail Current GuntherToast Tomorrow"
these are my trigger actions
is that not named safely enough?
You should prepend {{ModId}}_ if new mod, if already released mod you should do that and also use migrateids tbh
GuntherToast is not a safe mail flag name
nor BuzzToastDelivery or any other one without a mod id
ahh
also, for this trigger action setup
i was in context of a new mail or new mod, yes! things are a bit different if it's existing mail of already released stuff
if you have the rusty key first, and THEN the player gets BuzzToastDelivery, they will get BuzzToastDelivery AND GuntherToast on the same day, assuming the BuzzToastDelivery trigger action is higher up in your json
my understanding of all these particulars is...tenuous so i appreciate the feedback
(also assuming that BuzzToastDelivery is also set to be delivered "tomorrow")
"{{ModID}}_BuzzToastSendMail": {
"Id": "Buzz_Send_Toaster",
"Trigger": "DayEnding",
"Action": "AddMail Current BuzzToastDelivery Tomorrow"
this one should just like, come automatically
but for new things, definitively better to have solid naming, because tia can tell you about 3 or 4 npcs name conflict on names you wouldn't expect to clash, so while gunthertoast isn't something i would immediately see being added by other mods... you never know 😄
presumably long before you can complete the museum
its a little difficult to parse out/explain what i mean but basically, since you are just doing PLAYER_HAS_MAIL Current blabla, without specifying a mailbox at the end, it checks if they have that mail in any inbox
and one of those inboxes is "tomorrow's mailbox"
(your key should match your Id)
so if you are checking if the player is going to get mail tomorrow, and thats true, and then also sending them mail for tomorrow as a result, they will get both mails "tomorrow" aka at the same time
that is difficult to explain, dang
if you do PLAYER_HAS_MAIL Current blabla received then it will only be true if the player has actually opened the mail OR it was just a mail flag thats already been added to their received list
ok, that's easy enough to do
I added some warps from my greenhouse into a hub area that I created like so:
"Target": "Maps/Greenhouse",
"AddWarps": [
"31 41 {{ModId}}_Hub 3 4",
"32 41 {{ModId}}_Hub 3 4",
"47 41 {{ModId}}_Hub 17 4",
"48 41 {{ModId}}_Hub 17 4"
]```
After doing this, all warps INTO my greenhouse (e.g. from the farm, or from the hub area) are dumping me at the position of the final warp I added (`48 41`) no matter how hard I try to edit it back to `39 39`.
What'd I screw up and how do I fix it? 
Add the warp to farm again, at the bottom of this AddWarps section
Oh
does AddWarps replace rather than appending?
They prepend
I see
But hrm why would warp from hub area to greenhouse be affected
i suppose i should do this then, as suggested
Warping into the greenhouse always tries to teleport you to one tile north of the exit warp, I feel like this is a vanilla behavior that's come up before
The farm to greenhouse inside is a known quirk of humandoor
It looks for first warp and plop you right north of it yea
Has it been confirmed that it's only Farm to Greenhouse that does that?
Okay sorry, I tried to search but apparently failed then
All buildings do this
It's how humandoor works
was asking to clarify this statement
Yeah I popped my code in there and it kept saying something about invalid format
anyone know a mod that uses migrateIDs currently?
What I don't understand is why hub area is also affected (does it somehow fall in the humandoor logic)
An easy workaround is to use TouchAction warp instead for hub area
But for the farm u should ensure the first warp (last one added by AddWarps which prepends) is the "entry" warp
Understood, thanks very much
@hard fern: next step: buff trigger action mail flag crimes upon drinking the perfume (8h ago)
should i be MODID prefixing for machine data IDs?
if it’s a unique id it should be prefixed
"Id": "Retoast Toast",
"Triggers": [
{
"Id": "ItemPlacedInMachine",
this stuff
Placed InMachine prob not?
well if it’s your own machine it’s probably not as necessary
since they only need to be unique in that list
yeah
@brittle pasture arent you the creator of extra animal configs?
looks like rodney o'brien uses the migrateIDs thing
yeah I am, and I saw the discussion in the thread
I can possibly look into it for EAC, however the chance of me actually adding it is low because there is a lot of assumptions built into animal behavior, and it would be very difficult patching all those code paths to keep them outside
maybe not the best example, but an example
thats totally fine i also have another suggestion?
sure go ahead
itd be neat if we could label animals as crop pickers? like the jumino but instead they just dig uup your crops and leave them floating there for you to pick up? its a really specific behavior but i think a few people might like it?
see i have this animal that im wanting to dig up crops
that could be cool
itd be funny cause you can either be annoyed that they do it or like it
itd be like owning bunnies XD
oh yeah we actually discussed this a couple while ago lol
we did? im sorry i dont remember doing that but yeeee itd be so cool
yeah this is workable enough, expect some time before it gets added though since right now I’m being hit with the Silksong/Hades 2 double combo
We as in
and another issue ive encountered? which is my last uhhh thing im bugging you with jdfghsdfgd
The mmg regulars
is larger animals needing bigger doors?
That one's fixed with animals squeeze through
they sure do!
i have a cursed idea to use that as a feature tho
what if i made an animal house with a door they cannot posisbly fit through, on purpose
Yes but itd be cool to have it in single mod instead of having more dependencies but ghsdgd
No worries I’m planning on merging that into EAC
: O yay!
and keeping the existing mod as a content pack for ostriches in coops
doorless animal house so you can have faked via graphics aquatic animals
cause i have a animal that is 48 by 48 and i wanna add them
theyre a prehistoric raptor variation of my modern raptors
i think my dinosaur cave supports that size
i'd have to check
if you want an example anyway
ooh 👀
I’ll let you know when either releases in EAC 
dinosaur cave : O
You can make the door invisible at least
It's not required to provide a door draw layer
my dino is gonna changei ssize soon tho caus eim giving it a tail instead of tailfeathers
nice
i have been kind of working on an update for the dinos too but it's not coming together yet
Clown what if I can ride the raptor
if you wanna code that.....im down
raptor mount!
Erinthe coded it
unless its just a horse replacement?
You can make a custom stable building for the raptor
i've got like....5? 6? more animals i wanna add yet
instead of a farmanimal the big raptor will be a mount
lemme know if you have any feedback
feedback on what?
i'm not sure if i like the kind of fiddly stuff i did with produce items
livestock dinos
comment on nexus or PM me etc whatever works if you have any opinions
(i still have passerby in my current game btw)
hmm an ambitious idea I had was unifying Horse and FarmAnimal, or at the least making them seamlessly swappable with each other so you can have producing animals that can be ridden
this is just as unlikely to be implemented as the homeless animal idea though 
YEsssss
i should probably look at EAC's updates sometime
i know i had some struggles with produce states at the time
Selph I don't think the homeless animal is that hard
Just hide the real building at 0,0 
jail
lol
spawn em as critters
now i'm imagining a button that just spawns more critters on use
However clown could probably do this with just animal squeeze through (or EAC once merged over)
- Have robin build you a 2x1 "beware of dino" sign, it's secretly an animal house
- The dinos are exclusively "dig up" producers
- You do have to make this sign their home but they just squeeze through a 0x0 animal door (dw about it)
still have to handle the nightly disappearing act
Wouldn't they just squeeze back through the 0x0 door
- patch out the happiness penalties from being left outside
inivisible sleep sprite
I presume clown wants those animals to not squeeze in at all
EAC extras then 
But smokes and mirrors around actual animal house seems easier than actually no animal house
Some people might want nocturnal aniamls thant only come out after 5 who knows
yeah thats what i was wanting
Free feature creep for the taking
new rare cave boss, the feature creep
There's like a straight line where the purple cuts off
Maybe more feathers around there?
If you still need it, then if you put furniture data into the Recipe subpage it'll work just fine, since it's mostly the same format
I recommend the thread if you ever have any issues with the app: https://discord.com/channels/137344473976799233/1415798030535491707
ok i will try that. thanks!
unfortunately it doesnt work. its taking the name of the collection i used for the catalogue rather than the name in the middle
@whole raptor
Ah.. it probably doesn't work if the fields after the display name are present
I can try adding a subpage dedicated to furniture tomorrow
would someone be willing to help walk me through converting an XNB mod to CP? I'm using https://xnb.pillow.rocks/ and trying to read their usage guide but I just don't understand it at all...
ty :3
question does custom mounts have a size limit
Based on docs you can put width and height
but how does it attach the farmer to something thats larger or smaller
hmm
i mightjust make a farmanimal idk
Hey, been working on getting ready for a project, but wanted to check and see the most viable option for making it happen.
I've been quietly working on a mines overhaul for a little bit now and I think that I've figured out how I want to handle most things, but there is still one glaring issue, enemies. I've done some poking around, but it looks like the only enemy modifications I can find are in the Rougelike mod and the new enemies added in mods like SDVE which don't do nearly what I'm trying to do.
I have a few pressing questions before I actually commit to this project though.
Is there the possibility of using a program like ContentPatcher to inject and replace enemy AI with modified behaviors? Or would I need to find a different way to inject and override the vanilla .cs enemy code in stardew?
It seems like most of the enemy AI is contained in one .cs function, how important would that be to redo if I were changing the individual enemy ai of monsters?
Also, are there any examples on github of people trying to make a similar overhaul that I am missing and should look at as a refrence and to avoid copying mechanics?
Thanks for your time SDV modding folks!
I think the mod just tries to center you, not sure
No you can't do enemy ai changes with just content patcher gotta do C# for that
Enemies are generally quite hardcoded, you just gotta roll your own draw and update methods basically
Figured, was wondering if it would be able to inject the c# code or wether there was a better way of doing it
Content patcher is a c# mod whose job is to edit content
You are looking to change behavior
Now it does depend on what kinda change you want, for simple retexture you can use ftm to spawn your customly textured enemies
Or use monster variety to retex vanilla stuff dynamically
Well, I plan to retexture some sprites to signal attacks, but that's not the main intention with the enemy reworks. The plan is to make the behavior of monsters feel more like monsters in games like undermine or enter the gungeon and make combat more interesting in general (This would extend to combat skills, and how weapons actually work, but those are much smaller tweaks).
I intend to add a dash/roll to make it actually feel dynamic, but I know that overhauling the enemies would be one of the core parts of the mod and that the mod would feel incomplete without it.
Since it seems like the hardest part and would be so important to the core of the mod, I intend to tackle it first.
anyone know a good mod that has like magic and more weapons
are you planning on making one? 
Try asking #modded-stardew
kinda i just wanna have a fun time with a rpg
I wanted to download "all the mods" on cursed forge but someone told me to use nexus
again go to #modded-stardew
the Modded Farmers channel is the best place for recommendations
anyways good morning all 
Good timezone
Bonne soirée
@tired matrix re your trinket stuff
- did you equip it?
- you put scale 16 he would have been gigantic
- is your npc's internal id just
Xavierinstead of{{ModId}}_Xavier?
(for ref 16x looks like this)
I vaguely remember a framework that allows you to make custom storage with a specific number of slots rather than the default chest amount, What was it called? If it's updated I want to make smaller chests for automate
Expanded Storage
Ahh perfect thank you!
for simple example trinket take look at https://github.com/Mushymato/TrinketTinker/blob/main/[Examples]/[CP] Abigail Axcellent Adventure/data/abigail.json
Oh. Um. Wow
after 6 years i still have no idea how to draw hair. all i know is i dont like it and it must be 🆕 and different
how in the world do you make this stuff look good
probably needs another midtone actually
at this rate i'll just push all the clothes and do the hair later
honestly it looks pretty good to me!
Are you looking for criticism blueberry?
sure, say whatever's on your mind. it's probably not very representative of the final product as-is tho
I think the purple hair 100% needs another tone between the lightest purple and the second lightest (The tones in the image), its causing the second purple hair on the bottom row to look very angular (in my opinion)
ah yeah it's getting another midtone or two, just blocking out the shapes
In that case, they look great, the shading on the black and white hairs is fantastic
I'm making a map that I want to behave as a standard greenhouse (plant anything regardless of season), but I want it to use fall-season graphics all year. Do I do this by setting both IsGreenhouse and SeasonOverride map properties? My experience with SeasonOverride is a little wonky with mods like Custom Bush so I'm interested if there's a better way.
i think custom bush fixed the problem right
Mmm not as of a couple weeks ago, and I don't see an update to it since then
yoink thank you!
(But, I'm still curiosu the best practice for what I want to do with my map)
anyways SeasonOverride is 100% the correct thing to use
to be clear what u have to do is change SEASON to LOCATION_SEASON Target
another thing you may need is outdoors
or directly using the fall_ tilesheets
Ah. I don't have an environment set up to compile SDV stuff. 
Is... is that an option, did I really just not try the simplest thing
using the fall tilesheets directly, that is
well you would have to if u dont wanna use outdoors
cus indoor maps don't get auto tilesheet changes
wouldnt smapi see fall_ and correct it to use the seasonal one (which SeasonOverride hopefully keeps on fall)
if u r ok with stuff like grass not getting fall graphics then just do tilesheet n not seasonoverride
Well then that solves my problem beautifully haha. Indoors with fall tilesheets. 
yeah tbh I just want the color, not the ✨effects✨.
i dont think so, cus it's indoors
the black and white ones are the scrubby scabby ones from 2019 
When making a custom item, can i specify a "FromArea" field in the item data itself? I'm trying to make the item sprite something on the LooseSprites/Cursors asset meaning I don't have to make the sprite myself
this mod is entirely indoors and do season edits on specific sheets instead
u can only do sprite index, if that lines up then u good
Well you certainly did a good job in 2019 
Damn, it does not, oh well
ah yeah was confusing it for smapi behaviour on fixing tilesheets, not the vanilla logic
poor summit and desert hardcoded to be forbidden from using seasonal tilesheets
Okay it seems that sprite index doesn't work with cursors at all, it just returns the first 16x16 area no matter what
Nevermind I just can't spell
"SpriteOndex" is totally a word and a valid key, for sure
Looks like the "LightWhileWorking": Property for custom machines made with Content Patcher is bugged.
"LightWhileWorking": { "Radius": 2, "Color": "200 10 10", },
It is suposed to be Red
And even if you Type "Red" It throws the oposite color
the light colors in stardew are subtractive or some such, you'll probably need to try the opposite RGB values or names
So, Thats the intended functionality? 
(Should clarify that on the Wiki for Custom machines)
as far as I know, yes, technically
it was pretty much implemented for the specific lights that the base game used
(I haven't worked with the machine settings myself, just lights in C#, but the system is like that)
you can invert the colors yourself
then it will look red
thats just how lights work
The sad part is that, I knew about this when 1.6 Mods came + documentation.. And I was like "They will fix that eventually without me reporting it".
(i may have Sowed Confusion by making my light features invert the colors automatically lol)
it's not a bug
Red is a made up color created by big crayon to sell us more coloring instruments
this is just how subtractive lighting draw works
Trying to include my custom map and legit can't tell if it's an issue with the map I made in Tiled or my content json 
https://smapi.io/json/content-patcher/1c7fe7d79e664f3aa843d32cd8376f41
I do!
you need to load that
Just want to check, will i18n translation keys work just fine if I have multiple mods that try to add the same keys? In regards to my shopkeeper NPC that multiple mods would try to add with the same info in each mod
Is this?? Not loading it??
Do I replace it with the mod ID or the name? :o
i18n is a per mod concept, they do not need to be globally unique
however if you want to share strings across mods i'd consider using LocalizedText with a string asset instead
Hmm... so I guess it would just be, whichever mod has priority in the load order would be using the i18n key for that particular mod, which is functionally identical?
theres only 5 skins, so why is there a 6th one trying to appear </3
dottie the (?) means random
ah..
its not a bug...
Ack whenever I step onto the warp tile, the screen fades black like I'm warping but then I'm just still in the wizards house 
OOP I SEE THE RED TEXT NOW
okay well atleast they all appear correctly then
https://smapi.io/log/0379ddad5f5d484d8b5fa94d90446b26 What does all this red text mean??? 
Log Info: SMAPI 4.3.2 with SDV 1.6.15 build 24356 on Microsoft Windows NT 10.0.26100.0, with 11 C# mods and 5 content packs.
Suggested fixes: One or more mods are out of date, consider updating them
well i dont know what exact edit you are doing but if it's like the Data/Shop entry and you are doing EditData with Entries to add the shop, every mod you have will perform the edit
content patcher doesn't really try to stop you from making functionally identical edits
It looks like it can't find your map
You wrote "MapPath": "Silver Tree", didn't you?
is your location coded properly, show json
I thought they told me to???
Just like last time, your MapPath needs to be exactly what you Loaded.
sorry i should be more clear, replace it with what you put in the Target of your load
OOOHHH
Which means "MapPath": "Maps/CRK_Silver.Tree"
This is the exact same thing as I told you last time
Yeah, it's multiple mods that will try to add an empty shop on early priority and then each have further actions to add stock to it, but the content in question I was wondering about was the dialogue associated with the shopkeeper
(Also, are you intentionally using different mod IDs for your prefixes?)
do you want to make use of the randomdialogue?
I used a diff mod ID for the custom map and character but thats it :0
if you do then u will have to TargetField into that, but again no worries if your i18n keys duplicate in different mods
it is a per mod thing 
Also wait so if I put this "MapPath": "Maps/CRK_Silver.Tree" do I change the target from this "Target": "Maps/WizardHouse", to this instead "Target": "Maps/CRK_Silver.Tree", ?
Yeah thank you, I was just worried about duplicate keys having potential issues 
They should all be the same, which is the unique ID from your manifest. Ideally, you should be doing {{ModId}}_Silver.Tree instead of writing the mod's ID out by hand, but if you choose not to use the {{ModId}} token you should at least have the same mod ID for every prefix in your mod.
OOHHHH
Can I make an item (Data/Objects) only stack to a max of 1 without making it placeable like furniture or a big craftable, using only CP? or is a framework needed for that?
Not if you're referring to the Target for your patch that looks like this
{
"Action": "EditMap",
"Target": "Maps/WizardHouse",
"AddWarps": [
"2 14 CRK_Silver.Tree 24 36"
]
}
That one needs to stay as Maps/WizardHouse because you're editing the wizard's house to add the warp to your map.
If I turn it into a Data/Tools GenericTool instead, would that cause any questionable behaviour?
Would it be able to be used in crafting? rn I have a recipe that is 1 wood = 1 custom item, and another recipe that's 1 custom item = 1 wood, can it be used in the second recipe?
r u sure u cant just make it a furniture 
I could but I don't want to make it placeable, like at all
well ordinary objects would be placible too 
idk make it a trinket i guess
or no that is also placible on a table
Oh the placeable on a table isn't an issue, sorry I should've clarified better, I don't want it placeable in world, i.e. on the ground or walls
well trinkets dont stack 
ppl can equip em but it can just do nothing whatever
they may or may not work in crafting i never tried
Actually I Guess I could make it wall placeable, I'll give both trinket and furniture a try and see which I prefer, thank you
you can make it a tackle
another very cursed option i like it
tackle is just a category of objects right? and not it's own thing like furniture or tools?
I shall give it a go as well, why not
mhmm, can I make a config value dependent on a condition that has 3 distinct possible input values with dependencies?
I was trying to get a dynamic token that changes which out of three files gets modified.
and have that dynamic token be dependent on:
whether hasmod A: false AND hasmodB: false
hasmod A
hasmod B
do ur DT in this order:
value = default
value hasmod A = A value
value hasmod B = B value
decide which mod should win when u have A and B, in this case B wins
this works fine, since mod a and mod b patches/replace the same sprite
having both mods installed is a weird move in the first place, I dont care too much about that scenario
is that rude?
sorry
It's a weird move, but it isn't unknown, I have had someone have an issue with one of my mods because they had 2 recolours installed at once
excellent save 😌
how can I tell myself a config was changed? add something to the setValue parameter in configMenu methods?
that works perfectly well, but there's also a more generic valuechanged event you can listen to iirc
rip pufferchick
bisected...
Even with the fishing tackle catagory the items stack, time to delve into data/objects even further
like in the old samurai movies...
Ummm why on earth is fishing tackle stacking in my game? I didn't think I had a stack size mod?
Well that's fixed, woop!
yeah, in your setValue delegate you can check whether the incoming value differs from the current one
can you show an example of how it would be done?
usually i set a static flag or something and then act on it in the save delegate, which fires after all the fields are set
https://github.com/ichortower/HatMouseLacey/blob/develop/SMAPI/Config.cs for example
save at 160. one setValue at 191
ty!
"AllowValues": "{{placeholder}}, miska1, miska2, miska3, miska4, miska5, miska6, miska7",
"Default": "{{placeholder}}",
}
"LogName": "Include the lively options options", "Action": "Include", "FromFile": "data/livelyoptions.json" }, "When": {"HasMod |contains= Zilch.LivelyFrogSanctuary": true }
"LogName": "Include the secret options delegator", "Action": "Include", "FromFile": "data/secretoptions.json" }, "When": {"HasMod |contains= Amaryn.SecretGardenTerrarium":}
"LogName": "Include the vanilla options", "Action": "Include", "FromFile": "data/vanilla.json" }, "When": {"HasMod |contains= Amaryn.SecretGardenTerrarium": false, "HasMod |contains= Zilch.LivelyFrogSanctuary": false } },
```
this should work as well, right?
or do all 8 need to be local tokens?
god, I have the feeling that this isn't as hard as it is to me right now
This is fine yes, in this case you just aren't using tokens
I equipped, oh i thought the scale 16 was the default one, will fix it. Yes!! Its just Xavier
What’s the default scale?
Maybe im equipping it wrong?
working now!!
new modder here!
the in-game sprites have meat in them?? where in the game are they used?
tilesheet attached is springobjects.png
this would work right?
They're not used
It's just leftovers from when butchering was a concept, but it was scrapped
like you can have multiple condtions by seperating them with the comma right?
Yea you can put multiple game state queries in there
But
If you put them all in a line with commas, i think all of them have to be true
yes thats what im wanting
Ok
They’re still in the files?
Yup, a bunch of unused stuff is
Granted the weapons for the bachelors/bachelorettes stayed in the files for a long time before getting added
But idk I guess I just assumed since it’s incredibly unlikely any meat stuff is being added they would have been removed (unless they add more bug meat stuff)
no real reason to remove them
I don't know if it's a high priority for them to go through files that have things that are in use just to pull out the things that aren't.
reason not to remove them, really, as mods use them
Thats fair
i think most mods that add meat use them yeah
Can NPCs have dialogue for passive festivals? if so, where's the data for it, and if there isn't, how?
Won't just making date and location specific dialogue work for passive festival?
is that how the game gives dialouge to people in the desert festival?
Can check unpacked game data to see how vanilla does it
its not in data/festivals so i guess i'll check reg dialouge
when is the desert festival
hmm don't see it there 
Hey, so sorry to bust into the middle again, I just had a few questions. I'd like to make a custom house for my characters to live in, but I don't find any requirements. Like, how big is it allowed to be? As in how many pixels by how many pixels? If I, say, just wanted to have an average size house, nothing out of the ordinary
oh it's in Data/Events, that makes sense
look at spring_town.png (or any other season) for town building sizes
that said there isn't, a hard limit afaik
Not larger than 4,096x4,096 probably
if we're talking assets then like 4096^2 is like the max
nvm, where is ur dialouge desert fest
just for processing reasons
4096 would not be average i think
yeah its in strings
1.6 strings,,, makes sense
4,096 would be absolutely massive for a house
thank you 
should i take this 4096 as a challenge
yeah... 4096 would be like. dwarfing the town
Have you unpacked the game files? If so, go look at some vanilla map files. If not, you should unpack your game files.
now that i think about it i should ask chu if my kids would even attend passives, don't think they would
Can your kids have schedules?
nope, just dialouge and gift tastes. guessing that means no passive fest
I don't know how 🥺 I installed tiled, I have content patcher and SMAPI too, but I don't really understand the guide it jumps over a bunch of steps
What guide are you following? Can you send me a link, please?
okay, I don't think I need it too large XD regular npc house size should do
!unpack Here's how to unpack your game files (most tutorials won't take you through all the steps to start modding in the first place since we have specific tutorials for that part)
Follow this guide to unpack the game's content files in order to see and explore how the game data is structured.
It's helpful when making your own mods, or just to learn about how the game works!
Of course.
https://stardewmodding.wiki.gg/wiki/Tutorial:_Map_Patches_and_Warps#Creating_the_New_Map_(house_interior)
https://stardewvalleywiki.com/Modding:Maps#Using_Tiled
https://stardewvalleywiki.com/Modding:Editing_XNB_files
I'm following these ones. But it's really confusing, so I don't know if I got the right ones
Tiled is understandably one of the most unintuitive/intimidating programs to use when making maps or patches for your mod. This tutorial aims to break it down into very simple steps with pictures! This tutorial will use the example of making an NPC house to teach you how to make a map patch (for adding a house to an existing map) and write the J...
So I should use the xnb hack on top of that still?
Okay, the good news is that you've got the right pages there.
If you haven't already used StardewXnbHack to unpack your game files, yes. It's practically impossible to do any mapmaking without doing so.
unpacking the game files is generally the first step in any mod because then you have a vanilla example of everything to compare against and/or edit!
It is all so much 🥺 but I'll keep at it. Thanks for the help
That is so true. I was struggling so hard with my sprites, but I made it work somehow
Yup, and in the case of mapmaking you literally need to use vanilla files so without access to them you're in trouble lol
You can always ask in here some more for help understanding things or finding stuff, we're very happy to share our knowledge
For instance if you're reading a tutorial and can't understand something it's telling you to do or you know what to do but not why, we can answer things like that.
You guys have been the absolute best so far 😭 without you even the basic npc wouldn't have worked out and thanks to that I was able to spend some quality time working on the sprites. The only thing I'm still struggling with is schedule specific dialogue. Like the formatting for it confuses me
@junior tiger I'm going to point you to irocendar's Tiled plugin for this too because it allows you to use tilesheets without putting them in the same folder as the map (which is otherwise mandatory while editing in Tiled but then a bad idea while using the map in game).
The instructions are above, and this one is the file to download and put into your extensions folder for Tiled.
I don't have an extensions folder for tiled but a Plugins folder
Oh wait nvm
There is one... magic
They call it plugins in one spot and extensions in the other, just to confuse us all xD
Such marvelous engineering. I am confused about the 2nd step. click ctr + shift + . where? Or map? Map??? 😭
Keyboard!
Or go to your Map menu up the top of the screen
But like, am I in the folder I just opened or in Tiled?
In tiled!
You've put the file into the folder, right?
Do they mean new map?
Oh no you have to have a map open
I think I skipped a step. One moment please 😭
So this is the extension I need to put into the extensions folder?
Schedule-specific dialogue is actually easier than it seems, because all you need to do is add a new dialogue key to your NPC's Characters/Dialogue/<NPCInternalName> file (for the purpose of this message I'll pretend it's called "WorkingOut") and then in your schedule you'd write 1300 Town 47 87 0 \"Characters\\Dialogue\\<NPCInternalName>:WorkingOut\" and that would make them use that WorkingOut line at that point in their schedule.
(This will look different to what you might see elsewhere, where they have Strings\\schedules\\<NPCInternalName - that's just because vanilla puts the schedule strings in that extra file but you don't need to, so I don't do it because I don't see the point in creating another file when I already have a file for my dialogue.)
the operator AND for CP in "when": is just commata? or |=contains?
Oh, okay! The formatting is confusing but I think it makes more sense now
cp doesnt really have an "AND" operator in a typical sense
you can replicate the effect by listing two separate conditions
like "when": { "a": "b", "c": "d" }
Are you wanting to have it be one token has this value AND that value, or one When field has this token AND that token?
What part of the formatting is confusing? I might be able to help you read it a little better.
Just having a forward slash in one place and then a backwards slash in another place. Or having the double slash between dialogue. But that's just the formatting, so I'll learn how to work with it
content patcher doesnt let me use && because it hates me personally (untrue. not the reason why)
I was hoping I could get both of these true: "When": { "HasSeenEvent:Any": "9333220", "HasMod": "camiska.FrogTankFrogEgg" }
the way you have it now, this patch will activate if both of these are true
is that the intended result?
yes!!!
the \\ is because inside of "" the first \ tells it to treat the next character as plain text and not any coding stuff
so what you're doing is writing something with a \ but just in a way that the code understands you
Oh, so correct me if I'm wrong. I used the xnb hack to unpack all of the files. Which now tiled can use to be edited. Am I getting this wrong so far? Because I have all the ingame stuff unpacked, can I just plug it into tiled and edit it and save it somewhere else to be read, or do I need to overwrite it? What's the best practice for this
Find one of the maps in the Content (Unpacked)/Maps folder that is closest to what you want to do with your map, and copy and paste that map (.tmx file) into your mod folder. Once it's in there, rename it to something relevant to your mod. Then open it in Tiled and follow the instructions for iro's plugin to make it stop giving you errors about the tilesheets. From there, you can start editing it to make it into your own thing.
You will want to make sure that you're not overwriting any of the files inside Content (Unpacked) - if you do overwrite them you'll need to unpack again in future if you want the vanilla thing again.
Oh, okay okay. That does make most sense. And what's the best practice about repacking? Should I repack before I start the game again or is it fine to keep it as is?
you dont need to repack
stardewxnbhack makes a copy of the files, it doesnt touch the originals
No repacking, we use Content Patcher so we don't have to
Got it, got it. You guys are amazing, thanks for your help... and patience 😭
ever since I decided I will make this thing compat-friendly everything has devolved into a mess 
Thats not the only reason, but is a partial reason why I stick to behind the scenes mods rather than full content
people don't ask me to make Profiler compatible with anything its great
youre within your rights to give up and add a big "i will not add compatibility for X" on your mod page
The forward slash is what we call a delimiter. It separates different fields (and in the case of schedules, each field is one "schedule point", or place that you want your NPC to go to).
The back slash is what we call an escape character. It tells the computer program "the thing that comes after me shouldn't be seen as a coding language character, just normal old English - don't do anything with it (yet)".
\" = this one is because the entire schedule is inside double quotes and if you just wrote " the game would think the schedule ended. But dialogue needs to have a ". So we use \" to tell the game "this quote mark is not for ending the schedule, it's for putting the dialogue in".
\\ = this one is because we need to put a filepath in (not a real filepath but it is formatted like one) to tell the game where to find the dialogue line. However, we can't use a forward slash for it because the forward slash is already being used as a delimiter. Instead, we use the backslash - but the backslash is the escape character so if we just used one, the game wouldn't see it. So we use two together \\ and the game sees that as just one \. You can sort of explore this yourself by trying to type two backslashes in discord. It uses backslash as an escape character too so you'll type \\ but the message will only show \.
Is there a way to randomize schedule dialogue? I have a character go to train in the forest early all spring, and I don't want him to say only the same line every day when the player talks to him. Or would you only get the line once?
Yup there definitely is. Have you heard of i18n yet?
i18n my friend i18n
I read about it, I thought it was about translation 😭
i18n is the main thing that allows translations to happen but it also lets you do other stuff!
It is! But we can combine it with other Content Patcher tokens to do lots of fancy things, including randomisation.
You don't actually need i18n for randomisation but if you're planning on releasing your mod to the public I'd strongly recommend that you do use i18n because it will make your life and the lives of anyone who translates your mod 1,000% easier than if all your text is inside your actual mod files.
i think everyone should use i18n forever ever on the simplest of mods. im a shill for i18ns
I'm team [LocalizedText] and death to the i18n token
I'm team both
So is there any specific way to use them? 🥺 I've written all of my dialogue into the json files so far
[LocalizedText] is good but why must i18n die. cant they be friends
they do the same thing so
i'm team load my strings directly from a cp file to a strings asset. i will not defend my actions
yeah but they can be like. sports anime rivals. where they keep trying to best the other but are comrades at the end of the day
blueberry how do u translate then
LocalizedText lets the localization stay solely in the content pipeline and thus have the full power of content patcher at all times.
i18n mandates the contents be outside of content patcher and can't use the real tokenization system
someone else patches the same strings asset with their localised changes ✨
i don't know how to use the localizeddtext
i guess im moreso just advocating for "dont put your strings mixed up all together with the rest of your code"
neither localized or i18n do that
yeah! so theyre both good
so do you do like the same and have like strings_zh and stuff
Here's what you've got right now:
dialogue.json/content.json (wherever you have your dialogue lines right now)
"Mon": "It's so Monday, oh my gosh.",
Here's what it would look like with i18n:
dialogue.json/content.json (wherever you have your dialogue lines right now)
"Mon": "{{i18n: dialogue.ezekiel.mon }}", // I'm pretending your NPC is called ezekiel
default.json (inside i18n folder)
"dialogue.ezekiel.mon": "It's so Monday, oh my gosh.",
The default.json file is just a long list of keys and their values, nothing else. When a translator comes to translate your mod, they copy the default.json, rename it to whatever language they're translating to, and then just go down the file translating the English into their language. No touching your precious mod code.
you (i) simply have one language included, the master blank asset load and initial edit. translators will create their own CP mods to edit that asset after mine
English is a Default or early edit, other languages can be a late edit
Oh gosh that looks so complicated 😭
It's not! It's just instead of having your text directly inside your "Mon" key, you have a second key inside the "Mon" key and the text inside that.
it is an extra step but consider. you can procrastinating writing all your dialogue by just putting an i18n key instead and forgetting about it
i18n aren't complicated, from what i see locallized appears more complicated
But I'd have to redo my whole dialogue. I hope everyone can forgive me if I skip this step. Especially since I don't think my mod will warrant any attention
Why do we have i18n if LocalizedText was there? Is i18n pre-1.6?
i18n is a SMAPI api which Content Patcher exposes
There's a converter that will do it for you, if that's any easier to consider
stardew modding api api......................
makes it sound secretive
A lot of places pre 1.6 wouldn't have had access to LocalizedText as Vanilla relied on localized assets to solve the problem (like item name/description, etc)
but Pathos and team have been working on making data assets no longer have localized variants and do that by using LocalizedText
do u have a tutorial on how to use it? i am confused and also i18n my beloved
so it's another case of 1.6 making things easier and modders going "ok but we're used to doing it the old way" ?
doesn't sounds easier
There are still a lot of localised assets in 1.6, so are we waiting for 1.7 for the full revolution?
maybe i meant more accessible to edit and not "easier to do"
word choice hard sometimes
i dun think CA ever stopped localizing
I have yet to figure out how to use CP tokens properly with LocalizedText
it's not very accessible if there's, no tutorials and only a select few people use it 
the same way you use tokens inside any other custom asset
well, it's a base game feature added recently. by and large, most of the base game isn't documented or tutored
1.7 already made a major leap with events fully onboard, along with a few other assets getting their own Data model conversions and in turn also getting the localizedtext treatment
Specifically I don't know how to convert this: "Description": "{{i18n: film.description |name.animal={{Lowercase: {{i18n: name.{{LT_AnimalName}} }} }} }}",
I guess I can have another crack at it if it looks like LocalizedText is the future
fancy ✨
There are definitely translators out there who wouldn't be capable of writing their own CP mod, but I imagine it wouldn't be too difficult to make a template mod with one's mod's keys in it that they could use.
extra work for translators
They used to have to pick through entire mods
would solve the "i put the language in brackets in the folder name so just dropping into the mod folder doesn't actually translate" but that's a niche problem
(And still do when people refuse to use i18n. Or LocalizedText)
hi! so im editing a food mod for personal use so i can add recipes for me to cook them but there's a part of it that idk how to proceed since im not a pro modder (not my mod, but the creator has not been around for 5 years so..)
this mod uses both ja and pfm so im referring their producerrules.json (which i didn't change anything) to edit the recipes in each of the food's object.json files. however, one of the foods have a "null", and putting it the food's object.json would give a ja error, for example from proderrulers.json:
"ProducerName": "Espresso Maker", "InputIdentifier": "184", "InputStack": 1, "FuelIdentifier": null, "FuelStack": 1, "AdditionalFuel":{ "Ground Coffee": 1 },
from object.json:
"Recipe": { "ResultCount": 1, "Ingredients": [ { "Object": 184, "Count": 1, }, { "Object": null, "Count": 1, }, { "Object": -6, "Count": 1, }],
what should i replace null with? btw this is a latte, its just coffee and milk...
Today I learned content packs can use localised text, I think I shall be using that from now on, the i18n token confuse me so so much
you can just, remove the object with the null y'know
also, why are you using ja and pfm
They just explained that
It's not their mod, it's an old one that was already using JA and PFM
so its fine to just leave it blank?
They're probably not familiar enough with modding to know how to convert it to CP
you can get rid of { "Object": null, "Count": 1, },
okok thx! i was just afriad of further breaking the mod
If you want that to be an ingredient, you can't just remove it
they want coffee and milk
which is 184 and -6
don't need a 3rd one
wait, 184 is milk
-6 is a category, not an item id
there's a null from their producerruler.json so i wasn't sure if i must add that in object.json
the null is FuelIdentifier which means it doesn't require fuel
im gonna, relook into ja docs
wait that's pfm
So you're trying to change it from being a machine recipe to being a cooking recipe?
About tiled, again rq. So I opened tiled and I set the unpacked maps folder to the folder that StardewHack made. Then I took the forest.tmx and put it into my mod folder, but when I open the forest from my mod folder it doesn't look right
add the needed tilesheets to where your map is in the mod
oh... 
You need to put the tilsheets in the same folder as the map, or use Iro's tiled extension
This is where you need to do Ctrl+.
yesss
(also if you add them manually, remember to remove them before sharing the mod or adding it to your game, or else the seasons won't look like they change)
don't need proderrulers then
Bea is right that you need to remove the null object. But you also need to change the -6 to whatever the ID for ground coffee is. Or change the 184, depends whether you want to be able to use any milk (-6) or just regular milk (184)
She is not adding manually, I directed her to use the tilesheetinator from the start
is that iro's plugin?
Ohh okay gotcha, sorry I missed that
She just hasn't used the plugin to fix the tilesheets yet
ah alright, just listen to Aba. they know what's up
does the networldstate get cleared at any points?
or is that a stable reference?
okok thx!
coffee id is 395 if that helps
ah, well, id would be in objects.json then
I'd say it's added by the mod, yeah
ty again! gonna have to double check the ids of others to make sure too
hmmm the mod doesnt have any ingredients mod, just custom foods, i also assume they use vanilla ingredients...
producer rules mention 'Ground Coffee'
No, it uses "Ground Coffee" for its fuel and that's definitely not vanilla.
if you don't mind me asking, which mod is this?
I did, but nothing happened
Does it have a dependency on another mod?
The location in your error message is wrong, so try setting the vanilla maps folder again
🙁
It worked well when I opened it inside the unpacked folder, should I work there and just save it to my mods folders?
That was the wrong command. You don't want to add a tilesheet, you want to set the folder. Ctrl+Shift+.
No, you'll break a lot of things if you do that
oh wait there is ground coffee in the mod! i missed that, thats the only ingredient they add
cosy cafe
Yeah, I did that 😭
cute! mod page does indeed mention the coffee grounds, just btw
Did nothing
Okay, I think you need to start again. Delete this map, go to Content (Unpacked)/Maps, pick a map, copy it to your mod folder without opening it, then rename it once it's in your mod folder. Only once you've done that, try opening that map (already in your mod folder) and repeat this step.
are you trying to add all the recipes as regular cooking or just a few?
On it 🫡
Nope 🙁
I'm pretty sure this needs to be your Maps folder, not the content folder
all of them, latte and (after taking a look again at my smapi log) ground coffee are the only ones that i have issues due to the null
Oh, like one file deeper
(talking about my OWN extension and the best I can do is still "pretty sure" lmao)
Oh yup I missed seeing that
It worked
Thank you 😭
I definitely said to do Maps both times though
nice, np
in that case, you can remove all the machines, the entire producerrules.json and the PFM dependency. all recipes are listed on the mod page, so you can just use it to make them cookable
You did! This is totally on me. 😭 I genuinely thought I had it picked
ok idk if ground coffee have its own id after looking at its json...
i mean you can. keep the machines, and also make them recipes
It has to, it's not possible for something to exist without an ID
right i think it's just Ground Coffee, i'm going to download the mod and check
haha it happens. maybe I'll add a warning to the next version
I don't know enough about how JA works but I would also guess its ID is "Ground Coffee"
since this seems like an easy enough mistake to make
old ja usually means id is name
yeah name is id
hence problems when u have 2 mods with the same names
okok tysm!
@jagged violet You leveled up to Cowpoke. You can now speak in our voice channels and share images in all channels!
you can add {{modid}} in there and use i18n to solve any issues but eh we learned that pretty late
actually can u i18n ja, i don't remember
ah u used Localization
(No, you can't use i18n or modid in JA because it's a different mod framework that doesn't use CP)
yeah i was in fact remembering wrong, it's got it's own system
havent used it in a while
You could perhaps use migrateIDs but it might be better off just kind of starting over dunno
When it's for personal use I say stick with JA
No point nicely reworking it when it'll look the same in game
it is a pretty straight forward system
I've been trying to understand migrateIDs
as long as the person isn't using other JA cafe mods with the exact same items name it'll be fine
Does it just ..stay there forever? Does that hurt anything?
I convert AT mods to CP just for personal use but not JA
Like I have just redid my IDs in an update before and no one's complained....maybe with mail and recipes it could cause issues?
uhh same for animals im pretty sure
I did see a fairly tricky one with removing an animal building while animals were in it tho lol
Couldn't select them to sell etc
Yeah I would say items would be the only safe one to change
The others will break things
Dang
error items are mostly annoying and people will complain/be confused but you can just trash those
Well migrateIDs handles it then if I bother to give it all the info it needs right
have no idea how those work but that's their use case no? unbreaking things?
(i dun know)
Cool glad it is working
Using "just Xavier" as the npc internal id isn't recommended you may have collisions
What would you expect to see in such a mod that you can't see in the example in the CP docs? /curious
Eh I just like to see examples I guess. And maybe a bigger list
Cuz I'll probably have a few dozen I need to migrate
But that's what I mean, there is an example
And you'd just add them all to the same trigger action
It's a fairly small one though right, like two changes?
Yeah but they're going to be the same either way
Everything just on one bug line with commas?
You're only adding one extra line per type
Have you seen any trigger action with multiple actions before?
Probably but I don't retain a lot of this stuff long
I'm also at work and not in front of it lol
They look like this
"{{ModId}}_{{LT_AnimalName}}Photographed": {
"Id": "{{ModId}}_{{LT_AnimalName}}Photographed",
"Trigger": "spacechase0.SpaceCore_OnItemUsed",
"Condition": "ITEM_ID Input {{ModId}}_Camera",
"Actions": [
"AddItem {{ModId}}_{{LT_AnimalName}}Film",
"spacechase0.SpaceCore_PlaySound cameraNoise local",
"spacechase0.SpaceCore_ShowHudMessage \"Woo\" (O){{ModId}}_Camera",
"IncrementStat {{ModId}}_{{LT_AnimalName}}PhotoProduced"
]
},
Each action is just on the next line with its own quote marks around it
Ok, thanks. I'll check that out when I get home
oh, it might be best to come back to this when the code is in front of you
yooo no way the loc pizza flip animation automatically happens if your item says pizza
Haha really
@brave fable From a cursory test, everything with context tag cooking looks fine, in fact it feels amazing to see the recipes laid out neatly in your book. Not sure if this is normal, but it does auto-fill valid items past the required ingredients amount in case you want to look at that. Other than that I'll let you know if I have any issues while working on my mod!
great to hear! auto-fill ingredients chucks as many ingredients as it takes to fulfil the recipe, and as many more as it can after that to try and max-out the amount cooked. it's not very clever, so it doesn't try and balance quantities of requirement, but it is greedy
also if you scroll wayyyy down in assets/mod-data.json you'll find the dictionaries used to check for various cooking behaviours, like the sounds and animations to play
Yooooo awesome
if you think something else of yours should play a flatbread-flipping sequence before it's cooked, you can add it to the pizza list 
i remember one of the biggest dilemmas of writing this was deciding whether a naan is a pancake or a flatbread
Oh is that why it adds extras? I've always just removed them
oh marmalade isn't actually used anymore, originally i was going to make certain fruits turn into a new artisan good. scrapped, obviously
hahaha
was lined up with cider and maybe vinegar? for added artisan-goods/flavoured-items categories
flatbread
but in the end it wasn't very Cooking and seemed more to fit on the insurmountable heap of Machine mods lurking beyond my mod page
are all of these animation-linked?
I want to be thorough if I'm going to add any to the list
o-oh
so yeah that data-driven cooking animations and sounds request might be a bit of a task lol
What if u do context tags
dont even worry about it hahaha
Seriously your work is amazing
well it's an alternative sure, but neither name or context tag is completely foolproof
When I mentioned that I didnt know it was checking for recipe names, which as far as im concerned fills the same purpose anyways (and likely better)
thanks! just trying to keep things fun for wohever downloads them, and fearsome for whoever clones it to try and submit a pr
for some reason most people don't 
Making mods is very specific... I forgot a single bracket and it made the mod not work.
Why would ctag not be foolproof
Bread
Dosas are closer to pancakes but a naan is bread

that pleases me



