大家好,

几个月前,我发帖介绍了我的业余MMO项目。目前该项目仍处于搁置状态,但抛开整体工程难度不谈,我想分享其中可推广的部分,即之前帖子中未详细展开的内容:NPC缩放设计。同时我也很好奇其他人在项目中是如何处理NPC战力缩放的。

我的项目在NPC设计上采用了类似《魔兽世界》的思路:等级、攻击力等属性。我最初开发了一套可切换的大脑系统。NPC会先加载一种空闲状态的大脑(固定不动、巡逻、游荡),并定期对敌对实体进行仇恨检测(粗略估计每秒检测几次?)。就目前进展而言,敌对实体仅指不同阵营ID的实体。当发现敌人时,NPC会切换至战斗大脑,规划路径接近目标进入近战范围。目前进展顺利。此外我还设计了威胁优先级系统(同样类似WoW),但在简单原型中并未实际应用。

当NPC开始互相攻击后,我遇到的主要障碍是如何计算它们的伤害输出。下文将介绍第一版设计及其失败原因。

第一版直接设置生命值、攻击力和攻击速度等属性。我将立方体设为弱但速度快,胶囊体设为强但速度慢。NPC的具体细节并不重要。关键是我没下赌注是明智的——因为我原本看好的角色被彻底碾压。大约用了五波生成才击败了一个我以为处于劣势的NPC。

我认为主要问题是低估了额外攻速的效果。只要花时间,我完全可以将这两个NPC的属性调至预期水平。但作为大型项目的概念验证,这种方案存在以下问题:

  • 若项目完整实现,NPC类型可能成百上千
  • 若战斗机制发生变更(尤其在早期阶段),每个NPC数据都需要调整
  • 若由大型团队开发(正如我在规划中的设想),每位NPC设计师都需精通战斗公式,并投入时间精力进行平衡
  • 考虑到NPC设计师是人,若漏填某项属性,可能导致NPC表现异常

基于这些教训,我设计了第二版,并希望获得反馈。我尚未大规模实现该版本,但理论已成型。在第二版中,NPC的战力基于其等级,并通过一系列抽象修正值进行调整。例如:

  • 凶暴老鼠是最普通敌人,其修正值均为0
  • 狼是近战型敌人,攻击力修正值为+1,比凶暴老鼠更具威胁
  • 术士是脆皮施法者,攻击力修正值为-1,护甲修正值为-0.5,物理威胁低于凶暴老鼠,且更易受物理攻击

理论上,这些修正值可集中调整,避免第一版的所有问题:

  • NPC设计师不再需要精通公式,尤其当修正值经过充分调校后,某一攻击属性+1的修正值能与其他属性带来大致相同的每秒伤害提升
  • NPC的基础战力由其等级决定。即便漏填属性仍会导致异常,但不至于完全破坏平衡
  • 每次公式修改无需调整所有NPC数据

为验证这个想法,我登录了《魔兽世界》进行观察。主要发现是:创建新角色后,同等级的可战斗NPC生命值都相同。5级的血色战士或暮色蝙蝠都是145点生命值;7级的森林蜘蛛或扒手都是204点生命值。部分友好NPC的生命值与可战斗NPC一致,但有些同等级NPC的生命值不同,例如提瑞斯法的戈多(5级拥有289点生命值)。这还没提到WoW将更强NPC标记为精英的机制。我认为这强烈表明暴雪团队曾遇到与我相同的缩放挑战,并采用了类似的方案:用等级设定基础战力,再叠加修正值调节器。

我的问题是:各位觉得这个方案靠谱吗?你们在游戏中是如何处理NPC平衡的?

编辑:修改措辞以确认我的设计中NPC战力基于其自身等级,而非玩家等级。