只狼中AI行為機(jī)制的一點(diǎn)研究
前言:
先做一點(diǎn)科普,游戲中的AI指的是用于指導(dǎo)敵人和NPC行動(dòng)的代碼的集合,與手機(jī)AI拍照等經(jīng)過(guò)數(shù)據(jù)樣本訓(xùn)練的人工智能有本質(zhì)區(qū)別,即只狼中的AI機(jī)制不會(huì)隨玩家的風(fēng)格進(jìn)行變化,更不可能向玩家學(xué)習(xí),而是在當(dāng)前版本發(fā)布后便確定下來(lái)。正因如此,研究敵人的AI機(jī)制便可以為打鐵提供一些思路,更可以為以后闡述義手的使用思路做指導(dǎo)。敵人的AI主要考慮三個(gè)方面問(wèn)題,這將在正文部分討論:
2020/12/5 UPDate:由于要出視頻的重置版,因此對(duì)專欄做小幅度修改,并不打算過(guò)多從AI代碼層面出發(fā),一是因?yàn)槲乙矝](méi)有完全讀透,二是因?yàn)闆](méi)必要,幾乎沒(méi)人看得懂。
?

一、警戒與仇恨
a)?????? 自由狀態(tài):此狀態(tài)下敵人的行動(dòng)完全為預(yù)設(shè)行動(dòng),有些小兵和精英怪會(huì)按固定路線巡邏,有些則會(huì)站在固定位置放哨以及發(fā)呆,更有甚者會(huì)慵懶地坐在地上喝酒聊天等等,但也有一些將和不同陣營(yíng)的人戰(zhàn)斗。了解各個(gè)敵人的自由行動(dòng)模式,可以更好的規(guī)劃潛行忍殺路線,甚至觸發(fā)一些可以竊聽的內(nèi)容。
b)?????? 陣營(yíng):不同的敵人分屬不同的陣營(yíng),游戲中常見(jiàn)的敵人類型有:葦名眾(包括寄鷹眾和狗)、孤影眾(包括忍犬)、亂波眾(不包括赤備亂波)、仙峰寺眾(武僧、藥僧、太郎兵等)、蜈蚣眾、彌山院眾、水生村民、蛇眼、於伽美武士、源之宮貴人、菩薩谷猴子兵、盜賊、內(nèi)府赤備軍、各種魚、中立的NPC,以及一些各自為戰(zhàn)的角色或者失去理智的敵人。不同陣營(yíng)之間有敵對(duì),也有同盟,且同盟關(guān)系可能改變。一般的葦名人(以及平田的所有敵人)均為6號(hào)陣營(yíng),而內(nèi)府勢(shì)力為24號(hào)陣營(yíng)(平田的孤影眾按6號(hào)算),6號(hào)和24號(hào)的見(jiàn)了面就會(huì)打起來(lái)。而火牛就比較特殊,它不是6號(hào),火牛的特點(diǎn)是和6號(hào)陣營(yíng)相互不警戒,6號(hào)對(duì)火牛不能造成傷害,但是火??梢詫?duì)6號(hào)造成傷害。赤鬼和穴山之間也是這樣的關(guān)系,穴山對(duì)赤鬼沒(méi)有傷害。相同陣營(yíng)的單位之間無(wú)法造成傷害也不會(huì)產(chǎn)生仇恨。也有一些單方面產(chǎn)生仇恨的陣營(yíng),由于陣營(yíng)多達(dá)三十余種,我也沒(méi)有完全摸清楚,大家可以自行探索。在傀儡術(shù)的影響下,敵人失去自身陣營(yíng),成為和狼同盟的陣營(yíng),攻擊時(shí)會(huì)誤傷到狼。在口哨影響下,小動(dòng)物失去陣營(yíng)和理智,展開無(wú)差別攻擊。
c)??????? 警戒:所有AI的警戒范圍包括三個(gè)區(qū)域,如圖:

