只狼中AI行为机制的一点研究
前言:
先做一点科普,游戏中的AI指的是用于指导敌人和NPC行动的代码的集合,与手机AI拍照等经过数据样本训练的人工智能有本质区别,即只狼中的AI机制不会随玩家的风格进行变化,更不可能向玩家学习,而是在当前版本发布后便确定下来。正因如此,研究敌人的AI机制便可以为打铁提供一些思路,更可以为以后阐述义手的使用思路做指导。敌人的AI主要考虑三个方面问题,这将在正文部分讨论:
2020/12/5 UPDate:由于要出视频的重置版,因此对专栏做小幅度修改,并不打算过多从AI代码层面出发,一是因为我也没有完全读透,二是因为没必要,几乎没人看得懂。

一、警戒与仇恨
a) 自由状态:此状态下敌人的行动完全为预设行动,有些小兵和精英怪会按固定路线巡逻,有些则会站在固定位置放哨以及发呆,更有甚者会慵懒地坐在地上喝酒聊天等等,但也有一些将和不同阵营的人战斗。了解各个敌人的自由行动模式,可以更好的规划潜行忍杀路线,甚至触发一些可以窃听的内容。
b) 阵营:不同的敌人分属不同的阵营,游戏中常见的敌人类型有:苇名众(包括寄鹰众和狗)、孤影众(包括忍犬)、乱波众(不包括赤备乱波)、仙峰寺众(武僧、药僧、太郎兵等)、蜈蚣众、弥山院众、水生村民、蛇眼、於伽美武士、源之宫贵人、菩萨谷猴子兵、盗贼、内府赤备军、各种鱼、中立的NPC,以及一些各自为战的角色或者失去理智的敌人。不同阵营之间有敌对,也有同盟,且同盟关系可能改变。一般的苇名人(以及平田的所有敌人)均为6号阵营,而内府势力为24号阵营(平田的孤影众按6号算),6号和24号的见了面就会打起来。而火牛就比较特殊,它不是6号,火牛的特点是和6号阵营相互不警戒,6号对火牛不能造成伤害,但是火牛可以对6号造成伤害。赤鬼和穴山之间也是这样的关系,穴山对赤鬼没有伤害。相同阵营的单位之间无法造成伤害也不会产生仇恨。也有一些单方面产生仇恨的阵营,由于阵营多达三十余种,我也没有完全摸清楚,大家可以自行探索。在傀儡术的影响下,敌人失去自身阵营,成为和狼同盟的阵营,攻击时会误伤到狼。在口哨影响下,小动物失去阵营和理智,展开无差别攻击。
c) 警戒:所有AI的警戒范围包括三个区域,如图:

其中黄色区域代表听力区域,玩家进入这个区域,敌人头上就会出现黄色三角并引起敌人转身,但消音情况下则不引起敌人警觉(包括学习技能消音后,蹲在敌人身后,或直接月隐糖),由于敌人背后没有触觉警戒,所以月隐后在敌人身后摩擦走动也不会引起警戒;绿色部分是敌人的余光区域,会逐渐积累警戒值,当警戒三角还没有完全黄色时,敌人的自由行动不受影响,完全积累后敌人会转向玩家;红色区域采用渐变色,表示视力区域,此区域内离敌人越近,警戒值积累越快,当警戒值完全积累为黄色后敌人开始注意到狼,此时远程攻击的枪炮手往往不需要接近玩家便可以开始积累红色警戒值,积累满后开始作战,但近战敌人往往需要进一步靠近才能开战。此外,大的响动可以引起附近敌人警觉,比如实施忍杀、撞坏物品、甩鞭炮、吹口哨、砸陶片等,敌人会前往来源处查看情况。不同的敌人警戒范围也不同,月隐糖的作用便是减小余光和视力范围并消除听力范围。只要没有开战,敌人就处于可以被忍杀的状态。诸如水生剑圣,落谷狙神、火牛等,警戒模式并不相同,这些大多为玩家进入一定区域后就自动进入警戒。BOSS几乎都是自动警戒,因此BOSS往往没有索敌的过程和功能,也正因如此,幻影破戒僧不存在听力区,玩家用雾鸦跳背刺幻影破戒僧时不用担心身体碰撞会被发现。
d) 仇恨:即战斗目标,狼出现在敌人的视力范围内,或者主动开战,或者由剧情和地形等触发,都可以进入战斗,引起仇恨。每个AI都只能对一个目标产生仇恨,即在一对多的战斗中每次出招都至多锁定一个目标,而不会考虑多个敌人的位置招式等问题。当敌人附近存在多个敌人的敌人时,一般以刚造成伤害或者距离最近的敌人为仇恨目标。敌对阵营之间可以产生仇恨,机制也是先引起警觉,然后看到敌人后进入战斗。但也存在中立的NPC如穴山、阵左等,只要狼不去招惹他们,就不会对狼产生仇恨,甚至可以和狼一起战斗。

