Модификации:О NPC

Материал из Stardew Valley Wiki
Перейти к навигации Перейти к поиску

Индекс

На этой странице представлен обзор того, что необходимо для создания пользовательского NPC. Это расширенное руководство для разработчиков модов.

Прежде чем прочитать эту страницу, для понятия основ посмотри использование XNB модификаций.

Файлы для редактирования

Чтобы создать нового NPC, вам нужно отредактировать несколько различных файлов. Однако вам не нужен какой-либо опыт программирования, и это можно сделать с помощью Content Patcher.

Основная информация

Data\NPCDispositions содержит основную информацию о вашем персонаже, включая его имя, день рождения, отношения с другими персонажами, личность и можно ли сделать их второй половинкой.

В файле есть одна строка для каждого NPC, например:

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

Ключ (перед двоеточием) - внутреннее имя, которое однозначно идентифицирует этого NPC. Это имя не отображается игроку, но будет использоваться при ссылке на NPC в других файлах. Значение содержит следующие поля:

Индекс Поле Пример Назначение
0 Возраст teen Является ли NPC child(ребёнок), teen(подросток), или adult(взрослый). Влияет на созданные диалоговые строки (например, ребенок сказал бы дурацкий и взрослый сказал бы унылый), общий диалог (например, ребенок отреагировал бы на обыск мусорного бака так "Фу... Что ты делаешь?", подросток сказал бы "Хм... Зачем ты роешься в мусоре?"), и подарок, который они выбирают в качестве подарка. Дети также исключаются из заданий по доставке предметов.
1 Манера поведения rude Является ли NPC polite(вежливым), rude(грубым), или neutral(нейтральным). Влияет на некоторые общие диалоги.
2 Социальное состояние outgoing Является ли NPC outgoing(Общительным), shy(застенчивым), или neutral(нейтральным). Влияет на некоторые общие диалоги.
3 Оптимизм neutral Является ли NPC positive, negative, или neutral. Не используется.
4 Пол female Является ли NPC male(мужчиной), female(женщиной), или undefined(неопределённым). Влияет на диалог, независимо от того, получены ли дети в браке путем усыновления или беременности, а также на позиции зарезервированных кадров в таблице спрайтов.
5 Можно ли сделать второй половинкой datable Является ли NPC datable(да) или not-datable(нет). Это переключатель функций романтики (Например, метка 'одинок' в меню, позволяет дарить букет, и играть свадьбу).
6 Любовный интерес Sebastian Не используется.
7 home region Town Живет ли NPC в Desert(пустыне), Town(город), или Other(другое). Используется при улучшении очков дружбы для всех NPC в данном регионе, который в настоящее время используется только для Луау повышение дружбы (которое влияет только на NPC в регионе - Town).
8 День рождения fall 13 Время года и день рождения NPC.
9 Отношения Caroline 'mom' Pierre 'dad' Это влияет на общий диалог для выявления симпатий и антипатий к членам семьи. Может также повлиять на диалог inlaw_<NPC>. Может быть пустым (напрмер, /fall 13//SeedShop 1 9/).
10 Карта и положение по умолчанию SeedShop 1 9 Название местоположения и позиция плитки, где NPC начинается и заканчивается каждый день.
11 Отображаемое имя Abigail Имя NPC, показываемое игроку.

Подарки

Data\NPCGiftTastes содержит предпочтения персонажа в отношении подарков (например, какие подарки они любят или ненавидят), и его ответы, когда они получают подарок. Смотри подарки для большей информации.

В файле есть одна строка для каждого NPC, например:

   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

Строка может быть разбита на 5 пар диалогов + ID элементов в следующем порядке: Любит, Нравится, Равнодушен, Не любит, Ненавидит. Если поле диалога пустое, в игре будет использоваться общий текст диалога. Смотри объекты для получения ID.

Ответы на подарки на день рождения

Strings\StringsFromCSFiles содержит общие ответы, которые NPC дают на подарки на день рождения, основанные на их предпочтениях и манерах в отношении подарков. Эти общие строки можно настроить для конкретного NPC, отредактировав их условно, например, только в день рождения NPC (не общий). Для выбора из строк используются следующие критерии:

Отношение к подарку Манера поведения Шанс Тест
Любит, Нравится Грубый 50% NPC.cs.4274
50% NPC.cs.4276
Вежливый, Равнодушно 50% NPC.cs.4275
50% NPC.cs.4277
Не нравится, Ненавидит Грубый 100% NPC.cs.4278
Вежливый, Равнодушно 100% NPC.cs.4279
Равнодушно Грубый 100% NPC.cs.4280
Вежливый, Равнодушно 100% NPC.cs.4281

Спрайты

Спрайты мира хранятся в Characters/NpcName, включая кадры движения и анимации. Каждый кадр имеет размер 16х32 пикселя. Например, шаблон спрайт-листа, любезно предоставлено TheLimeyDragon#1993 в Discord. Некоторые позиции зарезервированы для определенных действий:

  • первые шестнадцать кадров-это общее движение (по четыре кадра в каждом направлении);
  • кадры 40-47 (женский) и 44-47 (мужской) должны быть танцем для цветочных танцев, если персонаж участвует;
  • кадры 36-38 (женский) и 48-50 (мужской) зарезервированы для NPC, достигших брачного возраста (содержат свадебные спрайты);
  • и спрайт/направление поцелуев варьируется в зависимости от NPC:
    Персонаж Кадр поцелуя Направление лица
    Абигейл и Эмили 33 Влево
    Алекс 42 Вправо
    Эллиот 35 Влево
    Хэйли 28 Вправо
    Харви 31 Влево
    Лея 25 Вправо
    Мару 28 Влево
    Пенни 35 Вправо
    Сэм 36 Вправо
    Себастиан 40 Влево
    Шейн 34 Влево
    Другие NPC 28 Вправо

Портреты

Диалоговые портреты хранятся в Portraits/NpcName. Каждый кадр портрета составляет 64х64 пикселя. Первые шесть представляют конкретные эмоции (смотри Модификации:Диалоги#Портретные команды), за ними следует любое количество пользовательских портретов. Если портрет не указан, используется первый портрет.

Например, шаблон портрета, любезно предоставлено TheLimeyDragon#1993 в Discord.

Расписание

Файл расписания сообщает игре, где NPC появляется и как перемещается в зависимости от времени. Смотри Модификации:Расписание.

Диалоги и события

Диалог и события NPC хранятся в нескольких файлах, смотри Модификации:Диалоги и Модификации:События.

Праздники

Праздники - штука хитрая. Все NPC ванильной игры добавляются на карту праздника, размещая плитки на слоях карты Настройки и основных событий из таблицы, которая извлекается из NPCDispositions, чтобы точно определить, кого разместить. Это не очень подходит для пользовательских NPC, так как у вас нет возможности узнать, куда в этом списке NPCDispositions попадает ваш NPC, когда игрок будет использовать несколько пользовательских NPC. По этой причине рекомендуется использовать TMXLoader, поскольку у него есть функция добавления праздника, чтобы добавить вашего NPC на карту праздника, так как он использует внутреннее имя вашего персонажа, а не их положение в списке. Это довольно легко сделать, и есть объяснение на TMXLoader Nexus.

Для добавления NPC на праздники в 1.5 с помощью Content Patcher, смотри Modding:Migrate to Stardew Valley 1.5#Festival changes.

Добавление своего NPC

Для примера создадим NPC, которого назовем Добсон:

  1. Создайте пустой пакет содержимого. Мы назовем папку [CP] Dobson.
  2. Создадим следующие файлы:
    • assets/dialogue.json содержит диалог.
    • assets/marriageDialogue.json содержит диалог в браке (если применимо).
    • assets/sprites.png содержит спрайты NPC.
    • assets/portraits.png содержит портреты NPC.
    • assets/schedule.json содержит расписание.
  3. Отредактируйте content.json, чтобы загрузить файлы:
    {
        "Format": "[[:Шаблон:Content Patcher version]]",
        "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",
                },
            },
        ]
    }
    

Вот и все! Если вы загрузите игру, должен появиться NPC. Если вы хотите создавать события, не забудьте добавить и этот файл.

Руководство по пиксельной графике

Если вам нужны дополнительные рекомендации по пиксельной графике, смотрите рекомендуемые руководства..