其中黃色區(qū)域代表聽力區(qū)域,玩家進(jìn)入這個(gè)區(qū)域,敵人頭上就會(huì)出現(xiàn)黃色三角并引起敵人轉(zhuǎn)身,但消音情況下則不引起敵人警覺(jué)(包括學(xué)習(xí)技能消音后,蹲在敵人身后,或直接月隱糖),由于敵人背后沒(méi)有觸覺(jué)警戒,所以月隱后在敵人身后摩擦走動(dòng)也不會(huì)引起警戒;綠色部分是敵人的余光區(qū)域,會(huì)逐漸積累警戒值,當(dāng)警戒三角還沒(méi)有完全黃色時(shí),敵人的自由行動(dòng)不受影響,完全積累后敵人會(huì)轉(zhuǎn)向玩家;紅色區(qū)域采用漸變色,表示視力區(qū)域,此區(qū)域內(nèi)離敵人越近,警戒值積累越快,當(dāng)警戒值完全積累為黃色后敵人開始注意到狼,此時(shí)遠(yuǎn)程攻擊的槍炮手往往不需要接近玩家便可以開始積累紅色警戒值,積累滿后開始作戰(zhàn),但近戰(zhàn)敵人往往需要進(jìn)一步靠近才能開戰(zhàn)。此外,大的響動(dòng)可以引起附近敵人警覺(jué),比如實(shí)施忍殺、撞壞物品、甩鞭炮、吹口哨、砸陶片等,敵人會(huì)前往來(lái)源處查看情況。不同的敵人警戒范圍也不同,月隱糖的作用便是減小余光和視力范圍并消除聽力范圍。只要沒(méi)有開戰(zhàn),敵人就處于可以被忍殺的狀態(tài)。諸如水生劍圣,落谷狙神、火牛等,警戒模式并不相同,這些大多為玩家進(jìn)入一定區(qū)域后就自動(dòng)進(jìn)入警戒。BOSS幾乎都是自動(dòng)警戒,因此BOSS往往沒(méi)有索敵的過(guò)程和功能,也正因如此,幻影破戒僧不存在聽力區(qū),玩家用霧鴉跳背刺幻影破戒僧時(shí)不用擔(dān)心身體碰撞會(huì)被發(fā)現(xiàn)。
d)?????? 仇恨:即戰(zhàn)斗目標(biāo),狼出現(xiàn)在敵人的視力范圍內(nèi),或者主動(dòng)開戰(zhàn),或者由劇情和地形等觸發(fā),都可以進(jìn)入戰(zhàn)斗,引起仇恨。每個(gè)AI都只能對(duì)一個(gè)目標(biāo)產(chǎn)生仇恨,即在一對(duì)多的戰(zhàn)斗中每次出招都至多鎖定一個(gè)目標(biāo),而不會(huì)考慮多個(gè)敵人的位置招式等問(wèn)題。當(dāng)敵人附近存在多個(gè)敵人的敵人時(shí),一般以剛造成傷害或者距離最近的敵人為仇恨目標(biāo)。敵對(duì)陣營(yíng)之間可以產(chǎn)生仇恨,機(jī)制也是先引起警覺(jué),然后看到敵人后進(jìn)入戰(zhàn)斗。但也存在中立的NPC如穴山、陣左等,只要狼不去招惹他們,就不會(huì)對(duì)狼產(chǎn)生仇恨,甚至可以和狼一起戰(zhàn)斗。

