Sekiro(只狼)分析笔记

0x00 前言

四月分析《机甲战魔》的那个金币无消耗的那个笔记里头,说要整一个大活,后来其实发完就开始弄了,但是最后并没有整出来,主要是没找到最后结局全盛时期苇名一心的的ai代码,然后解包的程序本身对我这个折腾的方向来说,并不完美,而我也没有精力去处理解包的程序了,所以其实就咕咕咕了,最近整理笔记的时候发现这篇了,还是发一下吧,如果后续也有人对这个部分感兴趣的话,也许看到这个能稍微节省一些时间。这是我最后的波纹了!JOJO!

总的来说,就是想做一个有趣一些的修改工具,希望能直接针对游戏里面对手的技能或者招式,让玩家使用的角色自动做出配置好的动作。

0x01 为什么要从mod开始而不是使用ida或者cheat engine

最早其实是想用的ida,然后找找汇编之类的,尝试使用inline hook之类的方式,修改游戏流程,就像先前使用cheat engine那种去改《机甲战魔》无金币消耗一样。后来发现,我还是想得太简单了,游戏的启动exe,本身大小还是比较小的,更像是一个加载资源的程序,自行研究资源找到ai逻辑代码,目前来说不太可行,而且不同游戏引擎开发出来的游戏,区别也许很大,这里可能在检索信息上难度也会比较大。

当时想到“游戏资源文件”,这个事情的时候,其实就想到mod了,因为之前在只狼看到过一些修改人物模型的mod,还有修改游戏逻辑(boss关卡由固定boss修改为随机boss)的mod,因此后来的思路由用ida硬刚,转换成了,尝试制作mod。

0x02 一些mod,以及制作mod的工具

  1. 图像纹理提升mod

    1
    2
    https://down.gamersky.com/pc/202004/1280996.shtml
    只狼:影逝二度的Mod,在LodParam与GrassLodRangeParam中进行了数值加倍,这会增加物体与纹理细节,并减少游戏中纹理突显的问题。
  2. 随机分配boss mod

    1
    2
    https://down.gamersky.com/pc/202003/1271025.shtml
    只狼:影逝二度 随机分配器MOD,使用之后可以随机化敌人(包括BOSS和BOSS)和物品(包括关键物品和技能),让玩家有全新的体验,非常的有趣,喜欢的玩家不要错过下载。
  3. mod 加载器

    1
    2
    https://down.gamersky.com/pc/201903/1166870.shtml
    使用mod加载器就可以加载各种mod,但是开发似乎需要使用额外的工具

0x03 解包&mod使用

这里找到了解包的工具,名字叫UXM,https://www.nexusmods.com/sekiro/mods/26 ,因为只狼是宫崎英高那个工作室的作品,因此之前各种魂系的单机包括现在的只狼,都是使用同一个游戏引擎开发的,网上有巨佬做过相关分析,整出来了这么一个解包工具,我觉着在他们工作室的魂系游戏里头,这个东西,很可能是比较通用的。

关于解包,我还在贴吧找到了这样一片帖子,这里把他解出来的目录情况的分析的截图转载一下,图片好像,有点儿大,出处 https://tieba.baidu.com/p/6213139531?red_tag=2718561838

这里可以看到根目录有个script文件夹,按照这个帖子所说的,script这里,似乎就是存着游戏ai的脚本,lua写的,需要解密才能看,放回去应该也是要反过来加密的,而在我实际打开后,发现确实存在似乎是ai逻辑相关的脚本,因为我不会lua,只能看个大概。

这里顺手下了一个修改模型的mod,看了一下,如果有mod的话需要如何使用,简单来说,就是自己在游戏根目录建立一个mods目录,然后把修改的mod根据相关层级放到这个新建目录里头去就行了,例如修改模型的mod,由于模型文件在parts目录下,因此mod文件就放置在,mods/parts 目录下即可。

0x04 ai脚本资源相关分析

script这个目录对应ai目录,那么现在初步的的逻辑其实就有了:
通过分析lua脚本,来看看其中的npc的逻辑是什么样子的,目前大致猜想一下,假设突刺攻击动作为lua脚本中的一个函数attack,那么我们可以尝试对函数进行hook之类的操作,在检测到突刺攻击动作触发的时候,自动使用垫步动作,这样就能相对完美的来进行突刺攻击的应对。

尝试解包后,似乎在解开之后再解开一次,能看到一些关于lua的配置文件字段,有的是英文,有的似乎是日文拼音一样的东西,当时并不知道翻译软件可以直接根据这种拼音一样的东西翻译出来,直接找了一个在日本上学的朋友聊了聊这个,他刚好也比较喜欢玩这个。由于只狼是一个日本战国时代背景的游戏,还带有一些日本文化相关的内容,这里发现直接翻译也没那么直接的获取到相关单词的含义,还是直接问问比比较方便。

根据逻辑和一些代码,获取到了这部分信息:

D:\Program Files (x86)\Steam\steamapps\common\Sekiro\script\m10_00_00_00-luabnd-dcx\script\ai
PatrolLeader20000_Logic 这个似乎是巡逻队长的逻辑

