82BD2AE8-2B2E-43F5-5CF1-A813D5AE1BBA.jpg


  《炉石传说》即使作为一款卡牌类休闲游戏,它的表现也并没有辱没暴雪出品的名头,精致的动画以及特效效果,丰富有策略性的多种游戏模式都令这款卡牌游戏具备了非常高的耐玩度。2014年的GDC大会,前暴雪工程师Brian,阐述了unity手机游戏《炉石传说》AI制作方面的一些经历和想法,请看下文:
  大家好,我是Brian,在离开暴雪之前是负责《炉石传说》AI引擎设计的,今天我可能讲不了交换协议背后的秘密,也说不来很多的设计原则,但仍然可以分享一些有用的知识。如果你不了解《炉石传说》,这里我简单介绍一些,它是一款卡牌对战游戏,你可以用不同的卡牌和对手进行回合制游戏,出卡有资源限制(魔法),玩家最主要的目的就是击败对方的英雄角色。

  作为试验品的《炉石传说》
  这个游戏是暴雪的试验品,通常情况下暴雪制作团队都在70、80甚至100人以上,然而《炉石传说》这个游戏是希望通过有限的资源创造最大可能的游戏,希望看我们能否在什么都没有的基础上做出不同的游戏,我们最初团队有15人,4名美术师、5名程序员、2名制作人、2名策划,加上我(AI)和一名负责音乐的同事。我们接受了挑战,并且非常确定可以完成它。
 

328D2EFB-39BC-3CA4-621D-3574CAB7CBBF.jpg


  《炉石传说》本身就是一个问题,首先是卡牌游戏的规则是固定的,很多的游戏都是在实体卡牌基础上做规则的优化和调整,如果你违反一些基本的规则,就会看起来很蠢。第二就是我要做的系统和AI都必须可以接受大量的修改,主要是因为这就是暴雪的做事风格,还因为我们需要对卡牌游戏做尽可能多的平衡。最后是刚刚说过的,我们面临的困难包括,有限的团队、资源和时间,AI、CPU以及预算也达不到大型游戏的规模。

  以游戏设计为主的研发模式
  在做游戏的过程中,有一些考虑是一直贯穿研发过程的,首先是设计为主,这是暴雪所有产品的主流做法,从这一点来说,我们必须把游戏做到易于调整,可以对卡牌进行编辑,因为所有的工作不可能都交给程序员,设计师需要负责卡牌,我们必须做到游戏系统方便修改。我们还用了很长的时间来确定需要做多少AI,因为我们很早就有一个版本,很多游戏可能都会做一个新手教学,即便如《炉石传说》这么容易上手的游戏,所以我们在做的时候决定加入AI控制,让玩家们通过它来一步步熟悉,这样慢慢学会更多东西。
  AI的难度也是一个问题,很多的卡牌游戏难以被人接受都是因为遇到了这个问题,比如《万智牌》有太多太多的卡,太多的机制,所以让学习曲线变得很漫长,以至于很多人还没开始就放弃了。所以暴雪希望做的AI就是让你觉得它很聪明,但又不能碾压你,让玩家觉得他们最终可以学到AI的技术,最终能够很快超越AI的技术,带来一定的成就感。
  这个项目开始时另一个比较大的争议就是是否以数据为驱动做研发,你们想不到的是,由于团队和资源限制,很多人其实宁愿做数据驱动的游戏,因为这一套做起来会很顺畅,但我非常的自信,我觉得这款游戏会流行,而想让一款卡牌游戏生根发芽,最终枝繁叶茂的最好做法就是不断的推出更新,发布之后不断的推出卡牌。这样如果我们后来再决定做出大改就会导致游戏崩溃。所以我们做的妥协是,卡牌是按照数据做的,我们有这些工具所以很容易做,但AI却并不是的,实际上AI很多是代码组成的,所以我在这方面做了很多的决定,因为我必须把AI做到容易上手,能够吸引用户,然后让他们一直可以继续游戏。

  玩法系统
  我们的做法是为所有事物打上符号,由于规则的限制,我们必须为这些卡做很多的Tag,比如传说卡,军团,卡牌类型等等, 所有这一切都需要是可以调整的,我们只能通过卡牌能力来改变。另外一个系统就是状态更新,我们可以清除所有的限制条件然后重新开始,在出发技能的时候或者卡牌死亡的时候更新状态。这样一来在游戏中同时最多需要调用24个符号,所以这其实没那么复杂。
  游戏的主要玩法包括收集所有的可能性然后发送给玩家选择,根据玩家的选择运行能力,然后更新状态,为了让用户们更容易理解,我们会做不同的颜色,比如绿色表示玩家可以使用这些牌,所以这就减轻了AI的压力,因为它不用去判定哪些卡牌可以用,哪些不能用,这一切都有固定的套路,你使用哪些卡牌就会有相应的能力配套,AI所承担的压力减少了很多。
 

