Derby Day的心脏是其对话系统。 这是构建其他所有内容的引擎。 我目前正在第三次重新设计该系统,并且在这之间有无数次迭代。

游戏中的对话系统非常困难。 在外部,它们看起来很简单,但是总是有很多不同的情况需要得到支持,以致无法优雅而高效地进行编码。 在编写Derby Day的代码时,我感觉像是两个相反的钟摆之间:
- 对话系统必须能够覆盖我要写的所有故事。
- 我必须完成德比纪念日。 如果某个特定的故事情节不适合对话系统,则应进行破解。
对话用于推动游戏/故事前进。 玩家可以通过对话获得成功或崩溃。 这是我的约束:
- 可以从任何位置/状态开始对话。
- 角色会根据位置/状态说不同的话。
- 玩家可以呼叫他们遇到的角色以开始对话。
- 一些对话取决于玩家过去的选择。
- 玩家做出动作后的几天,某些对话将继续。
- 某些对话取决于比赛结果,随机机会或其他因素。
- 某些对话可以通过游戏事件来解锁。
以下是一些我想在游戏中进行对话的示例:
- 玩家可以要求一个黑帮成员杀死另一个拥有者的马,该拥有者有机会抓住该黑帮成员。 如果发生这种情况,则相应的所有者会呼叫玩家威胁他们。
- 玩家的女儿可以开始对话,告诉玩家她找到了想要保留的野马。 玩家可以拒绝此请求,但女儿仍可以将其带到马s,并告诉教练您说可以。 然后,培训师会呼叫播放器以查找发生了什么情况。
- 运动员的骑师会打电话给运动员说他体重增加了。 玩家可以开除骑师,或告诉他们加倍努力。 如果告诉骑师加倍努力,他们可能会过量服用可卡因。
有一天,我感到迷失和沮丧。 我试着想到其他具有类似对话系统的游戏,然后想到了星露谷。 玩家可以环游世界,并与其他角色进行对话,这些角色会根据当前季节,一天中的时间,他们对您的喜欢程度以及当前所在位置等各种因素做出答复。 我写信给Stardew Valley背后的人Eric Barone寻求建议。 他的答复:
对于Stardew,我没有使用任何第三方工具。 大部分对话框都包含在xml文件中,在该文件中,我将每个对话框消息与一个“键”相关联,该“键”描述了触发该特定消息的条件。 因此,例如,如果NPC为4心,则密钥可能指示某个特定消息在冬季的星期三出现。
在对话框消息中,我有执行不同功能的特殊字符。 例如,“#$ b#”字符串表示此时该消息应分为两个单独的窗口。 它会变得更加复杂,例如当NPC向您提问时。 但最重要的是,我是自己从头开始编写对话框系统的代码,因此我可以完全控制这些“特殊字符”及其行为。
当您与配偶交谈时,您的配偶对向其他玩家赠送礼物感到“生气”,只是代码中的一项检查。
我创建的系统实际上很草率,对于下一个游戏,我将尝试以一种更简洁的方式进行操作。 但是最终,它解决了。
希望对您有所帮助,并祝您游戏顺利。 赛马游戏听起来很酷
这极大地帮助了。 不是因为给了我神奇的解决方案,而是因为他让我感到自己很可靠。 没有神奇的解决方案,如果我对它们如何组合起来不太满意,也可以。 我仍然可以编写Stardew Valley之类的出色游戏。 谢谢你,埃里克!