下面这两个好像涉及到一些日文拼音一样的东西。。不太清楚
D:\Program Files (x86)\Steam\steamapps\common\Sekiro\script\m11_00_00_00-luabnd-dcx\script\ai
Nanimosinai11000_Logic 问了问会日语的朋友 什么都不要做?

D:\Program Files (x86)\Steam\steamapps\common\Sekiro\script\m15_00_00_00-luabnd-dcx\script\ai
HakaisouPhantom500005_Act01 破坏幻影? 好像是破坏雾影,也许是幻影破解僧吧

D:\Program Files (x86)\Steam\steamapps\common\Sekiro\script\m25_00_00_00-luabnd-dcx\script\ai
Waraningyou_504000_Logic 这个朋友再问了个日本人。。意思是 藁人形,朋友再查了一下,是那个送只狼去源之宫的东西,麻绳做出的巨人一样的玩意

主要解的luainfo文件,有的目录是没有这个文件的

这里先尝试找到不死半兵卫的ai代码,把游戏语言改为英文,发现他的英文名字是 hanbei the undying

目前在逐个看lua代码,有点儿头疼,主要是名字都是日文拼音一类的东西

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
7menmusya  七面武士
Yamori 壁虎
JijoOba 二女儿阿姨。。。没明白啥意思?医女吗?
Mihariban 哨兵
NanbanArmor 南板甲。。没明白,难道是那个桥上面被踢下去的板甲武士吗
Do beihei 美国兵。。啥啊就美国兵。。
NewInu 新犬 是不是就是那个狗
Sokushinbutsu 即时佛,应该是仙峰寺的什么玩意把
Terakisozako 有一些以这个为开头的名字,似乎都是仙峰寺的,这个单词的疑似像是寺庙一类的
Yashazaru Kenzoku 靖国康
Kubinashi 无首把,我看还有个水下无首的逻辑
FireBull 火牛 绝了,看到英文了,欸
Kenkaku_weak 剑客,虚弱?老年一心吗
MurabitoZombie 僵尸村民。。没明白是啥,水生村村民吗
Tokugawazamurai 德川武士
kaenhoushaki 喷火器
Hakaisou 破戒僧
Orochi 大蛇
Orochi_nest 赤鬼之后没多久蛇巢穴的逻辑吗
RedOgre 赤鬼把
Nishikigoi 锦鲤
NingyoRyu 好像是源之宫的东西吧,美人鱼龙?
OnnaSousha 演奏乐器的女人?水生村的凛?
NPC Busshi 游戏里面的小贩吗

还是有一些没解出来

goal_list.lua 这个文件里面似乎有各种命名,再看看把,还有一个logic_list.lua 里面也是,他们类似于一个列表,将游戏的ai编号之类的的,都列了一遍,问题是,解包似乎并不完全,导致并不是所有ai逻辑都被解出来了。

LOGIC_ID_TestZatoichi_985000 有这样一个id,我感觉有戏啊,得在仔细看看,test,座头市的那个传统武士造型,和不死半兵卫很像。

目前发现一个新问题,解包失败了一半多,导致有些东西可能没找着。。再试试把,也不是都这样,是文件名字有重复所以覆盖了

MoujaSoldier 亡者士兵?这个是不死半兵卫吗?

目前我还是觉得,解包没有解全,有些脚本文件是没有的,应该是没有,在那个id文件里面应该是一个npc对应一个battle文件,以id命名的,但是我没有都找到,而且打包的文件数字不是连续的

这里可能不是解包工具的问题,看了下uxm源码,发现里面对每个目录都是有硬编码的,解包似乎不完全这个问题,我也发邮件问过UXM的作者了,他的回答是确实存在这种情况,都放在_unknown目录了,任何没识别出来的文件都在这边,但是没有脚本家了,action里头也存在部分ai逻辑,但是需要使用hks解密,但是这个解密工具,本身也不太好使。

到这里,因为仍然找不到半兵卫的逻辑,也找不到全盛苇名一心的ai逻辑,所以就弃坑了,其实可以搞搞火牛或者赤鬼的逻辑的,不过确实已经没什么兴趣了,哎,windows上打游戏还成,搞点儿花活就让我觉着不太方便。

0x05 调试模式

虽然已经弃坑了,但是这里还有另外一个有趣的发现,可以使用mod将游戏的调试模式打开

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
https://www.nexusmods.com/sekiro/mods/544
[使用]
Select=显示/隐藏菜单
RT +右摇杆=调整大小菜单
RT +左摇杆=移动菜单
L3 + X =冻结/取消冻结摄像机
L3 + A =旋转摄像机

[安装]
将“ d3d11.dll”拖放到您的Sekiro目录里,打开游戏即可使用。

[卸载]
从Sekiro目录中删掉文件“d3d11.dll”即可。

[mod问题]
Q) I can't see text on the GUI windows(在GUI窗口上看不到文本的问题)
A) That's still broken, I'll fix it later(未来作者会有后续修复)

Q) The text is flickering(文本闪烁,视频里也出现这个问题了)
A) We had to balance between refreshing the menu fast enough to keep it updated, and the flickering. It's still fairly bad but should be manageable for now.(意思是目前无解……)

[CREDITS]

Special thanks for Enlisted for helping me figure out the draw function.
Special thanks for Pav for restoring some of the menu drop-downs.