回复主题: P制MD主机用 EVERDRIVE MD 玩不了美版游戏!!??
作者:SONIC3D

原帖由 叶欣 于 2012-4-4 16:01 发表
试着改了一下其他几个游戏,Aero the Acro-Bat 2 也是P制不能运行的, 欧版值是45 美版值是55 ······按照改3F的方法不行,值大于46的话有啥其他方法吗?

我11楼说了,这个改法不是通用的,如果只要看简单的改法,跳过下面4节,从红字开始看,如果咸蛋疼痛,可以不跳过。:r8:

MD的区域检测和限制是纯软件写的,卡带上没有任天堂那种CIC芯片。Sega提供了标准的函数来检测,但是在官方的各个版本的开发包里对应的检测函数的实现方法略有不同,而且有时候开发商的程序员也会自己写一些特殊的检测方法,所以改法不通用是必然的。

一般早期的制转卡就是根据卡后拨片对应的区域,把0x000001F0改为JUE三个字母对应的Ascii码,也就是0x4A 0x55 0x45,因为早期Sega的区域检测函数实现就是通过检测头部信息中这个字节的值来确定游戏区域的,但是啥B也能意识到这样的区域保护是多么傻,所以Sega后来也意识到了。。。。改了库函数,所以早期制转卡现在来看,对应的游戏很少,包括上面说的Warlord和AeroAcrobat2都用了这种方法无法解决的检测方法。

(1)AeroAcrobat2首先检测主机的硬件区码,会根据主机的日、亚、美、欧,得到编号0、1、2、3,然后游戏程序会到0x0000042A处根据这个编号取出对应的字节。
(2)0x0000042A的4个字节分别是0x4A 0x00 0x55 0x45,编号是几就取第几个字节,这样日版机取到的是0x4A,亚版是0x00,美版0x55,欧版0x45。只要取到的是00,程序立即故意进入死循环,不再继续下面的版本比对,所以亚版机最悲剧。
(3)然后把取出的字节内容和0x000001F0处的那个字节比较,如果不同,那么就出版本不对的提示,如果相同,就进行游戏。(这游戏欧版卡在0x000001F0处是0x45,美版是0x55)

好了,检测流程已经知道,那么其实有两种改法:
1.把0x000001F0那里改成你主机的版本,也就是如果你ROM是欧版,但你要在美或日机上玩,就把这个字节改成0x55(美)、0x45(日),亚版机上照理说改成0x00即可,但是上面的(2)里我说了,亚版最悲剧,只要检测到是亚版,直接死循环,根本轮不到0x000001F0里的值和它比对。而且这个方法不能改出全区,所以不推荐。
2.(推荐方法)把0x0000042A处的4个字节全部改成和0x000001F0一样。这样无论主机是什么版本,取到的对应值都能和0x000001F0处的值完全匹配,游戏可以全区正常进行。
另外这个游戏没有校验和检测,不会因为修改而红屏,所以不需要额外校验和修正。


咸蛋不疼的从这里开始看:
根据以上的方法2,实际有以下两种操作方法,2选1:
1.WinHEX改法:WinHex打开ROM,翻到0x000001F0处,记下那个值(美版ROM其实就是0x55,欧版ROM是0x45),然后翻到0x0000042A处(见附件1),把那四个字节全部改成刚才记下的值
2.GameGenie金手指码改法:到模拟器中找到GameGenie Code输入的地方,根据ROM版本输入以下值:
欧版ROM:
JYCA-ALVL
JYCA-ALVN
美版ROM:
LYCA-BLVL
LYCA-BLVN
EverDrive也支持以上金手指改法,可以参考说明文档写一个txt文件放在SD卡中,具体看文档,我没用过。

[ 本帖最后由 SONIC3D 于 2012-4-4 18:23 编辑 ]



[登录后才可回复]