文章主题:《艾尔登法环》,游戏实况,玩家群体,动图,BOSS行为,AI读指令,魂系列,游戏设计,熔炉骑士,药检问题
自《艾尔登法环》发行以来,玩家们一直在讨论与“读指令”这三个词相关的问题。许多不寻常的游戏实况演示以及玩家社群中迅速传播的动图,使得法环中一些BOSS的行为引起了许多人的困惑。
《艾尔登法环》之所以受到众多玩家的指责与批评,并非是因为其魂系列AI读指令已被曝光,这早已不再是新鲜事。《黑暗之魂1》、《血源诅咒》以及《只狼》等魂系游戏中同样存在类似的机制。然而,在排除掉众多新进魂系玩家涌入因素的情况下,为何《艾尔登法环》仍然成为了众矢之的?这主要是因为《艾尔登法环》在游戏设计上存在一些显著的问题,这些问题使得玩家对其产生了强烈的反感和不满。首先,游戏的战斗系统相对单调,缺乏足够的策略性和深度。其次,任务设计和地图布局过于繁琐,导致玩家在游戏中的探索体验不佳。再者,游戏的故事背景和剧情表现力较弱,无法引起玩家的共鸣和投入。综合这些因素,使得《艾尔登法环》在魂系游戏中显得格格不入,受到了许多玩家的批评与质疑。
本文将通过解包,以AI文件、动画文件、各类参数等内容为基础,尝试分析法环中的读指令问题究竟出在哪。
(PS:解包文件是工程逆向的结果,不代表FS社员工真的在用这种逆天脚本写AI)
那么,《艾尔登法环》真的读指令了吗?
真读了。
随便打开一份AI的解包文件,我们就可以看到关于Interrupt的Function
废话不多说,先请出新人折磨王:熔炉骑士AI
IsInterupt()我们从头来看
前边不需要太多的解释了,就是玩家使用道具。那这个Effect Id 5039是干什么的呢?
熔炉骑士动作在分析熔炉骑士的动画文件时,我们会发现许多动作中都包含着”AddSpEffect 5039″。实际上,这个标识代表的是熔炉骑士在出招过程中,其自身的AI系统并不会去执行打断动作的时长。
以图示为例,该挥砍动作的总持续时间长达2.5秒,其中“5039”占据了前1.5秒的时间。换言之,从人工智能的角度看,熔炉骑士必须完成这1.5秒的挥剑动作,才能够去处理其他事情。这种观点是非常合理的。毕竟,我们无法在神龙摆动到一半的时候,突然中断动作去攻击正在服用药物的玩家。
老贼显然没这么离谱。
这里就可以看出“药检”的触发条件了
读到玩家喝药的输入指令自身并没有在其他的招式硬直阶段如果这两个条件都满足,就准备“药检”了:
在”IsInsideTargetCustom”这个游戏中,玩家和熔炉骑士之间的位置关系是至关重要的。为了实现这一目标,AI_DIR_TYPE的分类方式有四种,分别如下所述:
AI_DIR_TYPE_F:自身前方
AI_DIR_TYPE_B:自身后方
AI_DIR_TYPE_L:自身左侧
AI_DIR_TYPE_R:自身右侧后边的参数则是角度和距离。
因此这里的前置条件就是【如果玩家在熔炉骑士前方120°、半径5米的扇形区域内】
loacl4是一个在Goal.Interrupt = function中被定义的变量,这里不再详细说明。它是一个介于1到100之间的随机数,因此,当它的值小于等于80时,就意味着有80%的概率满足条件。
清空熔炉骑士AI中的当前行为列表是一项名为ClearSubGoal的操作。简而言之,这个操作意味着原本计划好的目标——即熔炉骑士AI准备展开的冒险——被瞬间打乱。当你选择服用药物时,这一行为被叫停,使得熔炉骑士AI原本的行动计划被迫中断。
AddSubGoal就是给熔炉骑士AI的行为列表中添加行为,参数比较多我们只说重要的:
10:所添加行为的寿命
3000:动作Id
TARGET_ENE_0:目标
999:下一combo能否执行的目标距离判断在AI领域中,寿命和下一个组合的距离判断是至关重要的参数。它们对于AI的性能表现具有直接影响。然而,在本篇文章中,我们并不打算深入探讨这两个参数的具体作用和意义,因为它们与本文的主题无直接关联。
那动作Id:3000是啥?
归纳一下:
触发“药检”后,如果玩家在熔炉骑士前方120°、半径5米的扇形区域内,80%几率立刻给你一刀,20%几率什么都不做有了前边的经验,这里看起来就方便很多了:
【当玩家位于熔炉骑士前方120°,5~10米间的扇环时】
有40%的几率使用,3005,即冲刺挥砍同理,玩家处于半径10~15范围的扇环时
80%几率以最大速度接近玩家20%几率什么都不做至此,熔炉骑士的药检部分就全部结束了。
熔炉骑士读指令简单框图有两点需要说明一下:
1.看起来熔炉骑士只有玩家在其前方时才会“药检”,那我站在他背后是不是就安全了?
这是理论存在但实际不太存在的情况,除了部分招式的硬直状态,熔炉骑士调整朝向面向玩家是较高优先级的事情,而且根据玩家的相对位置(侧前、后方)不同,转向速度还会大幅度加快。
更不用说,几乎所有招式中,都包含转向调整的窗口时长这种事了。
闪电五连转就像这张图,是盾牌猛击的攻击行为,1.12S的时间内,熔炉骑士可以做到依次以30、240、120、240、360的转身速度调整5次朝向(只要他需要),所以转身180°给你一下都属于是牛刀小试了。
因此,在“药检”的设计上,只考虑前方的情况是非常合理的。
2.这是不是意味着我站在熔炉骑士15米开外喝药就绝对安全了?
理论上是的,至少熔炉骑士的“药检”AI部分不会对你的行为做出反馈了。但这不意味着他本身的行为模块不会想办法搞你。
结论:
熔炉骑士的“药检”AI,通过玩家距离的不同分成了近、中、远3种。其中近距离(5米)基本就是站在脸上了,很少有人会这样喝药;而远距离则需要玩家通过BOSS硬直、自身体力跑位去达成(15米),因此熔炉骑士也不会做出即刻的攻击行为。中距离是玩家与熔炉骑士战斗中最常触发的情况,所以FS的设计师给中距离预备了3种不同的反馈,透过概率来决定。
这套设计我觉得本质上是没有问题的,针对玩家的特殊行为进行反馈;在常见情况中准备了多种行为,增加战斗多样性的同时也强化了对玩家反应维度、操作维度的考察,可圈可点。
而我认为可以优化的地方则是:
“药检”模块直接清空原先的行为列表过于武断,必要性不强喝药作为玩家的特殊行为,可以给反馈,但不需要每次立刻都要给反馈,行为列表本身有“寿命”,结束后自身就会清掉,不需要强制清空执行药检(或者加个概率清空)
近、远距离均有20%的行为留白,但中距离却没有,3种行为均是强压迫性,可以考虑20%留白熔炉骑士在idle状态下基本常驻举盾,玩家本就难以对其造成伤害,留白并不会降低难度;留白也并不代表原地待着不动,而是在小概率的前提下给予战斗节奏的变化
像玩家Shoot类指令当然也是有读的,大同小异就不赘述了,感兴趣的可以自己看下。
除此以外,熔炉骑士还会读很多其他形式的玩家输入,整个读指令模块有1000行,约占其全部AI的1/3。
说到读指令,我们不得不提的重量级人物自然少不了这位:
直接来吧!
这东西内部命名叫“OldLion”,老~狮~子~说实话,打开文件前我还想会不会是BUG或者是逻辑卡死了什么的,没想到打开后发现有点离谱,特别是在看完熔炉骑士之后。
老狮子的AI写法上明显和熔炉骑士习惯不同,99%是不同的设计师制作的,但原理一样,所以我们也不多解释了:
老狮子执行躲避弹道的行为执行有3个前置条件:
检测到玩家输入弹道操作(投掷物、法术、弓箭等)狮子自己身上有5025的状态(可以看出,这里逻辑和熔炉骑士是反的,狮子在少数过渡动作上添加了5025,而在处于这些状态下时,去执行闪避;最终结果还是不打断常规出招)与玩家间的直线距离大于6条件均满足后分为两种情况
IsInsideTarget检测了与玩家间的位置关系,玩家位于其左侧180°扇形时,执行6003行为反之,自然就是玩家位于其右侧180°扇形时,执行6002行为
没了。
这里有几个问题,都很严重:
1.单纯将与玩家的相对方位分成左右两个扇形基本没有实际意义
由于魂系游戏中怪物基本都会随时调整方位来保证时刻朝向目标,因此在玩家不动的情况下,这个判断结果只取决于横跳动作后的朝向调整中的细微误差。最终导致的就是上面马戏团双雄的图里,左右横跳看起来完全是随机的。给人一种只写了50%左跳、50%右跳的逻辑,廉价感很强
2.没有设置读指令的距离上限
老狮子这里躲避的判断前提只有距离大于6,却没有上限,熔炉骑士的AI中上限是15。如果我没记错的话,15应该是大部分法术技能打不到的距离了,卡这个距离是非常合理的设计。大于这个距离,即便你放法术,我也只会常规逼近而不会虚空闪避。
3.完全没有做SpaceCheck
这是我从《艾尔登法环》中红灵NPC的AI里截取的,可以看到里边大量使用了SpaceCheck进行判断,这其实是在判断自身周围一定范围内有没有障碍物。《只狼》中的大部分NPC会在执行侧闪行为前进行类似的判断,这非常合理:右边有障碍物,你还非得往右边闪吗?而这老狮子,从图上可以看出,右边已经是墙了,自己还在往墙里怼,带给玩家的表现就很差,直白来说就是显得傻。
4.没有提供多种反馈形式、没有留白
熔炉骑士的反馈根据距离远近分为了3类,每种距离内又分别分成了2、3、2小类。老狮子的反馈有且仅有一种(左右横跳不算两种),并且在没有检测距离上限的情况下,没有留白就意味着逢Shoot必跳,势必是要被批判一番的。
实际上,老狮子的现有资源就已经可以支持多种反馈形式:
如果玩家在6~10米范围内发射投射物,我是不是可以给予20%的概率前扑攻击,增加压迫性?
是不是可以把后跳加入躲闪序列中?横跳下怪物与玩家距离不变,后跳改变了距离,就会有新的AI模块被激活,产生变数。
最后就是留白,不一定每次玩家shoot都一定要有反馈。
这样一来,可能谈不上多好,起码不会被送到马戏团里了。
结合熔炉骑士来看,老狮子的设计师我感觉是资历较浅亦或是新人/应届生:
老狮子的AI里,函数中所使用的参数都使用了已经定义好默认值的变量,而熔炉骑士的制作者直接在函数的传参里填了值。虽然前者很规范,但做多了在保证没问题的前提下,____________吧?一般来说,操作不可打断的窗口条件时,标签肯定是【不可打断】,而不是反过来把可以打断的地方全都贴上能打断的标签。同样执行玩家方位检测时,熔炉骑士的制作者使用了IsInsideTargetCustom,而老狮子的制作者使用的是IsInsideTarget,它们功能基本一致,区别是前者拥有额外的两个参数输入,用来判断玩家的距离。简单来说就是该严谨的地方严谨了。总结:
正如文章开头所说,读指令在某些使用情景下是完全没有问题的,它不仅可以动态的改变战斗的节奏,还可以让玩家更好的感知到自己行为所产生的反馈,显得AI更加“聪明”。这也是该设计方向能够在FS的游戏当中传承至今的重要原因。《黑暗之魂1》里A大就已经能对玩家的远程攻击产生3种不同形式的反馈了,《只狼》里人人都知道“药检”的存在,却很少有人去喷它是不合理的。而《艾尔登法环》中被玩家截出的种种啼笑皆非的读指令事件,除了少数是因为BUG,绝大部分还是因为实际制作者层面出现了问题:
至少在读指令这一块,有些怪物的AI甚至不如《黑暗之魂1》考虑的周到这并不是老狮子制作者的问题,我更倾向于认为由于制作周期、开放世界制作量指数级爆炸等因素,导致资深员工疲于生产内容,不能去做太细致的指导,也没有时间去review这种“细枝末节”的东西。
最后,希望小高拿了今年的GOTY,多招点人,让我早点玩到DLC和新作。
AI时代,拥有个人微信机器人AI助手!AI时代不落人后!
免费ChatGPT问答,办公、写作、生活好得力助手!
搜索微信号aigc666aigc999或上边扫码,即可拥有个人AI助手!