B5B3656C-0066-8CD7-A3B4-A31C1F41772C.jpg

《星际争霸2》的Galaxy编辑器


  接下来要说的是符号编辑器,最初我们的设计师和《星际争霸2》项目上的人共同子在做Galaxy编辑器,所以他希望我们对此做出改动,你从图中可以看到原来的编辑器是这样的,你们看到这个很复杂,但我们进行了简化,用高级语言实现了多功能调用,所以《炉石传说》的脚本语言其实更自然,更简单,我们对Hearth编辑器做也采取了同样的做法,使用了非常简洁的代码。

  AI系统的打造
  我们最初就打算把AI做成中等玩家水平,为此我们采访了很多玩家,有些玩卡牌游戏,也有的人不玩卡牌游戏,把这些采访得出的中间数作为中等玩家水平的参照,按照传统的分类,新玩家了解玩法,中等玩家了解战术,高级玩家了解更高级的东西,但其实我们采访的高级玩家是可以在有限的卡牌数之内进行技能组合,而中等玩家则直接是看卡牌数值和游戏内资源的,所以我把游戏内资源分成不同的组,比如你手中可以使用的资源,可以用于攻击的卡牌数等等。
  我们采取了非常简单的计分系统,不管是你的攻击消耗了多少点HP、造成了多少伤害,或者哪些卡牌被消灭看,这些都是简单的计分系统完成。而且我们是不允许玩家一上来就把对手击败的,因为必须给对方一定的时间进行反击,这样双方的战斗才会更有趣。
  游戏中的锁定机制很少,因为你在游戏中这么做的时候容易造成一些复杂情况,还会引起一些意外情况发生,遇到这样的情况,代码还需要知道你为什么要锁定这些卡,所以更容易出问题,因此我们尽可能减少这样的情况出现。
  另一个做法就是困难的升级,主要表现为玩家对AI反应的猜测难度、AI攻击机制的随机性以及AI卡组的可调整性。由于魔法的限制,所以一开始不管是玩家还是AI所做的动作都是有限的,而由于不能看到对方手里的牌,所以只有熟悉的玩家才会猜测的比较准确,然而随着游戏回合的增多,AI可以获得更多的卡牌,所以设计师来决定AI所获得的卡组,这样一来可以对难度更容易进行调整。
 

ED700014-B465-98A5-726F-182013067101.jpg


  当然,我们还会对AI印象做一些调整,但这些都是比较细微的变化,比如HP剩余多少的时候可以判断对方在几个回合制内赢得比赛,然后对此进行策略微调。

  那么,哪些是可以变得更好的呢?
  首先要说的是,我们的代码开始的很慢,由于初期主要是设计阶段,所以很多的东西到代码阶段做起来会有些难度。其次是工具的成熟度不足,前面说到,由于人手不够、资源和资金都不多,因此我们很多工具做起来都比较慢,如果有更成熟化的工具,这个过程应该会更快一点。

  我们采取的一些不错的做法
  首先是用了一年的时间在设计修改上,这样不仅反复验证和调整了玩法的可行性,也增进了开发者和游戏之间的感情,通过多次的讨论和修改,最终游戏变得更加稳定。其次就是Flash创意原型,我们一开始并没有使用代码做创意原因,因为这样做起来简单,而且后来改起来又不用调整代码就可以进行快速便捷的修改。
  我们当时做的一个比较对的决定时延迟了游戏发布日期,使用了更长的封测和公测期,不过在这个过程中我们找到了更多问题,比如触发机制在初测期间改了3次,所以我们必须重新写很多低级的东西,做重复的事情,但这也为发布之后减少了很多的问题。
  另外一个就是AI性能做的很好,这一点我们前面说过了,最后一点要说的是,这款游戏的表现很好,出乎我们的意料之外。