二、敵人的自身狀態(tài)
a)?????? 根據(jù)自身防御類型做出的反應(yīng):
?????????? i.??????????? 對(duì)峙:敵人會(huì)有對(duì)峙狀態(tài),此時(shí)敵人不處于任何招式或動(dòng)作中,敵人的軀干會(huì)自然恢復(fù),并且受狼的正面攻擊時(shí)格擋型敵人可以招架、彈開甚至側(cè)躲和識(shí)破(平田義父和老一心比較明顯,一般敵人的對(duì)峙時(shí)間則比較短)。對(duì)峙時(shí)間過(guò)長(zhǎng)時(shí),敵人會(huì)主動(dòng)出擊,自由使用招式。對(duì)于處于對(duì)峙狀態(tài)的敵人最好的策略就是及時(shí)給予打擊,使敵人防御或者出招。需要特殊說(shuō)明兩點(diǎn):1、故意側(cè)面對(duì)敵人時(shí),敵人不會(huì)進(jìn)行防御,在天守閣卡門逃課即是如此;2、由于突刺是不能格擋的,所以向?qū)χ艩顟B(tài)的敵人長(zhǎng)按攻擊鍵發(fā)動(dòng)突刺,敵人往往直接彈開,而不是招架,但巨型忍者突刺則幾乎不會(huì)被彈開。對(duì)峙狀態(tài)下敵人可以受到各種干擾,在AI文件中會(huì)有Interrupt條目,羅列出該敵人會(huì)對(duì)那些狼的動(dòng)作做出反應(yīng),一般包括:防御、彈開、射擊檢測(cè)、道具檢測(cè)、狼的位置檢測(cè)、空間位置檢測(cè)等,這些都將在第三節(jié)中具體說(shuō)明。
????????? ii.??????????? 招架:受到正面攻擊時(shí)格擋型敵人會(huì)招架,招架后存在固定的反擊招式,可利用這種方式簡(jiǎn)化敵人的變招甚至制造復(fù)讀。不同敵人招架的次數(shù)也不同,一般可以認(rèn)為連招的最后一下會(huì)引起彈開,之前均為招架。對(duì)于不是連招的情況,一般能彈開的敵人都是在招架動(dòng)作還沒(méi)結(jié)束時(shí)再受到攻擊就觸發(fā)彈開。平田山賊沒(méi)有彈開動(dòng)作,那么就會(huì)不停的招架。一般格擋型敵人對(duì)帶追斬的義手忍具則彈開追斬,但是不同敵人也有不同格擋策略,需要玩家自行摸索。還有一種引誘招架的方式,就是連招不打完就換招,最常見(jiàn)的為前搖較短的銹丸加兩下連擊叩拜拳,或者銹丸加四下飛渡浮舟,都可以比較穩(wěn)定的循環(huán)(我個(gè)人認(rèn)為狼的部分動(dòng)作帶有重置招架計(jì)數(shù)的功能,DSA中也有類似條目,因此敵人才恰好總是彈開最后一擊,但未證實(shí)該條目的實(shí)際作用)。敵人招架時(shí)也分左右手,心中的一心在其左手側(cè)招架后更容易出陰間下段,玩家要注意防范。
??????? iii.??????????? 彈開:彈開后存在固定的反擊招式,并且彈開也會(huì)給狼造成一段硬直(除非狼有血刀術(shù)),因此可以通過(guò)不斷進(jìn)攻的方式誘發(fā)敵人彈開后的反擊,以化簡(jiǎn)變招,這也是最基礎(chǔ)的拼刀模式。敵人彈開的位置在在左側(cè)還是右側(cè)也會(huì)影響其出招,部分招式僅在特定側(cè)彈開后才觸發(fā),所以有長(zhǎng)槍突刺誘導(dǎo)左手側(cè)彈開的方法。
??????? iv.??????????? 受傷:格擋型敵人在受HP傷后會(huì)快速調(diào)整至招架狀態(tài),如果在招架狀態(tài)仍持續(xù)受到如血刀術(shù)傷害或劍氣傷害,則會(huì)選擇霸體出招或者后撤。例如對(duì)孤影眾忌手旁邊的孤影眾開血刀術(shù),則無(wú)法對(duì)忌手使用引誘招架的打法。即便沒(méi)有血刀術(shù),部分?jǐn)橙艘矔?huì)在受傷后選擇霸體出招,甚至在招架后直接霸體出招,以打亂玩家節(jié)奏。對(duì)于霸體型敵人,則沒(méi)有前面幾種防御類型,霸體敵人總可以自由出招,因此面對(duì)霸體型敵人時(shí)切莫貪刀。霸體型敵人以自身韌性作為防御,將霸體敵人的韌性削減至零后,敵人將中斷當(dāng)前行動(dòng),直接進(jìn)入一小段硬直(注意區(qū)分韌性和沖擊力)。對(duì)于持刀的霸體型敵人,可以通過(guò)彈開使其軀干崩潰如破戒僧三階段和無(wú)首獅子猿,但對(duì)獅子猿和怨恨之鬼則必須主動(dòng)進(jìn)攻才能使軀干崩潰。
b)?????? 所處位置:敵人離開預(yù)設(shè)管轄區(qū)域后將優(yōu)先退回區(qū)域,僅在主角狼距離較近時(shí)恢復(fù)進(jìn)攻;當(dāng)敵人顯著遠(yuǎn)離預(yù)設(shè)區(qū)域時(shí),將不再主動(dòng)進(jìn)攻,但仍保留招架和彈開后的反擊;繼續(xù)遠(yuǎn)離,敵人將完全失去行動(dòng)能力甚至反擊和格擋的能力。這是面對(duì)精英怪的一種很普適的逃課思路。我自己試過(guò)可行的包括:忍者獵人(上橋后會(huì)后退,過(guò)了橋再走一段就完全不會(huì)動(dòng))、蚺蛇重藏(到達(dá)水的對(duì)岸后放棄反擊)、水圣劍圣(過(guò)橋后放棄主動(dòng)進(jìn)攻和招架后反擊)、孤兒眾槍足之正長(zhǎng)(三年前的往竹林坡方向第一個(gè)太郎兵處勾引,正長(zhǎng)將放棄主動(dòng)進(jìn)攻和招架后反擊,三年后的在草叢處開始后退,到大將和孤兒眾打架的橋之間有個(gè)門,門口是個(gè)夜叉糖,正長(zhǎng)過(guò)了這個(gè)門就放棄抵抗)
c)??????? 自身計(jì)數(shù):敵人會(huì)對(duì)自身的部分動(dòng)作計(jì)數(shù),當(dāng)達(dá)到計(jì)數(shù)條件時(shí)觸發(fā)特定招式(非白帽的孤兒眾招架四下出仙峰腳),通過(guò)這種機(jī)制可以預(yù)判敵人的出招。此機(jī)制普遍存在,大家可以自行摸索,心中義父的霧鴉二連最多連出4次,可能也和計(jì)數(shù)有關(guān)。很多敵人在防御時(shí)也會(huì)計(jì)數(shù),第二次防御轉(zhuǎn)為彈開。
d)?????? 階段:本階段內(nèi)或新階段都可能觸發(fā)新招式:
??? ? ?? i.??????????? 進(jìn)入戰(zhàn)斗或換階段
????????????? 1)?????? 固定招式:劍圣前屑一郎開局固定不死斬;白蛇神社的孤兒眾二階段開始,固定使用夜叉戮糖;怨鬼三階段開始固定轉(zhuǎn)圈;屑一郎三階段開始固定遠(yuǎn)程突刺;破戒僧二階段固定召喚幻影,除非被直接忍殺了;破戒僧三階段和幻影破戒僧開局固定使用大風(fēng)車;天守閣一心的二階段,固定使用縱火加秘傳一心;心中的劍圣一階段固定不死斬大回旋……
????????????? 2)?????? 優(yōu)先招式:怨鬼二階段開始時(shí)會(huì)檢測(cè)和狼的距離,距離較近時(shí)則下段遠(yuǎn)離后接縱向火,距離較遠(yuǎn)則直接縱向火,但也存在極小概率不出這一招,所以縱向火就是一個(gè)優(yōu)先招式;劍圣三階段優(yōu)先打雷,但不是一定打雷……
????????????? 3)?????? 新增招式:多數(shù)BOSS進(jìn)入新的階段后,會(huì)增加應(yīng)對(duì)招式,或者連招模式,并且拋棄部分之前的招式,例如劍圣二階段的甩槍后撤,在三階段加入巴之雷作為新的后撤招式(正因如此,很多玩家會(huì)發(fā)現(xiàn)對(duì)劍圣進(jìn)攻比較猛烈時(shí),劍圣更容易打雷),龍閃同樣為三階段新增招式;屑一郎的跳劈,一階段必然接突刺,二階段則為突刺或下段,巴流時(shí)則為突刺、下段、飛渡浮舟第五下,三選一……
????????? ii.??????????? HP和軀干
?????????? ? 1)?????? HP小于一定比例時(shí),部分?jǐn)橙藭?huì)啟用滯空招式以方便玩家進(jìn)行對(duì)空忍殺,如七面武士、雙刀金萊等……火牛在滿足HP和軀干將至一定程度后,硬直動(dòng)畫將換為撞墻自殺(具體數(shù)字忘了)、正長(zhǎng)吃夜叉糖雖然是優(yōu)先級(jí)比較高的,但是HP小于一定比例后就絕對(duì)不會(huì)吃糖了等等……由于HP判斷在BOSS戰(zhàn)中用的不多,所以記得不太清楚了hhh
???????????? 2)?????? 軀干積累大于一定值時(shí),孤兒眾、天守閣武士、武士大將、巨型忍者 梟等,會(huì)啟用軀干吐息,在一小段硬直后回復(fù)一段軀干,建議及時(shí)打斷;屑一郎一二階段則會(huì)在軀干大于40%時(shí)啟用滯空四連射,暗示大家點(diǎn)贊投幣收藏關(guān)注四連;彌山院在軀干積累大于75%且剛剛被識(shí)破的情況下有一招重?fù)];獅子猿一階段在被打了一半左右(軀干還是HP不確定)后如果出現(xiàn)二次削韌的后仰,則大概率再接一個(gè)飛撲投技……

