#making-mods-general

1 messages · Page 425 of 1

hard fern
#

Hmm

fierce vault
#

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

brave fable
#

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

vernal crest
#

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

fierce vault
#

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?

gritty sandal
#

Can I ask a question? Let's say I'm making npc... Where do I start? The portait or sprite?

brave fable
#

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

gritty sandal
#

Uh... How many pixels are sprites usually-

gritty sandal
#

It irked me to see them absent from the most important times of their daughter lives

brave fable
#

4 directions x 4 walking frames x 16px wide x 32px tall

#

bare minimum

gritty sandal
hard fern
#

Personally i start with portraits since i hate walking sprites

vernal crest
brave fable
#

there's a guide to making npcs but i don't remember the command 😌 it'll cover the basics

hard fern
#

!npc

ocean sailBOT
#
Creating a Custom NPC

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

vernal crest
#

Very hard to remember

brave fable
#

unbelievable.

gritty sandal
#

Puppyeyes thank u

fierce vault
#

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

vernal crest
#

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.

drowsy pewter
#

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

fierce vault
#

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.

drowsy pewter
#

you can say that to them

vernal crest
# fierce vault (Sorry that my thoughts turned out so long) I don’t want to outright reject th...

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.

hard fern
#

oh hes

#

hes been inverted

warm field
#

You created Inversam

fierce vault
#

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.

vernal crest
#

Inverting him really made his eyes freaky on the left one haha

lucid iron
#

If you do this then watch out for compat hell

vernal crest
#

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

lucid iron
#

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

vernal crest
#

(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

lucid iron
#

I wish u could go wider than 2 rows sometimes

vernal crest
#

(Maybe to romance Krobus IDK)

lucid iron
#

Or somehow have named portraits from arbitrary source

vernal crest
#

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

fierce vault
# lucid iron If you do this then watch out for compat hell

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?

vernal crest
ebon schooner
#

i just noticed the tortilla trend what is happening

iron ridge
#

tortilla was off centre

#

it got centred

#

started from there

warm field
#

It became center of everyone's ~~obsession ~~attention

spice inlet
#

huh, just noticed this.
seems really cool tbh

ebon schooner
#

this is what the tortilla situation reminded me of

whole raptor
#

Are you sure? Is it a different format from objects or something that's already in there?

junior tiger
tiny zealot
#

you have called the animation {{ModId}}_Taq_training in Data/animationDescriptions, but in your schedule you have referred to simply Taq_training

junior tiger
#

Oh so should I call it {{ModId}}_Taq_training?

tiny zealot
#

yes

junior tiger
#

Omg I am the silliest. Thank you! I figured it was something simple 😭

tiny zealot
#

thank you for prefixing your NPC's id with {{ModId}}. the compatibility goblins thank you SDVpufferheart

junior tiger
#

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 🙁

verbal narwhal
#

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

tiny zealot
tiny zealot
lucid iron
junior tiger
#

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"

tiny zealot
# verbal narwhal Im confused about the terms

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

verbal narwhal
tiny zealot
#

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 😅

brittle ledge
#

(Jorts and Jean predate {{ModId}} so I had to backport that into my examples)

verbal narwhal
brittle pasture
#

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)

junior tiger
tiny zealot
#

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)

shut edge
#

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

warm field
#

Maybe because she has a 4-heart event which includes a letter?

shut edge
#

possibly

#

that makes sense

#

thanks

#

hmm how would the dwarf sign a letter...."- a neighbor"?

warm field
#

Sounds reasonable to me, though I've got to admit I've never received a letter from a dwarf

shut edge
#

maybe i should write it like it's just a loose paper in your mailbox

latent mauve
#

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

shut edge
#

haha yea

#

gotta have their recipe received somehow tho

latent mauve
#

"there's a piece of paper in here. Its covered in dirt stains for some reason"

warm field
#

"Wanna know how I make this? Here's how. Add more cave carrot as you see fit."

latent mauve
#

Leave clues that it probably is from the dwarf but without signing it

shut edge
#

"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

fathom rapids
#

something like "hey friend. This is how you make some of my favorite recipes" and leaving the playre to guess who sent that XD

latent mauve
#

Could also be a little doodle at the bottom instead of a signature

#

Dwarf doesn't speak our language after all

warm field
#

Mentioning cave carrots should tip off anyone who's ever talked to the dwarf 😄

latent mauve
#

We speak theirs

tiny zealot
shut edge
#

haha

tiny zealot
#

dwarf is canon nonbinary, though, there is that

warm field
#

Them, then

latent mauve
#

I will correct the pronouns in my message

shut edge
#

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?

fathom rapids
#

oh i love that

shut edge
#

sidestep the "voice" of the dwarf altogether i suppose

rough briar
#

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 💔

warm field
#

depending on the farm, it might have a config.json?

rough briar
#

this one does not sadly

#

not for the quarry atleast

warm field
#

Sadness

rough briar
#

this is what ther quarry part of the code is, if it helps

brittle ledge
rough briar
#

oh wait the max/min spawns

#

hmm

shut edge
#

set max spawns to zero maybe yea

#

the coordinates are presumably where they spawn

#

maybe you can set those to zero or something too

rough briar
#

welp, i set the min and max rates to 0 so lets see

shut edge
#

