主题 : 【分享】关于机战镜像隔断码的一些研究(附带机战F完结篇的静态修改探讨)
级别: 模拟名流
UID: 76310
精华: 10
发帖: 337
威望: 16 星
金钱: 4779 浮游币
贡献值: 0 点
好评度: 1042 点
人气: 0 点
在线时间: 168(时)
注册时间: 2005-11-02
最后登录: 2009-04-26
楼主  发表于: 2006-12-27 00:04

【分享】关于机战镜像隔断码的一些研究(附带机战F完结篇的静态修改探讨)

  近期看了一篇关于汉化PS游戏的教程,其中讲到关于PS镜像的隔断码的问题。现在我把它总结一下,希望对于制造修改器的人有些帮助。
  PS的镜像文件跟我们一般的CD文件有些不同,它除了有要使用的文件数据之外,还有很多的隔断码。如果我们用一款叫CDRWin的刻录软件来复制PS光碟的时候,就会发现PS光碟的扇区格式是Mode Form1 (Data)、Mode Form2 (Audio)、Mode Form2 (Empty)三种。对于Mode Form1 (Data),它是一种纠正能力很强的格式,其中包括了错误修正码ECC和错误侦测码EDC。每个扇区存放2048Byte的数据。而Mode Form2 则是一种纠错能力没有那么强的格式,这种格式只包含了EDC码而没有ECC码。这样一来,一个扇区就不仅仅是放2048个字节了。那它是怎么分布的呢?
  对于Mode2 Form1来说,每个扇区有2353个字节,其中同步字节12个、扇区标题4个、扇区子标题8个、用户数据2048个、EDC4个、ECC276个。因此细心的人会发现,机战的人物数据中会每隔一定字节数目就会出现一断的隔断码,其实那些隔断码就是“前一个扇区的EDC+前一个扇区的ECC+本扇区的同步字节+本扇区的标题+本扇区的子标题”,一共是304个字节。然后有2048字节的用户数据,之后有是304个字节的隔断码……如此类推。
  对于Mode2 Form2来说,每个扇区有2353个字节,其中同步字节12个、扇区标题4个、扇区子标题8个、用户数据2324个、EDC4个。其他说明跟Mode2 Form1类似。
  若这些隔断码被改动的话,对于VGS这些不能直接读取镜像文件的模拟器来说,就会因为数据校验不过而死机,而对于EPS这些可以直接读取镜像文件的模拟器来说,它本身会自动跳过那些隔断码,因此不会造成死机,但是如果把这个镜像文件刻录成碟拿到PS机上玩的话很可能会死机。因此也就是为什么我们建议打了补丁之后要用ECCregen来校验的原因了。
  鉴于以上的说明,我们做修改器的时候就有了一种新的思想。因为用虚拟光驱打开镜像文件然后把里面的文件复制出来的时候,是没有这些ECC、EDC之类的隔断码的,所以数据排列是非常整齐的,这对于制造修改器来说,就可以利用整齐这一点来制造。当文件被修改了之后再直接写入镜像文件中。写入的方法就是避开那些隔断码。刚才说过了,对于Mode2 Form1的用户数据是2048Byte,隔断码是304byte,因此我们写镜像文件的时候可以先找到文件的起始偏移地址,然后写入前2048个字节。之后在镜像文件中直接跳过304个字节,然后又写入2048个字节的数据,如此类推,直到写完。如果想直接从镜像文件中提取没有这些隔断码的数据,也可以先找到起始的偏移地址,然后提取2048个字节,之后偏移304个字节,然后再读取304个字节……

  我这几天发布的α和α外传的人物查看器就是用这种方法实现的。接下来我会继续研究写入的程序。
  以上的方法对于那些有大段隔断码的文件修改非常适用。至于对于那些仅仅有一个字节隔断码的,例如机体数据,暂时还没有找到解决的方法,但用上面的方法,却是可以提取到不含ECC和EDC大段隔断码的机体数据,比起以前来说应该修改更加方便。

  若有什么不明白可以跟帖,一起讨论。