三、狼的狀態(tài)
狼的狀態(tài)和動(dòng)作主要作為敵人自由出招的依據(jù),以及確定被干擾的類型
a)?????? 使用道具的情況:很多敵人會(huì)檢測(cè)到狼使用葫蘆等道具,并產(chǎn)生反制行動(dòng),如屑一郎會(huì)突刺、破戒僧和劍圣會(huì)跳劈等等……幻影破戒僧對(duì)鳴種也有反應(yīng),第三次使用鳴種后破戒僧會(huì)快速使用后跳斬,而非大風(fēng)車。
b)?????? 根據(jù)狼的防御類型作出反應(yīng):狼的防御同樣也包括“對(duì)峙”、“招架”、“彈開”、“受傷”四種,再外加一個(gè)“打空”?!按蚩铡比N,分別是完全沒(méi)打到,打到了無(wú)敵幀,和被識(shí)破。長(zhǎng)期對(duì)峙導(dǎo)致敵人自由出招不再贅述;劍圣或老一心一階段的三連平A,第二下被彈開或打空時(shí)不出第三下;怨鬼磕頭僅在造成軀干傷的情況下可能三連磕;巴流屑一郎遠(yuǎn)程突刺在彈開或命中的情況下接投技;破戒僧的突刺在彈開后有后招;屑一郎左右二連都被彈開后才必然觸發(fā)飛渡浮舟,巴流時(shí)飛渡浮舟最后一下需要招架或彈開才誘發(fā)突刺,等等等等……赤成珠使狼獲得霸體,所以和霸體敵人一樣存在“受傷”這種防御類型。
c)??????? 軀干崩潰:敵人的部分招式會(huì)在打崩狼的軀干時(shí)中斷(狼軀干崩潰時(shí)自身硬直較大,一般不利用這個(gè)特性;破戒僧的部分連招中如果打崩軀干則會(huì)停止或者減少幾下;屑一郎的慢斬加腳踢加射箭,如果慢斬時(shí)打崩軀干,則沒(méi)有后招等等……),或者接一個(gè)投技(大將的抓和凜的摸臉)
d)?????? 狼的位置:
?????????? i.??????????? 近距離正面:最普通的拼刀即是通過(guò)保持正面近身和引誘彈開來(lái)化簡(jiǎn)敵人的變招,但由于敵人在此種情形下往往使用連招,所以被認(rèn)為是最正統(tǒng)的打鐵(也有一些人喜歡管其他打法統(tǒng)稱逃課,我個(gè)人是不認(rèn)同的,怨鬼跳樓的確是逃課,但是忍具流或者不死斬流似乎不必太過(guò)苛責(zé))。
????????? ii.??????????? 中距離正面:部分?jǐn)橙藢?duì)中距離有反制措施,如怨鬼下段鬼車后撤或后跳后會(huì)使用中距離的招式,對(duì)遠(yuǎn)處和襠下都沒(méi)有效果。不過(guò)中距離是否有明確界定我也不是特別清楚,大家可以自行探索。
??????? iii.??????????? 遠(yuǎn)距離正面:部分?jǐn)橙擞羞h(yuǎn)距離招式,比如義父手里劍加追斬、手里劍二連加跳劈、怨鬼各種AOE、劍圣開槍等等……大多數(shù)敵人還是傾向于直接追擊,并且追的過(guò)程中狼是加速跑,不能恢復(fù)軀干,但敵人不存在加速跑一說(shuō),本來(lái)就很快,所以可以恢復(fù)軀干……
??????? iv.??????????? 背面:絕大多數(shù)敵人檢測(cè)到狼在背面,都會(huì)轉(zhuǎn)身并且無(wú)法格擋,所以可以故意跑到背面以削減敵人的HP;天守閣葦名一心則在轉(zhuǎn)身的同時(shí)恢復(fù)對(duì)峙狀態(tài),而非直接招架,要小心側(cè)躲后的反斬和投技;巨型忍者 梟則會(huì)轉(zhuǎn)身同時(shí)后撤,比較機(jī)警。
e)?????? 回生:回生后敵人選擇對(duì)峙狀態(tài),而不會(huì)馬上發(fā)動(dòng)進(jìn)攻,應(yīng)該只是老賊給玩家一個(gè)喝藥的時(shí)間。但是喝藥卻會(huì)觸發(fā)敵人的AI檢測(cè),部分在喝藥硬直結(jié)束前即可造成傷害的敵人(主要是天守閣葦名一心)不推薦回生后喝藥,其他情況下回生加喝藥可以滿血再戰(zhàn)。
上述AI機(jī)制有一些是多重檢測(cè)的,比如劍圣二階段的喝藥檢測(cè),同時(shí)也要檢測(cè)距離,近距離是跳戳,中距離是跳劈,遠(yuǎn)距離會(huì)重計(jì)劃;義父的喝藥檢測(cè)也是如此,按距離分為三段。上述內(nèi)容多為從游戲直觀體感出發(fā)的,而不過(guò)多引入AI程序的問(wèn)題,關(guān)于進(jìn)階的AI干擾對(duì)策機(jī)制,可以查閱:


四、控制AI
a)?????? 鞭炮、灰燼團(tuán)等致盲,敵人將中斷絕大多數(shù)的行動(dòng),并有一小段硬直(可以壓劍圣的槍,也可以中斷一些霸體招式,當(dāng)然一般用來(lái)欺負(fù)破戒僧)。在潛行時(shí),致盲還能使敵人的視力警戒區(qū)失效,可以用于連續(xù)暗殺。
b)?????? 針對(duì)性控制:鞭炮對(duì)動(dòng)物造成較大硬直、於伽美(包括蛇眼)和凜中毒硬直、一般敵人的炎上硬直、愛(ài)哭鬼對(duì)怨靈和怨鬼造成的硬直、霸體類敵人被削韌后硬直、變?nèi)羲t眼病人士遇火硬直、長(zhǎng)槍卸甲的硬直、機(jī)關(guān)斧破盾時(shí)太郎兵的硬直等等。這些控制方法大多數(shù)可以打斷敵人的動(dòng)作(包括霸體動(dòng)作),正是這些控制AI的方法更好的體現(xiàn)了義手忍具的價(jià)值。
c)????? 打雷和炎上異常狀態(tài),這兩個(gè)優(yōu)先級(jí)非常高,也可以用于打斷敵人動(dòng)作,只不過(guò)敵人在空中進(jìn)入異常狀態(tài)后不一定會(huì)硬直。
d)????? 削韌硬直,這個(gè)相對(duì)復(fù)雜。霸體敵人一般有韌性這一概念,如怨恨之鬼有640韌性,而玩家的平砍有40點(diǎn)削韌,因此打16刀后冤鬼會(huì)進(jìn)入削韌硬直,原先的攻擊動(dòng)作中斷。狼的絕大多數(shù)攻擊動(dòng)作均有削韌數(shù)值,而敵人的動(dòng)作全部都不能削韌(韌性是部分霸體敵人獨(dú)有的,而削韌正是玩家獨(dú)有的)。
?

總結(jié):
嘮叨了這么多,感謝您能看到最后。年度最佳游戲的誕生,融合了豐富的AI機(jī)制,但機(jī)制畢竟是有限的,了解敵人的機(jī)制才能知己知彼,百戰(zhàn)不殆。我認(rèn)為,和敵人作戰(zhàn)的核心在于針對(duì)性,利用敵人的特點(diǎn)和弱點(diǎn)實(shí)施打擊,任何的打法也都是針對(duì)特定的一個(gè)或一類敵人設(shè)計(jì)的,除了風(fēng)靈月影的一擊必殺,還沒(méi)有萬(wàn)能的打法出現(xiàn)。而要做到更好的針對(duì)敵人,AI機(jī)制是一定要了解的。最后的最后,感謝@叫囂的列兵 和@ZeeGan 兩位大佬對(duì)本文的補(bǔ)充與完善!
