Модификации:Диалоги: различия между версиями
Shtompel (обсуждение | вклад) |
Shtompel (обсуждение | вклад) (→Values) |
||
Строка 474: | Строка 474: | ||
|} | |} | ||
− | == | + | ==Значения== |
− | + | Игра использует эти предопределенные значения в некоторых диалогах. | |
===Дни недели=== | ===Дни недели=== | ||
Строка 486: | Строка 486: | ||
* <tt>Sun</tt> (Воскресенье) | * <tt>Sun</tt> (Воскресенье) | ||
− | === | + | ===Сезоны=== |
− | * <tt>spring</tt> | + | * <tt>spring</tt> (Весна) |
− | * <tt>summer</tt> | + | * <tt>summer</tt> (Лето) |
− | * <tt>fall</tt> | + | * <tt>fall</tt> (Осень) |
− | * <tt>winter</tt> | + | * <tt>winter</tt> (Зима) |
===Первый/последующий год=== | ===Первый/последующий год=== | ||
Строка 507: | Строка 507: | ||
|} | |} | ||
− | === | + | ===ID ответов=== |
− | + | ID ответа идентифицирует ответ, выбранный игроком в ответ на [[#Question example|question dialogue]]. In some cases a question may have several answers with the same ID (e.g. several variations of "yes"), or use the same ID for ''every'' question (in which case the ID just shows whether the player has answered the question). | |
Mods can add their own response IDs, but here are the vanilla IDs as of {{version|1.3.36}}¹: | Mods can add their own response IDs, but here are the vanilla IDs as of {{version|1.3.36}}¹: |
Версия 11:05, 23 августа 2021
← Индекс
![]() |
Неполный перевод Эта статья или её часть до сих пор не переведены на русский язык.
Вы можете оказать помощь в переводе путем ее редактирования. |
На этой странице объясняется, как игра хранит текст диалога, его формат и как игра анализирует его. Это расширенное руководство для разработчиков модов.
Данные
Текст диалога хранится в четырех файлах.
Диалог с конкретным персонажем
Characters\Dialogue\*.xnb содержит большую часть диалогов для каждого персонажа(по одному файлу на персонажа). Игра выберет диалог из одного из разделов ниже в порядке, указанном здесь.
Специальный диалог
Существует несколько ключей для конкретных случаев:
Ключ | Описание |
---|---|
danceRejection | Диалог, используемый для отклонения предложения потанцевать во время цветочных танцев. (Другой диалог используется, если они уже согласились танцевать с другим игроком.) |
divorced | Диалог отображается, когда вы разговариваете со своим разведенным супругом. |
<location> _Entry
|
Возможные диалоговые строки, показанные над NPC, при входе на <location> , шанс 50%. Эта запись диалога может содержать несколько параметров, разделенных / ; игра случайным образом выберет один из них для отображения.Пример: SeedShop_Entry: "Hi, Pierre!/Now, what do I need.../Ah, that looks good!/Makin' my special sauce tonight!/Pierre! What's fresh?/Pierre! Waddya got for me?" |
ComeBackLater Snoring |
Диалог Гила, когда не выполнено никаких новых задач приключенческого квеста. ComeBackLater будет показан один раз, и все последующие диалоги будут показаны Snoring. |
Диалоги локаций
В противном случае игра выберет диалог в таком порядке.
Варианты:
- Каждый ключ может быть дополнительно снабжен префиксом названием сезона, например, springMountain_47_23.
Игра проверит варианты в таком порядке: <season>
<key>
, и <key>
.
Ключ | Описание |
---|---|
<location> _<x> _<y>
|
Диалог, отображаемый в указанном местоположении, когда NPC стоит на позиции плитки <x> , <y> .Например: Mountain_47_23: "Я прихожу сюда за тишиной и покоем." |
<location> _<dayName>
|
Диалог, отображаемый в указанном месте в указанный день недели. Например: Saloon_Fri: "Сегодня вечером дела шли действительно хорошо. Я доволен." |
<location> <hearts>
|
Диалог, отображаемый в указанном местоположении, если у вас есть хотя бы <hearts> сердец. <hearts> должно быть 10, 8, 6, 4 или 2 (никакое другое количество не будет учтено).Например: Saloon8: "Привет @. Я рад тебя видеть! Тебе здесь всегда рады." |
<location>
|
Диалог, отображаемый в указанном местоположении. Например: Saloon: "Теперь, когда я здесь, я наконец-то могу расслабиться и немного пообщаться." |
Диалоги дождя
Characters\Dialogue\rainy.xnb содержит одну запись диалога на каждого NPC. Есть примерно 50% вероятность, что NPC воспользуется этим диалогом, если что-то из нижеперечисленного совпало,
- идет дождь;
- игрок не супруг NPC;
- игрок разведен с NPC.
Общий диалог
В противном случае игра выберет диалог, используя один из этих ключевых форматов (в порядке приоритета):
<season>
_<key>
_inlaw_<spouseName>
<season>
_<key>
<key>
_inlaw_<spouseName>
<key>
Для каждого варианта выше: <season>
это - название сезона (например, spring_14); _inlaw_<spouseName>
, если игрок супруг указанного NPC, независимо от того, связан ли NPC с игроком (например, Sat_inlaw_Abigail); и <key>
записывается в одним из форматов, перечисленных ниже.
Ключ | Описание |
---|---|
<dayOfMonth>
|
Диалог, показанный в указанный день месяца в только первого года. ПРЕДУПРЕЖДЕНИЕ: этот ключ только для первого года, ключи для последующих лет отличаются! Например: 10: "Did you watch the game last night?#$b#Or wait, do you even have a TV set...?" |
<dayOfMonth> _<firstOrLaterYear>
|
Диалог, показанный в указанный день месяца в первый/последующий год. Например: 2_1: "My husband Kent is a soldier, working overseas. That's why he's not here right now.#$b#I know he'll come back safe once his tour is over!!#$e#Need something?" |
<dayOfWeek> <hearts> _<firstOrLaterYear>
|
Диалог, показанный в указанный день недели если у игрока есть хотя бы <hearts> сердец, в первый/последующий год. {t|hearts}} будут проверены в порядке 10, 8, 6, 4, 2 (никакое другое количество не будет работать).Ошибка: показано только в том случае, если равны <dayOfWeek> <hearts> .Например: Thu2_2: "Well, my Dad is back. Have you met him?#$b#I'm just glad he's okay." |
<dayOfWeek> <hearts>
|
Диалог, показанный в указанный день недели если у игрока есть хотя бы <hearts> сердец. <hearts> будут проверены в порядке 10, 8, 6, 4, 2 (никакое другое количество не будет работать).Например: Sun4: "Hey, @.#$e#How's your day going?" |
<dayOfWeek> _<firstOrLaterYear>
|
Диалог, показанный в указанный день недели в первый/последующий год. Например: Sat_1: "Dad's coming back soon!#$b#I hope he brings me some toys.$u" |
<dayOfWeek>
|
Диалог, показанный в указанный день недели. Например: Mon: "Oh, hey. Taking a break from work?" |
Запасной
Если ничего из вышеперечисленного не совпадает, игра покажет значение с ключом NPC.cs.4061 расположенным в Strings\StringsFromCSFiles.xnb. (Английская версия: "Hi.")
Marriage dialogue
Characters\Dialogue\MarriageDialogue.xnb contains dialogue text for all spouses, and each NPC may optionally have their own dialogue file like Characters\Dialogue\MarriageDialogueAbigail.xnb. When looking up a dialogue key, it will use the one in the NPC's file if it exists, else the one in the generic file, else a default text (usually blank).
Each dialogue entry has a key with one of these formats:
key format | description |
---|---|
<season> _<day>
|
Dialogue shown when the day starts, if <season> and <day> match the current date.Example: fall_1: "The scent is unmistakable... mushroom, rotting leaves, pumpkin. It's fall, alright. Isn't it lovely?" |
patio_<spouse>
|
Dialogue shown when the NPC is standing on the patio. |
<weather> _Day_<random>
|
Daily dialogue added when the day starts, based on the <weather> (Rainy if it's raining, else Indoor even if they're not indoors) and <random> (a random number between 0 and 4). If the game chooses a <random> value that doesn't have a dialogue, it'll use the default text instead.
|
Rainy_Night_<random>
|
Daily dialogue in the farmhouse after 6pm when it's raining. <random> is a number between 0–5 inclusively or the NPC name, each of which has an equal chance of being randomly chosen. If the game chooses a <random> value that doesn't have a dialogue, it'll use the default text instead.Example: Rainy_Night_3: "On nights like this, I like to turn the light down low and just listen...$8" |
Indoor_Night_<random>
|
Daily dialogue in the farmhouse after 6pm when it's not raining. <random> is a number between 0–4 inclusively or the NPC name, each of which has an equal chance of being randomly chosen. If the game chooses a <random> value that doesn't have a dialogue, it'll use the default text instead.
|
funLeave_<spouse>
|
TODO |
jobLeave_<spouse>
|
TODO |
funReturn_<spouse>
|
Dialogue shown after 1pm when they enter the farmhouse but before reaching their target position, but only on Monday (any NPC) or Friday (if not Maru/Penny/Harvey). Example: funReturn_Abigail: "Hey! Did you have a good day? Mine went well. It was refreshing to take a walk.$h" |
jobReturn_<spouse>
|
Dialogue shown after 1pm when they enter the farmhouse but before reaching their target position, but only if funReturn isn't shown instead. Example: jobReturn_Penny: "#$c .5#Good evening. My day was fine, thanks! How was yours?$h#$e#Jas and Vincent weren't behaving very well today. I'm still all wound up..." |
<season> _<spouse>
|
Dialogue shown at 9+ heart levels with a 5% chance each day. Example: fall_Abigail: "Do I smell pumpkin on you? Maybe I'm just dreaming...$h" |
Outdoor_<spouse>
|
Dialogue shown on the farm with a 20% chance. Example: Outdoor_Abigail: "I'm just going to hang out here, okay?#$e#There's a lot of interesting bugs and things out here. *chuckle*$h" |
Outdoor_<random>
|
Dialogue shown on the farm with an 80% chance. <random> is a number 0–4, used to randomly select an entry.Example: Outdoor_3: "It's pretty cool that we have a cave on our property. It's something I always dreamed about.$h" |
spouseRoom_<spouse>
|
Dialogue shown when the NPC is in their room. Example: spouseRoom_Abigail: "$c .5#I got up a little before you and fed David Jr. He's very active this morning.#$e#I hope you don't mind the guinea pig smell." |
OneKid_<random>
|
Dialogue shown when standing in the kitchen, if they have one child. <random> is a number 0–4, used to randomly select an entry.OneKid_1: "I wonder if %kid1 will grow up to be a farmer like you?" |
TwoKids_<random>
|
Dialogue shown when standing in the kitchen, if they have two children. <random> is a number 0–4, used to randomly select an entry.TwoKids_2: "I had a dream that %kid2 will grow up to be a famous monster hunter. I've already been thinking about a little armor set." |
<affection> _<random>
|
Dialogue shown inside the farmhouse between 11am and 6pm, or when the day starts if a different dialogue isn't selected. <affection> is randomly Bad or Neutral if they have less than 9 hearts; 50% chance of Good and 75% chance of Good if you have 10+ or 11+ hearts respectively; else Neutral <random> is a number 0–9, used to randomly select an entry.Example: Good_5: "I was just admiring the mermaid's pendant you gave me... I'll proudly wear this to my grave.$l" |
Event files
Data\Events\*.xnb contains event scripts, including any dialogue in the event (see Modding:Event data).
Animation descriptions
Data\animationDescriptions.xnb contains short bits of dialogue to go with certain schedule points.
Strings from CS files
Strings\StringsFromCSFiles.xnb contains miscellaneous translations. That includes NPC dialogue defined in the code, dialogue that's shared between multiple characters, dialogue for some hardcoded events like marriage, etc.
The file has entries in the form "<key>": "dialogue string", where the key is an arbitrary unique identifier. These must exactly match the key expected by the game, but the keys are just unique identifiers — even though most keys look like <file name>
.<line number>
, that's just the convention originally used to assign IDs and it has no meaning or effect (nor does it even necessarily match the current file name or line number).
NPC-specific generic dialogue
With some ingenuity, you can make each NPC respond differently instead of using the normal static dialogue. For example, you can use Content Patcher to change NPC.cs.3962 and NPC.cs.3963 (to give a bouquet), and NPC.cs.3980 (for the mermaid pendant acceptance):
{
"Action": "EditData",
"Target": "Strings/StringsFromCSFiles",
"Entries": {
"NPC.cs.3962": "$q 10001 give_flowersA#?!...#$r 10001 0 give_flowersA# [Give Bouquet]",
"NPC.cs.3963": "$q 10001 give_flowersB#?!...#$r 10001 0 give_flowersB# [Give Bouquet]",
"NPC.cs.3980": "$q 10001 give_pendant#?!...#$r 10001 0 give_pendant# Will you marry me?"
}
}
In this example, each NPC will get their response from the give_flowersA, give_flowersB, and give_pendant dialogue key in their character dialogue files. (See format below for more info on the syntax.) Note that these should be added for all datable characters to avoid errors. For example, you could add this for Haley:
{
"Action": "EditData",
"Target": "Characters/Dialogue/Haley",
"Entries": {
"give_flowersA": "Oh.. these are beautiful.$1#$b#...What? You want to be my Boyfriend?$8^...What? You want to be my Girlfriend?$8#$b#....I thought we already were together.$1",
"give_flowersB": "Ohhh, @! I would love to be your true love.$1",
"give_pendant": ".....$8#$b#@, I don't know what to say..$8#$b#...$7#$b#Yes... I accept...$4#$b#I can't wait to tell the Mayor... Everything should take 3 days to set up.$1"
}
}
This can be used for other generic responses, and you even can avoid the "Give Bouquet" by asking for an answered question's ID.
Algorithm
The game finds dialogue as follows:
- Event dialogue is read from the appropriate event commands (see Modding:Event data).
- Location-specific dialogue is read from StringsFromCSFiles
<location>
.cs. - Else character dialogue is read from the character-specific files.
- If no dialogues were found, the game resorts to hardcoded dialogue from the StringsFromCSFiles files (specifically keys prefixed with NPC.cs NPC.cs).
Формат
Dialogue text can contain tokens and commands which control the dialogue box, change the text (e.g. switch between gender-specific strings), inject values, etc. These are parsed by the Dialogue class.
Special tokens:
character | description |
---|---|
# | Separates two commands in a dialogue string. |
{ | TODO. Stands for "breakSpecialCharacter". |
^ | Gender switch character. The text before it is shown for male farmers, the text after it for female farmers. Example: Oh, good morning Mr. @!^Oh, good morning Ms. @!
|
% | Turns the dialogue box into a generic text box. Example: "%Abigail is lost in her music."
|
* | TODO. Stands for "quickResponseDelineator". |
Портретные команды
Они задают портрет, отображаемый в диалоговом окне, для текущей строки диалога. If there's no portrait command, the neutral portrait is used.
Portraits are numbered left-to-right and top-to-bottom, starting at $0. The first six portraits are standard, and can be identified by the number (like $2) or a unique alias (like $s). All potential spouses and many other characters have these six portraits, but it's not fully consistent; for example, Caroline only has four.
numbered | alias | description |
---|---|---|
$0 | $k | Use their neutral portrait. |
$1 | $h | Use their happy portrait. |
$2 | $s | Use their sad portrait. |
$3 | $u | Use their unique portrait. This is different for each NPC: grumpy (Abigail), holding football (Alex), angry (Caroline), sick (Governor), etc. |
$4 | $l | Use their love portrait. |
$5 | $a | Use their angry portrait. |
$<id>
|
A custom portrait beyond the standard six. |
Portrait commands should be at the end of a dialogue line:
"fall_Fri6": "When I was a little girl, my father abandoned us.$s#$b#I'm sorry to make things uncomfortable for you...$u#$e#Anyway... How's the farming life going?",
Dialogue commands
command | description |
---|---|
$q <response IDs> <fallback> #<text>
|
Show a dialogue box containing the given question text. If <response IDs> (a list delimited by / ) contains an answer already given, the question is skipped (along with the rest of this dialogue line), and instead the dialogue entry identified by <fallback> will be appended to whatever precedes this $q command. The <fallback> dialogue typically uses a $p command to adjust the text based on the player's answer to this question. NOTE: dialogue questions must use unique IDs, similar to events. See the event data page for more information.
|
$r <response ID> <friendship> <reaction> #<answer text>
|
Define a response option to a $q question dialogue. <answer text> is the text shown. <response ID> is used to group responses for future reference (multiple answers can share an answer ID). <friendship> defines the change in friendship value, positive or negative, if this response is selected. <reaction> names the dialogue entry from the NPC's Content\Characters\Dialogue\*.xnb file that will be the NPC's reaction if this response is selected by the player.
|
$p <response ID> #<match text> |<no-match text>
|
Stands for "dialoguePrerequisite". Shows different text depending on whether the player gave a particular answer to a previously-asked question. If <response ID> matches an answer the player gave, <match text> is shown; otherwise, <no-match text> is shown. These texts, separated by | , can each contain multiple commands separated by # . This does not need to be the first command in the dialogue string.
|
$b | Indicates pauses in dialogue, where the player will need to click for the next part to load in a new dialogue box. |
$e | Ends the current dialogue, closing the dialogue box and resuming player control. The dialogue following $e will require a new interaction with the NPC. |
$k | TODO. Stands for "dialogueKill". |
$c <probability> #<text1> #<text2>
|
Show <text1> with a <probability> between 0 and 1; otherwise, show <text2> . E.g. $c 0.9 for a 90% chance of <text1> and a 10% chance of <text2> . NOTE: Replacer commands (see below) do not work in <text1> . This does not need to be the first command in a dialogue string. It is unaffected by daily luck.
|
$d <state id> #<text1> |<text2>
|
Show one of two dialogue strings based on a predefined condition: bus (whether the bus is repaired), joja (whether the Joja Mart is still in business), cc or communitycenter (whether the Community Center is accessible), or kent (whether Kent has returned to the valley). The dialogue string must start with $d, everything up to the first | symbol is shown if the condition matches, and everything after that is shown if the condition doesn't match.
For example: "Mon2": "$d kent#Yesterday I visited Yoba's Altar to give thanks for my husband's safe return.|Yesterday I visited Yoba's Altar to ask for my husband's safe return.#$e#I'm trying to stay positive, but it's hard sometimes.$s"
|
$y | TODO. Stands for "dialogueQuickResponse"; A simpler form of question. Works like $q, but within one and the same text line. It doesn't have neither "dialoguePrerequisite" ($p) nor friendship point changes. It can be triggered indenitelly. Example: Penny: "$y 'Breakfast?_Yes please._Here you go._No, I'm good_More for me then!'" |
$1 <letter ID> #<1st-time text> #$e# <nth-time text>
|
Creates a line of dialogue which the character will only see once (at most). <1st-time text> is shown only if <letter ID> has not been marked as sent yet (and this marks it as sent); otherwise, <nth-time text> is shown. <letter ID> should not correspond to an actual piece of mail (because it will not be sent), but it can be referenced by events or other dialogue lines.
|
%fork | Sets the the specialEventVariable1 variable, which can be checked by a later fork event command. Mainly useful in reaction dialogue for $q questions during events. |
[# # #] | Gives the player a random item, from the pool of item IDs within the brackets. |
%revealtasteCharacterItemID | Reveals whether the named character loves, likes, dislikes, etc, the item specified. Example: %revealtasteLewis258 will cause Lewis's profile to show that he likes blueberries. |
Question example
To understand how $q, $r, and $p work, an example may be helpful. Note how you can format the script to be easier to read:
summer_Fri:
"I think I'll go to the beach tomorrow!
#$q 305/306 beachquestion_followup#Would you like to go with me?
#$r 305 15 beachquestion_yes#Sure, I would love to!
#$r 306 0 beachquestion_sorry#Oh, sorry, I've already made plans with someone else...
#$r 306 -10 beachquestion_no#No thank you.
",
beachquestion_yes: "Good! It's a date.$h",
beachquestion_sorry: "Oh. Darn. Okay.$6",
beachquestion_no: "Oh. Um. Sorry.$s",
beachquestion_followup:
"$p 305
#Tomorrow should be a lot of fun!$h
|Hmm, I wonder if I can get someone to go with me...$s
",
summer_Sat:
"The beach is lovely this time of year...
#$p 305
#Thanks for coming with me today.$h
|Oh, hi @, how's it going?
",
The dialogue above triggers on any Friday in the summer. The NPC begins with a response that is always shown: "I think I'll go to the beach tomorrow!"
Next they ask you a question.
#$q 305/306 beachquestion_followup#Would you like to go with me?
$q starts the question. 305/306 checks to see if this question has been asked before, and if it has it sends you to the dialogue key beachquestion_followup. (Note that you can name your dialogue keys whatever you like which makes it easier to read.)
Next are the responses the player can give. You can add any number of $r lines; here we have three:
#$r 305 15 beachquestion_yes#Sure, I would love to!
#$r 306 0 beachquestion_sorry#Oh, sorry, I've already made plans with someone else...
#$r 306 -10 beachquestion_no#No thank you.
If you say yes (first option), the game will store ID 305 as the answer given to this question. Next, your friendship with that person increases by 15. beachquestion_yes tells the script which dialogue key continuation to use as a response to your answer.
If you say no (second and third option) the game will store ID 306 as the answer given, then depending on which answer you gave will either not change your friendship with the person, 0, or reduce it, -10. Then it will use either beachquestion_sorry or beachquestion_no to continue the dialogue.
Now we need to make dialogue keys for each response:
beachquestion_yes: "Good! It's a date.$h",
beachquestion_sorry: "Oh. Darn. Okay.$6",
beachquestion_no: "Oh. Um. Sorry.$s",
beachquestion_followup:
"$p 305
#Tomorrow should be a lot of fun!$h
|Hmm, I wonder if I can get someone to go with me...$s
",
Of note here is beachquestion_followup. If the player talks to the NPC again, $q 305/306 will check that the question has already been answered and instead go directly to this key.
$p 305 begins a variable response which means "if the player chose yes, say this line, else say this line instead". If the player answered yes, the NPC responds happily. Otherwise, they will comment that they need to find someone to go with them.
There is another variable response the next day:
summer_Sat:
"The beach is lovely this time of year...
#$p 305
#Thanks for coming with me today.$h
|Oh, hi @, how's it going?
",
Once again the first line (The beach is lovely...) always shows up when the player talks to the NPC, but the next line depends on whether or not they've answered yes the previous day.
Here is another example from Haley's existing dialogue file. Note how the script formatting is harder to read, but the game is able to process both.
summer_Sat: "Farming sounds so boring...#$q 42/43 summer_Sat_old#What do you even do all day?#$r 42 10 summer_Sat_12#Care for plants#$r 42 10 summer_Sat_12#Explore the caves#$r 43 -10 summer_Sat_13#Snoop around in your room#$r 42 10 summer_Sat_12#Dig for treasure" #!String
summer_Sat_old: "#$p 43#Hey, you better not be snooping around in my room anymore!$a|But I guess it could get you in pretty good shape." #!String
summer_Sat_12: "Hmm... sounds like a lot of work." #!String
summer_Sat_13: "What? You'd better not be doing that!$a" #!String
The first time the summer_Sat
dialogue is chosen, neither response 42 nor 43 will have been given (because this question is the only one which has them as responses), so Haley will say, "Farming sounds so boring... What do you even do all day?" The player can select among these responses:
- Care for plants
- Explore the caves
- Snoop around in your room
- Dig for treasure
The third response, $r 43 -10 summer_Sat_13#Snoop around in your room
, sets response ID 43, reduces Haley's friendship by 10 points, and brings up the dialogue summer_Sat_13
(Haley says, "What? You'd better not be doing that!"). All of the other responses set response ID 42, increase Haley's friendship by 10 points, and bring up the dialogue summer_Sat_12
("Hmm... sounds like a lot of work.").
The next time summer_Sat
is chosen, one of the response IDs listed in the $q
command will have been given (either 42 or 43). Therefore, the $q
and everything after is scrapped, and dialogue summer_Sat_old
is put in its place. This new dialogue uses the $p
command to change Haley's dialogue based on whether or not you gave response ID 43 to any previous question. If you answered "Snoop around your room," everything before the |
will be used, so Haley will now say, "Farming sounds so boring... Hey, you better not be snooping around in my room anymore!" If response ID 43 has not been given (in this case, you must have given response ID 42, i.e. one of the other three responses to the previous question), everything after the |
will be used, so Haley will instead say, "Farming sounds so boring... But I guess it could get you in pretty good shape."
Replacer commands
Replacer commands will be replaced with the relevant string. Note that only @ works in mail entries.
@ | Farmer's name. Example: Hi there @!
|
%adj | Random adjective. (Defined in StringsFromCSFiles.xnb) |
%noun | Random noun. (Defined in StringsFromCSFiles.xnb) |
%place | Random place name. (Defined in StringsFromCSFiles.xnb) |
%spouse | The name of Farmer's spouse. |
%name | A randomly-generated name. |
%firstnameletter | The first half of the farmer's name (rounded down), like Nat if the farmer's name is Natalie. |
%time | Current time. |
%band | The name of Sam and Sebastian's band. |
%book | The title of Elliott's book. |
%rival | A random first name of the Farmer's gender from StringsFromCSFiles.xnb (keys Utility.cs.5499 through Utility.cs.5560). Will not match the Farmer's name. |
%pet | The name of Farmer's pet. |
%farm | Farm name. |
%favorite | The Farmer's favorite thing. |
%kid1 | The name of Farmer's first child. |
%kid2 | The name of Farmer's second child. |
Значения
Игра использует эти предопределенные значения в некоторых диалогах.
Дни недели
- Mon (Понедельник)
- Tue (Вторник)
- Wed (Среда)
- Thu (Четверг)
- Fri (Пятница)
- Sat (Суббота)
- Sun (Воскресенье)
Сезоны
- spring (Весна)
- summer (Лето)
- fall (Осень)
- winter (Зима)
Первый/последующий год
В некоторых случаях игра использует значение "первый/последующий год" для условий диалога. Возможны два следующих значения:
Значение | Описание |
---|---|
1 | Происходит в первый год. |
2 | Происходит в любой год после первого (не только 2-й год). |
ID ответов
ID ответа идентифицирует ответ, выбранный игроком в ответ на question dialogue. In some cases a question may have several answers with the same ID (e.g. several variations of "yes"), or use the same ID for every question (in which case the ID just shows whether the player has answered the question).
Mods can add their own response IDs, but here are the vanilla IDs as of 1.3.36¹:
- Dialogue
NPC question answers Abigail fall_Sun
I was thinking about dyeing my hair again... what do you think?27: Dye it black.
27: Why not blonde?
27: How about bubblegum pink?
28: I like your hair just the way it is!Abigail summer_Sun
Okay... pretend you just won a free vacation. Where would you go?25: The beach
26: In a dark cave
26: The old, gnarled forest
25: Joja Mega-MallAbigail Sun2
@, What do you think happens to us after we die?17: I have no idea.
18: We come back as spooky ghosts.
17: We go to Heaven.
18: Our energy bodies enter the astral plane.
17: Nothing. We just cease to exist.Abigail winter_Sun
I made these two drawings. What do you think?29: I like the jungle island and the tiger.
30: I like the orc with the battleaxe.
29: I don't like either of them.Alex fall_Wed
Do you think the ladies like my haircut?^What do you think about my haircut?54: It looks very fashionable.
55: It looks like some kind of fungal growth.Alex summer_Wed
Do you think I'll ever turn pro?52: You're destined to be a sports legend
52: Maybe, if you practice a lot
53: No, you'll most likely fail and become a salesmanAlex Wed
I'd ask you to throw the ball around, but you don't really seem like the sports type.^If you weren't a girl I'd ask you to play catch.6: I'm fine just watching you from a distance.
5: I want to play catch with you!
5: (angry) What's that supposed to mean?Clint Mon
I bet you can't guess what my great-grandfather was...9: A blacksmith.
9: A silly clown.
9: A sarcastic jerk.Haley fall_Sat
*sigh*...what do you think I should do today?44: Watercolor painting
44: Relax and read a magazine
44: Stop being a selfish crybabyHaley summer_Sat
What do you even do all day?42: Care for plants
42: Explore the caves
43: Snoop around in your room
42: Dig for treasureLeah Mon
So why did you become a farmer?21: I want to make tons of money.
22: It's more "real" than living in the city.
211132: To follow in grandpa's footsteps.
22: I wanted to escape my old life.Maru summer_Thu
I've decided I'm going to build a robot someday.35: That should be very easy for you
36: You should be more realistic
35: It sounds challengingMaru Sun
Do you have fun working on the farm?3: Yes.
4: No.Penny Mon4
But it's best not to dwell on bad things, right?7: Right. It's best to be positive!
8: I think it's good to be realistic.Sam Wed
Hey.. What do you think my new song should be about?20: Farming, mining, and chopping wood.
8820: A city in the sea.
8821: Trains.
19: Choose anything. It'll still be a horrible song.Sebastian fall_Fri
Do you read, @?62: Yep. The classics.
63: Only Sci-fi and Fantasy
62: I like a good Romance
63: No, I don't read booksSebastian Fri2
So what do you do when you aren't working?15: More Farming
16: Comic books
15: Shopping
15: Sports
- Events
event question answers Abigail's 4-heart event @! Why are you out here in the rain?$7 32: Just doing some work
32: Enjoying the weather
32: I could ask you the same questionAbigail's 6-heart event You've used a sword before, haven't you? 847951: Yes, and it's exciting!
847951: Yes, but only in self-defense
847951: Yes, but it's dangerous. You should stay safe.
847951: NoAbigail's 10-heart event *sniff*$s 776589: What happened?
776589: Are you okay?Abigail's 10-heart event I guess I'm not as tough as I thought...$8 34: You're safe with me.
34: I get scared too.
34: You're crying like a little baby. Stop.Alex's 5-heart event I'm worthless...$s 57: That's crazy. You're a genius!
57: We all have our strengths and weaknesses
57: Worthless? Yeah, that about sums it up.Clint's 3-heart event Got any tips?^What advice can you give me? 211: Impress women with your strength and charm
211: Act crazy, to keep people guessing
211: Just act natural... be yourself
211: Treat women the same as menDemetrius's 6-heart event How would you classify a tomato? 59: Vegetable
59: FruitElliott's 2-heart event A question... What kind of books do you like, @? 958699: Mystery
958700: Romance
958701: Sci-FiElliott's 4-heart event Wait. I propose a toast! To... 28376: To Pelican Town!
28376: To our friendship!
28376: To my good health!
28376: To your doom!Emily's 6-heart event So... *gasp*... what did you think?$h 213: That was amazing!
213: That was embarrassing...
213: (Say nothing and do a slow clap)Evelyn's 4-heart event Well, what do you think? 51: It's delicious!
51: It was like chewing on a hockey puckGus's 4-heart event @, what's going on here? 207: You need to pay your tab right now!
208: The saloon isn't doing well, financiallyHaley's 2-heart event It's only because I cleaned them last week!$a 46: Stop whining and just clean it!
45: Haley, why not have this be your one weekly job?
46: Emily, take the high road and do it this time.Haley's 4-heart event Say... you're pretty strong, aren't you? 47: Yes
47: NoHaley's 6-heart event I'll never find another one like it...$s 48: Relax, I'll just buy you a new one!
48: I'm really sorry...Harvey's 2-heart event @, what do you think George should do? 84: George should follow Dr. Harvey's advice.
85: George knows what's best for his own body.Harvey's 4-heart event Hmm... Your pulse is high.$u 86: I'm a little nervous...
86: I'm out of breath from working on the farm.
86: Are you really a doctor? My pulse is fine!Kent's 3-heart event (Say something to Kent)$s 215: Jodi's to blame... she should've known better!
215: I know you're hurting... but don't blame your wife.
215: (Lie) Blame me... I asked for popcornLeah's 4-heart event Was that selfish of me, @?$s 83: No, it had to be done.
83: No, and your ex sounds like an idiot.
83: No, but you would've been better off staying in the city.
83: Yeah, a little.
83: Yeah, but it's natural to care about yourself first.Lewis's 6-heart event @...You overheard everything, didn't you?$s 200: Yes... but I'll keep it a secret.
201: Yes... and I'm going to tell everyone.Maru's 2-heart event Right, @? 15933: (Say nothing)
15933: Actually, your Dad was being weird.Maru's 4-heart event @, what should I do? 38: Just scoop it off the floor. He won't know the difference.
39: Tell Harvey it was my fault.
38: Tell Harvey it was an accident.Maru's 6-heart event What do you see? 40: A beautiful planet.
40: A cold, dark abyss.Maru's 8-heart event I'm so sorry.$8 41: It's okay, it doesn't even hurt.
41: You'd better be. This hurts like crazy!Maru's 10-heart event Well, what do you think, @? 18981: I'm so impressed with your inventions.
18981: I'm disappointed... You should've made that robot your slave.
18981: So is your Dad okay with 'us' now?
18981: (Just stare at Maru and say nothing)Maru's 10-heart event You must have a good reason for saying that...$a 18982: MarILDA's just a piece of machinery designed to act human.
18982: I was just kidding. MarILDA deserves her freedom.
18982: I would've put her to work on the farm.Penny's 2-heart event @? You were watching us? 71: I was. You did a kind thing there, Penny.
71: You should've left him alone. Now he's grumpy.
71: I'm just taking a walk, minding my own business.Penny's 6-heart event ...well? 72: (Lie) Mmm! That was delicious!
73: Uh... can I get the rest to go?
73: Well it's definitely unique... how did you get it so rubbery?Pierre's 6-heart event Promise me you won't tell anyone about this. 50: Your secret is safe with me.
50: Your wife deserves to know about this.Robin's 6-heart event Have you ever made anything out of wood, @? 66: Yes
66: NoSam's 2-heart event Say, @... what kind of music do you like? 76: Cheerful pop music.
77: Experimental noise rock.
78: Hi-Energy dance music.
79: Honky-tonky country music.Sam's 4-heart event ...Tell her, @.$s 80: Sam dropped the snack as he was handing it to me.
80: Sam handed me the snack and then I dropped it.
81: Sam dropped it on purpose. He thought it would be funny.
¹ Extracted using this LINQPad script.
Темы для разговоров
A conversation topic is a temporary flag which can be checked in event preconditions and can trigger one-time NPC dialogue (if they have a matching dialogue key). They're stored in Game1.player.activeDialogueEvents while active.
A conversation topic can be started using the addConversationTopic event command, %item conversationTopic mail command, or in code by adding it to Game1.player.activeDialogueEvents.
The game defines these events:
id | duration | trigger |
---|---|---|
Bundles | ||
cc_Begin | 4 days | Set in the Wizard's cutscene after reading the first Junimo note in the community center. |
cc_Complete | 4 days | Community Center completed. (Does not apply to JojaMart path.) |
cc_Boulder | 7 days | Mountain boulder is removed through community center bundle or Joja improvement form. |
cc_Bridge | 7 days | Quarry bridge is repaired through community center bundle or Joja improvement form. |
cc_Bus | 7 days | Bus is repaired through community center bundle or Joja improvement form. |
cc_Greenhouse | 3 days | Greenhouse is constructed through community center bundle. (Does not apply to JojaMart path.) |
cc_Minecart | 7 days | Minecarts are unlocked through community center bundle or Joja improvement form. |
joja_Begin | 7 days | First time that player opens the Joja Community Development Form. |
movieTheater | 3 days | movie theatre is constructed. |
Spouse events | ||
elliottGone | 6 days | Set when Elliott's fourteen-heart event starts. |
ElliottGone1 ElliottGone2 ElliottGone3 ElliottGone4 ElliottGone5 ElliottGone6 ElliottGone7 |
same day | Part of Elliott's fourteen-heart event. The first flag is set when it starts; the subsequent flags are set by subsequent letters from Elliott. |
emilyFiber | 2 days | Part of Emily's fourteen-heart event. Set after completing the quest. |
haleyCakewalk1 haleyCakewalk2 |
same day | Part of Haley's fourteen-heart event. |
leahPaint | same day | Set when Leah's fourteen-heart event starts. |
pennyRedecorating | 2 days | Part of Penny's fourteen-heart event. |
samJob1 samJob2 |
2 days | Part of Sam's fourteen-heart event. |
samJob3 | 3 days | Part of Sam's fourteen-heart event. |
sebastianFrog | same day | Set when Sebastian's fourteen-heart event starts. |
sebastianFrog2 | 6 days | Part of Sebastian's fourteen-heart event. |
shaneSaloon1 shaneSaloon2 |
same day | Part of Shane's fourteen-heart event. |
Other events | ||
dumped_Guys dumped_Girls |
7 days | Set after the corresponding ten-heart group event (e.g. see Abigail#Group Ten-Heart Event). |
secondChance_Girls secondChance_Guys |
14 days | Set after the corresponding ten-heart group event (e.g. see Abigail#Group Ten-Heart Event). |
pamHouseUpgrade | 4 days | Set after seeing the Pam house upgrade event, if the player chose to be revealed as the donor. |
pamHouseUpgradeAnonymous | 4 days | Set after seeing the Pam house upgrade event, if the player chose to be anonymous. |
willyCrabs | 4 days | Set after Willy's six-heart event. |
Other | ||
Introduction | 6 days | Farmer is created (e.g. starting a new save, or joining a multiplayer game for the first time). |
FullCrabPond | 14 days | First time any fish pond contains 10 crabs. |