Модификации:Фестивали

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

Индекс

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

Файл данных

У каждого фестиваля есть файл данных, расположенный в Content/Data/Festivals/<season><day of month>. Игра использует этот файл, чтобы определить, будет ли сегодня фестиваль (если файл существует), где и когда он произойдёт, а также размещение/диалог/поведение NPC.

Данные

Файл данных фестиваля может быть распакован для редактирования. Например, вот данные из Content/Data/Festivals/fall27 начиная с 1.5.4 для справки:

Данные 
{
  "name": "Spirit's Eve",
  "conditions": "Town/2200 2350",
  "shop": "BO 113 5000 1 O 746 750 5 BL 746 2000 1 BO 47 350 -1 F 2870 4000 -1",
  "set-up": "spirits_eve/-1000 -1000/farmer 12 54 1/changeToTemporaryMap Town-Halloween/loadActors Set-Up/advancedMove Maru true 0 2 2 0 0 3 -11 0 0 -7 5 0 0 2 4 0/advancedMove Alex true -4 0 4 4000 4 0 4 5000/advancedMove Jas true 1 1500 4 1000/advancedMove Pam true 0 1 1 5000 0 -1 1 5000/advancedMove Shane true -7 0 0 2 2 9000 0 -2 7 0 4 9000/advancedMove Demetrius true 3 18000 4 3000/addTemporaryActor Skeleton 16 32 30 59 2 false Monster/advancedMove Skeleton true 0 1 3 4000 2 0 0 -1 4 2000 -1 0 3 1000 2 2000 0 -1 4 4000 -1 0 0 1 2 5000/addTemporaryActor Skeleton 16 32 35 58 2 false Monster/playerControl halloween",
  "Abigail_spouse": "You'll have to tell me what's beyond, I can't go on... spiders...$s",
  "Leah_spouse": "I may have had a little too much pumpkin ale...",
  "Maru_spouse": "I'm confused... you go on ahead and let me figure this out.",
  "Penny_spouse": "Oh... These vapors... Hmmm... You look nice tonight.$l",
  "Haley_spouse": "I get scared easily... I think I'm just going to stay right here.$s",
  "Sebastian_spouse": "It would be interesting to have one of these on the farm.",
  "Sam_spouse": "Hey, I was wondering when you'd show up!$h",
  "Harvey_spouse": "Hi... I was hoping you'd find me here...$l",
  "Elliott_spouse": "Mmph... I believe I've eaten a few too many slices of pumpkin pie.",
  "Abigail": "I can't go on... spiders...$s",
  "Robin": "Well, winter's almost here. It's a great time to stockpile wood and stone.",
  "Demetrius": "I haven't seen Maru in hours... I hope she's alright.",
  "Maru": "I think I've already been this way... no, wait...$s#$e#I'm lost...$s",
  "Sebastian": "I have no idea how these skeletons are walking... creepy.#$e#It's pretty cool though.",
  "Pierre": "??",
  "Caroline": "I get scared very easily. I'll leave the haunted maze to the younger people.",
  "Linus": "Good show, old friend.",
  "Alex": "There's something weird over there. But how do I get to it?#$e#There's gotta be a secret passage somewhere around here.",
  "George": "Hmm... smoked turkey haunch? I guess this festival isn't all bad.$h",
  "Evelyn": "I wish Gus would include a vegetarian option. Some zucchini skewers, maybe?",
  "Lewis": "Good evening, @. Have you ventured into the haunted maze yet? It's quite spooky.#$e#That strange man who lives in the tower set it all up himself. He wouldn't let anyone near while he was working on it.",
  "Clint": "One of my iridium-infused maces would make quick work of these things.",
  "Emily": "Do you like the jack-o-lanterns? I carved them myself.",
  "Penny": "The vapor from this cauldron... it's making my head spin, but I can't seem to leave...$u",
  "Pam": "I'll come to any event with free grub! You won't see me in the haunted maze, though.",
  "Haley": "Eek! I'm too scared.$s",
  "Jodi": "Vincent's upset that I won't let him go into the haunted maze... but he's just a little boy!",
  "Kent": "Hey, @. Nice evening, isn't it?",
  "Sam": "That's odd... It's just a dead end up ahead.#$e#I could've sworn there was someone ahead of me when I went through the maze, though. Where'd they go?",
  "Leah": "Mm, hi. Sorry... mouth full of blackberries.",
  "Marnie": "Hi, @. Have you had a productive fall?#$e#It's starting to get quite cold... crops won't hold out for much longer.",
  "Elliott": "Why, hello @. It's chilly, isn't it?",
  "Gus": "It's a lot of fun to cook with pumpkin. Such an interesting fruit.",
  "Dwarf": "You say it's raining up above? *gasp*#$e#Rain... It's almost mythical to us. Some of us live our entire lives without ever experiencing it.",
  "Wizard": "The affairs of mundane folk matter little to me, but the elementals like a chance to see you up close.#$e#It was for them that I created this silly maze.",
  "Harvey": "Oh! You found me...$8#$b#The truth is, I got too scared so I came here to hide. Don't tell anyone.$s",
  "Shane": "Why is there no more pumpkin ale?",
  "Sandy": "I heard it's raining back home. Is that why you came here?$h#$e#I kind of miss the rain, actually...$s",
  "Jas": "But Aunt Marnie! I wanna go in the maze! I'm not scared!$s",
  "Vincent": "Mother won't let me go in the maze. *sob*$s",
  "Marlon": "Don't get too close to the cage.",
  "Leo": "%Leo's unblinking eyes are glued to the screen. You're unable to get his attention."
}

