Line 9: |
Line 9: |
| | | |
| ===Basic info=== | | ===Basic info=== |
− | The <tt>Data\NPCDispositions</tt> asset contains basic information for your character, including their name, birthday, relations to other characters, personality, and whether they can be dated. | + | The <samp>Data\NPCDispositions</samp> asset contains basic information for your character, including their name, birthday, relations to other characters, personality, and whether they can be dated. |
| | | |
| The file has one row per NPC like this: | | The file has one row per NPC like this: |
Line 27: |
Line 27: |
| | 0 | | | 0 |
| | age | | | age |
− | | <tt>teen</tt> | + | | <samp>teen</samp> |
− | | Whether the NPC is a <tt>child</tt>, <tt>teen</tt>, or <tt>adult</tt>. This affects generated dialogue lines (e.g. a child would say ''stupid'' and an adult would say ''depressing''), generic dialogue (e.g. a child would respond to dumpster diving with "''Eww... What are you doing?''" and a teen would say "''Um... Why are you digging in the trash?''"), and the gift they choose as [[Feast of the Winter Star|a secret gift-giver]]. Children are also excluded from item delivery quests. | + | | Whether the NPC is a <samp>child</samp>, <samp>teen</samp>, or <samp>adult</samp>. This affects generated dialogue lines (e.g. a child would say ''stupid'' and an adult would say ''depressing''), generic dialogue (e.g. a child would respond to dumpster diving with "''Eww... What are you doing?''" and a teen would say "''Um... Why are you digging in the trash?''"), and the gift they choose as [[Feast of the Winter Star|a secret gift-giver]]. Children are also excluded from item delivery quests. |
| |- | | |- |
| | 1 | | | 1 |
| | manners | | | manners |
− | | <tt>rude</tt> | + | | <samp>rude</samp> |
− | | Whether the NPC is <tt>polite</tt>, <tt>rude</tt>, or <tt>neutral</tt>. This affects some generic dialogue lines. | + | | Whether the NPC is <samp>polite</samp>, <samp>rude</samp>, or <samp>neutral</samp>. This affects some generic dialogue lines. |
| |- | | |- |
| | 2 | | | 2 |
| | social anxiety | | | social anxiety |
− | | <tt>outgoing</tt> | + | | <samp>outgoing</samp> |
− | | Whether the NPC is <tt>outgoing</tt>, <tt>shy</tt>, or <tt>neutral</tt>. This affects some generic dialogue lines. | + | | Whether the NPC is <samp>outgoing</samp>, <samp>shy</samp>, or <samp>neutral</samp>. This affects some generic dialogue lines. |
| |- | | |- |
| | 3 | | | 3 |
| | optimism | | | optimism |
− | | <tt>neutral</tt> | + | | <samp>neutral</samp> |
− | | Whether the NPC is <tt>positive</tt>, <tt>negative</tt>, or <tt>neutral</tt>. ''Unused.'' | + | | Whether the NPC is <samp>positive</samp>, <samp>negative</samp>, or <samp>neutral</samp>. ''Unused.'' |
| |- | | |- |
| | 4 | | | 4 |
| | gender | | | gender |
− | | <tt>female</tt> | + | | <samp>female</samp> |
− | | Whether the NPC is <tt>male</tt>, <tt>female</tt>, or <tt>undefined</tt>. This affects dialogue, whether children in marriage are obtained through adoption or pregnancy, and the reserved frames' positions on the spritesheet. | + | | Whether the NPC is <samp>male</samp>, <samp>female</samp>, or <samp>undefined</samp>. This affects dialogue, whether children in marriage are obtained through adoption or pregnancy, and the reserved frames' positions on the spritesheet. |
| |- | | |- |
| | 5 | | | 5 |
| | datable | | | datable |
− | | <tt>datable</tt> | + | | <samp>datable</samp> |
− | | Whether the NPC is <tt>datable</tt> or <tt>not-datable</tt>. This toggles the romance features (e.g. 'single' label in the social menu, bouquet gifting, and marriage). | + | | Whether the NPC is <samp>datable</samp> or <samp>not-datable</samp>. This toggles the romance features (e.g. 'single' label in the social menu, bouquet gifting, and marriage). |
| |- | | |- |
| | 6 | | | 6 |
| | love interest | | | love interest |
− | | <tt>Sebastian</tt> | + | | <samp>Sebastian</samp> |
| | ''Unused.'' | | | ''Unused.'' |
| |- | | |- |
| | 7 | | | 7 |
| | home region | | | home region |
− | | <tt>Town</tt> | + | | <samp>Town</samp> |
− | | Whether the NPC lives in the <tt>Desert</tt>, <tt>Town</tt>, or <tt>Other</tt>. This is used when improving friendship points for all NPCs in a given region, which is currently only used for the [[Luau]] friendship boost (which only affects NPCs in the <tt>Town</tt> region). | + | | Whether the NPC lives in the <samp>Desert</samp>, <samp>Town</samp>, or <samp>Other</samp>. This is used when improving friendship points for all NPCs in a given region, which is currently only used for the [[Luau]] friendship boost (which only affects NPCs in the <samp>Town</samp> region). |
| |- | | |- |
| | 8 | | | 8 |
| | birthday | | | birthday |
− | | <tt>fall 13</tt> | + | | <samp>fall 13</samp> |
| | The season and day for the NPC's birthday. | | | The season and day for the NPC's birthday. |
| |- | | |- |
| | 9 | | | 9 |
| | relationships | | | relationships |
− | | <tt>Caroline 'mom' Pierre 'dad'</tt> | + | | <samp>Caroline 'mom' Pierre 'dad'</samp> |
| | This affects generic dialogue for revealing likes and dislikes to family members. May also affect the inlaw_<NPC> dialogue. Can be empty if not applicable (e.g. <code>/fall 13//SeedShop 1 9/</code>). | | | This affects generic dialogue for revealing likes and dislikes to family members. May also affect the inlaw_<NPC> dialogue. Can be empty if not applicable (e.g. <code>/fall 13//SeedShop 1 9/</code>). |
| |- | | |- |
| | 10 | | | 10 |
| | default map & position | | | default map & position |
− | | <tt>SeedShop 1 9</tt> | + | | <samp>SeedShop 1 9</samp> |
| | The location name and [[Modding:Modder Guide/Game Fundamentals#Tiles|tile position]] where the NPC starts and ends each day. | | | The location name and [[Modding:Modder Guide/Game Fundamentals#Tiles|tile position]] where the NPC starts and ends each day. |
| |- | | |- |
| | 11 | | | 11 |
| | display name | | | display name |
− | | <tt>Abigail</tt> | + | | <samp>Abigail</samp> |
| | The NPC name shown to the player. | | | The NPC name shown to the player. |
| |} | | |} |
| | | |
| ===Gift tastes=== | | ===Gift tastes=== |
− | The <tt>Data\NPCGiftTastes</tt> asset contains their gift preferences (e.g. which gifts they love or hate), and their responses when they receive one. See [[Modding:Gift taste data]] for more info. | + | The <samp>Data\NPCGiftTastes</samp> asset contains their gift preferences (e.g. which gifts they love or hate), and their responses when they receive one. See [[Modding:Gift taste data]] for more info. |
| | | |
| The file has one row per NPC like this: | | The file has one row per NPC like this: |
Line 97: |
Line 97: |
| | | |
| ====Birthday gift responses==== | | ====Birthday gift responses==== |
− | The <tt>Strings\StringsFromCSFiles</tt> asset contains the generic responses given by NPCs to birthday gifts based on their gift preferences and manners. These shared strings can be customized for a specific NPC by editing them conditionally, such as only on the NPC's (non-shared) birthday. The following criteria are used to select from among the strings: | + | The <samp>Strings\StringsFromCSFiles</samp> asset contains the generic responses given by NPCs to birthday gifts based on their gift preferences and manners. These shared strings can be customized for a specific NPC by editing them conditionally, such as only on the NPC's (non-shared) birthday. The following criteria are used to select from among the strings: |
| | | |
| {| class="wikitable" | | {| class="wikitable" |
Line 109: |
Line 109: |
| | rowspan="2" | rude | | | rowspan="2" | rude |
| | 50% | | | 50% |
− | | <tt>NPC.cs.4274</tt> | + | | <samp>NPC.cs.4274</samp> |
| |- | | |- |
| | 50% | | | 50% |
− | | <tt>NPC.cs.4276</tt> | + | | <samp>NPC.cs.4276</samp> |
| |- | | |- |
| | rowspan="2" | polite, neutral | | | rowspan="2" | polite, neutral |
| | 50% | | | 50% |
− | | <tt>NPC.cs.4275</tt> | + | | <samp>NPC.cs.4275</samp> |
| |- | | |- |
| | 50% | | | 50% |
− | | <tt>NPC.cs.4277</tt> | + | | <samp>NPC.cs.4277</samp> |
| |- | | |- |
| | rowspan="2" | dislike, hate | | | rowspan="2" | dislike, hate |
| | rude | | | rude |
| | 100% | | | 100% |
− | | <tt>NPC.cs.4278</tt> | + | | <samp>NPC.cs.4278</samp> |
| |- | | |- |
| | polite, neutral | | | polite, neutral |
| | 100% | | | 100% |
− | | <tt>NPC.cs.4279</tt> | + | | <samp>NPC.cs.4279</samp> |
| |- | | |- |
| | rowspan="2" | neutral | | | rowspan="2" | neutral |
| | rude | | | rude |
| | 100% | | | 100% |
− | | <tt>NPC.cs.4280</tt> | + | | <samp>NPC.cs.4280</samp> |
| |- | | |- |
| | polite, neutral | | | polite, neutral |
| | 100% | | | 100% |
− | | <tt>NPC.cs.4281</tt> | + | | <samp>NPC.cs.4281</samp> |
| |} | | |} |
| | | |
| ===Overworld sprites=== | | ===Overworld sprites=== |
− | The overworld sprites are stored in <tt>Characters/NpcName</tt>, including movement and animation frames. Each frame is exactly 16x32 pixels. Here's an [https://cdn.discordapp.com/attachments/156109690059751424/729807097835028540/unknown.png example sprite guide], courtesy of TheLimeyDragon#1993 on Discord. Some positions are reserved for certain actions: | + | The overworld sprites are stored in <samp>Characters/NpcName</samp>, including movement and animation frames. Each frame is exactly 16x32 pixels. Here's an [https://cdn.discordapp.com/attachments/156109690059751424/729807097835028540/unknown.png example sprite guide], courtesy of TheLimeyDragon#1993 on Discord. Some positions are reserved for certain actions: |
| <ul> | | <ul> |
| <li>the first sixteen frames are generic movement (four frames per direction);</li> | | <li>the first sixteen frames are generic movement (four frames per direction);</li> |
Line 204: |
Line 204: |
| | | |
| ===Portraits=== | | ===Portraits=== |
− | The dialogue portraits are stored in <tt>Portraits/NpcName</tt>. Each frame is exactly 64x64 per portrait. The first six represent specific emotions (see [[Modding:Dialogue#Portrait commands]]), followed by any number of custom portraits. The first portrait is used when the dialogue doesn't specify one. | + | The dialogue portraits are stored in <samp>Portraits/NpcName</samp>. Each frame is exactly 64x64 per portrait. The first six represent specific emotions (see [[Modding:Dialogue#Portrait commands]]), followed by any number of custom portraits. The first portrait is used when the dialogue doesn't specify one. |
| | | |
| Here's an [https://cdn.discordapp.com/attachments/156109690059751424/729820558966915122/unknown.png example portrait guide], courtesy of TheLimeyDragon#1993 on Discord. | | Here's an [https://cdn.discordapp.com/attachments/156109690059751424/729820558966915122/unknown.png example portrait guide], courtesy of TheLimeyDragon#1993 on Discord. |
Line 215: |
Line 215: |
| | | |
| ===Festivals=== | | ===Festivals=== |
− | Custom NPCs should be added to festivals via the <tt>Set-Up_additionalCharacters</tt> field in the [[Modding:Festival_data#Data_file|festival's data file]]. You may also want to visit [https://stardewmodding.wiki/wiki/Custom_NPC_Tiles Custom NPC festival tile positions] to check the positions of various existing NPCs for compatibility purposes. | + | Custom NPCs should be added to festivals via the <samp>Set-Up_additionalCharacters</samp> field in the [[Modding:Festival_data#Data_file|festival's data file]]. You may also want to visit [https://stardewmodding.wiki/wiki/Custom_NPC_Tiles Custom NPC festival tile positions] to check the positions of various existing NPCs for compatibility purposes. |
| | | |
| (Prior to Stardew Valley 1.5, {{nexus mod|1820|TMXL}} was the recommended tool for adding festival spots.) | | (Prior to Stardew Valley 1.5, {{nexus mod|1820|TMXL}} was the recommended tool for adding festival spots.) |
Line 223: |
Line 223: |
| | | |
| <ol> | | <ol> |
− | <li>[https://github.com/Pathoschild/StardewMods/blob/develop/ContentPatcher/docs/author-guide.md#format Create an empty Content Patcher content pack]. By convention, we'll name the folder <tt>[CP] Dobson</tt>.</li> | + | <li>[https://github.com/Pathoschild/StardewMods/blob/develop/ContentPatcher/docs/author-guide.md#format Create an empty Content Patcher content pack]. By convention, we'll name the folder <samp>[CP] Dobson</samp>.</li> |
| <li>Create the following files: | | <li>Create the following files: |
− | * <tt>assets/dialogue.json</tt> containing the dialogue. | + | * <samp>assets/dialogue.json</samp> containing the dialogue. |
− | * <tt>assets/marriageDialogue.json</tt> containing the marriage dialogue (if applicable). | + | * <samp>assets/marriageDialogue.json</samp> containing the marriage dialogue (if applicable). |
− | * <tt>assets/sprites.png</tt> containing their overworld sprites. | + | * <samp>assets/sprites.png</samp> containing their overworld sprites. |
− | * <tt>assets/portraits.png</tt> containing their portraits. | + | * <samp>assets/portraits.png</samp> containing their portraits. |
− | * <tt>assets/schedule.json</tt> containing their schedule data. | + | * <samp>assets/schedule.json</samp> containing their schedule data. |
| </li> | | </li> |
− | <li>Edit the <tt>content.json</tt> to load the files: | + | <li>Edit the <samp>content.json</samp> to load the files: |
| {{#tag:syntaxhighlight| | | {{#tag:syntaxhighlight| |
| { | | { |