[ 此贴被Triple-E在2006-12-27 15:36重新编辑 ]
本帖最近评分记录:
  • 金钱:10(Triple-E)
  • 金钱:10(Triple-E)
  • 金钱:10(Triple-E)
  • 魔神王路西法
    级别: 论坛版主

    UID: 62
    精华: 35
    发帖: 7689
    威望: 83 星
    金钱: 794 浮游币
    贡献值: 9861 点
    好评度: 13244 点
    人气: 1271 点
    在线时间: 1964(时)
    注册时间: 2004-03-25
    最后登录: 2024-10-19
    沙发  发表于: 2006-12-27 09:19

    原来如此。这样可以解决大段隔断码的问题。机体的单个隔断码实在不好解决。
    根据这篇文章的原理数据很规矩的机战F完结篇的修改器应该可以制作了。如果楼主有兴趣的话,我可以帮忙寻找OFFSET地址。
    机战ALPHA和外传哪怕有OFFSET地址都得当心,因为经常有莫名其妙的冲突。特别是外传。最典型的就是Z高达原始型和真盖塔的特技冲突。只要Z高达原始型有HP回复小的特技,那么它和真盖塔同时登场就死机。但是分别用一点问题都没有。这种状况是什么造成的目前还不得而知。
    魔神王路西法
    级别: 论坛版主

    UID: 62
    精华: 35
    发帖: 7689
    威望: 83 星
    金钱: 794 浮游币
    贡献值: 9861 点
    好评度: 13244 点
    人气: 1271 点
    在线时间: 1964(时)
    注册时间: 2004-03-25
    最后登录: 2024-10-19
    板凳  发表于: 2006-12-27 11:06

    F完结篇的静态修改器无人制作。
    那个是前篇的,功能也很不全。
    F完结篇的机体数据大部分都被解析了,所以制作一个功能很全的修改器应该是可以做得到的。
    可以显示的数据除了常规的那些HP EN 装甲 运动性 界限 MV 体形 TYPE 强化数 特技等外。修理费、击落费、乘换类型等包括机体图标以及武器的更换都可以很方便的做到。
    实际上如果时间充分的话,可以制作一个像TRS静态修改器那样的功能齐全的大型修改器。大部分机体数据(合体、分离、变形指向除外)、全武器数据、大部分人物数据(极少量代码仍然有问题)都可壤扩其内。甚至部分机体名的汉化都可以做到(这个对位置有非常严格的限制,不能随心所欲)。
    [ 此贴被Triple-E在2006-12-27 11:13重新编辑 ]
    魔神王路西法
    级别: 论坛版主

    UID: 62
    精华: 35
    发帖: 7689
    威望: 83 星
    金钱: 794 浮游币
    贡献值: 9861 点
    好评度: 13244 点
    人气: 1271 点
    在线时间: 1964(时)
    注册时间: 2004-03-25
    最后登录: 2024-10-19
    地板  发表于: 2006-12-27 12:19

    格式说明容易。
    如果只是提取文件的话,还是做不了大众化的修改器。我的建议是像TRS修改器那样直接载入BIN文件修改。
    静改格式这里就有很详细的说明
    http://allgames.gamesh.com/srw/miji/xiugai/ffbl3.htm
    机体数据在BIN文件里是从2C2CCB2开始
    我再补充说明一下关于机体修改
    该教程是这么写的
    AA ?? BB 00 CC 00 DD 00 ?? EE ??*9 FF FF FF FF GG HH II II JJ JJ KK KK LL LL MM MM NN NN OO*8 PP QQ (RR RR SS 00)*n

    补充说明
    1.AA后的??实际上要和AA一起考虑。实际操作时建议将这两个字节一起读入。因为??涉及到AA的进位。例如某机体地图原始图标(AA ??)写的是18 30,而另一图标需要进位如另一机体地图图标(AA ??)为 16 ?1,要改前一机体地图图标时就需要改为16 31才行。

    2.BB 00这两字节表示机体图片,而不是教程中BB这一字节。很多机体的图片都是 BB 01而非 BB 00。

    3.CC换乘类型。 00     01     02     03     05       07
                    高达系 万能侠 圣战士 MH系 W高达系 无法换乘

    4. AA BB DD EE建议直接读入只加以说明这些项目是什么,然后让使用者对照其它机体读入的数据自己填入合适的代码。

    5.HH。移动类型:由一个字节组成,主要决定是后半个字节,主要有14种。前半字节是强化数。因为1字节两用这里也建议直接读入然后让使用者按照下表填写。
    00 01 02 03 04 05 06
    陆 陆 空 空 水陆 宇宙 空陆
    07 08 09 0A 0B 0C 0D
    水空 水陆空 陆地中 空陆地中 水陆 水 空地中

    6.OO机体特殊能力:由8个字节组成,每两个字节代表一种能力,主要决定是前一个字节,主要有16种。第二字节基本上都是00。但是要注意某些剧本激活特级第二字节非00,如初号机的S2机关。
    01 02 03 04 05 06 07 09
    BeamGuard I-field 奥拉Barrier ゲ-タビジョン 分身 イテバリア マッハスペシァル HP回复小
    0A 0B 0C 0D 0E 0F 10 11
    HP回复大 暴走 SuperMode BasakeMode AT-field 合体 分离 变形

    7.PP QQ建议直接读入结合后面的(RR RR SS 00)*n一起读入分析。由使用者对比其它机体后自己更换代码。

    8.关于(RR RR SS 00)*n。第二个RR还涉及到武器序列,如第一个耗残弹的武器如果是14 01 01 00。第二个耗残弹武器原武器代码是15 01,但是填入时就必须填入15 09 02 00。也就是说高位必须加8。否则的话该武器在游戏中就会出问题。而最后那个00也不是一定是00,这里还涉及到到某剧本后才激活的隐藏武器。这些字节建议直接读入,使用者根据需要和规则自己参照其它机体填写代码。n=武器数
    [ 此贴被Triple-E在2006-12-27 15:25重新编辑 ]
    魔神王路西法
    级别: 论坛版主

    UID: 62
    精华: 35
    发帖: 7689
    威望: 83 星
    金钱: 794 浮游币
    贡献值: 9861 点
    好评度: 13244 点
    人气: 1271 点
    在线时间: 1964(时)
    注册时间: 2004-03-25
    最后登录: 2024-10-19
    草席  发表于: 2006-12-27 12:32

    原教程武器修改:

    AA BB ?? CC CC DD DD EE FF GG GG HH II JJ JJ KK LL

    补充说明:
    AA=武器种类一般为00。这里主要涉及地图炮的种类原教程已经给出。

    BB=武器类型:决定根本属性是前半个字节,0为拳击、1为射击、2为拳击、3为射击、4为拳击P、5为射击P、6为拳击P、7为射击P、8为拳击、9为射击、A为拳击P、B为射击P,其中2、3、6、7可以被切,8、9、A、B可以被光线防御。

    CC CC建议直接读入然后让使用者对照其它武器修改

    FF=武器改造追加的攻击力多少及武器的会心率种类:前半字节决定武器必杀。3X为必杀20%最高。2X为10%。1X必杀为0%。0X为-10%。后半字节决定改造加攻击力。X0为最高的1900。X1为1700. X2为1500。X3最低1300。

    HH=武器地形适应. 改为FF就是全A。

    LL=武器发动所需机师技能。机师特殊技能:21~29为NT等级(21为NT1。29为NT9),2A~32为强化人级,33~3B为圣战士,3C~44盾防,45~4D剑切,4E为底力,4F为明镜止水,50为高速移动(使所乘机体移动力+1),51为天才(升级经验为原来90%),52为GUT,53SuperGUT 。

    机师修改无需补充。技师特殊能力代码和武器发动所需机师技能一致。
    机师和机体的地形适应是4444为最高的全A。而武器则是FF为最高的全A。
    [ 此贴被Triple-E在2006-12-27 17:33重新编辑 ]
    魔神王路西法
    级别: 论坛版主

    UID: 62
    精华: 35
    发帖: 7689
    威望: 83 星
    金钱: 794 浮游币
    贡献值: 9861 点
    好评度: 13244 点
    人气: 1271 点
    在线时间: 1964(时)
    注册时间: 2004-03-25
    最后登录: 2024-10-19
    5楼  发表于: 2006-12-27 12:48

    实际上可以做个只读取数据的,把每个项目代表什么明确的在各筐标出来。具体怎么改代码由使用者参照说明表格手动填写。因为诸如武器代码、武器动画等做下拉菜单式的修改器太不现实了。
    魔神王路西法
    级别: 论坛版主

    UID: 62
    精华: 35
    发帖: 7689
    威望: 83 星
    金钱: 794 浮游币
    贡献值: 9861 点
    好评度: 13244 点
    人气: 1271 点
    在线时间: 1964(时)
    注册时间: 2004-03-25
    最后登录: 2024-10-19
    6楼  发表于: 2006-12-27 15:24

    01 14 01 00就是对应教程
    http://allgames.gamesh.com/srw/miji/xiugai/ffbl3.htm
    中的AA ?? BB 00。注意这个00实际上是机体图片的高位,因为图片代码不止255个。有时是需要进位变成01的。而AA ?? (01 14)表示机体的地图图标。其中??还没完全解析只知道图标代码进位时要把它加1。
    00 00 41 00中第一个00是表示乘换系。00就是高达系。41即教程中的DD表示机体大小。
    81不明其含义
    30表示有无盾牌和盾牌的种类
    66 08 07 00 00 F4 10 00 00 32不明其含义但是估计合体变形指向就在其中
    20 03 40 06即教程中的FF=击破费和维修费
    05 =MV
    20 =强化数2 和移动类型为陆
    04 42=地形适应性(改为44 44 为全A)
    20 03=装甲
    41 00=运动性
    04 01=界限
    B8 0B=HP
    (00 00)×4=4个机体特技(00 00表示无特技)
    05 03=共5个武器、其中3个是有残弹的
    01 00 00 00 =前2字节01 00表示第一武器代码。后面的00 00,前一个是表示不是有残弹武器。后面一个表示并非剧情激活的隐藏武器。
    02 08 01 00=前两字节02 08需要注意。其中武器代码实际上是02 00但是由于这是该机体的第二个武器所以必须把02 00改成02 08。以后依次类推。第3个武器那么就会以 XX 10的形式出现。第4个则是XX 18。另外要注意的是那个01。这个01表示是该武器是此机体的第一个有残弹类武器。
    03 10 02 00=第3个武器。所以第二字节是00+(3-1)×8=10。注意已经提到的这3个武器第一字节分别为01 02 03这些都是武器代码的前一字节。而并非武器序号。整个武器代码是由2个字节组成的。如果一个武器的代码是03 02,而此武器正好是某机体第3个武器则要根据上面提到的规律写入03 12才能在游戏中正常使用。注意后面那个02表示的是此武器是该机体的第二个有残弹类武器。
    04 18 03 00=规律同上。第二个字节是根据00+(4-1)×8=18得来的。注意就像上面提到的一样这个公式的00是武器代码的高位。也就是说如果某武器代码为04 04则上面这个公式里的00就需要换成03。而该武器代码就该填04 1C。 后面那个03表示的是此武器是该机体的第3个有残弹类武器。
    05 20 00 00=第5个武器。实际武器代码是05 00,但是由于该武器是第5个武器所以00+(5-1)×8=20。武器代码高位就得填20。
    后面从04 16 04开始就是下一个机体了。机体之间一般都是以00 00隔开。
    [ 此贴被Triple-E在2006-12-27 17:27重新编辑 ]
    魔神王路西法
    级别: 论坛版主

    UID: 62
    精华: 35
    发帖: 7689
    威望: 83 星
    金钱: 794 浮游币
    贡献值: 9861 点
    好评度: 13244 点
    人气: 1271 点
    在线时间: 1964(时)
    注册时间: 2004-03-25
    最后登录: 2024-10-19
    7楼  发表于: 2006-12-27 15:28

    所有武器的具体属性都是放在一起的。武器的适应性和机体以及人物是不一样的。武器的适应性是FF就是全A。而机体和人物则是44 44为全A。
    这贴很有研究价值,先加个精华。
    收PM
    [ 此贴被Triple-E在2006-12-27 15:35重新编辑 ]