【MAME使用相关】关于MAME的录像文件回放出错的原理+正确录制办法

老文,被百度吃了一次了~现在虽然很多人都喜欢实录了,最近SHOT20活动可能会用到,但想了一下还是发一遍~
一。基本的介绍
MAME这个模拟器也提供类似东方REPLAY录像的功能。右键点击游戏,有个录制回放文件的选项,必须在开游戏之前就录制,不能打完后录制。录制完成后默认是在MAME的 inp 文件夹下会看到你的REP文件。

不过因为MAME这个模拟器过于庞大,很多小功能都有一些问题,录像功能的兼容性不是特别的完善。
所以经常出现录制出来的REPLAY(因为格式是*.INP。所以下面都用INP 替代)各种爆炸无法正常回放,尤其是高分或者初通录像,打完后回看录像结果录像回放错误,相当于REP损坏
那心情没法形容,也怪可惜的。
通过一些正确的设置和操作可以极大的减少录像爆炸的情况,也就是这个帖子的主要内容。

在看这个帖子之前,请注意几个东西
1.MAME的录制和回放,必须在同一个模拟器内进行,大版本相同基本没什么意义
比如MAMEUIFX,MAMEPLUS 和MAME官方版本
前2个是增强型的MAME,后者是官方版本,这3个的录像即使都是同一个大版本(比如都是0.168的内核),之间的录像也不一定通用,这个是个经常误区。
2.MAME录制的录像,最好放在MAME根目录下的INP文件夹中播放
虽然MAME录制的时候可以选择INP保存的位置,但是放的时候,有些版本的MAME却要放回INP文件夹中。否则会出现"XXXXX 不是有效的输入文件‘的提示框。
文件名可以随便,路径最好不要乱放。
这里还有个很有意思的现象,这些必须放回MAME目录播放INP的MAME,如果遇到不同路径的同名INP文件,是优先播放自己模拟器目录下的INP
举个例子,比如MAME的INP目录里面有个A.INP,此时桌面也有个同名字的A.INP,打开MAME播放桌面上的A.INP,不会出现XXX不是有效的输入文件的提示,而会开始播放,但实际上播放的是INP目录里面那个A.INP,很有意思的现象。不过容易引发一些误会。
3.MAME 0.145-MAME0.155的这10个大版本(包括使用MAME内核的增强型MAME)
这10个大版本有个BUG,录制INP的时候,如果暂停了(无论是用暂停键,还是按F7读档的时候那种暂停),INP就会从暂停点结束录制。也就是直接报销了
影响比较大的有SHUMPMAME 4.0,因为他的内核是MAME 0.150,还有常见的MAMEPLUS 0.152 CAVE SH3合集,所以如果是这10个版本,录像的时候请不要暂停。
不过我也不提倡录街机游戏暂停,你玩实体街机能暂停吗,最新的全国榜也考虑到这点,加上有人搞了个暂停大法,所以强制使用SHMUPMAME 4.0,老外的MAME录像站M.A.R.P也是强制使用不能暂停录像的WOLFMAME,并且更严格的是WOLF不能使用连发。

二。关于录像爆炸的罪魁祸首-NVRAM文件
MAME的根目录下,有一个叫NVRAM的文件夹,打开会发现一些和ROM名字相同的*.NV文件
或者是“rom名字”的文件夹(0.160版本以后的MAME),打开后里面有很多文件
这些个文件的具体作用是,记录游戏的一些机台设置和高分
(比如怒首领蜂系列的C键高速子弹连发,彩京系列的隐藏机的调出和高分榜单)
而这个文件就是INP爆炸的元凶,因为不是程序员,原理我这里做个猜测,仅供参考
游戏的一些随机要素需要随机数发生器,发生器的机理是需要初始值作为发生的种子
大部分游戏会把机台的设置,基板的运行总时间,高分的某几位数
以及玩家的走位(像素值)等作为种子来进行发生,然后生成随机,比如尸弹的角度,敌人的运动方向之类。
再看NV文件的作用,你会发现,几乎可以把它当做随机数的其中一个种子
(其实INP里面也包括随机种子,但是他记录的操作是固定,也就是因为玩家走位确定的随机种子已固定)。
由于NV文件会记录高分和基板运行时间,所以每一次进入游戏,退出,这个文件等于被重新写过一遍,也就是种子每一次退出游戏都在改变。
而INP文件录制的是玩家的操作,并没有把NV文件里面的随机种子也记录进去。
当你打完一局游戏录好了INP后退出,NV文件被重新写入,再回放录像的时候就会发现,因为其中的某个随机种子变化,导致游戏的随机数和你玩的那一局完全不一样。
你会发现你的动作还是那样,但是随机的子弹轨迹,敌人的动作,尸弹的方向和数目都和你玩的那一局不同了,于是你就BIU掉了,这就是录像回放出错,俗称INP爆炸。

