Модификации:Фестивали
← Индекс
На этой странице объясняется, как игра хранит и использует данные фестивалей. Это расширенное руководство для разработчиков модов.
Файл данных
У каждого фестиваля есть файл данных, расположенный в 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
Рассмотрите возможность использования файлов данных поля 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 динамически входят и покидают фестиваль с помощью данных расписания.