总结从“Thirst”模组所获得的开发经验和教训

作者:Eric Schwarz

距离我开始创造《龙腾世纪:起源》的模组“Thirst”已经过去了一年多的时间。起初我是基于一个非常特别的游戏理念开始创造——在一次短途地牢冒险中,玩家所控制的角色从原来的考古学家转变成一个可怕的恶魔,并不得不吸取别人的灵魂才能获得生存,但这最终却发展成一个更加标准且传统化的电脑角色扮演游戏模式。

“Thirst”并不是我所创造的第一个模组,但是这却是一次非常有帮助的经历,将带我体验到“真正的”游戏开发实践,即推动我学会如何使用C++语言撰写脚本,如何构建一个时间跨度较长的故事结构,如何创造游戏关卡以平衡游戏玩法和现实主义,以及如何在各种变量间处理复杂的互动元素等。

我将在此讨论我所遇到过的一些挑战,以及我是如何克服这些挑战并从中学到何种经验教训。

事先掌握工具的使用方法

“Thirst”之所以花费了我如此长的时间(撇开老旧的系统崩溃导致我不得不重头开始工作不说)是因为我一直在不断摸索着各种工具的使用方法。《龙腾世纪》工具箱是一款非常出色的软件,并基于资源类型而拥有不同编辑器;但是尽管如此,学习如何执行特定的行动,如何更好地编辑游戏文件以创造出非标准结果,如何有效地设置脚本以推翻任何不合理的行为等都需要我投入更长时间才能得以掌握。

toolset(from gamaustra)

toolset(from gamaustra)

(《龙腾世纪》工具箱是一款非常出色的软件,但是我们却必须花费数月时间才能完全掌握其学习曲线和工作流程。)

如此便导致“Thirst”中出现了许多草率的脚本设置。早期,当我在编写任务时,我使用了更多情节变量而不是那些对追踪进度有帮助的内容。举个例子来说吧,玩家所面临的一个任务是必须从一名囚犯那获得相关信息,而反之囚犯也希望因此获得自由。这时候玩家将面临多种选择:贿赂狱卒,撬锁,偷钥匙,杀死门卫等等。而各种独特的选择也需要各种变量,但是除了一些细节的不同,玩家这些行动最终都会促成相同的结果,即玩家能够或者不能释放囚犯。而如果游戏中未设置一个单独的变量去追踪囚犯是否获得自由,之后的脚本内容将会变得更复杂,并且我将不得不费时间核对4至5个变量而不只是1个变量。如果我有足够的远见,也许便能够避开这一问题了。

从玩家的角度进行思考

当我们以创造者角度进行思考时,我们的脑中总是会涌现出许多想法。通常这些想法总是能够推动我们创造出一些特定的场景——如创造出多种结果或任务解决方法,并推动事物的有效互动等(作为玩过多种RPG游戏的我来说这些事真的都不难)。但是当我需要真正去执行这些想法时,我却会发现结果常常不如玩家所愿。

在“Thirst”的一开始,玩家将会遇到一个遭遇抢劫的商队,并在此遇到一个幸存者能够阐述一些背景故事,如此便推动着玩家开始接下来的探索任务。一开始听起来好像很不错,但是当我开始进行游戏测试时,我发现我的一个好友虽然不断地尝试着完成这一模组但是最终却导致了角色的死亡,因为他将自己的角色与另外一个死尸混淆在一起(游戏邦注:尽管这个死尸的位置设置是合理的)。而为了解决这一问题我就需要使用一些特定的技巧,如在死尸周围设置火把,以此照亮该区域并突出死尸,或者当玩家靠近时添加弹出对话框(如“请帮帮我”之类的),但是经历了这次的教训后我却不得不重新思考特定角色的地理位置以及之后的关卡布局等问题。

daorigins(from gamasutra)

daorigins(from gamasutra)

(像这样的早期挑战将加强角色开发,以及探索环境和搜索物资等积极行为的价值。)

