模组:对话
← 目录
这个页面解释了游戏如何存储对话文本,它的格式,以及游戏如何解析它。它将会是一个提供给模组制造者的高级指南。
数据
这些对话文本存储在四组文件中。
角色-特殊对话
Characters\Dialogue\*.xnb 包含了大部分角色对话里 (一个文件夹对应一个角色). 游戏将从下面的一部分内容中选择对话,依照这里排列好的指令顺序来读取对话。
*指越往下的对话格式,读取优先度会比上面的对话还要低。*
特殊对话
以下是一些针对特定情况的预设键(Key):
- 请注意是使用英文,中文只是方便大家理解*
密钥格式(key format) | 描述(description) |
---|---|
邀请跳舞拒绝 danceRejection |
用来显示邀请NPC跳舞花舞节时被拒绝的对话。(如果是在多人联机,已被其他玩家邀请且同意的NPC会使用其他对话来拒绝玩家。*不过大部分自制NPC是没有做出这个对话*) |
离婚 divorced |
和NPC离婚之后会触发的对话。 |
<地点> _入口<location> _Entry
|
玩家在指定的地方<location> 从入口进来有50%的几率让你的NPC说特定的话,这个对话可以使用多个对话,只需使用 / 隔开对话与对话;游戏会随机读取其中对话。例子: SeedShop_Entry: "嗨,皮埃尔!/现在,我需要的是.../啊!看起来真不错!/今晚准备做我的特制酱料!/皮埃尔!今天的新品是什么?/皮埃尔!今天要一起出门玩吗?" |
等会再来吧 ComeBackLater 打呼噜 Snoring |
*一般NPC不需要,所以可以跳过这段* 当你还未达成布告栏上的击杀怪物的任务,吉尔就会触发这些对话。 ComeBackLater 只会显示一次,后续的对话就会触发Snoring。 |
地点对话
依照顺序,除了上面的对话以外,接下来将会依照顺序读取以下对话。
*指上面四个danceRejection、divorced、<location>
_Entry、ComeBackLater和Snoring的优先度大于以下的对话*
变化/变体:
- 每一个特定键(Key)可以选择性的使用 季节来作出季节变化, 比如 springMountain_47_23,即春天在山上地图的某个坐标会触发此对话。
游戏会依照以下顺序来读取变体: <season>
<key>
, and <key>
. 为了方便大家理解,下面没有列出这些变体。
密钥格式(key format) | 描述(description) |
---|---|
<地点> _<x轴坐标> _<y轴坐标> <location> _<x> _<y>
|
当NPC站在<x> , <y> 的某个你所填充的地点,就会触发这个对话.例子: Mountain_47_23: "这里很安静,又有风可以吹,为什么我不能来这里?" |
<地点> _<星期几> <location> _<dayName>
|
当NPC在指定地点的指定一天星期几. 例子: Saloon_Fri: "星期五的酒吧总会很热闹,我不讨厌这样的气氛。" |
<地点> <好感> <location> <hearts>
|
当你和NPC的好感有指定<hearts> 以上,将会触发这个对话。指定好感<hearts> 将会读取10,8,6,4,2这几个数值(不填任何数字则为0),优先度为10>8>6>4>2>0(除此之外的数值无法被读取,比如说1)例子: Saloon8: "欢迎光临,@。我很高兴今天也能看到你过来这里!酒吧的大门永远为你而开。*当然,酒吧永远都是中午12点开门。*" |
<地点> <location>
|
当NPC身处在指定地点,就会触发此对话。 例子: Saloon: "呼哇~终于可以在酒吧尽情放松了~" |
雨天对话
Characters\Dialogue\rainy.xnb文件里每一个NPC都有对应的一个对话。如果你的情况是:还未结婚或者离婚、当天是雨天、并且上述的对话条件没有达成,你将会有50%几率读取这个雨天对话。*由于是50%,所以你可能会触发平时的对话然后说出“今天天气真好”这种诡异的对话……*
雨天对话需要使用content的EditData来添加在游戏里,以下为麻薯君的例子:
{
"Action": "EditData",
"Target": "Characters/Dialogue/rainy",
"Entries": {
"Mochi":"下雨啦!$1#$e#农作物不用浇水真是太棒了!$1#$b#不过我已经有了洒水器,所以无论是晴天雨天都没关系。#$e#所以你的洒水器都有了吗?$1"
}
},
{
"Action": "EditData",
"Target": "Characters/Dialogue/rainy",
"Entries": {
"Mochi":"下雨了你却没有避雨吗?#$b#你也是辛苦了。$8#$b#你过来我这里吧。#$b#着凉了可不好。$1"
},
"When": {
"Hearts:Mochi": "4, 5, 6, 7"
}
},
{
"Action": "EditData",
"Target": "Characters/Dialogue/rainy",
"Entries": {
"Mochi":"你看看你!#$b#不带伞还淋湿了全身上下。$6#$b#我帮你擦擦头发。$1#$b#%麻薯君拿出毛巾帮你擦干头发#$b#嗯,擦干了!$1#$e#喝点咖啡吧!$1[395]#$e#快喝吧!$1"
},
"When": {
"Hearts:Mochi": "8, 9, 10"
}
}
一般对话
除上面以外,游戏将选择使用以下其中一个关键格式的对话(按优先顺序来读取):
<季节>
_<密钥>
_inlaw_<伴侣名字>
<season>
_<key>
_inlaw_<spouseName>
<季节>
_<密钥>
<season>
_<key>
<密钥>
_inlaw_<伴侣名字>
<key>
_inlaw_<spouseName>
<密钥>
<key>
关于以上各个变体: <season>
是指季节 (比如说 spring_14); 如果玩家和对应NPC_inlaw_<伴侣名字>
结婚,这个对话将会不顾其他对话并先读取这个对话。(比如说 Sat_inlaw_Abigail,就是在星期六与伴侣“阿比盖尔”对话将触发此对话。); 以及 <key>
指的是以下密钥格式。
密钥格式(key format) | 描述(description) |
---|---|
<1到28日> <dayOfMonth>
|
第一年的设定好的某一日会触发此对话。 注意: 这个第一年限定的对话和其他的密钥格式是不一样的,这点常常把模组制造者搞乱了。 例子: 10: "你昨晚有看那个体育频道吗?#$b#等会,你有电视吗……?" |
<1到28日> _<1或2年> <dayOfMonth> _<firstOrLaterYear>
|
根据你所填的1或2年触发指定日期的对话。填的是“1”的话,第一年以后(即第二、三年)不会再触发;“2”则第一年以后触发。 例子: 2_1: "我的丈夫肯特在国外工作。这也是为什么你没看到他在这里。#$b#我坚信只要我家肯特的旅途结束了,就会安全回家的!!#$e#需要什么东西吗?" |
<星期几> <几心> _<1或2年> <dayOfWeek> <hearts> _<firstOrLaterYear>
|
在1或2年的某一年,根据你所填的星期几并且你与NPC至少有<hearts> 心好感将会触发此对话。指定好感<hearts> 将会读取10,8,6,4,2这几个数值(不填任何数字则为0),优先度为10>8>6>4>2>0(除此之外的数值无法被读取,比如说1)Bug: 仅当一个等效的 <dayOfWeek> <hearts> 密钥也存在时才显示。例子: Thu2_2: "好吧,我爸回来了。你们见过了吗?#$b#我很高兴他能安然无恙地回来。" |
<星期几> <几心> <dayOfWeek> <hearts>
|
根据你所填的星期几 并且你与NPC至少有<hearts> 心好感将会触发此对话。指定好感<hearts> 将会读取10,8,6,4,2这几个数值(不填任何数字则为0),优先度为10>8>6>4>2>0(除此之外的数值无法被读取,比如说1)例子: Sun4: "嘿,@.#$e#今天过得怎么样?" |
<星期几> _<1或2年> <dayOfWeek> _<firstOrLaterYear>
|
在1或2年的某一年,根据你所填的星期几将触发此对话。 Bug:只有当等效的 <dayOfWeek> 密钥存在时才显示。例子: Sat_1: "爸爸快要回来了!#$b#我希望爸爸能给我带些玩具回来。$u" |
<星期几> <dayOfWeek>
|
根据你所填的星期几将会触发此对话。 例子: Mon: "嗨嗨!你正在休息吗?" |
备用方案
如果以上对话都不存在,那么游戏会从Strings\StringsFromCSFiles.xnb自动读取密钥为NPC.cs.4061的对话. (我去查了,结果是: "嗨。"……好吧,作者偷懒我懂。)
为了让大家方便,我这里就直接提供我个人整理过的一般对话模板,当天节日对话是需要通过CP的content载入+TMXL的节日站位搭配使用,以下为麻薯君(感谢贴吧@你的麻糬君丫*我谢我自己*)提供的模板:
{
//SPECIAL DIALOGUE
"Introduction": "",//介绍
"danceRejection": "",//有人邀请或者好感没到的拒绝跳舞对话
"divorced": "",//分手之后的对话
"breakUp": "",//离婚之后的对话
"dumped_girls": "",//触发修罗场(女之后的对话
"secondChance_girls": "",修罗场7天后的原谅对话
"dumped_guys": "",//同上(男修罗场
"secondChance_guys": "",//同上(男修罗场
"stardrop_gift": "",//14心伴侣送星之果实对话
"give_flowersA": "",//送花的对话
"give_flowersB": "",//同上,为版本2
"give_pendant": "",//求婚
"rejectNPCA": "",//交往被拒绝
"rejectNPCB": "",//同上,为版本2
"reject_two_heartA": "",//同上,二心以上
"reject_two_heartB": "",//同上,二心以上,为版本2
"reject_four_heartA": "",//同上,四心以上
"reject_four_heartB": "",//同上,四心以上,为版本2
"engageA": "",//与别人订婚时求婚
"engageB": "",//同上,为版本2
"marriedA": "",//与别人结婚后求婚
"marriedB": "",//同上,为版本2
"refusal_knownA": "",不可攻略的角色被求婚的对话
"refusal_knownB": "",//同上,为版本2
"refusal_botherA": "",不可攻略的角色被求婚的对话(不要问我差别,我也不懂
"refusal_botherB": "",//同上,为版本2
"refusal_no_heartsA": "",不可攻略的角色被求婚的对话(为0心
"refusal_no_heartsB": "",//同上,为版本2
//节日对话
"spring_1": "",//新年
"spring_12":"",//蛋蛋节前一天
"Spring_23":"",//花舞节前一天
"summer_10":"",//宴会前一天
"summer_27":"",//月光水母前一天
"fall_15":"",//展览会前一天
"fall_26":"",//万灵节前一天
"winter_7":"",//冰雪节前一天
"winter_24":"",//冬日星节日前一天
//春季和一般对话
"Mon":"",
"Mon2":"",
"Mon4":"",
"Mon6":"",
"Mon8":"",
"Mon10":"",
"Tue":"",
"Tue2":"",
"Tue4":"",
"Tue6":"",
"Tue8":"",
"Tue10":"",
"Wed":"",
"Wed2":"",
"Wed4":"",
"Wed6":"",
"Wed8":"",
"Wed10":"",
"Thu":"",
"Thu2":"",
"Thu4":"",
"Thu8":"",
"Thu10":"",
"Fri":"",
"Fri2":"",
"Fri4":"",
"Fri6":"",
"Fri8":"",
"Fri10":"",
"Sat":"",
"Sat2":"",
"Sat4":"",
"Sat6":"",
"Sat8":"",
"Sat10":"",
"Sun":"",
"Sun2":"",
"Sun4":"",
"Sun6":"",
"Sun8":"",
"Sun10":"",
//夏季对话~
"summer_Mon":"",
"summer_Mon2":"",
"summer_Mon4":"",
"summer_Mon6":"",
"summer_Mon8":"",
"summer_Mon10":"",
"summer_Tue":"",
"summer_Tue2":"",
"summer_Tue4":"",
"summer_Tue6":"",
"summer_Tue8":"",
"summer_Tue10":"",
"summer_Wed":"",
"summer_Wed2":"",
"summer_Wed4":"",
"summer_Wed6":"",
"summer_Wed8":"",
"summer_Wed10":"",
"summer_Thu":"",
"summer_Thu2":"",
"summer_Thu4":"",
"summer_Thu6":"",
"summer_Thu8":"",
"summer_Thu10":"",
"summer_Fri":"",
"summer_Fri2":"",
"summer_Fri4":"",
"summer_Fri6":"",
"summer_Fri8":"",
"summer_Fri10":"",
"summer_Sat":"",
"summer_Sat2":"",
"summer_Sat4":"",
"summer_Sat6":"",
"summer_Sat8":"",
"summer_Sat10":"",
"summer_Sun":"",
"summer_Sun2":"",
"summer_Sun4":"",
"summer_Sun6":"",
"summer_Sun8":"",
"summer_Sun10":"",
//秋季对话~
"fall_Mon":"",
"fall_Mon2":"",
"fall_Mon4":"",
"fall_Mon6":"",
"fall_Mon8":"*",
"fall_Mon10":"",
"fall_Tue":"",
"fall_Tue2":"",
"fall_Tue4":"",
"fall_Tue6":"",
"fall_Tue8":"",
"fall_Tue10":"",
"fall_Wed":"",
"fall_Wed2":"",
"fall_Wed4":"",
"fall_Wed6":"",
"fall_Wed8":"",
"fall_Wed10":"",
"fall_Thu":"",
"fall_Thu2":"",
"fall_Thu4":"",
"fall_Thu6":"",
"fall_Thu8":"",
"fall_Thu10":"",
"fall_Fri":"",
"fall_Fri2":"",
"fall_Fri4":"",
"fall_Fri6":"",
"fall_Fri8":"",
"fall_Fri10":"",
"fall_Sat":"",
"fall_Sat2":"",
"fall_Sat4":"",
"fall_Sat6":"",
"fall_Sat8":"",
"fall_Sat10":"",
"fall_Sun":"",
"fall_Sun2":"",
"fall_Sun4":"",
"fall_Sun6":"",
"fall_Sun8":"",
"fall_Sun10":"",
//冬季对话
"winter_Mon":"",
"winter_Mon2":"",
"winter_Mon4":"",
"winter_Mon6":"",
"winter_Mon8":"",
"winter_Mon10":"",
"winter_Tue":"",
"winter_Tue2":"",
"winter_Tue4":"",
"winter_Tue6":"",
"winter_Tue8":"",
"winter_Tue10":"",
"winter_Wed":"",
"winter_Wed2":"",
"winter_Wed4":"",
"winter_Wed6":"",
"winter_Wed8":"",
"winter_Wed10":"",
"winter_Thu":"",
"winter_Thu2":"",
"winter_Thu4":"",
"winter_Thu6":"",
"winter_Thu8":"",
"winter_Thu10":"",
"winter_Fri":"",
"winter_Fri2":"",
"winter_Fri4":"",
"winter_Fri6":"",
"winter_Fri8":"",
"winter_Fri10":"",
"winter_Sat":"",
"winter_Sat2":"",
"winter_Sat4":"",
"winter_Sat6":"",
"winter_Sat8":"",
"winter_Sat10":"",
"wintar_Sun":"",
"winter_Sun2":"",
"winter_Sun4":"",
"winter_Sun6":"",
"winter_Sun8":"",
"winter_Sun10":"",
}
婚后对话
在游戏文件里Characters\Dialogue\MarriageDialogue.xnb是放置所有NPC的婚后对话,每个NPC可以选择属于自己的对话文件,比如阿比盖尔的Characters\Dialogue\MarriageDialogueAbigail.xnb。当游戏查找对话时,它会使用NPC文件中的Key/对话(如果有这个格式的对话存在的话),否则会使用预设婚后对话或者默认对话(不过默认对话基本上都是空的)。 每一个对话里拥有的密钥格式来自于以下其中一个格式:
密钥格式(key format) | 描述(description) |
---|---|
<季节> _<1到28日> <season> _<day>
|
根据你所填的季节<season> 日子<day> 将会触发此对话。例子: fall_1: "这个气氛……我不会感觉错的,角落的蘑菇、散落的枯叶、橘色的南瓜……是只有在秋天才看得到的景色。就在今天,秋季降临了,我说的没错吧?亲爱的?" |
露台_<伴侣> patio_ <spouse>
|
当你的伴侣在你出货箱右上的平台刷新时,就会触发此对话。*通常是在非雨天/非雪天会刷新。* |
<天气> _<白天或晚上> _<随机> <weather> _<dayOrNight> _<random>
|
婚后日常对话。<weather> 可以填充Rainy或者Indoor,前者是下雨天的情况,后者是除雨天以外的天气。(虽然不知道为什么指令是Indoor“室内”,但指令就是这样……) <dayOrNight> 可以填充Night或者Day,前者是游戏时间为下午6点以后会触发的对话,后者为下午6点以前触发。<random> 可以填写的内容是0,1,2,3,4,所以你会有五个对话且随机触发。例子: Rainy_Night_3: "每当夜幕降临,我很喜欢把家里的灯光调暗一点,然后好好地聆听那份寂静……$8" |
好玩/快乐/有趣离去_<伴侣名字> funLeave_ <spouse>
|
未完成的指令,当你的伴侣在家里准备出门去鹈鹕镇逛逛时会触发的对话。(但是原文只是给出了TODO*task yet to be done*未完成的指令。) |
工作离去_<伴侣> jobLeave_ <spouse>
|
未完成的指令,当你的伴侣在家里准备出门回到ta们的工作岗位时会触发的对话。(只限原版NPC即潘妮、玛鲁和哈维。不确定未来会不会更完善。) |
好玩/快乐/有趣回家_<伴侣名字> funReturn_ <spouse>
|
当你的伴侣在下午一点之后回到家里但还未抵达ta们的目标坐标,会触发这个对话, 只限星期一触发 (给任何NPC)或者星期五(如果不是玛鲁/哈维/潘妮)。 例子: funReturn_Abigail: "嘿!今天你过得好吗?我过得很好哦。散步果然使人精神振奋呢。$h" |
工作回家_<伴侣> jobReturn_ <spouse>
|
当你的伴侣在下午一点之后回到家里但还未抵达ta们的目标坐标,但只限于funReturn不被显示。 例子: jobReturn_Penny: "#$c .5#晚上好。我今天很好,感谢!那你过得怎么样?$h#$e#贾斯和文森特今天表现不太好。我还是很担心…" |
<季节> _<伴侣> <season> _<spouse>
|
当你和伴侣有达到9心以上的好感,将会有5%概率触发此对话。 例子: fall_Abigail: "我是不是闻到了你身上的南瓜味?或者事实是我在发白日梦……$h" |
户外_<伴侣> Outdoor_ <spouse>
|
有20%的概率触发伴侣在家外面站着时会触发此对话。 例子: Outdoor_Abigail: "我就呆在这里,好吗?#$e#这里有好多稀奇古怪的昆虫和东西在!*咯咯笑*$h" |
户外_<随机> Outdoor_ <random>
|
有80%的概率触发伴侣在家外面站着时会触发此对话。<随机> 可以填写的内容是0,1,2,3,4,所以你会有五个对话且随机触发。例子: Outdoor_3: "我们的地产包含了洞穴可真是太赞了!那是我梦寐以求的事情!$h" |
伴侣房_<伴侣> spouseRoom_ <spouse>
|
当伴侣位于ta们的伴侣房时会触发的对话。 例子: spouseRoom_Abigail: "$c .5#我比你起得早,我就去喂了小大卫。它整个早晨都很兴奋呢。#$e#我希望你不介意豚鼠的味道。" |
一个孩子_<随机> OneKid_ <random>
|
如果你有一个孩子,并且你的伴侣位于厨房,将会触发此对话。<随机> 可以填写的内容是0,1,2,3,4,所以你会有五个对话且随机触发。OneKid_1: "我在想,%kid1会不会长大以后变成和你一样的农夫?" |
两个孩子_<随机> TwoKids_ <random>
|
如果你有两个孩子,并且你的伴侣位于厨房,将会触发此对话。<随机> 可以填写的内容是0,1,2,3,4,所以你会有五个对话且随机触发。TwoKids_2: "我梦到了关于%kid2长大之后变成了著名的怪物猎人。我甚至开始想着小小装备套装了。" |
<感情> _<随机> <affection> _<random>
|
当伴侣在家里并且是早上11点到下午6点时或者当天的对话并没有达成以上情况时,会触发此对话。<感情> 随机的内容为当伴侣好感为9心以下,50%概率触发感情不和Bad 或者 感情平淡Neutral的对话; 10心以上50%概率触发感情美满Good的对话或者11心以上75%概率触发感情美满Good的对话;除此之外的概率将会触发感情平淡Neutral的对话。<随机> 可以填写的内容是0,1,2,3,4,5,6,7,8,9,所以你会有10个对话且随机触发。例子: Good_5: "我只是在好好欣赏一下我的美人鱼吊坠……直到死亡,我会很自豪地让它陪伴我身边。$l" |
为了让大家方便,我这里就直接提供我亲友整理过的婚后对话模板,以下为萌新(感谢贴吧@萌新不萌新-)提供的模板:
{
"Rainy_Day_0": "",//下雨天白天
"Rainy_Day_1": "",
"Rainy_Day_2": "",
"Rainy_Day_3": "",
"Rainy_Day_4": "",
"Rainy_Night_0": "",//下雨天晚上
"Rainy_Night_1": "",
"Rainy_Night_2": "",
"Rainy_Night_3": "",
"Rainy_Night_4": "",
"Indoor_Day_0": "",//室内白天
"Indoor_Day_1": "",
"Indoor_Day_2": "",
"Indoor_Day_3": "",
"Indoor_Day_4": "",
"Indoor_Night_0": "",//室内晚上
"Indoor_Night_1": "",
"Indoor_Night_2": "",
"Indoor_Night_3": "",
"Indoor_Night_4": "",
"Outdoor_0": "",//门口
"Outdoor_1": "",
"Outdoor_2": "",
"Outdoor_3": "",
"Outdoor_4": "",
"OneKid_0": "%kid1",//第一个孩子
"OneKid_1": "",
"OneKid_2": "",
"OneKid_3": "",
"OneKid_4": "",
"TwoKids_0": "%kid2",//第二个孩子
"TwoKids_1": "",
"TwoKids_2": "",
"TwoKids_3": "",
"TwoKids_4": "",
"Good_0": "",//高心几率对话
"Good_1": "",
"Good_2": "",
"Good_3": "",
"Good_4": "",
"Neutral_0": "",
"Neutral_1": "",
"Neutral_2": "",
"Neutral_3": "",
"Neutral_4": "",
"Bad_0": ".",//低心几率触发
"Bad_1": "",
"Bad_2": "",
"Bad_3": "",
"Bad_4": "",
"spring_1": "",//每年春1对话
"spring_12": "",//复活节前一天对话
"spring_23": "",//花舞节前一天对话
"summer_1": "",//每年夏1对话
"summer_10": "",//夏威夷宴会前一天对话
"summer_28": "",//水母节当天对话
"fall_1": "",//每年秋1对话
"fall_15": "",//展览会前一天对话
"fall_26": "",//万灵节当天对话
"winter_1": "",//每年冬1对话
"winter_7": "",//冰雪节前一天对话
"winter_23": "",//冬日星前一天对话
"winter_28": "",//当年最后一天对话
"patio_Michael": "",//在外面天井的对话(Michael记得改为你自己的崽的名字)
"spouseRoom_Michael": "",//在配偶房的对话(Michael记得改为你自己的崽的名字)
}
事件文件
Data\Events\*.xnb包含了事件脚本,事件里也有全部的对话。(看看 使用模组:事件数据).
动画描述
Data\animationDescriptions.xnb包含了简短的动画描述,以配合行程上所显示的动作。(这里我来说明一下,行程有两种方式可以显示对话/描述,一种是行程对话scheduledialogue,另外的就是动画描述animationDescriptions,如果你想要NPC在行程里有显示动画和对话,需要额外给animation加上描述才能同时拥有动画和对话,行程对话在动画时是无法显示的,这点请各位注意一下。)
Strings from CS 文件
Strings\StringsFromCSFiles.xnb包含了各种各样的预设对话。这个文件里有着预设好的对话、大部分NPC共同使用的对话(比如NPC会说ta们的XXX喜欢/讨厌什么东西)、硬核事件(比如婚礼的致辞)等等。
这个文件的条目格式为"<key>": "对话字符串" "<key>": "dialogue string",它可以是任意的特殊标识符。这些键必须完全匹配游戏里所需要的键,但这些键只是游戏专属的特殊标识符— 即使这些键看起来就像<file name>
.<line number>
,这最初只是用于分配IDs的,并且这些IDs没有任何意义或者作用。(甚至它也不需要匹配当前的文件名或行号)。*说句一般人看得懂的话,其实就是StringsFromCSFiles这个文件里的对话全部都是无法被我们添加进入游戏代码里,最多只能通过某些小手段把dialogue string改成你想要的句子*
NPC-specific通用对话
- 如果你使用的是上面对话模板的"give_flowersA"和"give_flowersB",你还需要额外去下载Canon-Friendly Dialogue Expansion for All Friend-able Characters来运行这个对话,唯一缺点就是如果有其他NPC模组是没有这些对话,会陷入死循环。*
用点小聪明,你可以让每个NPC做出不同的反应,而不是使用常规的预设对话。打个比方,你可以使用CP模组Content Patcher来改变NPC.cs.3962 和NPC.cs.3963 (送花交往对话反应),与NPC.cs.3980 (送吊坠求婚对话反应):
{
"Action": "EditData",
"Target": "Strings/StringsFromCSFiles",
"Entries": {
"NPC.cs.3962": "$q 10001 give_flowersA#?!...#$r 10001 0 give_flowersA# [送出花束]",
"NPC.cs.3963": "$q 10001 give_flowersB#?!...#$r 10001 0 give_flowersB# [送出花束]",
"NPC.cs.3980": "$q 10001 give_pendant#?!...#$r 10001 0 give_pendant# 你愿意和我结婚吗?"
}
}
以这个为例子,每一个NPC会从角色对话文件里的give_flowersA, give_flowersB, 和 give_pendant 读取对应的反应对话. (看看以下格式的信息可以了解更多的语法)记得要把全部可婚NPC都要加上,否则会有BUG。例子,你可以给海莉加上这个:
{
"Action": "EditData",
"Target": "Characters/Dialogue/Haley",
"Entries": {
"give_flowersA": "噢,这花束真漂亮。$1#$b#...什么?你想要成为我的男朋友?$8^...什么?你想要成为我的女朋友?$8#$b#....我以为我们已经在一起了。$1",
"give_flowersB": "哦哦哦,@! 我愿意成为你人生中的真命天子。$1",
"give_pendant": ".....$8#$b#@,我不知道我现在该说什么……$8#$b#...$7#$b#好...我接受了...$4#$b#我等不及要告诉镇长这个消息了... 我想全部计划得花上3天就能准备好。$1"
}
}
这个可以添加其他通用对话,你甚至可以通过已经回答问题的IDs来避免“送花束”的重复问答。*原文直译不太行,我来解释一下,使用$q指令的问答对话会有对应的ID,比如上面使用的是$q 10001(作为问题ID)和$r 10001(作为回答ID),回答后的回答ID会被游戏存档记录,所以也有可能会导致向其他NPC求婚时会出现BUG。总结一下就是,建议使用这个对话格式而不是上面有问答ID的*
运算法
从游戏里发现下列对话:
- 事件对话从适当的事件命令中读取 (看看模组目录:事件数据).
- 特定位置的对话从 StringsFromCSFiles
<location>
.cs读取。 - 其他角色对话文件将从角色-特定文件读取。
- 如果找不到对话,游戏就诉诸于 StringsFromCSFiles 文件硬编码的对话(特殊键的前置为 NPC.cs NPC.cs).
格式
对话内容包含了可以改变对话框的tokens和commands, 改变内容(比如说根据玩家当前性别读取对应性别的对话),注入值等等。这些都被解析为Dialogue分类。
特殊tokens:
密钥格式(key format) | 描述(description) |
---|---|
# | 把两个对话指令隔开的符号。 |
{ | 未完成的指令,用于"breakSpecialCharacter"指令。*反正我们现在没有用到就是了* |
^ | 根据玩家性别切换对话的指令。这个符号的前面句子是男性玩家可见,符号后面为女性玩家可见。 例子: 早上好,@先生!^早上好,@小姐!
|
% | 把带有人物肖像的对话框变成旁边式对话框。 例子: "%阿比盖尔沉迷于她的歌曲里"
|
* | 未完成的指令,用于"quickResponseDelineator"指令。*不过大部分人用于表示某些情绪或者动作,比如说*笑*、*嘀咕*、*打哈欠*、*打喷嚏*等等,某种意义上是偷懒专用* |
肖像指令
下列指令是用于切换对话框右侧的NPC表情的。表情指令通常放在句子的最后一个:
"fall_Fri6": "在我很小的时候,爸爸就领养了我。$s#$b#抱歉,我可能又说了让你不舒服的话了……$u#$e#算了……今天你的农场打理得怎么样?",
密钥格式(key format) | 描述(description) |
---|---|
$neutral | 切换角色表情为默认/一般表情。 |
$h | 切换角色表情为开心表情。 |
$s | 切换角色表情为伤心表情。 |
$u | 切换角色表情为特殊表情。 |
$l | 切换角色表情为脸红/喜欢表情。 |
$a | 切换角色表情为生气表情。 |
$<id>
|
根据id的数字切换对应位置的表情。这些肖像ID顺序从左到右,从上到下并以$0开始计算。全部角色都有固定6个基础表情: $0 (默认/一般), $1 (开心), $2 (伤心), $3 (特殊), $4 (脸红/喜欢), and $5 (生气)。你可以为角色创造自制表情以用在对话或者事件剧情里。 注意: $1不能放在对话的最前面,因为会和以下的指令冲突(参考下面的$1)。 |
对话指令
$q <回答ID> <回馈> #<内容> $q <response IDs> <fallback> #<text>
|
提出问题的对话格式(问答对话指令的前缀)。如果<response IDs> (根据你是选择了前面的回答ID或者后者的ID,这个/ 是用来隔开回答ID)已经在之前回答问题时已经触发过,那么问题将会直接读取你对应的回答反应(或者这段对话的其他部分),除此之外,如果你上一次已经回答过这个问答,<fallback> 可以搭配$p指令来制作下一次遇到这个问题时会说的话。注意: 问答ID需要是独一无二的,和事件一样,以防止和其他NPC的问答ID冲突而导致对话被跳过。可以去看看这个事件的界面以得到更多资讯。
|
$r <回答ID> <增加多少好感度> <反应> #<答案1的内容> $r <response ID> <friendship> <reaction> #<answer text>
|
为$q问答对话添加回答选项。 <answer text> 是你想要给玩家选择的回答。<response ID> 是将对应的回答归类为你所填充的ID,以此让你能在以后的某些指令使用(同一个ID可以同时被多个回答归类)。 <friendship> 是玩家选择这个答案之后可以让NPC的好感度产生变化,正数会增加好感,负数为减少好感。<reaction> 是玩家回答后根据答案所填充的<reaction> 读取对应NPC反应,基本上是在Content\Characters\Dialogue\*.xnb文件里读取这个对话(事件也是一样,反应的对话在Dialogue)。
|
$p <回答ID> #<达成ID的内容> |<没有达成的内容> $p <response ID> #<match text> |<no-match text>
|
p代表"对话的先决条件"(dialoguePrerequisite)。根据之前玩家所回答的ID而显示不同的对话。如果之前玩家选择的回答和这个<response ID> 是一样的,那么<match text> 将会被显示;相反的,如果没有选择到对应ID,<no-match text> 就会被显示. 这些对话内容是使用| 这个符号分开不同内容。可以使用# 来搞出多个内容(虽然目前我只看到两个内容,不知道三个以上的内容是否存在)。这并不需要是对话字符串中的第一个命令(就是你可以在一般对话之后放<$p> 指令,虽然,这样的变化我也没试过……希望有个好人可以帮忙验证真假)。
|
$b | 暂时停止对话,直到玩家点一下对话框就可以延续<$b> 以后的对话。(这里举个明显可以看到差别的例子,那就是对话框右下方或者人物肖像的左下方,会出现向下的箭头。)
|
$e | 结束当前对话,并且关闭对话框使玩家可以恢复行动。再次与NPC对话才能触发$e以后的对话。(这里举个明显可以看到差别的例子,那就是对话框右下方或者人物肖像的左下方,会出现中间有X的小方格,并且你可以看到对话框缩小并消失。) |
$k | 未完成的指令。代表"对话杀死"(dialogueKill)。(貌似至今为止是没有看过作者使用,看看未来有没有被赋予意义) |
$c <概率> #<内容1> #<内容2> $c <probability> #<text1> #<text2>
|
根据<probability> 0到1以内的概率显示<text1> 的对话内容;除此之外,将触发<text2> 的对话内容。比如:$c 0.9 是90%概率会触发<text1> 并且剩余的10%概率会触发<text2> 。 注意: 替代器命令(在下方可见)不能在<text1> 正常运行。这并不需要是对话字符串中的第一个命令(指可以放在正常对话的后面)。这个完全不看游戏内的运气。(警告:由于不看游戏内运气且星露谷的概率不是一般抽卡游戏的伪随机*指有保底*,所以如果要搞这个随机对话最好不要像我把条件弄得太严苛*我的条件是限第一年夏季星期二6心好感50%概率触发*如果不是想要搞个小彩蛋真的没必要……)
|
$d <bus|joja|cc|kent>
|
"根据世界状态而显示的对话"(dialogueDependingOnWorldState)
|
$y | 未完成的指令。代表"对话快捷反应"(dialogueQuickResponse):一个简单的问答对话。类似$q指令的运作,但是是一个且都是在同一个文本里。它并没有"对话的先决条件"(dialoguePrerequisite)$p或者好感度变化。它可以直接被触发。(注意:你只能放置在对话字符串的最后一个,否则你的问题、回答和反应都会乱成一团糟。如果不信邪可以尝试复制坏例子的那个对话并且粘贴到随便一个NPC,然后进入游戏测试会发生什么事) 例子1: Penny: "$y '要来份早饭吗?_是的,谢谢。_好,给你。_不了,我感觉很好。_那额外的就给我吃啦!'" 例子2: Sun4: "嗨,@先生。^嗨,@小姐。#$b#今天天气不错……#$b#$y '要来我家吃饭吗?_当然。_那就那么说定了!_抱歉,我今天很忙。_没关系,下次再来吧'" 坏例子: Sun4: "嗨,@先生。^嗨,@小姐。#$b#今天天气不错……#$b#$y '要来我家吃饭吗?_当然。_那就那么说定了!_抱歉,我今天很忙。_没关系,下次再来吧'#$e#今天要招待什么料理呢~" |
$1 <信件ID> #<第一次看到的内容> #$e# <第N次以后的内容> $1 <letter ID> #<1st-time text> #$e# <nth-time text>
|
创造一个玩家(几乎)只能看到一次该NPC的对话。<1st-time text> 只会在<letter ID> 还没被标记(并且没有被标记后送出去);相反的, <nth-time text> 将被触发。<letter ID> 不应该对应于实际的邮件(因为它不会被寄出),但是它可以被事件或其他对话线引用。
|
%fork | 设置specialEventVariable1变量,可以通过后面的fork事件命令来检查。主要用于事件期间$q问题的反应对话。(总结:新手不要先接触,变量说来话长,在 事件指令里看看详细用法吧) |
[# # #] | 根据格子所填充的三个物品ID,随机给出一样物品。(一个格子一次性只能随机三样物品)如果是[231][120]分开放置物品ID,那么你可以一次性得到两个物品。(当然,两个格子各放三个物品ID也是可以的,只需要记得最多只能放三个物品ID) |
问答例子
为了能够更了解$q、$r和$p如何运作,看这里的例子作为参考可以帮助你。请注意如何格式化脚本更容易阅读:
summer_Fri:
"我想我明天会去海滩玩!
#$q 305/306 beachquestion_followup#你想要跟我来吗?
#$r 305 15 beachquestion_yes#当然,我超喜欢!
#$r 306 0 beachquestion_sorry#噢,对不起,我已经和别人约好了……
#$r 306 -10 beachquestion_no#不用了,谢谢。
",
beachquestion_yes: "好耶!是约会!$h",
beachquestion_sorry: "淦,好吧。$6",
beachquestion_no: "哦,呃,我很抱歉。$s",
beachquestion_followup:
"$p 305
#明天一定可以玩得很开心!$h
|哎,要是有个人能陪我,那该有多好……$s
",
summer_Sat:
"每年这个时候的海滩都很赞……
#$p 305
#谢谢你今天陪我来这里。$h
|哦,你好,@,今天过得怎么样?
",
以上对话在夏季的任何星期五触发。NPC的对话开头总是触发: "我想我明天会去海滩玩!"
之后,ta会开始问你问题
#$q 305/306 beachquestion_followup#你想要跟我来吗?
$q 开始提问。 305/306检查这个问题是否在以前触发过,如果有就会直接把你的对话送到beachquestion_followup这个对话密钥。(你可以随意你的对话密钥以方便你找到/知道/运作/检查)
之后,就是玩家可以回答的答案。你可以增加多少个 $r都没问题;这里,我们则是三个:
#$r 305 15 beachquestion_yes#当然,我超喜欢!
#$r 306 0 beachquestion_sorry#噢,对不起,我已经和别人约好了……
#$r 306 -10 beachquestion_no#不用了,谢谢。
如果你表示同意(指第一个回答),游戏将会记录 ID 305作为你回答问题的答案。之后,你和那个角色的好感度增加了15点数。 beachquestion_yes就会被触发并延续刚刚问答对话。
如果你表示拒绝(指第二和第三个回答)游戏将会记录ID 306 作为你回答问题的答案,然后根据你选择的回答保持不变,0或者减少好感,-10。之后会读取beachquestion_sorry或者beachquestion_no来继续你的对话。
现在我们需要给对话密钥加上反应:
beachquestion_yes: "好耶!是约会!$h",
beachquestion_sorry: "淦,好吧。$6",
beachquestion_no: "哦,呃,我很抱歉。$s",
beachquestion_followup:
"$p 305
#明天一定可以玩得很开心!$h
|哎,要是有个人能陪我,那该有多好……$s
",
这里需要注意的是beachquestion_followup。当玩家再一次触发这个对话时,$q 305/306会被检测以判定是开始问问题或者直接读取这个对话。
$p 305开启了一个变量反应,意思是"如果玩家选择的是同意,那么会触发前者的对话。相反则触发后者的对话"。如果玩家回答的是同意,那个NPC会表现开心。相反,ta会说ta需要找人陪ta一起去。
这里隔天会触发另外一个变量反应:
summer_Sat:
"每年这个时候的海滩都很赞……
#$p 305
#谢谢你今天陪我来这里。$h
|哦,你好,@,今天过得怎么样?
",
依旧是第一行,每一次玩家与NPC对话的第一句都会是(每年这个时候……),但是下一行是根据昨天玩家所选择的答案来显示出对应对话内容。
这里是另一个从海莉的对话文件里拿出来的例子。注意一下,即使脚本格式很难读懂,但游戏能够同时处理这两种格式。
summer_Sat: "农场的活好像很无聊的样子……#$q 42/43 summer_Sat_old#一天都干什么呢?#$r 42 10 summer_Sat_12#护理植物#$r 42 10 summer_Sat_12#探索山洞#$r 43 -10 summer_Sat_13#在你的房间里面转#$r 42 10 summer_Sat_12#挖宝藏" #!String
summer_Sat_old: "#$p 43#嘿,你最好别在我房间里偷偷摸摸的!!$a|不过我估计你没准能练出个好身材。" #!String
summer_Sat_12: "嗯……听起来是个大工程。" #!String
summer_Sat_13: "什么?你最好别有这个想法!$a" #!String
第一回触发的summer_Sat
,将会触发42或者43的反应(因为这个问题是唯一有它们作为回答的问题),所以海莉会说 "农场的活好像很无聊的样子……一天都干什么呢?" 玩家可以选择以下其中一个回答:
- 护理植物
- 探索山洞
- 在你的房间里面转
- 挖宝藏
第三个回答,$r 43 -10 summer_Sat_13#在你的房间里面转
,回答被记录为ID 43,减少10点海莉的好感度并且触发这个对话summer_Sat_13
(海莉说 "什么?你最好别有这个想法!")。其他回答则被记录为ID 42,增加10点海莉的好感度并且触发这个对话summer_Sat_12
("嗯……听起来是个大工程。").
下一次触发的summer_Sat
,将给出$q
命令中列出的一个回答ID(42或43)。因此,$q
和以后的内容被废弃,并且对话summer_Sat_old
会代替这个空缺的位置。这个新对话使用了$p
指令来改变海莉的对话,根据你上次回答ID是43或者是42来触发对应对话。如果你之前回答的是"在你的房间里面转",在这个符号|
之前的对话会被触发,所以海莉将会说"农场的活好像很无聊的样子……嘿,你最好别在我房间里偷偷摸摸的!!" 如果不是ID 43被记录(在这个情况下,你一定是给出反应42的ID,打个比方,上次问答对话所选择的三个里其中一个回答),在这个符号|
之后的对话会被触发,所以海莉反而会说 "农场的活好像很无聊的样子……不过我估计你没准能练出个好身材。"
替代器命令
替换器命令将被替换为相关字符串。注意只有@在信件条目能够运作。(目前来看好像只有事件里的message不能使用@,望补充)
@ | 玩家的名字。 例子: 嗨,@!
|
%adj | 随机形容词。 (从Content/Strings/StringsFromCSFiles.xnb读取) |
%noun | 随机名词。(从Content/Strings/StringsFromCSFiles.xnb读取) |
%place | 随机地点名字。(从Content/Strings/StringsFromCSFiles.xnb读取) |
%spouse | 玩家伴侣名字。 |
%name | 一个随机生成的名称。(虽然,不太情况多随机) |
%firstnameletter | 玩家名字的前半部分(四舍五入),比如 Nat如果玩家名字是Natalie。(不清楚其他语言是怎么运作,望补充) |
%time | 当前游戏时间。 |
%band | 山姆和赛巴斯的乐队名字。 |
%book | 艾利欧特写的书的标题。 |
%rival | 根据玩家性别并从StringsFromCSFiles.xnb随机生成一个姓名。(从Utility.cs.5499到Utility.cs.5560) 不会和农夫的名字匹配。 |
%pet | 玩家宠物的名字。 |
%farm | 农场的名字。比如:听闻%farm农场的农场主是位年轻人…… |
%favorite | 玩家在开头填写的喜欢的东西。(建议不要乱填,要不然对话会很搞笑) |
%kid1 | 玩家第一个孩子的名字。 |
%kid2 | 玩家第二个孩子的名字。 |
价值Values
游戏在一些对话里使用这些预定义的值。这个部分是需要和上面的东西连接使用。
星期里的某天/星期几Days of week
- Mon 星期一
- Tue 星期二
- Wed 星期三
- Thu 星期四
- Fri 星期五
- Sat 星期六
- Sun 星期日
季节Seasons
- spring 春天
- summer 夏天
- fall 秋天
- winter 冬天
第一/第一以后的年份
虽然在游戏里的对话使用了"first/later year"这个值,但是它只有两个是有效的:
密钥格式(key format) | 描述(description) |
---|---|
1 | 发生在第一年。 |
2 | 发生在第一年以后的任何一年(就算不是第2年)。 |
回答ID
回应ID标识了玩家在回应问题对话时所选择的答案。在某些情况下,一个问题里面可能会有多个答案具有相同ID的情况(比如各种各样的"yes"),或者每个问题都使用一样的ID(在这种情况下,ID只是显示玩家已经回答或者还没回答的问题)。
任何模组里都可以使用自填ID,不过这里提供了原版游戏IDs,以1.3.36为准:
- 对话
NPC 问题 回答 阿比盖尔 Sun2
@你觉得我们死后会变成什么样?17: 我不知道。
18: 我们会变成鬼魂。
17: 我们会上天堂。
18: 我们的能量体会进入灵界。
17: 什么都不会发生。我们就是不存在了而已。阿比盖尔 summer_Sun
好吧……假设你得到了一个带薪假期。你会去哪儿?25: 海滩
26: 漆黑的山洞
26: 古老茂密的森林
25: 乔家购物广场阿比盖尔 fall_Sun
我想给我的头发重新染个色……你觉得什么颜色好?27: 染成黑色吧。
27: 不妨试试金色吧?
27: 粉红怎么样?
28: 我喜欢你现在的样子!阿比盖尔 winter_Sun
我画了两幅画。你觉得怎么样?29: 我喜欢丛林海岛和老虎这一幅。
30: 我喜欢拿着战斧的兽人这一幅。
29: 我哪幅都不喜欢。亚历克斯 Wed
我还想叫你一起投投球,但你好像不怎么喜欢运动。^如果你不是女孩子,我就约你打球了。6: 我站在旁边看就好了。
5: 我想和你打球!
5: (愤怒)你到底是什么意思?亚历克斯 summer_Wed
你觉得我能成为职业选手吗?52: 你一定会成为运动场上的传奇
52: 可能吧,你毕竟练习了那么久
53: 别做梦了,你还是老老实实去做推销员吧亚历克斯 fall_Wed
你觉得女孩子会喜欢我的发型吗?^你觉得我的发型怎么样?54: 看起来挺时尚的。
55: 像头上长了蘑菇一样。克林特 Mon
你一定猜不到我的曾祖父以前是一名……9: 铁匠。
9: 一个糊涂的小丑
9: 一个尖酸刻薄的混蛋。海莉 summer_Sat
一天都干什么呢?42: 护理植物
42: 探索山洞
43: 在房子里面转
42: 挖宝藏海莉 fall_Sat
*唉*……你觉得我今天做点什么好呢?44: 水彩画
44: 阅读杂志
44: 安安静静的呆着(原文翻译:快停止成为一个自私的爱哭鬼)莉亚 Mon
所以你为什么要做一个农夫呢?21: 我想要赚很多很多的钱。
22: 住在这里比住在城市里要更“真实”。
211132: 为了追随爷爷的脚步。
22: 我想要逃离我原来的生活。玛鲁 Sun
你在农场工作得开心吗?3: 开心。
4: 不开心。玛鲁 summer_Thu
我下了决心,以后一定要自己做个机器人出来。35: 对你来说,应该是小菜一碟。
36: 你可别眼高手低了
35: 听起来应该挺难的吧潘妮 Mon4
但果然还是不要总想着消极的一面吧?7: 没错。还是保持乐观比较好哦!
8: 还是现实一点比较好吧。山姆 Wed
嘿……你觉得我的新歌该是什么主题的?20: 耕种、挖矿和砍柴。
8820: 海中之城。
8821: 火车。
19: 随便吧。反正都是难听死的。赛巴斯 Fri2
那么你是如何打发空闲时间的?15: 继续耕种
16: 漫画书
15: 采购
15: 运动赛巴斯 fall_Fri
你平时读书吗, @?62: 嗯。看些经典名著。
63: 只看科幻与奇幻作品。
62: 我喜欢言情作品。
63: 不,我不看书的。
- 事件
事件 问题 回答 阿比盖尔四心事件 @!你怎么站在雨里啊?$7 32: 我在干活儿
32: 我在享受这种天气
32: 我还想问你呢阿比盖尔六心事件 你以前用过剑对么? 847951: 没错,我觉得很刺激!
847951: 是的,但只是自卫而已
847951: 没错,但是太危险了。你不应该冒险。
847951: 没有阿比盖尔十心事件 *吸气*$s 776589: 发生了什么?
776589: 你还好吗?阿比盖尔十心事件 我可能没有自己想象的那么勇敢……$8 34: 和我在一起,你就安全了。
34: 我也害怕。
34: 你哭得就像个三岁小孩儿。别说了。亚历克斯五心事件 我真没用……$s 57: 才不是。你明明是个天才!
57: 我们都有自己的长处和短处。
57: 没用?对,总结得很精辟。克林特三心事件 你有什么秘诀吗?^你能给我一些建议吗? 211: 靠你的能力和魅力打动女性
211: 做些疯狂的事情,让别人猜不透你
211: 表现得正常一点儿……做你自己就好
211: 把女人当男人一样对待德米特里厄斯六心事件 你觉得西红柿算什么? 59: 蔬菜
59: 水果艾利欧特二心事件 问个问题……你喜欢什么样的书, @? 958699: 悬念
958700: 浪漫
958701: 科幻艾利欧特四心事件 等等。让我们举杯庆祝一下!为了…… 28376: 鹈鹕镇!
28376: 我们的友谊!
28376: 我们的健康!
28376: 你的命运!艾米丽六心事件 所以……*喘气*……你感觉怎么样?$h 213: 这太奇妙了!
213: 真尴尬……
213: (保持沉默并缓缓鼓掌)艾芙琳四心事件 您觉得如何? 51: 很美味!
51: 就像在嚼冰球格斯四心事件 @,你有什么事儿吗? 207: 你现在就得把赊的账给结了!
208: 酒吧在经济上有些困难海莉二心事件 那是因为上周是我打扫的!$a 46: 少废话,赶紧打扫!
45: 海莉,何不每周固定打扫一次呢?
46: 艾米丽,这次就去打扫吧。海莉四心事件 话说……你挺有劲的,对吧? 47: 是
47: 不是海莉六心事件 这东西现在已经买不到了……$s 48: 别担心,我给你买个新的!
48: 太遗憾了……哈维二心事件 @你觉得乔治该怎么做? 84: 乔治应该听从哈维医生的建议。
85: 乔治知道怎么做对他的身体最好。哈维四心事件 嗯……你的心跳有点儿快。$u 86: 我有点紧张。
86: 我刚才在农场里干活,现在还没喘过来气。
86: 你真的是医生吗?我的心跳很正常!肯特三心事件 (跟肯特聊聊)$s 215: 这事怪乔迪……她本该知道的!
215: 我知道你内心很痛苦……但这也不能怨你老婆啊。
215: (撒谎)这事怪我……是我说要吃爆米花的。莉亚四心事件 我是不是太自私了 @?$s 83: 不,你只是做了必须做的事情。
83: 不,是你的前任太蠢了。
83: 不,但你其实应该待在城里。
83: 对,有那么一点儿。
83: 对,但人不为己天诛地灭。刘易斯六心事件 @……你什么都听到了,是么?$s 200: 是的……但是我会保密的。
201: 是的……我要告诉大家。玛鲁二心事件 我说的没错吧, @? 15933: (什么也不说)
15933: 其实,你爸刚刚可神秘了。玛鲁四心事件 @我应该怎么办? 38: 从地板上铲起来就好。他不会发现的。
39: 告诉哈维是我的错。
38: 告诉哈维,这纯属意外。玛鲁六心事件 你看到的是什么? 40: 一颗美丽的星球。
40: 一片漆黑的深渊。玛鲁八心事件 真是对不起。$8 41: 没关系,根本不疼的。
41: 抱歉就对了。简直疼死人了!玛鲁十心事件 那么,你觉得怎么样呢, @? 18981: 我认为你的发明很厉害。
18981: 我很失望……你不该让那机器人成为你的奴隶的。
18981: 看来你爸对我们在一起是没意见咯?
18981: (盯着玛鲁,什么也不说)玛鲁十心事件 你会那么说,肯定有原因……$a 18982: 玛丽尔达就是一台设计用来模仿人类的机器。
18982: 我刚才是在开玩笑。玛丽尔达应该享有自由的权力。
18982: 我会让她去农场里工作。潘妮二心事件 @?你看到了? 71: 没错,你做的很好,潘妮。
71: 你应该不管他的,现在他倒恼羞成怒了。
71: 我就散个步,不用管我。潘妮六心事件 ……怎么样? 72: (说谎)嗯嗯!真好吃!
73: 呃……我能把剩下的带走吗?
73: 真是特别的味道……你是怎么把它做得那么耐人寻味的?皮埃尔六心事件 发誓你不会把这事儿告诉任何人。 50: 我会为你保守秘密的。
50: 这事儿应该让你太太知道。罗宾六心事件 你有没有用木头做过东西呢, @? 66: 有
66: 没有山姆二心事件 说, @…… 你喜欢什么样的音乐? 76: 令人愉悦的流行乐。
77: 实验性质的硬摇滚。
78: 极富能量的舞曲。
79: 气氛活跃的乡村音乐。山姆四心事件 ……告诉她吧, @。$s 80: 山姆把零食递给我的时候掉到了地上。
80: 山姆把零食递给我的时候被我弄掉了。
81: 山姆故意弄掉的。他觉得这样很好玩。
对话主题
一个对话主题是一个可以在事件的先决条件中检入的临时flag并且可以触发一次性NPC对话(如果它有一个达标的对话密钥)。激活后,它们将被储存到Game1.player.activeDialogueEvents里。
启动对话主题可以通过使用addConversationTopic事件指令,%item conversationTopic 信件指令,或在代码中添加它到Game1.player.activeDialogueEvents。
游戏定义了这些事件:
id | 持续时间 | 触发条件 |
---|---|---|
收集包 | ||
cc_Begin | 四天 | 在社区中心阅读了第一条祝尼魔笔记后,在法师的过场动画中设置。 |
cc_Complete | 四天 | 社区中心完成。(不适用于JoJa路线) |
cc_Boulder | 七天 | 深山的巨石被移除。 |
cc_Bridge | 七天 | 采石场的桥梁被修护。 |
cc_Bus | 七天 | 巴士站被修复好了。 |
cc_Greenhouse | 三天 | 温室建好了。 |
cc_Minecart | 七天 | 矿车被解锁了。 |
joja_Begin | 七天 | 当玩家第一次打开Joja社区发展申请书。 |
movieTheater | 三天 | 电影院建好了。 |
伴侣事件 | ||
elliottGone | 六天 | 当艾利欧特十四心事件开启时设置。 |
ElliottGone1 ElliottGone2 ElliottGone3 ElliottGone4 ElliottGone5 ElliottGone6 ElliottGone7 |
一样天数 | 艾利欧特十四心事件的一部分。第一个flag是在开始时设置的;随后的flag是由艾利欧特随后的信件设置的。 |
emilyFiber | 二心 | 艾米丽十四心事件的一部分。完成委托之后设置的。 |
haleyCakewalk1 haleyCakewalk2 |
一样天数 | 海莉十四心事件的一部分。 |
leahPaint | 一样天数 | 当莉亚十四心事件开启时设置。 |
pennyRedecorating | 两天 | 潘妮十四心事件的一部分。 |
samJob1 samJob2 |
两天 | 山姆十四心事件的一部分。 |
samJob3 | 三天 | 山姆十四心事件的一部分。 |
sebastianFrog | 一样天数 | 当塞巴斯蒂安十四心事件开启时设置。 |
sebastianFrog2 | 六天 | 塞巴斯蒂安十四心事件的一部分。 |
shaneSaloon1 shaneSaloon2 |
一样天数 | 谢恩十四心事件的一部分。 |
其他事件 | ||
dumped_Guys dumped_Girls |
七天 | 设置在对应的小组10心事件之后。(看阿比盖尔#小组十心事件). |
secondChance_Girls secondChance_Guys |
十四天 | 设置在对应的小组10心事件之后。(看阿比盖尔#小组十心事件). |
pamHouseUpgrade | 四天 | 设置在潘姆家修复事件之后,并且当时玩家选择承认自己是赞助者。 |
pamHouseUpgradeAnonymous | 四天 | 设置在潘姆家修复事件之后,并且当时玩家选择保密自己的身份。 |
willyCrabs | 四天 | 设置在威利六心事件之后。 |
其他 | ||
Introduction | 六天 | 玩家被创建时。(开始新的存档或者第一次加入多人游戏服务器时) |
FullCrabPond | 十四天 | 任何第一次鱼塘拥有十个螃蟹。 |