Формат

Ключ поля Описание
name Название фестиваля. Используется в отображаемом тексте, таком как всплывающая подсказка календаря или сообщение о готовности к фестивалю.
conditions Когда и где проходит фестиваль. В формате <location>/<start time> <end time>, где <location> это расположение внутри указанной локации и время в 26-часовом формате (т.е. 600 для 6 утра и 2600 для 2 ночи).
shop Товары, которые продает фестивальный магазин. Смотри формат магазина ниже.
set-up Скрипт события запускается, когда игрок впервые попадает на фестиваль. Включает в себя перемещение игрока на карту фестиваля. Это поле поддерживает варианты года.
Set-Up_additionalCharacters NPC, которые будут появляться при загрузке фестиваля. Указывается в виде четырех полей, разделенных пробелами, в форме<NPC name> <tile X> <tile Y> <facing direction>, повторяется для каждого NPC, для разделения NPC используется разделитель /. <facing direction> может быть одним из следующих значений: up или 0, down ил 2, left или 3, и right или 1. Они являются дополнительными к NPC, порожденным через файл карты. Например, для добавления Абигейл и Леи рядом друг с другом лицом вниз нужно написать следующее:
"Set-Up_additionalCharacters": "Abigail 15 6 down/Leah 16 6 down"
<NPC name>_spouse Диалоговая строка, указанный NPC сообщит, когда игрок поговорит с ними, женаты ли они на игроке. Поддерживает варианты года.
<NPC name> Диалоговая строка, указанный NPC сообщит, когда игрок поговорит с ними, если <NPC name>_spouse не существует или не используется. Поддерживает варианты года.

Любая другая запись используется event data для роликов во время фестиваля. В некоторых случаях, таких как Луау, они связаны друг с другом.

Варианты года

Несколько полей допускают варианты года (смотри в таблице выше). Они работают с помощью префикса _y<year variant>, Где <year variant> увеличивающееся число, начинающимся с 1, без верхнего предела. Например, две записи set-up_y1 and set-up_y2 будут чередоваться (set-up_y1 в 1 годы, set-up_y2 во 2 году, set-up_y1 в 3 году, и т.д.). Если для ключа определены варианты года, исходный ключ игнорируется (например, set-up никогда не будет использоваться, если set-up_y* записи определены).

Формат магазина

Данные магазина для фестиваля хранятся в виде четырех значений, разделенных пробелами, в формате <item type> <item ID> <cost> <count available>, который повторяется для каждого элемента. Форматы полей:

Поле Описание
<item type> Тип предмета. Допустимыми значениями являются B или Boots (ботинки), BL илиBlueprint (чертежи), BBL, BBl или BigBlueprint (большие чертежи), BO или BigObject (большой объект, пригодный для изготовления), F (мебель), H или Hat (шляпа), O или Object (объект), R илиRing (кольцо), или W или Weapon (оружие).
<item id> ID элемента в спрайт-листе.
<cost> Цена покупки в золоте. Для семян это модифицировано на основе маржи.
<count available> Сколько этих товаров можно приобрести в магазине, или -1 для неограниченного количества.

Карта

Многие фестивали используют отдельные файлы карты расположенные в папке Content/Maps. Карта для использования указана в файле данных set-up поле, использующее команду changeToTemporaryMap.

Создание NPC

Это хрупко и не рекомендуется для пользовательских NPC или фестивалей.
Рассмотрите возможность использования файлов данных поля Set-Up_additionalCharacters вместо этого.

NPC можно добавлять на фестивали, используя индексы тайлов карты на определенном слое. Это включено в файле данных set-up поле, использующее команду loadActors <layer name>. Для каждого тайла, существующего на слое, индекс тайла сопоставляется с индексом NPC в Data\NPCDispositions, умноженный на четыре, со смещением, которое определяет направление поворота (0 = вверх, 1 = вправо, 2 = вниз, или 3 = влево).

Например, предположим, что слой содержит тайл с индексом равным 61. NPC в индексе 61 / 4 = 15 в Data\NPCDispositions, т.е. 16-й NPC, т.е. Лея. Смещение равно 61 % 4 = 1, так что она смотрит направо. Когда фестиваль будет загружен, Лея будет добавлена в положение тайла, смотрящей вправо.

Жестко закодированная логика

Несколько событий ванилы имеют жестко запрограммированную логику сценария в игровом коде. Например, Льюис, оценивающий выставку на Ярмарке долины Стардьюобрабатывается в коде игры, а не в ресурсах контента, описанных выше.

Ночной рынок также обрабатывается иначе, чем на других фестивалях. Хотя существуют отдельные карты ночного рынка, данных NPC на них не существует. Вместо этого NPC динамически входят и покидают фестиваль с помощью данных расписания.