有些时候这种设置能够带给玩家更多选择。早些时候,我发现建立一系列与玩家维系在一起的游戏玩法非常重要,因为如此玩家便能够很容易知道哪些内容对自己有利而哪些有害。在角色扮演游戏中,特别是当玩家在每个场景拥有多个属性,技能并面对多种结果时,玩家便很容易假设“所有的一切”都是对自己有帮助的——但是事实上,为了保持游戏的有序进行以及故事的顺利发展,设计师总是会在这种可能性中添加种种局限因素。

举个例子来说吧,当玩家遇到受伤的非玩家角色时他将面临5种不同的选择(喂他治疗的植物,给他健康药剂,施以治疗咒语,使用生存技能等。),但是大多数情况下游戏都不可能提供给玩家如此广的选择,不过我还是使用了一些提示帮助玩家做出选择,如“嘿,你可以在对话中使用特定的道具!”或者“你的非战斗技能具有价值!”之后我还面临了一个类似的挑战,即使用各种方式穿越栅栏将能够告知玩家,在游戏中不仅技能很重要,种族和属性也同样重要(游戏邦注:例如拥有较大的力量能够让玩家畅通无阻,而扮演较小的种族,如小矮人或精灵则能让玩家更有效地解决谜题)。

预先透露重要信息

“Thirst”是一个突出强调选择和结果的模组。尽管它不像《阿尔法协议》那样,“任何内容都可以改变”游戏故事,但是其中的一些小细节却也将彼此影响。举个例子来说吧,帮助角色进行早期的支线任务将能够在之后的任务中创造出一个替代选择,让玩家能够绕开其中部分内容。而在另外一个例子中,如果玩家能够打败一个非常强大的敌人,他便能够跳过其中一个主要任务。最明显的可能是,这两种主要的任务线是相互排斥的,并且它们将直接且长期地影响着故事的发展。

然而,关于这种结果的一大问题便是,玩家可能不喜欢这种突如其来的惊喜。我们总是很难定义什么是不受欢迎的内容,例如与其他角色展开战斗的预先行动到底是一种奖励还是惩罚?而明确这一结果又非常重要,因为这将能够确保玩家不会在游戏中觉得自己被欺骗,或者抱怨自己的任何决策都得不到回报。但是这也不是说游戏中不允许坏的结果存在,而是当出现这些不好结果时,游戏必须让玩家能够清楚自己所做的任何行动对于今后挑战将有何影响。

daorigins (from gamaustra)

daorigins (from gamaustra)

(游戏可以预先透露一些重要的决策,从而让玩家觉得游戏进程更加自然且富有逻辑。一些较小的游戏可能不会透露这些信息,但是对于玩家预先行动所给予的较小奖励(或惩罚)却也能够加强游戏世界的连贯性。)

而对于两个主要任务线(城镇镜戒系统和黑社会)间的较大选择,我便不能为玩家创造惊讶而已了。相对来说,这是一个重要的决策,游戏玩法和游戏故事的结果将能够影响起整个模组的核心内容。因此我就必须谨慎地传达这一决策,即通过添加对话暗示而帮助一方更好地排除其他对手。当玩家发现他们以前的同盟背叛了自己时,整个游戏世界,故事和游戏玩法将能有序地连接在一起,而不再只是充斥着一些不可预见的结果,而尽管玩家仍然不喜欢这种设置,他们也不再会认为这是一种卑鄙手段了。

当然了,玩家也需要做好迎接那些重大后果的准备。就像之前所提到的游戏玩法间的关系是取决于可行的选择,所以我们必须说明这种关系所围绕的结果。所以我便决定在模组的介绍部分引入一些关系明确且相互依赖的较小结果。例如在早期阶段玩家将在一个小酒馆中遇到一些雇佣兵,而在之后当玩家再次遇到他们时,他们有可能会在玩家执行任务中提供一些有用信息,也有可能会对玩家发动攻击。还有一种结果是玩家帮助商人逃过贸易禁令——如果玩家帮助了这名商人,他不仅能够再次出现在城市中,同时他也将提供给玩家一个新的任务,或者对于玩家另外一个不相干的任务提供相关信息。但是在另外一个早期任务中却存在一个离开腐败的城市官员的选择,这将导致玩家展开暗杀行为,而阻碍了商人的第二次任务行动(也就是之前所提到的)。游戏并未预先透露这些结果,或者这也不是什么重大结果,但是在玩家看来它们却近乎相同,特别是随着故事的发展其重要性不断上升之时。