三。根据原理的小策略
NVRAM文件(下面简称NV文件)的作用和INP爆炸的原理大约是楼上所说。所以实际上想解决这个问题很简单,只要你录制INP的时候,固定好NV文件上面随机数的种子,再按照你的操作去回放INP,那就一定没有错,也就是保证,你录制,和回放的时候,NV文件是一样的就行了。
A.最通用的办法--删除法
每一次录制INP之前,删除“NVRAM”文件夹下面“ROM名字.nv”的文件(MAME0.160以前的版本)
比如这里我要录19XX的,我就删除19XX.NV文件

0.160之后的版本,MAME把NV文件拆成了几个小文件,放在“NVRAM”文件夹\“ROM名“的文件夹下面,同上,直接把那个文件夹删除
比如我这里要录大复活的,我就把大复活的“ddpdfk”文件夹删掉,再进入游戏录制

播放INP的时候,再把NV文件删除,播放就OK了。
删除法是最通用,最保险的,但是缺点是
1.像大复活 打击者1999这样需要调整机台设置才会出现隐藏机,隐藏模式的,你每一次录制的时候,进游戏都要调一次,调出来才能玩。
2.每一次都要删除,偶尔忘记删除了,INP可能就坏了,操作上很麻烦,虽然可以通过写BAT批处理的方法,但是总归不好用。
因为兼容性最好,老外的MARP是强制要求这样的,但是个人实际上用的不多

B.把NV文件设置成只读/占位文件夹法
对于方法一里面遇到的需要机台设置的比如大复活/1999,可以在调出隐藏机 隐藏模式后,退出游戏,将每一个NV文件,都设置成只读,这样保证每一次录制都是同样的起点。录像交流的时候,只需要把NV文件和INP打包,就能保证在其他电脑上基本都能播放
把上面的方法引申一下,一些不需要机台设置的,可以使用占位文件法
这个方法还是利用WINDOWS那个特性,比如我要玩大往生,我在NVRAM文件夹下面建立一个DDP3.NV 文件夹,这个时候系统会把这个文件夹 视作“DDP3.NV”文件,
现在就简单了,直接把文件夹设置成只读,运行游戏的时候MAME读取不到NV里面的内容(因为实际上文件不存在),等于是删除NV的效果。
而关闭游戏的时候因为文件存在,他会试图写入,而不是重新建一个DDP3.NV文件,
然后因为只读,写入失败。。。。这样,你每一次开游戏,都是0状态开始,而不用重复删除

这是用的最多的办法

C.特殊版本的MAME下的备份---还原法
方法B的只读法,对于MAME 0.140以前的部分老版本MAME,有一定的问题。
老版本MAME如果在退出游戏时无法写入NV文件,会直接报错退出,而这样录制的INP算录制不完成无法观看,这样的老版本MAME,如果不需要隐藏机之类,只能每一次录制前删除NV。
而像打击者1999这样需要隐藏飞机X36 的,又想在老版本MAME下录制,只能打之前预先备份NV,打完之后,将备份的NV还原回去,再播放。。。
注意要留一份做底,播放录像也会更改NV文件的。只能每次播放前都覆盖一下,交流的时候也带上这个NV文件。

以上3个方法灵活运用可以避免绝大部分录像爆炸的问题
在交流录像的时候,如果有NV文件,必须得把NV文件附上,不然没法在其他人的机子上面正常播放。

最后说个抢救措施
很多人的INP录完后才发现NV没删,看不了,这种时候,你可以试着反复看几遍。
每一次看,每一次玩都会改变NV文件,运气好搞不好把随机种子给弄对了也说不好。
如果运气好,遇到一次能正常播放,播完后,先不要退出游戏
(MAME退出游戏的时候才会写入NV文件)。
先把当前的NV文件拷出来,设置成只读,OK这录像就救下来了。
然后用以上的3个办法,就可以正确播放了。