我在“穿着西装的鲨鱼”(Shark in a Suit)这个90年代的律师事务所管理游戏中工作中,游戏中你需要在庭审前检查物理文档。

我遇到的核心问题是:文档生成器产生的随机性矛盾不是游戏线索。

警察报告和证词的日期有时会不一致,虽然我并没有设计DATE_MISMATCH不一致性,但因为两条不同的生成路径产生了同一字段的不同值。

同样,名字的问题也存在。警察报告中的名字写作“Morrel”,而签名中写作“Morel”。游戏会将其标记为SIGNATURE_FAKE不一致性,但实际上只是生成过程中的一个artifact。

解决方案在概念上很直接,但需要修改大量的代码。现在,每个案件都有一个CaseTimeline对象在案件创建时生成,包含每个日期字段的单一规范值。每个文档都从该时间线读取值,而不是自行生成值。同样,每个签名列表都有一个名单,包含每个人名,定义一次,用于所有地方。

ValidateDossier()函数在玩家看到任何东西之前运行,检查是否有意外的不一致性存活下来。
背后的设计原则是:如果游戏显示的不一致性不是真实的,玩家就不会信任谜题。每个线索都必须有意义,否则整个系统都会崩溃。
如果有人正在做类似的事情,很高兴可以讨论实现细节。