不要创建你的技术和系统无法支持的游戏玩法

我之所以开始使用《龙腾世纪:起源》模组工具是因为它是我遇到过的少数优秀的RPG工具之一,并且那时候还存在一个充满活力的模组社区(很不幸的是今天已经看不到这样的社区)。我想要创造一个能够提供给玩家各种选择的模组,并带有各种具有引导性的结果——但是当我在创造“thirst”时,《龙腾世纪》的游戏机制和系统的缺陷却暴露无遗。

我所遇到的最大问题之一便是游戏不能有效地执行潜行和偷盗技能。归根结底是因为《龙腾世纪:起源》是一款围绕着地牢爬行和战斗的游戏,而这种偷盗技能很难在此体现出真正价值。尽管我尝试着去创造一些类似于潜行的游戏玩法,并且也让玩家能够在此面对偷钱包,撬锁等机制,但是所有的一切却仍显得不够成熟,因为核心规则本身还未得到合理的完善。而重新塑造游戏角色系统和规则则是我力所能及之外的任务,就其本身而言不仅需要投入大量的时间,进行各种游戏测试,同时我们还需要去平衡创造出全新内容是否真的具有价值性。

daorigins (from gamaustra)

daorigins (from gamaustra)

(从根本上来看,《龙腾世纪》是一款围绕着战斗展开的游戏,而我也决定在项目规则集和引擎不断变强的同时往游戏中添加更多战斗内容。)

我正在努力解决的另外一个问题便是处理特定的任务结果。我本来应该在游戏中,甚至在对话中添加更多灵巧性检查或潜行检查而让玩家体会到更多像《颓废年代》中“朝着守卫射箭,在他分心时刺穿他的脸部,”的桥段,但是因为《龙腾世纪:起源》是以完全的3D特写视角呈现出来,所以加上这些桥段则会带给玩家一种笨拙感。老实说,投入大量时间而为玩家呈现出一小段动画序列并不是一种消耗时间的好方法。

甚至当我在游戏中添加了一些桥段,如玩家在对话中偷东西时,玩家甚至未能发现这些内容——尽管游戏机制明显地呈现在那里,但是我却不能清晰地表达出这些额外的桥段。同样的情况也出现在配音过程中。“Thirst”并没有任何配音演员,但是它却拥有《龙腾世纪》般特写对话镜头以及角色动画(尽管这些看起来不是那么协调)。实际上“Thirst”拥有上千条对话线,而如果我亲自为它们进行配音真的很不靠谱,我不仅需要为此增加大量的开发时间,同时还需要处理一个混乱的脚本(我并不是一个出色的对话作者,我也总是需要反复修改各种内容),所以我必须找到足够的配音演员(我不满意那些非专业的演员阵容,但我在此无意冒犯那些给自己的模组作画外音的人)。但是如果我使用早前的2D引擎,或者像《无冬之夜2》中的文本对话,这些问题也就迎刃而解了。

总结

总之,“Thirst”对于我来说是一个巨大的任务,我也很高兴看到自己能够发行其中的某些内容——尽管我还未能完成最终版本的模组设计。在整个开发过程中我真的获得了许多宝贵的经验教训。现在我不仅熟悉了各种工具,掌握了自己的优势和劣势,同时也了解了整个工作流程,所以我们便能够更加有效地完成接下来的工作。

via:游戏邦/gamerboom

感谢支持199IT
我们致力为中国互联网研究和咨询及IT行业数据专业人员和决策者提供一个数据共享平台。

要继续访问我们的网站,只需关闭您的广告拦截器并刷新页面。
滚动到顶部