浅谈街霸的帧数据 1

作者:转载小公举
2019-06-28
23 28 0

说明

本文获得授权转载,感谢作者 gougou 槐宏文的分享。gougou 槐宏文曾参与《战神》与《光环 6》的开发。

引言

其实我玩格斗游戏 20 多年了。

很小的时候就在街机厅玩各种各样的格斗游戏:《侍魂》系列,《月华剑士》系列等等,当然还有在国内最出名的《拳皇》系列,所以也算一个比较核心的格斗游戏老玩家了。《街霸》系列小时候一直没有深入玩,但是自从十年前开始深入接触之后也算得上一个合格的《街霸》玩家了。

我一直觉得深入研究格斗游戏对动作游戏的开发是很有帮助的,直到后来自己参与了动作游戏的开发,我这个感悟更加深刻了。格斗游戏基本上是对动作要求最高的游戏,虽然自己作为格斗游戏老玩家,对很多概念和系统都耳熟能详了,但是我从来都没有系统性的全面剖析过里面的每一个系统,这是作为一个动作游戏开发者我一直想做而比较惭愧没有做好的。

这几天我花了一些时间,细致的总结和分析了《街霸》系列的 frame data,这篇文章就作为自己的一个总结,可能格斗游戏老玩家已经很熟悉了,但是其中也掺杂了一些我个人的思考,分享给大家。

frame data

我今天想分析的就是《街霸》系列的 frame data,相信很多人都听说过的。frame data 简单来说就是一个攻击动画每一帧的详细数据。一个简单的背景,一般的格斗游戏都是稳定的60帧每秒,也就是说每一帧是 1/60 秒,也就是约等于0.0167秒。读者朋友们可以想象一下格斗游戏对输入精度的要求有多么高了,虽然一般的格斗游戏都有一个几帧的 input buffer,但是类似《街霸4》这种对输入要求极高的游戏还是有不少 one frame link 这种很难的操作的,input buffer 我们以后再详细介绍把。

一般来说 frame data 会包含很多详细的数据,其中比较重要的就是:start up frames,active frames,recovery frames,hit stun,block stun,on hit,on block,i-frames,cancelling frames,伤害,晕值等等,今天我就稍微介绍一下我认为比较基础也比较重要的几个。首先给出解释 frame data 最经典的一张 gif 图:

《街霸 3rd》隆的 light punch

无论是轻,中,还是重攻击,甚至是一些 special move,基本都可以拆解成 start up,active 和 recovery 三个部分。

start up frames:这是一个攻击动画的起手部分,也就是图中绿色的第 1-2 帧。在这个阶段,一般的格斗游戏中,角色都没有攻击判定,但是《街霸》系列是有一点点不同的,《街霸》系列的攻击判定在起手部分的最后一帧已经形成了。

active frames:这是一个攻击动画的持续部分,也就是图中红色的第 2-3 帧。在这个阶段,如果攻击方的攻击判定碰到防御方的受伤判定,那么我们称这个攻击 connect 到了。connect 到了有两种结果,第一种是防御方被打到了,我们称为 on hit,防御方会播放一个受伤动画。第二种是防御方格挡住了,我们称为 on block,防御方会播放一个格挡动画。

recovery frames:无论你的攻击是否 connect 到了,在 active frames 之后,攻击方都会进入一个收招阶段,也就是图中蓝色的第 4-5 帧。在这个阶段,你没有办法输入,有些动作游戏可以让你 cancel 到另外一些动作去,但是一般的格斗游戏都不会这样做,因为这是你试探进攻的同时需要付出的代价,对 pvp 的游戏来说是非常重要的,可以防止玩家无责任的进攻。

一般来说,对一个攻击动画来说,轻的攻击起手,持续和收招都比较短,重的攻击起手,持续和收招都比较长。我们也可以很容易的理解,如果一个攻击起手很短,持续很长,收招很短,那么这个攻击一般属于很强的攻击。

格斗游戏的 frame advantage / disadvantage

其实格斗游戏的系统内核是一个数字游戏,更确切的说是一个加减法游戏。要深入理解为什么,我们从 hit stun 和 on hit 来解释一下什么是格斗游戏的 + 和 -。

hit stun 通俗来说,就是防御方在被打到之后播放的受伤动画的长度(一般来说是这样,实际上还有一些细节,我就不打算在这里解释了)。从图中可以看出,在第 2 帧,右边的隆受到了攻击,从第 3 帧开始,右边的隆播放了一个长度为7帧的受伤动画。这时候我们就说左边的隆的 light punch 的 hit stun 是7帧。

那么什么是 on hit 呢?我先告诉大家结果,左边的隆的 light punch 的 on hit 是 +4 帧。我们第一次看到了这个让很多玩家都头大的加号,其实非常容易理解:左边的隆从第 1 帧起手,到第 2 帧 connect 到,到第 5 帧收招,一共用了 5 帧的时间。右边的隆从第 3 帧开始播放了一个长达 7 帧的受伤动画。关键就在图中白色的 6-9 这 4 帧中:这 4 帧中左边的隆是可以行动的,但是右边的不行,因为右边的隆还在播放受伤动画剩下的 4 帧。这时候我们就说左边的隆的 light punch 有 +4 帧的优势,因为左边的隆比对手快 4 帧。

我们再来看另一种情况,比如作为设计师,我要大大削弱这个 light punch 的强度,可以如何做呢?我可以极端的把右边的隆的受伤动画长度减少到只有 1 帧。这时候从第 3 帧开始,右边的隆播放一个长度仅为 1 帧的受伤动画,结果就是第 4-5 帧这 2 帧中右边的隆可以行动了,但是左边的隆还在收招,这时候我们就说左边的隆的 light punch 有 -2 帧的劣势,因为左边的隆比对手慢 2 帧。

block stun 和 on block 只不过是同样的道理应用在对手格挡的情况。

结论

今天总结和分享的都是比较基础的知识,我自己一直以来都没有认真思考和总结过,在这个系统基础上,实际上可以变化出很多更精细的系统和玩法,这也就是类似《街霸》系列这种格斗游戏的深度所在了。举几个简单的例子,比如 counter hit 和存在的意义,比如 frame trap,meaty attack 等等,以后我们有机会再说了。还有有意思的就是 i-frames 和 cancelling frames 相关的,我们也以后再分析吧。

从玩家的角度来说,frame data 可以让你提高自己的格斗游戏的水平,从开发者的角度来说呢?实际上它可以很好地帮助你理解格斗游戏的设计思路和设计细节,也可以让我们看到格斗游戏通过对每一帧的精度控制基本达到了动作游戏的最高要求,这里很多知识和思路我们都可以吸收然后应用到动作游戏中去。