二、敌人的自身状态
a) 根据自身防御类型做出的反应:
i. 对峙:敌人会有对峙状态,此时敌人不处于任何招式或动作中,敌人的躯干会自然恢复,并且受狼的正面攻击时格挡型敌人可以招架、弹开甚至侧躲和识破(平田义父和老一心比较明显,一般敌人的对峙时间则比较短)。对峙时间过长时,敌人会主动出击,自由使用招式。对于处于对峙状态的敌人最好的策略就是及时给予打击,使敌人防御或者出招。需要特殊说明两点:1、故意侧面对敌人时,敌人不会进行防御,在天守阁卡门逃课即是如此;2、由于突刺是不能格挡的,所以向对峙状态的敌人长按攻击键发动突刺,敌人往往直接弹开,而不是招架,但巨型忍者突刺则几乎不会被弹开。对峙状态下敌人可以受到各种干扰,在AI文件中会有Interrupt条目,罗列出该敌人会对那些狼的动作做出反应,一般包括:防御、弹开、射击检测、道具检测、狼的位置检测、空间位置检测等,这些都将在第三节中具体说明。
ii. 招架:受到正面攻击时格挡型敌人会招架,招架后存在固定的反击招式,可利用这种方式简化敌人的变招甚至制造复读。不同敌人招架的次数也不同,一般可以认为连招的最后一下会引起弹开,之前均为招架。对于不是连招的情况,一般能弹开的敌人都是在招架动作还没结束时再受到攻击就触发弹开。平田山贼没有弹开动作,那么就会不停的招架。一般格挡型敌人对带追斩的义手忍具则弹开追斩,但是不同敌人也有不同格挡策略,需要玩家自行摸索。还有一种引诱招架的方式,就是连招不打完就换招,最常见的为前摇较短的锈丸加两下连击叩拜拳,或者锈丸加四下飞渡浮舟,都可以比较稳定的循环(我个人认为狼的部分动作带有重置招架计数的功能,DSA中也有类似条目,因此敌人才恰好总是弹开最后一击,但未证实该条目的实际作用)。敌人招架时也分左右手,心中的一心在其左手侧招架后更容易出阴间下段,玩家要注意防范。
iii. 弹开:弹开后存在固定的反击招式,并且弹开也会给狼造成一段硬直(除非狼有血刀术),因此可以通过不断进攻的方式诱发敌人弹开后的反击,以化简变招,这也是最基础的拼刀模式。敌人弹开的位置在在左侧还是右侧也会影响其出招,部分招式仅在特定侧弹开后才触发,所以有长枪突刺诱导左手侧弹开的方法。
iv. 受伤:格挡型敌人在受HP伤后会快速调整至招架状态,如果在招架状态仍持续受到如血刀术伤害或剑气伤害,则会选择霸体出招或者后撤。例如对孤影众忌手旁边的孤影众开血刀术,则无法对忌手使用引诱招架的打法。即便没有血刀术,部分敌人也会在受伤后选择霸体出招,甚至在招架后直接霸体出招,以打乱玩家节奏。对于霸体型敌人,则没有前面几种防御类型,霸体敌人总可以自由出招,因此面对霸体型敌人时切莫贪刀。霸体型敌人以自身韧性作为防御,将霸体敌人的韧性削减至零后,敌人将中断当前行动,直接进入一小段硬直(注意区分韧性和冲击力)。对于持刀的霸体型敌人,可以通过弹开使其躯干崩溃如破戒僧三阶段和无首狮子猿,但对狮子猿和怨恨之鬼则必须主动进攻才能使躯干崩溃。
b) 所处位置:敌人离开预设管辖区域后将优先退回区域,仅在主角狼距离较近时恢复进攻;当敌人显著远离预设区域时,将不再主动进攻,但仍保留招架和弹开后的反击;继续远离,敌人将完全失去行动能力甚至反击和格挡的能力。这是面对精英怪的一种很普适的逃课思路。我自己试过可行的包括:忍者猎人(上桥后会后退,过了桥再走一段就完全不会动)、蚺蛇重藏(到达水的对岸后放弃反击)、水圣剑圣(过桥后放弃主动进攻和招架后反击)、孤儿众枪足之正长(三年前的往竹林坡方向第一个太郎兵处勾引,正长将放弃主动进攻和招架后反击,三年后的在草丛处开始后退,到大将和孤儿众打架的桥之间有个门,门口是个夜叉糖,正长过了这个门就放弃抵抗)
c) 自身计数:敌人会对自身的部分动作计数,当达到计数条件时触发特定招式(非白帽的孤儿众招架四下出仙峰脚),通过这种机制可以预判敌人的出招。此机制普遍存在,大家可以自行摸索,心中义父的雾鸦二连最多连出4次,可能也和计数有关。很多敌人在防御时也会计数,第二次防御转为弹开。
d) 阶段:本阶段内或新阶段都可能触发新招式:
i. 进入战斗或换阶段
1) 固定招式:剑圣前屑一郎开局固定不死斩;白蛇神社的孤儿众二阶段开始,固定使用夜叉戮糖;怨鬼三阶段开始固定转圈;屑一郎三阶段开始固定远程突刺;破戒僧二阶段固定召唤幻影,除非被直接忍杀了;破戒僧三阶段和幻影破戒僧开局固定使用大风车;天守阁一心的二阶段,固定使用纵火加秘传一心;心中的剑圣一阶段固定不死斩大回旋……
2) 优先招式:怨鬼二阶段开始时会检测和狼的距离,距离较近时则下段远离后接纵向火,距离较远则直接纵向火,但也存在极小概率不出这一招,所以纵向火就是一个优先招式;剑圣三阶段优先打雷,但不是一定打雷……
3) 新增招式:多数BOSS进入新的阶段后,会增加应对招式,或者连招模式,并且抛弃部分之前的招式,例如剑圣二阶段的甩枪后撤,在三阶段加入巴之雷作为新的后撤招式(正因如此,很多玩家会发现对剑圣进攻比较猛烈时,剑圣更容易打雷),龙闪同样为三阶段新增招式;屑一郎的跳劈,一阶段必然接突刺,二阶段则为突刺或下段,巴流时则为突刺、下段、飞渡浮舟第五下,三选一……
ii. HP和躯干
1) HP小于一定比例时,部分敌人会启用滞空招式以方便玩家进行对空忍杀,如七面武士、双刀金莱等……火牛在满足HP和躯干将至一定程度后,硬直动画将换为撞墙自杀(具体数字忘了)、正长吃夜叉糖虽然是优先级比较高的,但是HP小于一定比例后就绝对不会吃糖了等等……由于HP判断在BOSS战中用的不多,所以记得不太清楚了hhh
2) 躯干积累大于一定值时,孤儿众、天守阁武士、武士大将、巨型忍者 枭等,会启用躯干吐息,在一小段硬直后回复一段躯干,建议及时打断;屑一郎一二阶段则会在躯干大于40%时启用滞空四连射,暗示大家点赞投币收藏关注四连;弥山院在躯干积累大于75%且刚刚被识破的情况下有一招重挥;狮子猿一阶段在被打了一半左右(躯干还是HP不确定)后如果出现二次削韧的后仰,则大概率再接一个飞扑投技……

