Difference between revisions of "Modding:NPC data"

From Stardew Valley Wiki
Jump to navigation Jump to search
m (Text replacement - "stardewmodding.miraheze.org" to "stardewmodding.wiki.gg")
(→‎Adding your NPC: Adding list of NPC birthdays so modders don't add NPCs with conflicting birthdays.)
Line 311: Line 311:
 
</ol>
 
</ol>
 
That's it! If you load your game, the NPC should appear. If you want to create events, don't forget to add that file too.
 
That's it! If you load your game, the NPC should appear. If you want to create events, don't forget to add that file too.
 +
 +
===NPC Birthday and Festival List===
 +
 +
While the [https://www.nexusmods.com/stardewvalley/mods/7495 Show Birthdays mod] will let the player view overlapping birthdays, but if you add a new NPC it's a good idea to not conflict with the birthdays of existing NPCs, including NPCs in popular mods, or festivals. Here's a mostly complete list of birthdays from the main game and the following mods: [https://www.nexusmods.com/stardewvalley/mods/3753 Stardew Valley Expanded (SVE)], [https://www.nexusmods.com/stardewvalley/mods/7286 Ridgeside Village (RV)], [https://www.nexusmods.com/stardewvalley/mods/5787 East Scarp (ES)], [https://www.nexusmods.com/stardewvalley/mods/9999 Always Raining in the Valley (ARV)], [https://www.nexusmods.com/stardewvalley/mods/6626 Lunna Astray in Stardew Valley (LASV)], [https://www.nexusmods.com/stardewvalley/mods/3732 Shiko NPC (Shiko)]
 +
 +
{| class="wikitable"
 +
|-
 +
! Date
 +
! Birthday/Festival
 +
|-
 +
| Spring 1
 +
| Torts (RV)
 +
|-
 +
| Spring 2
 +
| Morris (SVE)
 +
|-
 +
| Spring 4
 +
| [[Kent]]
 +
|-
 +
| Spring 7
 +
| [[Lewis]]
 +
|-
 +
| Spring 10
 +
| [[Vincent]]
 +
|-
 +
| Spring 13
 +
| [[Egg Festival]]
 +
|-
 +
| Spring 14
 +
| [[Haley]]
 +
|-
 +
| Spring 15
 +
| Juliet (ES)
 +
|-
 +
| Spring 17
 +
| Beatrice (ES)
 +
|-
 +
| Spring 18
 +
| [[Pam]]
 +
|-
 +
| Spring 20
 +
| [[Shane]]
 +
|-
 +
| Spring 22
 +
| Eloise (ES)
 +
|-
 +
| Spring 23
 +
| Andy (SVE)
 +
|-
 +
| Spring 24
 +
| [[Flower Dance]]
 +
|-
 +
| Spring 26
 +
| [[Pierre]]
 +
|-
 +
| Spring 27
 +
| [[Emily]]
 +
|-
 +
| Summer 1
 +
| Jessie (ES)
 +
|-
 +
| Summer 3
 +
| Rodney (ES)
 +
|-
 +
| Summer 4
 +
| [[Jas]]
 +
|-
 +
| Summer 6
 +
| Martin (SVE), Oliver (ES)
 +
|-
 +
| Summer 7
 +
| Scarlett (SVE)
 +
|-
 +
| Summer 8
 +
| [[Gus]]
 +
|-
 +
| Summer 11
 +
| [[Luau]]
 +
|-
 +
| Summer 10
 +
| [[Maru]]
 +
|-
 +
| Summer 12
 +
| Lexi (ES)
 +
|-
 +
| Summer 13
 +
| [[Alex]]
 +
|-
 +
| Summer 15
 +
| Sterling (ES)
 +
|-
 +
| Summer 17
 +
| [[Sam]]
 +
|-
 +
| Summer 19
 +
| [[Demetrius]]
 +
|-
 +
| Summer 20
 +
| Tristan (ES), Mr. Ginger (ES)
 +
|-
 +
| Summer 21
 +
| Aideen (ES)
 +
|-
 +
| Summer 22
 +
| [[Dwarf]]
 +
|-
 +
| Summer 24
 +
| [[Willy]]
 +
|-
 +
| Summer 26
 +
| [[Leo]]
 +
|-
 +
| Summer 27
 +
| Jacob (ES)
 +
|-
 +
| Summer 28
 +
| [[Dance of the Moonlight Jellies]], Lavril (ES)
 +
|-
 +
| Fall 2
 +
| [[Penny]]
 +
|-
 +
| Fall 5
 +
| [[Elliot]]
 +
|-
 +
| Fall 6
 +
| Fievel (ES)
 +
|-
 +
| Fall 7
 +
| Morgan (SVE)
 +
|-
 +
| Fall 11
 +
| [[Jodi]]
 +
|-
 +
| Fall 12
 +
| June (RV)
 +
|-
 +
| Fall 13
 +
| [[Abigail]]
 +
|-
 +
| Fall 15
 +
| [[Sandy]]
 +
|-
 +
| Fall 16
 +
| [[Stardew Valley Fair]]
 +
|-
 +
| Fall 18
 +
| [[Marnie]]
 +
|-
 +
| Fall 20
 +
| Ridgeside Gathering Festival (RSV)
 +
|-
 +
| Fall 21
 +
| [[Robin]]
 +
|-
 +
| Fall 22
 +
| Jasper (ES)
 +
|-
 +
| Fall 24
 +
| [[George]]
 +
|-
 +
| Fall 25
 +
| Mateo (ES)
 +
|-
 +
| Fall 27
 +
| [[Spirit's Eve]]
 +
|-
 +
| Fall 28
 +
| Susan (SVE)
 +
|-
 +
| Winter 1
 +
| [[Krobus]]
 +
|-
 +
| Winter 3
 +
| [[Linus]]
 +
|-
 +
| Winter 6
 +
| Shiko (Shiko)
 +
|-
 +
| Winter 7
 +
| [[Caroline]]
 +
|-
 +
| Winter 8
 +
| [[Festival of Ice]]
 +
|-
 +
| Winter 10
 +
| [[Sebastian]]
 +
|-
 +
| Winter 12
 +
| Gunther (SVE)
 +
|-
 +
| Winter 14
 +
| [[Harvey]]
 +
|-
 +
| Winter 16
 +
| Barron (ES)
 +
|-
 +
| Winter 17
 +
| [[Wizard]]
 +
|-
 +
| Winter 19
 +
| Marlon (SVE)
 +
|-
 +
| Winter 20
 +
| [[Evelyn]]
 +
|-
 +
| Winter 23
 +
| [[Leah]]
 +
|-
 +
| Winter 25
 +
| [[Feast of the Winter Star]]
 +
|-
 +
| Winter 26
 +
| [[Clint]]
 +
|-
 +
| Winter 28
 +
| Ember of Resolutions Festival (RSV)
 +
|}
 +
 
==Guidance on pixel art==
 
==Guidance on pixel art==
 
If you'd like additional guidance on pixel art, See [[Modding:Index#See_also]] for some recommended guides.  
 
If you'd like additional guidance on pixel art, See [[Modding:Index#See_also]] for some recommended guides.  

Revision as of 15:28, 28 July 2023

Index

This page provides an overview of what's needed to create a custom NPC. This is an advanced guide for mod developers.

Before reading this page, see Modding:Editing XNB files for the basic concepts.

Files to edit

To create a new NPC, you need to edit a number of different files. However, you don't need any programming experience and it can be done with Content Patcher.

Basic info

The Data\NPCDispositions 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:

   Abigail: "teen/rude/outgoing/neutral/female/datable/Sebastian/Town/fall 13/Caroline 'mom' Pierre 'dad'/SeedShop 1 9/Abigail"

The key (before the colon) is the internal name which uniquely identifies that NPC. This name isn't shown to the player, but will be used when referencing the NPC in other files. The value contains the following fields:

index field example purpose
0 age teen Whether the NPC is a child, teen, or adult. 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 a secret gift-giver. Children are also excluded from item delivery quests.
1 manners rude Whether the NPC is polite, rude, or neutral. This affects some generic dialogue lines.
2 social anxiety outgoing Whether the NPC is outgoing, shy, or neutral. This affects some generic dialogue lines.
3 optimism neutral Whether the NPC is positive, negative, or neutral. Unused.
4 gender female Whether the NPC is male, female, or undefined. This affects dialogue, whether children in marriage are obtained through adoption or pregnancy, and the reserved frames' positions on the spritesheet.
5 datable datable Whether the NPC is datable, not-datable, or secret. The former two toggle the romance features (e.g., 'single' label in the social menu, bouquet gifting, and marriage), while secret is used exclusively for Krobus, who cannot be married but can be made a roommate.
6 love interest Sebastian Unused.
7 home region Town Whether the NPC lives in the Desert, Town, or Other. 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 Town region).
8 birthday fall 13 The season and day for the NPC's birthday.
9 relationships Caroline 'mom' Pierre 'dad' 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., /fall 13//SeedShop 1 9/).
10 default map & position SeedShop 1 9 The location name and tile position where the NPC starts and ends each day.
11 display name Abigail The NPC name shown to the player.

Gift tastes

The Data\NPCGiftTastes 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:

   Abigail: "I seriously love this! You're the best, @!/66 128 220 226 276 611/Hey, how'd you know I was hungry? This looks delicious!//What am I supposed to do with this?/-5 -75 -79 16 245 246/What were you thinking? This is awful!/330/You brought me a present? Thanks.// " #!String

The line can be broken down into 5 pairs of dialogue + item IDs in this order: Love, Like, Dislike, Hate, Neutral. If a dialogue field is empty, the game will use a generic dialogue text. See Modding:Items for the object IDs.

Birthday gift responses

The Strings\StringsFromCSFiles 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:

gift taste manners chance string english string
love, like rude 50% NPC.cs.4274 "You remembered my birthday? I'm impressed. Thanks.$h"
50% NPC.cs.4276 "Oh, is it my birthday today? I guess it is. Thanks. This is nice.$h/Oh, is it my birthday today? I guess it is. Thanks. This is nice.$h"
polite, neutral 50% NPC.cs.4275 "A birthday gift? That's very kind of you! I love it.$h"
50% NPC.cs.4277 "You remembered my birthday! Thank you. This is great.$h"
dislike, hate rude 100% NPC.cs.4278 "It's my birthday and you give me this? Is this some kind of joke?$s/It's my birthday and you give me this? Is this some kind of joke?$s"
polite, neutral 100% NPC.cs.4279 "Oh... It's for my birthday? ... Thanks.$s/Oh... It's for my birthday? ... Thanks.$s"
neutral rude 100% NPC.cs.4280 "For my birthday? Thanks."
polite, neutral 100% NPC.cs.4281 "Oh, a birthday gift! Thank you./Oh, a birthday gift! Thank you."

The $h and $s are portrait commands that select the portrait image of the character to use.

Overworld sprites

The sprite sheet for Abigail.

The overworld sprites are stored in Characters/NpcName, including movement and animation frames. Each frame is exactly 16x32 pixels. Here's an example sprite guide, courtesy of TheLimeyDragon#1993 on Discord. Some positions are reserved for certain actions:

  • the first sixteen frames are generic movement (four frames per direction);
  • frames 40–47 (female) and 44–47 (male) must be the Flower Dance dance, if they participate;
  • frames 36–38 (female) 48–50 (male) are reserved for marriageable NPCs (Contains Wedding sprite);
  • and the kissing sprite/direction varies depending on NPC:
    character kissing frame facing direction
    Abigail and Emily 33 left
    Alex 42 right
    Elliott 35 left
    Haley 28 right
    Harvey 31 left
    Leah 25 right
    Maru 28 left
    Penny 35 right
    Sam 36 right
    Sebastian 40 left
    Shane 34 left
    any other NPC 28 right

Portraits

Abigail's portrait sprite sheet.

The dialogue portraits are stored in Portraits/NpcName. 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 example portrait guide, courtesy of TheLimeyDragon#1993 on Discord.

Schedule

Their schedule file tells the game where the NPC starts and moves based on on the time. You need to add strings to a separate schedules file found in the Strings folder to allow custom dialogue. See Modding:Schedule data for more info.

Dialogue and events

The NPC dialogue and events are stored in several files; see Modding:Dialogue and Modding:Event data for more info.

Festivals

Custom NPCs should be added to festivals via the Set-Up_additionalCharacters and MainEvent_additionalCharacters fields in the festival's data file. You may also want to visit Custom NPC festival tile positions to check the positions of various existing NPCs for compatibility purposes.

(Prior to Stardew Valley 1.5, TMXL was the recommended tool for adding festival spots.)

Movie theater

An NPC's taste in movies and concessions are stored in Data\MoviesReactions.xnb and Data\ConcessionTastes.xnb, respectively. See Modding:Movie theater data for details on how these function.

Spouse room

If your NPC will be a marriage candidate, note that you can add a spouse room for them much more easily after game version 1.5.5. See Modding:Migrate_to_Stardew_Valley_1.5.5#Custom_spouse_rooms for details.

Adding your NPC

Here's how you'd create an example NPC we'll name Dobson:

  1. Create an empty Content Patcher content pack. By convention, we'll name the folder [CP] Dobson.
  2. Create the following files:
    • assets/dialogue.json containing the dialogue.
    • assets/marriageDialogue.json containing the marriage dialogue (if applicable).
    • assets/sprites.png containing their overworld sprites.
    • assets/portraits.png containing their portraits.
    • assets/schedule.json containing their schedule data.
  3. Edit the content.json to load the files:
    {
        "Format": "2.0.0",
        "Changes": [
            {
                "Action": "Load",
                "Target": "Characters/Dobson",
                "FromFile": "assets/sprites.png"
            },
            {
                "Action": "Load",
                "Target": "Portraits/Dobson",
                "FromFile": "assets/portraits.png"
            },
            {
                "Action": "Load",
                "Target": "Characters/Dialogue/Dobson",
                "FromFile": "assets/dialogue.json"
            },
            {
                "Action": "Load",
                "Target": "Characters/Dialogue/MarriageDialogueDobson",
                "FromFile": "assets/marriageDialogue.json"
            },
            {
                "Action": "Load",
                "Target": "Characters/schedules/Dobson",
                "FromFile": "assets/schedule.json"
            },
            {
                "Action": "EditData",
                "Target": "Data/NPCDispositions",
                "Entries": {
                    "Dobson": "adult/rude/neutral/positive/male/datable//Town/summer 7//BusStop 19 4/Dobson"
                }
            },
            {
                "Action": "EditData",
                "Target": "Data/NPCGiftTastes",
                "Entries": {
                    "Dobson": "You're giving this to me? This is amazing!/207 232 233 400/Thank you! This is a very interesting specimen./-5 -79 422/...What is this?/80 330/This is disgusting./2/That was very thoughtful of you./-4/ "
                }
            },
            {
                "Action": "EditData",
                "Target": "Data/EngagementDialogue",
                "Entries": {
                    "Dobson0": "I can't believe I am about to be married!$h",
                    "Dobson1": "I hope I don't get cold feet"
                }
            }
        ]
    }
    

That's it! If you load your game, the NPC should appear. If you want to create events, don't forget to add that file too.

NPC Birthday and Festival List

While the Show Birthdays mod will let the player view overlapping birthdays, but if you add a new NPC it's a good idea to not conflict with the birthdays of existing NPCs, including NPCs in popular mods, or festivals. Here's a mostly complete list of birthdays from the main game and the following mods: Stardew Valley Expanded (SVE), Ridgeside Village (RV), East Scarp (ES), Always Raining in the Valley (ARV), Lunna Astray in Stardew Valley (LASV), Shiko NPC (Shiko)

Date Birthday/Festival
Spring 1 Torts (RV)
Spring 2 Morris (SVE)
Spring 4 Kent
Spring 7 Lewis
Spring 10 Vincent
Spring 13 Egg Festival
Spring 14 Haley
Spring 15 Juliet (ES)
Spring 17 Beatrice (ES)
Spring 18 Pam
Spring 20 Shane
Spring 22 Eloise (ES)
Spring 23 Andy (SVE)
Spring 24 Flower Dance
Spring 26 Pierre
Spring 27 Emily
Summer 1 Jessie (ES)
Summer 3 Rodney (ES)
Summer 4 Jas
Summer 6 Martin (SVE), Oliver (ES)
Summer 7 Scarlett (SVE)
Summer 8 Gus
Summer 11 Luau
Summer 10 Maru
Summer 12 Lexi (ES)
Summer 13 Alex
Summer 15 Sterling (ES)
Summer 17 Sam
Summer 19 Demetrius
Summer 20 Tristan (ES), Mr. Ginger (ES)
Summer 21 Aideen (ES)
Summer 22 Dwarf
Summer 24 Willy
Summer 26 Leo
Summer 27 Jacob (ES)
Summer 28 Dance of the Moonlight Jellies, Lavril (ES)
Fall 2 Penny
Fall 5 Elliot
Fall 6 Fievel (ES)
Fall 7 Morgan (SVE)
Fall 11 Jodi
Fall 12 June (RV)
Fall 13 Abigail
Fall 15 Sandy
Fall 16 Stardew Valley Fair
Fall 18 Marnie
Fall 20 Ridgeside Gathering Festival (RSV)
Fall 21 Robin
Fall 22 Jasper (ES)
Fall 24 George
Fall 25 Mateo (ES)
Fall 27 Spirit's Eve
Fall 28 Susan (SVE)
Winter 1 Krobus
Winter 3 Linus
Winter 6 Shiko (Shiko)
Winter 7 Caroline
Winter 8 Festival of Ice
Winter 10 Sebastian
Winter 12 Gunther (SVE)
Winter 14 Harvey
Winter 16 Barron (ES)
Winter 17 Wizard
Winter 19 Marlon (SVE)
Winter 20 Evelyn
Winter 23 Leah
Winter 25 Feast of the Winter Star
Winter 26 Clint
Winter 28 Ember of Resolutions Festival (RSV)

Guidance on pixel art

If you'd like additional guidance on pixel art, See Modding:Index#See_also for some recommended guides.