"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

warm field
#

I think a comma after "mailbox" is possible, but optional

shut edge
#

i was thinking that too

warm field
#

The other one is perfect.

shut edge
#

kinda wild that gunther and marlon are still ungiftable. maybe that'll be a 1.7 thing

#

hmm

urban patrol
#

oh wait i can’t read

#

i missed the period before “upon translation”

shut edge
#

mood

urban patrol
#

sorry

shut edge
#

all good

fathom rapids
#

I don't think you need a comma after "mailbox" here, no

rough briar
#

okay ya that worked for the most part me thinks, the boulders came back

shut edge
#

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)

whole raptor
shut edge
#

if you didn't see me mention it the other day, the dialog mode works for mail, also

whole raptor
#

That is intended, although it'd probably be better to separate it..

shut edge
#

ah, it is i who did not read

lucid iron
whole raptor
#

Yep, 7

lucid iron
#

Another quirk is that ppl may want to use LocalizedText instead of i18n in that spot anyways, otherwise existing furniture items don't update

whole raptor
#

Oh? Really? Interesting..

lucid iron
#

(this applies to objects too pretty sure)

shut edge
#

"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",

brittle pasture
#

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)

verbal narwhal
#

is this correct? or are the " on the wrong spots?
"When": { "HasSeenEvent": "anyPlayer 9333220" },

patent lanceBOT
#

@latent mauve: add an article explaining how to set the home for Pelican Valley Loft NPC Apartments on the mod page (12h ago)

shut edge
#

"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

verbal narwhal
#

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)
shut edge
#

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

tiny zealot
shut edge
#

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?

latent mauve
#

I don't know why you'd need the rest of those conditions

shut edge
#

i seem to be using trigger actions currently

latent mauve
#

You could just do PLAYER_HAS_MAIL as your GSQ

#

PLAYER_HAS_MAIL <player> <mail id> [type]

shut edge
#

here's how i have stuff previously

#

is this bad practice or somethin?

latent mauve
#

Mostly just wasn't sure why you needed that much complexity if all you were trying to use was the DwarvishTranslationGuide flag

shut edge
#

nah i want one of these that ALSO has that

latent mauve
#

ah, I see

shut edge
#

so you need to have the guide, and the friendship

brittle pasture
#

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

shut edge
#

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

uncut viper
#

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

shut edge
#

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

uncut viper
#

yeah basically the same thing. it'd condense your trigger actions down a lot for sure

shut edge
#