三、狼的状态
狼的状态和动作主要作为敌人自由出招的依据,以及确定被干扰的类型
a) 使用道具的情况:很多敌人会检测到狼使用葫芦等道具,并产生反制行动,如屑一郎会突刺、破戒僧和剑圣会跳劈等等……幻影破戒僧对鸣种也有反应,第三次使用鸣种后破戒僧会快速使用后跳斩,而非大风车。
b) 根据狼的防御类型作出反应:狼的防御同样也包括“对峙”、“招架”、“弹开”、“受伤”四种,再外加一个“打空”。“打空”三种,分别是完全没打到,打到了无敌帧,和被识破。长期对峙导致敌人自由出招不再赘述;剑圣或老一心一阶段的三连平A,第二下被弹开或打空时不出第三下;怨鬼磕头仅在造成躯干伤的情况下可能三连磕;巴流屑一郎远程突刺在弹开或命中的情况下接投技;破戒僧的突刺在弹开后有后招;屑一郎左右二连都被弹开后才必然触发飞渡浮舟,巴流时飞渡浮舟最后一下需要招架或弹开才诱发突刺,等等等等……赤成珠使狼获得霸体,所以和霸体敌人一样存在“受伤”这种防御类型。
c) 躯干崩溃:敌人的部分招式会在打崩狼的躯干时中断(狼躯干崩溃时自身硬直较大,一般不利用这个特性;破戒僧的部分连招中如果打崩躯干则会停止或者减少几下;屑一郎的慢斩加脚踢加射箭,如果慢斩时打崩躯干,则没有后招等等……),或者接一个投技(大将的抓和凛的摸脸)
d) 狼的位置:
i. 近距离正面:最普通的拼刀即是通过保持正面近身和引诱弹开来化简敌人的变招,但由于敌人在此种情形下往往使用连招,所以被认为是最正统的打铁(也有一些人喜欢管其他打法统称逃课,我个人是不认同的,怨鬼跳楼的确是逃课,但是忍具流或者不死斩流似乎不必太过苛责)。
ii. 中距离正面:部分敌人对中距离有反制措施,如怨鬼下段鬼车后撤或后跳后会使用中距离的招式,对远处和裆下都没有效果。不过中距离是否有明确界定我也不是特别清楚,大家可以自行探索。
iii. 远距离正面:部分敌人有远距离招式,比如义父手里剑加追斩、手里剑二连加跳劈、怨鬼各种AOE、剑圣开枪等等……大多数敌人还是倾向于直接追击,并且追的过程中狼是加速跑,不能恢复躯干,但敌人不存在加速跑一说,本来就很快,所以可以恢复躯干……
iv. 背面:绝大多数敌人检测到狼在背面,都会转身并且无法格挡,所以可以故意跑到背面以削减敌人的HP;天守阁苇名一心则在转身的同时恢复对峙状态,而非直接招架,要小心侧躲后的反斩和投技;巨型忍者 枭则会转身同时后撤,比较机警。
e) 回生:回生后敌人选择对峙状态,而不会马上发动进攻,应该只是老贼给玩家一个喝药的时间。但是喝药却会触发敌人的AI检测,部分在喝药硬直结束前即可造成伤害的敌人(主要是天守阁苇名一心)不推荐回生后喝药,其他情况下回生加喝药可以满血再战。
上述AI机制有一些是多重检测的,比如剑圣二阶段的喝药检测,同时也要检测距离,近距离是跳戳,中距离是跳劈,远距离会重计划;义父的喝药检测也是如此,按距离分为三段。上述内容多为从游戏直观体感出发的,而不过多引入AI程序的问题,关于进阶的AI干扰对策机制,可以查阅:


四、控制AI
a) 鞭炮、灰烬团等致盲,敌人将中断绝大多数的行动,并有一小段硬直(可以压剑圣的枪,也可以中断一些霸体招式,当然一般用来欺负破戒僧)。在潜行时,致盲还能使敌人的视力警戒区失效,可以用于连续暗杀。
b) 针对性控制:鞭炮对动物造成较大硬直、於伽美(包括蛇眼)和凛中毒硬直、一般敌人的炎上硬直、爱哭鬼对怨灵和怨鬼造成的硬直、霸体类敌人被削韧后硬直、变若水红眼病人士遇火硬直、长枪卸甲的硬直、机关斧破盾时太郎兵的硬直等等。这些控制方法大多数可以打断敌人的动作(包括霸体动作),正是这些控制AI的方法更好的体现了义手忍具的价值。
c) 打雷和炎上异常状态,这两个优先级非常高,也可以用于打断敌人动作,只不过敌人在空中进入异常状态后不一定会硬直。
d) 削韧硬直,这个相对复杂。霸体敌人一般有韧性这一概念,如怨恨之鬼有640韧性,而玩家的平砍有40点削韧,因此打16刀后冤鬼会进入削韧硬直,原先的攻击动作中断。狼的绝大多数攻击动作均有削韧数值,而敌人的动作全部都不能削韧(韧性是部分霸体敌人独有的,而削韧正是玩家独有的)。

总结:
唠叨了这么多,感谢您能看到最后。年度最佳游戏的诞生,融合了丰富的AI机制,但机制毕竟是有限的,了解敌人的机制才能知己知彼,百战不殆。我认为,和敌人作战的核心在于针对性,利用敌人的特点和弱点实施打击,任何的打法也都是针对特定的一个或一类敌人设计的,除了风灵月影的一击必杀,还没有万能的打法出现。而要做到更好的针对敌人,AI机制是一定要了解的。最后的最后,感谢@叫嚣的列兵 和@ZeeGan 两位大佬对本文的补充与完善!
