NPC Helper 2/Docs

Reference

Game Options

Every value the game fixes for an NPC: personality, regions, social tab, calendar, item categories, and schedule keys.

Every value below is fixed by the game, so NPC Helper 2 offers the game's full real set, using the game's own names. The tables come from the real Stardew Valley 1.6 game data.

Where NPC Helper 2 adds a friendlier spelling, it is an alias that is converted to the real value (marked "alias"). The real value always works too. Free text (names, dialogue, locations, animations) is not listed here because it is yours to choose.

Names are case-insensitive in TOML.

NPC options (<Name>.toml, written as [Table] Key; C# builder method)#

Key Real options Default C#
[Personality] Gender Male, Female, Undefined Male .Gender(Gender.Female)
[Personality] Age Adult, Teen, Child Adult .Age(AgeGroup.Teen)
[Personality] Manner Neutral, Polite, Rude Neutral .Manner(...)
[Personality] SocialAnxiety Outgoing, Shy, Neutral Neutral .SocialAnxiety(...)
[Personality] Optimism Positive, Negative, Neutral Neutral .Optimism(...)
[Birthday] Season Spring, Summer, Fall, Winter Spring .Birthday(Season.Fall, 9)
[Home] Region Town, Desert, Other Town .HomeRegion(...)
[Options] Language Default, Dwarvish Default .Language(NpcLanguage.Dwarvish)
[Options] SocialTab UnknownUntilMet, AlwaysShown, HiddenUntilMet, HiddenAlways AlwaysShown .SocialTab(SocialTabBehavior...)
[Options] Calendar AlwaysShown, HiddenUntilMet, HiddenAlways AlwaysShown .Calendar(CalendarBehavior...)
[Options] EndSlideShow Hidden, MainGroup, TrailingGroup MainGroup .EndSlideShow(EndSlideShowBehavior...)
[Home] Facing 0 up, 1 right, 2 down, 3 left 2 Facing.Up/Right/Down/Left
[Birthday] Day 1..28 1

On/off options (all true/false):

Key Default C#
[Romance] Datable (can be romanced) false .Romanceable()
[Romance] Marriageable (can marry; implies Datable) false .Marriageable()
[Options] IsDarkSkinned false .DarkSkinned()
[Options] CanReceiveGifts true .CanReceiveGifts(false)
[Options] CanGreetNearbyCharacters true .GreetsNearbyCharacters(false)
[Options] PerfectionScore (counts towards the perfection score) true .CountsForPerfection(false)
[Options] CanCommentOnPurchasedShopItems unset = game default (true for Town) .CommentsOnShopPurchases(true)
[Options] IntroductionsQuest unset = game default .HasIntroductionsQuest(true)
[Options] FlowerDanceCanDance unset = game default .CanFlowerDance(true)

Notes:

  • SocialTab default. The game's own default is UnknownUntilMet; NPC Helper 2 defaults to AlwaysShown so a new NPC is visible straight away. Choose any of the four.
  • HomeRegion is a free string in the game, but only these three regions are ever compared. Town also decides the defaults for shop comments and Winter Star participation.
  • Language = "Dwarvish": the game converts the NPC's dialogue to Dwarvish unless the player can understand dwarves.

Gift tastes#

Groups (the five the game reads): Love, Like, Neutral, Dislike, Hate. Entries can be:

Entry Meaning
an English item name resolved to an item ID from the game's object data ("Joja Cola")
an item ID or qualified ID 74, (O)74
a category number -75
category:Name (alias) the category number by name: category:Gem = -2
an item context tag egg_item, category_fruit

Item categories: all 39 the game defines (the C# enum is ItemCategory; use .LovesCategory(ItemCategory.Gem) etc.):

Name Number Name Number Name Number
Gem -2 Fish -4 Egg -5
Milk -6 Cooking -7 Crafting -8
BigCraftable -9 Minerals -12 Meat -14
MetalResources -15 BuildingResources -16 SellAtPierres -17
SellAtPierresAndMarnies -18 Fertilizer -19 Junk -20
Bait -21 Tackle -22 SellAtFishShop -23
Furniture -24 Ingredients -25 ArtisanGoods -26
Syrup -27 MonsterLoot -28 Equipment -29
Seeds -74 Vegetable -75 Fruits -79
Flowers -80 Greens -81 Hat -95
Ring -96 Boots -97 Weapon -98
Tool -99 Clothing -100 Trinket -101
Books -102 SkillBooks -103 Litter -999

A negative number that is not in this list is reported (it can never match an item).

Schedules#

Which key a schedule is written under#

The game tries these keys in this order and uses the first that exists (non-married NPC; if none exists the NPC simply has no schedule that day). NPC Helper 2 can write every one of them. In [Schedule] the key is the game's own key; the C# column is the matching scope of the schedule builder.

# Game key In [Schedule] / C#
0 the NPC's island schedule name, when the game has set one set by the game, not by NPC Helper 2
1 GreenRain (green rain, year 1 only) GreenRain / .OnGreenRain(...)
2 <festival>_<day> then <festival>, for each currently active passive festival the id as the key (fall27, fall27_3) / .OnFestival(id, ..., day)
3 <season>_<day> summer_12 / .OnDate(season, day, ...)
4 <day>_<hearts> 12_6 / .OnDayOfMonth(day, ..., hearts)
5 <day> (every season) 12 / .OnDayOfMonth(day, ...)
6 rain2 (half of rainy days, if present), then rain Rain2, Rain / .OnRainyDays(..., secondVariant)
7 <season>_<Dow>_<hearts> fall_Mon_4
8 <season>_<Dow> fall_Mon / .OnDays(days, ..., season)
9 <Dow>_<hearts> Mon_4
10 <Dow> Mon, or "Mon,Tue" / .OnDays(...)
11 <season> fall / .InSeason(season, ...)
12 spring_<Dow>, then spring spring: the fallback
– any other key the key as written (bus) / .OnKey("...", ...). Note: the game tries bus for Pam only (once the vault mail is received), and marriageJob for Penny, Maru and Harvey only; NPC Helper 2 warns if you use them on another NPC.
  • Hearts run 1..14 (friendship points / 250). The game picks the highest level the player has reached. Quirk: <day>_<hearts> is tested at every level, but the weekday forms (7 and 9) are only tested at every second level counting down from the player's hearts (6, 4, 2...), so a weekday key for an odd or even level can be skipped. NPC Helper 2 warns about this.
  • Spouses use different keys, in this order: marriage_<festival>_<day> / marriage_<festival>, marriage_<season>_<day>, marriageJob (only tried for Penny, Maru and Harvey, so a custom NPC never uses it), then marriage_<Dow> (only when it is not raining). There are no rain, season, or heart keys for spouses. A weekday + season key is expanded into the real date keys. See Marriage.
  • Aliases: Weekday = Mon..Fri, Weekend = Sat+Sun; day names may be written in full (Monday).

What a stop can say#

A stop is one string: [a]TIME [MAP] X Y [FACING] [ANIMATION] ["message"], or TIME bed. It can also be spelled out (6:00 Town x=10 y=12 face=left); see Schedules.

Part Real option Notes
TIME 0, or 600..2600 in 10-minute steps 0 places the NPC there when the day starts. A time such as 605 can never fire, so it is rejected.
a in front of the time the a time prefix the time is when the NPC must have arrived; the game starts the walk early enough
MAP a location name, or bed bed needs no tile (the game uses the <name>_sleep animation if one exists). Leave MAP out to stay in the same place as the previous stop.
X Y tile not needed for bed
FACING 0..3 optional, defaults to 2
ANIMATION one animation name from the game's animation data; a single word
"message" text in double quotes shown if the player is nearby on arrival; no quotes inside

Two stops at the same time in one key make the game reject the whole key, so NPC Helper 2 keeps the first and reports the second.

Whole-key commands#

In [Schedule] Game command
rain = "GOTO spring" (also "GOTO season", "GOTO NO_SCHEDULE", "GOTO <key>") GOTO ...
a first list item "NOT friendship Sam 6 Abigail 4" NOT friendship Sam 6 Abigail 4: if any player has that many hearts with a listed NPC, the spring schedule is used instead
bus = "MAIL ccVault/GOTO spring/..." (any string that is not a list) the whole value verbatim, for MAIL and anything else

Spouse (marriage) keys#

Engagement keys the game reads (in Data/EngagementDialogue): <Name>0, <Name>1, <Name>Roommate0, <Name>Roommate1. NPC Helper 2 also accepts the aliases AcceptMermaidPendant (= <Name>0) and Engagement_Generic (= <Name>1).

What is NOT a fixed list (so it is not enumerated)#

Location names, animation names, passive festival ids, dialogue keys and context tags are defined by the game's content files (Data/Locations, Data/animationDescriptions, Data/PassiveFestivals, ...), which can be extended by other mods, so they are free text here.