"{{ModID}}_BuzzToastSendMail": {
"Id": "Buzz_Send_Toaster",
"Trigger": "DayEnding",
"Action": "AddMail Current BuzzToastDelivery Tomorrow"

#

this mail gives the toasters

thin fern
#

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

shut edge
#

so what would it be like, PLAYER_HAS_MAIL Current {{ModID}}_BuzzToastSendMail

uncut viper
#

PLAYER_HAS_MAIL Current BuzzToastDelivery

#

BuzzToastSendMail is the ID of your trigger action not the mail itself

shut edge
#

ah right

uncut viper
#

your mail flag itself should probably have the unique ID in it tho

shut edge
#

"Id": "Maru_Send_Toast",
"Trigger": "DayEnding",
"Condition": "PLAYER_HAS_MAIL Current BuzzToastDelivery, PLAYER_HEARTS Current Maru 4",

#

so like that?

uncut viper
#

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

shut edge
#

cool

uncut viper
#

assuming the BuzzToastDelivery letter is the one that gives the other recipes

shut edge
#

that's a simple enough change

uncut viper
#

the LightToaster and DarkToaster

shut edge
#

that should be correct yeah

uncut viper
#

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

shut edge
#

yeah tokens are beyond me as of now

#

i should probably try and learn it tho

brittle pasture
shut edge
#

i think i'm getting hung up on the difference between a trigger action condition and a GSQ

brittle pasture
#

if you need examples check out the dialogue files of vanilla characters that have unique gift responses

uncut viper
#

the Condition in a trigger action is a GSQ

shut edge
#

ahh ok

#

so i can just use them there then

uncut viper
#

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

shut edge
#

ok so like museumComplete would just be adding ",museumComplete Current"?

uncut viper
#

museumComplete is not a trigger action

#

er

#

GSQ

#

its a mail flag

shut edge
#

ah ok

#

that's another thing i'm mixing up then

uncut viper
#

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

shut edge
#

i see there is a GSQ for the town key

#

but not like, the rusty key?

uncut viper
#

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

shut edge
#

yeah i want one for rusty key or museum complete, and then uhh something for marlon, probably enemies killed or mines progress

brittle pasture
#

HasRustyKey

#

mail flag

shut edge
#

right, but that's a mail flag

uncut viper
#

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

verbal narwhal
thin fern
brittle pasture
#

(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)

shut edge
#

so... PLAYER_HAS_MAIL Host HasRustyKey

#

like that?

brittle pasture
#

yes

shut edge
#

ok, thanks. mildly convoluted, lol

uncut viper
#

i dont believe a farmhand can even get that mail flag at all unless a mod manually gives it to them

shut edge
#

"Condition": "PLAYER_HAS_MAIL Current BuzzToastDelivery, PLAYER_HAS_MAIL Host HasRustyKey",

uncut viper
#

the setter for Farmer.hasRustyKey specifically gives it to the host

shut edge
#

so this would fire off if the host has the key and you've gotten the toasters

uncut viper
#

yes

shut edge
#

cool

uncut viper
#

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

shut edge
#

yeah i might want to set this out like, a week

uncut viper
#

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

shut edge
#

"Action": "AddMail Current GuntherToast Tomorrow"

#

can't do it there?

uncut viper
#

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

shut edge
#

ah i see

uncut viper
#

the game doesnt track mail like that anyway. it can only send mail at most 1 day ahead

hallow prism
#

(i suggest more solid naming for mails, if you can throw a {{ModId}} here)

shut edge
#

well this is probably ok. you'd at least get the key and then this one on two separate days yeah?

lucid iron
#

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

uncut viper
shut edge
#

here's my current file

uncut viper
#

this is a 3500 line file

#

i am not searching a 3500 line file

shut edge
#

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?

lucid iron
#

You should prepend {{ModId}}_ if new mod, if already released mod you should do that and also use migrateids tbh

uncut viper
#

GuntherToast is not a safe mail flag name

#

nor BuzzToastDelivery or any other one without a mod id

shut edge
#

ahh

uncut viper
#

also, for this trigger action setup

hallow prism
#

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

uncut viper
#

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

shut edge
#

my understanding of all these particulars is...tenuous so i appreciate the feedback

uncut viper
#

(also assuming that BuzzToastDelivery is also set to be delivered "tomorrow")

shut edge
#

"{{ModID}}_BuzzToastSendMail": {
"Id": "Buzz_Send_Toaster",
"Trigger": "DayEnding",
"Action": "AddMail Current BuzzToastDelivery Tomorrow"

#

this one should just like, come automatically

hallow prism
#

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 😄

shut edge
#

presumably long before you can complete the museum

uncut viper
#

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"

lucid iron
uncut viper
#

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

shut edge
#

that is difficult to explain, dang

uncut viper
#

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

shut edge
#

ok, that's easy enough to do

raw compass
#

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? ![SDVpufferflat](https://cdn.discordapp.com/emojis/1125781012056637532.webp?size=128 "SDVpufferflat")
lucid iron
#

Add the warp to farm again, at the bottom of this AddWarps section

raw compass
#

Oh SDVpufferthinkblob does AddWarps replace rather than appending?

lucid iron
#

They prepend

raw compass
#

I see

shut edge
lucid iron
#

But hrm why would warp from hub area to greenhouse be affected

shut edge
#

i suppose i should do this then, as suggested

latent mauve
#

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

lucid iron
#

The farm to greenhouse inside is a known quirk of humandoor

#

It looks for first warp and plop you right north of it yea

latent mauve
#

Has it been confirmed that it's only Farm to Greenhouse that does that?

raw compass
lucid iron
#

It's how humandoor works

latent mauve
merry rampart
shut edge
#

anyone know a mod that uses migrateIDs currently?

lucid iron
#

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

raw compass
#

Understood, thanks very much

patent lanceBOT
#

@hard fern: next step: buff trigger action mail flag crimes upon drinking the perfume (8h ago)

shut edge
#

should i be MODID prefixing for machine data IDs?

brittle pasture
#

if it’s a unique id it should be prefixed

shut edge
#

"Id": "Retoast Toast",
"Triggers": [
{
"Id": "ItemPlacedInMachine",

#

this stuff

#

Placed InMachine prob not?

brittle pasture
#

well if it’s your own machine it’s probably not as necessary

#

since they only need to be unique in that list

#

yeah

shut edge
#

yeah these are my own

#

i could just do it anyway and it shouldn't hurt anything yeah?

golden basin
#

@brittle pasture arent you the creator of extra animal configs?

shut edge
#

looks like rodney o'brien uses the migrateIDs thing

brittle pasture
shut edge
#

maybe not the best example, but an example

golden basin
brittle pasture
#

sure go ahead

golden basin
#

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

shut edge
#

that could be cool

golden basin
#

itd be funny cause you can either be annoyed that they do it or like it

#

itd be like owning bunnies XD

brittle pasture
#

oh yeah we actually discussed this a couple while ago lol

golden basin
#

we did? im sorry i dont remember doing that but yeeee itd be so cool

brittle pasture
#

well I meant royal We

golden basin
#

oooo i see

#

itd be cool i think! animals that yoink your crops is adorable

brittle pasture
#

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

lucid iron
#

We as in

golden basin
#

and another issue ive encountered? which is my last uhhh thing im bugging you with jdfghsdfgd

lucid iron
#

The mmg regulars

golden basin
#

is larger animals needing bigger doors?

lucid iron
#

That one's fixed with animals squeeze through

shut edge
#

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

golden basin
#

Yes but itd be cool to have it in single mod instead of having more dependencies but ghsdgd

brittle pasture
#

No worries I’m planning on merging that into EAC

golden basin
#

: O yay!

brittle pasture
#

and keeping the existing mod as a content pack for ostriches in coops

shut edge
#

doorless animal house so you can have faked via graphics aquatic animals

golden basin
#

cause i have a animal that is 48 by 48 and i wanna add them

#

theyre a prehistoric raptor variation of my modern raptors

shut edge
#

i think my dinosaur cave supports that size

#

i'd have to check

#

if you want an example anyway

golden basin
brittle pasture
#

ooh 👀
I’ll let you know when either releases in EAC SDVpufferheart

golden basin
shut edge
golden basin
#

ooooo

#

im yoinking this ii love dinos

lucid iron
shut edge
#

the gate is buggy tho at the moment

#

i'm not sure how or why exactly

lucid iron
#

It's not required to provide a door draw layer

golden basin
#

my dino is gonna changei ssize soon tho caus eim giving it a tail instead of tailfeathers

shut edge
#

nice

#

i have been kind of working on an update for the dinos too but it's not coming together yet

lucid iron
#

Clown what if I can ride the raptor

shut edge
#

more dinos, furniture maybe

#

sneak peek

golden basin
#

raptor mount!

lucid iron
#

Erinthe coded it

golden basin
#

unless its just a horse replacement?

lucid iron
golden basin
#

GASP

#

IM GONNA DOIT

lucid iron
#

You can make a custom stable building for the raptor

shut edge
#

i've got like....5? 6? more animals i wanna add yet

golden basin
#

instead of a farmanimal the big raptor will be a mount

shut edge
#

hung up on art tho

#

that's a good idea

lucid iron
#

It can get treats too

#

(like how vanilla horse eats carrot)

shut edge
golden basin
#

feedback on what?

shut edge
#

i'm not sure if i like the kind of fiddly stuff i did with produce items

#

livestock dinos

golden basin
#

OH

#

i thought you mean if i wanted feedback XD yeah ill let you know!

shut edge
#

comment on nexus or PM me etc whatever works if you have any opinions

#

(i still have passerby in my current game btw)

brittle pasture
#

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 SDVpufferdead

shut edge
#

i should probably look at EAC's updates sometime

#

i know i had some struggles with produce states at the time

lucid iron
#

Selph I don't think the homeless animal is that hard

#

Just hide the real building at 0,0 yuniShake

brittle pasture
#

jail

shut edge
#

lol

#

spawn em as critters

#

now i'm imagining a button that just spawns more critters on use

lucid iron
#

However clown could probably do this with just animal squeeze through (or EAC once merged over)

  1. Have robin build you a 2x1 "beware of dino" sign, it's secretly an animal house
  2. The dinos are exclusively "dig up" producers
  3. You do have to make this sign their home but they just squeeze through a 0x0 animal door (dw about it)
golden basin
#

okay what do yall think

#

lil arms

brittle pasture
#

still have to handle the nightly disappearing act

lucid iron
#

Wouldn't they just squeeze back through the 0x0 door

brittle pasture
#
  • patch out the happiness penalties from being left outside
shut edge
#

inivisible sleep sprite

brittle pasture
#

I presume clown wants those animals to not squeeze in at all

lucid iron
#

EAC extras then Dokkan

#

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

shut edge
#

that could be neat

#

the deadliest animal of all, feature creep

golden basin
shut edge
#

speakin of nocturnal i better get some sleep

#

thanks for the help yall

lucid iron
#

Free feature creep for the taking

shut edge
#

new rare cave boss, the feature creep

lucid iron
#

Maybe more feathers around there?

whole raptor
merry rampart
#

ok i will try that. thanks!

merry rampart
#

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

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

spark wharf
#

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

golden basin
lucid iron
#

Based on docs you can put width and height

golden basin
#

but how does it attach the farmer to something thats larger or smaller

#

hmm

#

i mightjust make a farmanimal idk

lavish estuary
#

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!

lucid iron
lucid iron
#

Enemies are generally quite hardcoded, you just gotta roll your own draw and update methods basically

lavish estuary
lucid iron
#

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

lavish estuary
#

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.

hushed jacinth
#

anyone know a good mod that has like magic and more weapons

brave fable
#

are you planning on making one? SDVdemetriums

calm nebula
hushed jacinth
hushed jacinth
drowsy pewter
obtuse wigeon
#

the Modded Farmers channel is the best place for recommendations

drowsy pewter
#

anyways good morning all SDVpufferchickmorning

calm nebula
#

Good timezone

hard fern
#

Bonne soirée

lucid iron
#

@tired matrix re your trinket stuff

  1. did you equip it?
  2. you put scale 16 he would have been gigantic
  3. is your npc's internal id just Xavier instead of {{ModId}}_Xavier?
#

(for ref 16x looks like this)

obtuse wigeon
#

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

brittle pasture
#

Expanded Storage

obtuse wigeon
#

Ahh perfect thank you!

lucid iron
hard fern
brave fable
#

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

autumn tide
#

honestly it looks pretty good to me!

obtuse wigeon
#

Are you looking for criticism blueberry?

brave fable
#

sure, say whatever's on your mind. it's probably not very representative of the final product as-is tho

obtuse wigeon
#

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)

brave fable
#

ah yeah it's getting another midtone or two, just blocking out the shapes

obtuse wigeon
#

In that case, they look great, the shading on the black and white hairs is fantastic

raw compass
#

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.

lucid iron
#

i think custom bush fixed the problem right

raw compass
#

Mmm not as of a couple weeks ago, and I don't see an update to it since then

lucid iron
#

ah yea i just remember fixing it myself

raw compass
#

yoink thank you!
(But, I'm still curiosu the best practice for what I want to do with my map)

lucid iron
#

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

raw compass
#

Ah. I don't have an environment set up to compile SDV stuff. SDVpufferflat
Is... is that an option, did I really just not try the simplest thing

#

using the fall tilesheets directly, that is

lucid iron
#

well you would have to if u dont wanna use outdoors

#

cus indoor maps don't get auto tilesheet changes

lucid mulch
#

wouldnt smapi see fall_ and correct it to use the seasonal one (which SeasonOverride hopefully keeps on fall)

lucid iron
#

if u r ok with stuff like grass not getting fall graphics then just do tilesheet n not seasonoverride

raw compass
#

Well then that solves my problem beautifully haha. Indoors with fall tilesheets. SDVpufferthumbsup
yeah tbh I just want the color, not the ✨effects✨.

lucid iron
brave fable
lucid iron
obtuse wigeon
#

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

lucid iron
#

this mod is entirely indoors and do season edits on specific sheets instead

lucid iron
obtuse wigeon
obtuse wigeon
lucid mulch
#

poor summit and desert hardcoded to be forbidden from using seasonal tilesheets

lucid iron
#

brb new 1.7 request

#

i think it came up a few times, wanting seasonal ndoors

obtuse wigeon
#

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

pearl junco
#

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

royal stump
#

the light colors in stardew are subtractive or some such, you'll probably need to try the opposite RGB values or names

pearl junco
#

So, Thats the intended functionality? Catcry

#

(Should clarify that on the Wiki for Custom machines)

royal stump
#

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)

lucid iron
#

you can invert the colors yourself

#

then it will look red

#

thats just how lights work

pearl junco
#

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

lucid iron
#

(i may have Sowed Confusion by making my light features invert the colors automatically lol)

oblique meadow
#

Red is a made up color created by big crayon to sell us more coloring instruments

lucid iron
#

this is just how subtractive lighting draw works

unique tusk
lucid iron
#

why did you trey to load the wizard map into your location

#

do you have a tmx?

unique tusk
lucid iron
#

you need to load that

versed wyvern
#

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

unique tusk
#

Is this?? Not loading it??

lucid iron
#

yea and then give it to "MapPath"

#

replace "Maps/WizardHouse"

unique tusk
#

Do I replace it with the mod ID or the name? :o

lucid iron
versed wyvern
rough briar
#

theres only 5 skins, so why is there a 6th one trying to appear </3

lucid iron
rough briar
#

ah..

lucid iron
#

its not a bug...

unique tusk
#

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 confused

rough briar
#

i was stressing over nothin then

#

fml LMAO

unique tusk
#

OOP I SEE THE RED TEXT NOW

rough briar
#

okay well atleast they all appear correctly then

unique tusk
ocean sailBOT
#

Log Info: SMAPI 4.3.2 with SDV 1.6.15 build 24356 on Microsoft Windows NT 10.0.26100.0, with 11 C# mods and 5 content packs.
Suggested fixes: One or more mods are out of date, consider updating them

lucid iron
#

content patcher doesn't really try to stop you from making functionally identical edits

obtuse wigeon
vernal crest
hard fern
unique tusk
vernal crest
#

Just like last time, your MapPath needs to be exactly what you Loaded.

lucid iron
#

sorry i should be more clear, replace it with what you put in the Target of your load

unique tusk
#

OOOHHH

vernal crest
#

Which means "MapPath": "Maps/CRK_Silver.Tree"

#

This is the exact same thing as I told you last time

versed wyvern
vernal crest
lucid iron
unique tusk
#

I used a diff mod ID for the custom map and character but thats it :0

lucid iron
#

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 SDVpufferthumbsup

unique tusk
#

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", ?

versed wyvern
#

Yeah thank you, I was just worried about duplicate keys having potential issues nierthumb

vernal crest
unique tusk
#

OOHHHH

obtuse wigeon
#

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?

vernal crest
unique tusk
#

Okie okie! Imma fix the modid!! :O

#

YIPEEE IT WORKED

#

TYTYTY

obtuse wigeon
lucid iron
#

you won't be able to delete them right

#

that is a little questionable

obtuse wigeon
#

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?

lucid iron
#

r u sure u cant just make it a furniture bolbthinking

obtuse wigeon
#

I could but I don't want to make it placeable, like at all

lucid iron
#

well ordinary objects would be placible too LilyDerp

#

idk make it a trinket i guess

#

or no that is also placible on a table

obtuse wigeon
#

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

lucid iron
#

well trinkets dont stack AquaThumbsup

#

ppl can equip em but it can just do nothing whatever

#

they may or may not work in crafting i never tried

obtuse wigeon
#

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

brittle pasture
#

you can make it a tackle

lucid iron
#

another very cursed option i like it

obtuse wigeon
#

tackle is just a category of objects right? and not it's own thing like furniture or tools?

lucid iron
#

i guess people could consume the item tho

#

cus it's a tackle blobcatgooglyblep

obtuse wigeon
#

I shall give it a go as well, why not

verbal narwhal
#

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

lucid iron
#

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

verbal narwhal
#

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

obtuse wigeon
#

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

lucid iron
#

no its not rude

#

im pressing the first SDVpufferchickcool that pleases me

tender agate
#

how can I tell myself a config was changed? add something to the setValue parameter in configMenu methods?

brave fable
#

that works perfectly well, but there's also a more generic valuechanged event you can listen to iirc

ornate locust
#

rip pufferchick

lucid iron
#

bisected...

obtuse wigeon
#

Even with the fishing tackle catagory the items stack, time to delve into data/objects even further

brave fable
#

like in the old samurai movies...

obtuse wigeon
#

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!

tiny zealot
tender agate
#

can you show an example of how it would be done?

tiny zealot
#

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

tender agate
#

ty!

verbal narwhal
#
      "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

lucid iron
#

This is fine yes, in this case you just aren't using tokens

verbal narwhal
#

thanks!

#

on a sidenote, I set the frogs free again camiska_yay

tired matrix
#

What’s the default scale?

#

Maybe im equipping it wrong?

tired matrix
lament cave
#

new modder here!
the in-game sprites have meat in them?? where in the game are they used?
tilesheet attached is springobjects.png

golden basin
#

this would work right?

hard fern
#

It's just leftovers from when butchering was a concept, but it was scrapped

golden basin
#

like you can have multiple condtions by seperating them with the comma right?

hard fern
#

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

golden basin
#

yes thats what im wanting

hard fern
#

Ok

white pasture
vernal crest
white pasture
#

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)

uncut viper
#

no real reason to remove them

vernal crest
#

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.

uncut viper
#

reason not to remove them, really, as mods use them

white pasture
#

Thats fair

gray bear
#

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?

vital lotus
#

Won't just making date and location specific dialogue work for passive festival?

gray bear
#

is that how the game gives dialouge to people in the desert festival?

vital lotus
#

Can check unpacked game data to see how vanilla does it

gray bear
#

its not in data/festivals so i guess i'll check reg dialouge

#

when is the desert festival

#

hmm don't see it there thonk

junior tiger
#

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

gray bear
#

oh it's in Data/Events, that makes sense

gray bear
#

that said there isn't, a hard limit afaik

vernal crest
hard fern
gray bear
#

nvm, where is ur dialouge desert fest

hard fern
#

just for processing reasons

gray bear
#

4096 would not be average i think

vernal crest
hard fern
#

yeah its in strings

gray bear
#

1.6 strings,,, makes sense

vernal crest
#

4,096 would be absolutely massive for a house

gray bear
#

thank you t_pray

dusky sail
#

should i take this 4096 as a challenge

hard fern
#

yeah... 4096 would be like. dwarfing the town

vernal crest
gray bear
#

now that i think about it i should ask chu if my kids would even attend passives, don't think they would

vernal crest
#

Can your kids have schedules?

gray bear
#

nope, just dialouge and gift tastes. guessing that means no passive fest

junior tiger
vernal crest
junior tiger
vernal crest
#

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

ocean sailBOT
#

Follow this guide to unpack the game's content files in order to see and explore how the game data is structured.
It's helpful when making your own mods, or just to learn about how the game works!

junior tiger
# vernal crest What guide are you following? Can you send me a link, please?
Stardew Valley Wiki

← Index

Stardew Modding Wiki

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

Stardew Valley Wiki

← Index

#

So I should use the xnb hack on top of that still?

vernal crest
#

Okay, the good news is that you've got the right pages there.

vernal crest
dusky sail
#

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!

junior tiger
junior tiger
vernal crest
#

Yup, and in the case of mapmaking you literally need to use vanilla files so without access to them you're in trouble lol

vernal crest
#

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.

junior tiger
vernal crest
#

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

junior tiger
#

Oh wait nvm

#

There is one... magic

vernal crest
junior tiger
vernal crest
#

Or go to your Map menu up the top of the screen

junior tiger
#

But like, am I in the folder I just opened or in Tiled?

vernal crest
#

You've put the file into the folder, right?

junior tiger
#

Do they mean new map?

vernal crest
junior tiger
#

I think I skipped a step. One moment please 😭

junior tiger
# vernal crest

So this is the extension I need to put into the extensions folder?

vernal crest
# junior tiger You guys have been the absolute best so far 😭 without you even the basic npc w...

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

verbal narwhal
#

the operator AND for CP in "when": is just commata? or |=contains?

junior tiger
dusky sail
#

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" }

verbal narwhal
#

each in curly brackets?

#

wha

vernal crest
vernal crest
junior tiger
dusky sail
#

content patcher doesnt let me use && because it hates me personally (untrue. not the reason why)

verbal narwhal
#

I was hoping I could get both of these true: "When": { "HasSeenEvent:Any": "9333220", "HasMod": "camiska.FrogTankFrogEgg" }

dusky sail
#

the way you have it now, this patch will activate if both of these are true

#

is that the intended result?

verbal narwhal
#

yes!!!

dusky sail
#

so what you're doing is writing something with a \ but just in a way that the code understands you

junior tiger
#

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

vernal crest
# junior tiger Oh, so correct me if I'm wrong. I used the xnb hack to unpack all of the files. ...

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.

junior tiger
dusky sail
#

you dont need to repack

#

stardewxnbhack makes a copy of the files, it doesnt touch the originals

vernal crest
junior tiger
#

Got it, got it. You guys are amazing, thanks for your help... and patience 😭

verbal narwhal
#

ever since I decided I will make this thing compat-friendly everything has devolved into a mess Despair

lucid mulch
#

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

dusky sail
#

youre within your rights to give up and add a big "i will not add compatibility for X" on your mod page

vernal crest
# junior tiger Just having a forward slash in one place and then a backwards slash in another p...

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

junior tiger
vernal crest
dusky sail
#

i18n my friend i18n

junior tiger
dusky sail
#

i18n is the main thing that allows translations to happen but it also lets you do other stuff!

vernal crest
# junior tiger I read about it, I thought it was about translation 😭

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.

dusky sail
#

i think everyone should use i18n forever ever on the simplest of mods. im a shill for i18ns

lucid mulch
#

I'm team [LocalizedText] and death to the i18n token

vernal crest
#

I'm team both

junior tiger
dusky sail
#

[LocalizedText] is good but why must i18n die. cant they be friends

gray bear
#

they do the same thing so

brave fable
#

i'm team load my strings directly from a cp file to a strings asset. i will not defend my actions

dusky sail
#

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

gray bear
#

blueberry how do u translate then

lucid mulch
#

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

brave fable
#

someone else patches the same strings asset with their localised changes ✨

gray bear
#

i don't know how to use the localizeddtext

dusky sail
#

i guess im moreso just advocating for "dont put your strings mixed up all together with the rest of your code"

gray bear
#

neither localized or i18n do that

dusky sail
#

yeah! so theyre both good

gray bear
vernal crest
# junior tiger So is there any specific way to use them? 🥺 I've written all of my dialogue int...

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.

brave fable
lucid mulch
junior tiger
#

Oh gosh that looks so complicated 😭

vernal crest
dusky sail
#

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

gray bear
#

i18n aren't complicated, from what i see locallized appears more complicated

junior tiger
vernal crest
#

Why do we have i18n if LocalizedText was there? Is i18n pre-1.6?

lucid mulch
#

i18n is a SMAPI api which Content Patcher exposes

vernal crest
dusky sail
#

stardew modding api api......................

gray bear
#

makes it sound secretive

lucid mulch
#

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

gray bear
#

do u have a tutorial on how to use it? i am confused and also i18n my beloved

dusky sail
#

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" ?

gray bear
#

doesn't sounds easier

vernal crest
#

There are still a lot of localised assets in 1.6, so are we waiting for 1.7 for the full revolution?

dusky sail
#

maybe i meant more accessible to edit and not "easier to do"

#

word choice hard sometimes

gray bear
#

i dun think CA ever stopped localizing

vernal crest
#

I have yet to figure out how to use CP tokens properly with LocalizedText

gray bear
#

it's not very accessible if there's, no tutorials and only a select few people use it shrug

lucid mulch
brave fable
#

well, it's a base game feature added recently. by and large, most of the base game isn't documented or tutored

lucid mulch
vernal crest
gray bear
#

fancy ✨

vernal crest
#

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.

gray bear
#

extra work for translators

vernal crest
#

They used to have to pick through entire mods

gray bear
#

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

vernal crest
#

(And still do when people refuse to use i18n. Or LocalizedText)

jagged violet
#

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

obtuse wigeon
#

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

gray bear
#

you can just, remove the object with the null y'know

#

also, why are you using ja and pfm

vernal crest
#

They just explained that

#

It's not their mod, it's an old one that was already using JA and PFM

jagged violet
#

so its fine to just leave it blank?

vernal crest
#

They're probably not familiar enough with modding to know how to convert it to CP

gray bear
#

you can get rid of { "Object": null, "Count": 1, },

jagged violet
#

okok thx! i was just afriad of further breaking the mod

vernal crest
#

If you want that to be an ingredient, you can't just remove it

gray bear
#

they want coffee and milk

#

which is 184 and -6

#

don't need a 3rd one

#

wait, 184 is milk

vernal crest
#

-6 is a category, not an item id

jagged violet
#

there's a null from their producerruler.json so i wasn't sure if i must add that in object.json

vernal crest
#

It's got milk and any milk

#

No coffee

gray bear
#

the null is FuelIdentifier which means it doesn't require fuel

#

im gonna, relook into ja docs

#

wait that's pfm

vernal crest
#

So you're trying to change it from being a machine recipe to being a cooking recipe?

junior tiger
#

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

gray bear
jagged violet
obtuse wigeon
vernal crest
obtuse wigeon
gray bear
#

don't need proderrulers then

vernal crest
vernal crest
gray bear
#

is that iro's plugin?

obtuse wigeon
#

Ohh okay gotcha, sorry I missed that

vernal crest
#

She just hasn't used the plugin to fix the tilesheets yet

gray bear
#

ah alright, just listen to Aba. they know what's up

verbal narwhal
#

does the networldstate get cleared at any points?
or is that a stable reference?

gray bear
#

coffee id is 395 if that helps

vernal crest
#

Ground coffee?

#

It's not a vanilla ingredient, from the looks of it

gray bear
#

ah, well, id would be in objects.json then

vernal crest
#

I'd say it's added by the mod, yeah

jagged violet
#

ty again! gonna have to double check the ids of others to make sure too

jagged violet
gray bear
#

producer rules mention 'Ground Coffee'

vernal crest
gray bear
#

if you don't mind me asking, which mod is this?

junior tiger
vernal crest
#

Does it have a dependency on another mod?

vernal crest
junior tiger
#

It worked well when I opened it inside the unpacked folder, should I work there and just save it to my mods folders?

vernal crest
# junior tiger 🙁

That was the wrong command. You don't want to add a tilesheet, you want to set the folder. Ctrl+Shift+.

vernal crest
jagged violet
vernal crest
jagged violet
junior tiger
gray bear
junior tiger
#

Did nothing

vernal crest
# junior tiger 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.

gray bear
gentle rose
jagged violet
junior tiger
gentle rose
#

(talking about my OWN extension and the best I can do is still "pretty sure" lmao)

vernal crest
#

Oh yup I missed seeing that

vernal crest
#

I definitely said to do Maps both times though

gentle rose
#

nice, np

gray bear
junior tiger
jagged violet
#

ok idk if ground coffee have its own id after looking at its json...

gray bear
#

i mean you can. keep the machines, and also make them recipes

vernal crest
gray bear
#

right i think it's just Ground Coffee, i'm going to download the mod and check

gentle rose
vernal crest
#

I don't know enough about how JA works but I would also guess its ID is "Ground Coffee"

gentle rose
#

since this seems like an easy enough mistake to make

gray bear
#

old ja usually means id is name

#

yeah name is id

#

hence problems when u have 2 mods with the same names

jagged violet
#

okok tysm!

ocean sailBOT
#

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

gray bear
#

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

vernal crest
#

(No, you can't use i18n or modid in JA because it's a different mod framework that doesn't use CP)

gray bear
#

yeah i was in fact remembering wrong, it's got it's own system

#

havent used it in a while

shut edge
#

You could perhaps use migrateIDs but it might be better off just kind of starting over dunno

vernal crest
#

When it's for personal use I say stick with JA

#

No point nicely reworking it when it'll look the same in game

gray bear
#

it is a pretty straight forward system

shut edge
#

I've been trying to understand migrateIDs

gray bear
#

as long as the person isn't using other JA cafe mods with the exact same items name it'll be fine

shut edge
#

Does it just ..stay there forever? Does that hurt anything?

vernal crest
#

I convert AT mods to CP just for personal use but not JA

shut edge
#

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?

gray bear
#

redoing item id's will break em

#

as in they become error items

shut edge
#

Right, that's just a one time nuisance tho

#

I guess it can be considered lost progress

gray bear
#

uhh same for animals im pretty sure

shut edge
#

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

vernal crest
#

Yeah I would say items would be the only safe one to change

#

The others will break things

shut edge
#

Dang

gray bear
#

error items are mostly annoying and people will complain/be confused but you can just trash those

shut edge
#

Well migrateIDs handles it then if I bother to give it all the info it needs right

gray bear
#

have no idea how those work but that's their use case no? unbreaking things? e_think (i dun know)

lucid iron
shut edge
#

That is how it seems to be

#

I'd like to find a mod with a good usage example

vernal crest
shut edge
#

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

vernal crest
#

But that's what I mean, there is an example

#

And you'd just add them all to the same trigger action

shut edge
#

It's a fairly small one though right, like two changes?

vernal crest
#

Yeah but they're going to be the same either way

shut edge
#

Everything just on one bug line with commas?

vernal crest
#

You're only adding one extra line per type

#

Have you seen any trigger action with multiple actions before?

shut edge
#

Probably but I don't retain a lot of this stuff long

#

I'm also at work and not in front of it lol

vernal crest
#

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

shut edge
#

Ok, thanks. I'll check that out when I get home

gentle rose
shut edge
#

Yeah I'm just thinking through what I wanna do

#

Idle brain cycles here

drowsy pewter
#

yooo no way the loc pizza flip animation automatically happens if your item says pizza

shut edge
#

Haha really

drowsy pewter
#

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

brave fable
#

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

drowsy pewter
#

Ohhhh I understand

#

It's been so long since I actually played the game

brave fable
#

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

drowsy pewter
#

Yooooo awesome

brave fable
#

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 SDVpufferthumbsup

drowsy pewter
#

amazing!! thank you!!

#

whats marmaladey?

brave fable
#

i remember one of the biggest dilemmas of writing this was deciding whether a naan is a pancake or a flatbread

vernal crest
brave fable
#

oh marmalade isn't actually used anymore, originally i was going to make certain fruits turn into a new artisan good. scrapped, obviously

drowsy pewter
#

hahaha

brave fable
#

was lined up with cider and maybe vinegar? for added artisan-goods/flavoured-items categories

brave fable
#

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

drowsy pewter
#

are all of these animation-linked?

#

I want to be thorough if I'm going to add any to the list

brave fable
#

which is to say It's Complicated (For Variety)

drowsy pewter
#

o-oh

brave fable
#

so yeah that data-driven cooking animations and sounds request might be a bit of a task lol

lucid iron
#

What if u do context tags

drowsy pewter
#

Seriously your work is amazing

brave fable
#

well it's an alternative sure, but neither name or context tag is completely foolproof

drowsy pewter
#

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)

brave fable
#

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 SDVdemetriums

gritty sandal
#

Making mods is very specific... I forgot a single bracket and it made the mod not work.

lucid iron
#

Why would ctag not be foolproof

fading walrus