MugenHook—内存插件实现动态大头像

什么是MugenHook?

作者原话如下:[MFG发布地址]

MugenHook is an opensource project aimed to add features to the M.U.G.E.N engine (1.1 only). It is programmed in C++ (well, mostly) with assembly bits. Most of currently added features are from Mortal Kombat games (cause I like them), though I do accept suggestions and/or feature requests.

MugenHook是1.1版本主程序的增强插件,由ermaccer使用C++开发并在Github开源,原理是通过内存修改,它使得你可以在1.1版本中实现动态大头像、3v3/4v4、人物选定播音等附加功能,开源地址:https://github.com/ermaccer/mugenhook

如何安装MugenHook?

MugenHook通过ASI-Loader来附加到游戏当中,所以第一步是下载所需Hook的DLL:

下载地址:https://github.com/ThirteenAG/Ultimate-ASI-Loader/releases

下载其中的Ultimate-ASI-Loader.zip,我们只需要里面的dinput8.dll,将其命名为ddraw.dll并放入游戏目录当中,然后下载MugenHook:

下载地址:https://github.com/ermaccer/mugenhook/releases

同样地,将其中的所有文件解压到游戏目录,此时可以启动mugen,若出现如下提示,则说明安装成功,此时MUGEN运行会伴随一个黑色的命令行窗口,它将显示插件的运行日志。

PS:该插件存在安装不了的问题,但仅出现在少数系统当中,如果出现此情况,我只知道重新安装一个新系统是可行的方法,实际原因可能是因为内存操作的不兼容性。

如何配置MugenHook?

本文以配置动态大头像为例,其他功能请自行探索。

MugenHook关于动态头像需要配置的文件有如下,此时它们应该安静地躺在你的游戏目录当中:

  • mugenhook.ini
  • cfg
    • animatedPortraits.dat
    • frameLoader.dat

首先打开mugenhook.ini,这个文件决定该插件所有功能是否启用,相当于mugen.cfg,我们需要修改的如下:

具体代码含义请看原文的注释,此处不予赘述。

bHookAnimatedPortraits = true
bEnableSelectAnimations = true
bEnableAlternateAnims = true
bEnableAnimationScale = true

然后用文本编辑器打开cfg/animatedPortraits.dat,该文件配置动态大头像的显示动画,其中你可以看到一行示例代码:

0 0 0 0 180 0 chars\kfm\kfm.air 1.0 1.0

前两个数字,表示人物在选人界面的坐标,从0开始计数;

第三、四个数字,分别表示P1、P2光标聚焦时的动态大头像的anim序号;

第五、六个数字,分别表示P1、P2选中人物后的动态大头像的anim序号;

第七个参数,表示anim所处的AIR定义文件,插件会从这个文件里寻找上面设置的anim动画,注意:你所使用的动画必须定义在该文件中,并且你可以为每个人物设置相同的AIR文件,但同时你也要保证人物具备动画所需的图像。

第八、九个数字,表示动态大头像的显示比例。

所有参数用单个空格隔开。

以kfm为例,我们将此行代码修改为:

0 0 0 0 5000 0 face.air 1.0 1.0

并在游戏目录创建一个face.air文本文件,内容如下:

PS:单独创建一个AIR文件是便于通用,你也可以为每个人物设立特别的AIR文件。

[Begin Action 0]
0,0, 0,0, 10
0,1, 0,0, 7
0,2, 0,0, 7
0,3, 0,0, 7
0,4, 0,0, 7
0,4, 0,0, 7
0,3, 0,0, 7
0,2, 0,0, 7
0,1, 0,0, 7
0,0, 0,0, 10

[Begin Action 5000]
5000, 0,-5,0, 5
5000,10,-5,0, 6
5000,11,-5,0, 9
5000,10,-5,0, 5
5000, 0,-5,0, 3
5010, 0, 5,0, 3
5300, 3, 5,0, 4
5300, 2, 5,0, 2
5300, 1, 5,0, -1

注意两个动作组中间需要空行,否则会出现bug,且kfm是具备上面代码所需的图像的,并且注意:AIR中定义的坐标将不会影响动态大头像的位置。

保存已经修改的所有文件,并打开cfg/frameLoader.dat,此文件配置我们所需要的所有图像,在文末添加下面的内容并保存,其中每一行表示一个图像,用空格分开图像的组和序号即可。

0 0
0 1
0 2
0 3
0 4
0 5
5000 0
5000 10
5000 11
5010 0
5300 3
5300 2
5300 1

最后打开游戏,你可能仍然看不到头像,原因是位置没有进行调整,此时打开system.def,并修改以下参数:

p1.face.offset = 300,600
p2.face.offset = 1279,600

此处我的配置是基于官方1.1主程序的,你可能需要根据你的主程序进行调整。

最终效果

最后

实际上MugenHook有很多神奇的功能,这里只是介绍了其中一个,有兴趣的可以自行研究。另外该插件是开源的,其中涉及很多内存操作的代码,不过我不擅长C++,看不懂多少,有能力的也可以自行下载源码进行查看。

本文只是抛砖引玉,若你仍然搞不懂,或者有其他需求,欢迎联系我(收费)。

发表评论

电子邮件地址不会被公开。 必填项已用*标注