游戏王混沌力量吧 关注:3,908贴子:7,936

【教程】修改卡图

只看楼主收藏回复

一、简介
1、修改卡图。
注意1:注意备份!!!注意备份!!!注意备份!!!
还是我们的蛇镇楼:


IP属地:广东1楼2019-08-09 20:00回复
    二、必要的东西:
    2、专用提取器「YuGi Oh! File Extractor.exe」(非原创,附录有)
    3、附录资料(下载见上个帖子、地址见后记)


    IP属地:广东2楼2019-08-09 20:01
    回复
      不知道为啥又被吞了,上图吧


      IP属地:广东4楼2019-08-09 20:05
      收起回复
        四、步骤:
        1、在提取出来的游戏目录card和mini目录下分别找到要替换的卡的卡图并复制出来。如果嫌一个一个看找得麻烦,可以用卡图名字搜索,卡图名字哪里来?如图,上个帖子(修改卡片属性时,找到的杀手蛇的卡图名字是「SDD002」)。把两个图片的大小记下来。

        2、接下来需要把你事先准备好的diy卡图生成两张格式和这两张杀手蛇图片一样大小的图片。用图片编辑软件,比如photoshop。大小一样是指如图的右键文件属性的大小一样,字节多一个少一个都不行。因为不一样的话,等会用提取器替换会失败。

        具体怎么做呢,这里用ps给一个参考,先用ps打开杀手蛇的卡图文件,然后把你的diy卡图拖到它上面置入。然后保存。这样这张图片就变成和杀手蛇一样大小的你的diy卡图。但是有时候可能会多几个或少几个字节。这时候,打开winHex等二进制或十六进制编辑器,删掉或添加文件结尾的几个字节。大小图片都这样搞定。
        3、打开「YuGi Oh! File Extractor.exe」,读取游戏目录下的data.dat文件。
        找到列表中的card/sdd002.bmp,勾选,然后选择替换命令(File/Replace)。
        在弹出的文件框中选择步骤2弄好的卡图,点击打开。
        然后过几秒就行。替换成功没提示的。
        同理,替换mini/sdd002.bmp。
        4、关闭「YuGi Oh! File Extractor.exe」,打开游戏,检验修改效果。


        IP属地:广东5楼2019-08-09 20:08
        回复
          五、后记:
          先把前一个帖子贴上来:https://tieba.baidu.com/p/6220054853


          IP属地:广东6楼2019-08-09 20:09
          回复
            好的,我知道了


            7楼2019-08-09 20:15
            回复
              还有修改卡名和描述的,这里简单提一下好了。
              卡名的话,找到card_name***.bin,一般都是改英文就行,那就是card_nameeng.bin。
              用winHex等编辑器打开,然后就可以直接修改了,搜索找到想要改的卡片,找到后直接修改为自己想要的名字,修改的时候不要用退格键。注意这里有长度限制,不难看出,不能超出下一个卡的名字开始的那个地方。
              改完以后用提取器把card_nameeng.bin替换回去就行,过程和之前的换卡图差不多。
              描述的话,如果你要改的那张卡的描述的字数长度比你想改成的描述字数程度长的话,那就很简单。
              比如原本的描述是:“This card will be sent to graveyard if you draw this card.”
              你想改成“hello hello hello”。比原来的短,那就和改卡名一样,直接到card_desceng.bin里面修改。然后替换回去。
              但是如果反过来你想改得很长的话……就非常麻烦了。


              IP属地:广东8楼2019-08-09 20:25
              收起回复
                第一个思路是一个治标不治本的方法。那就是把其他卡的描述删掉腾出空间给自己要修改的卡。
                card_desceng.bin的结构是按照日文卡名假名顺序,把每张卡的描述排列在一起,中间用特定的分隔符隔开,不像卡名,每个被分配有固定的空间。因此每张卡的描述从哪里开始,这个数据会随着每张卡的描述内容长度变化,你改了某张卡的描述长度,比如比原来多了2个字符,那么这张卡后面的所有描述开始的位置就要+2。于是,你可以调整后面某些卡的描述内容长度,使得描述的位置数据保持不变。
                针对汉化版原版,游戏里有1114张卡的空间,实际上有接近一半的卡是游戏里用不了的(用不了的目录我的附录里有文件表用红色标记出来)。所以只要把你要改的卡后面的某张游戏用不到的卡的描述空间腾出来就行。你多出了多少字符,后面那张卡描述空间就减去几个字符。当你想修改的卡比较少,可行。但是多了就不行了。
                第二个思路是是根本方法,但是麻烦。那就是重建所有卡的描述和描述开始位置数据。
                先把游戏里所有卡片的描述和描述开始位置导出来(从card_desceng.bin,card_indxeng.bin),然后按分隔符分割到excel表里面,算出每个卡的相对位置。把所有游戏里没法获得的卡的描述全部删掉,这样就多出很多空间,然后把想改的描述改上去,再把所有描述合并起来转换为十六进制数据,用winhex等写入到card_desceng.bin,空余部分填零、保持大小不变。
                算出改完描述后,所有卡的描述开始位置数据,把所有卡的描述位置数据合并写入到card_indxeng.bin。再用提取器把这两个文件替换回去。
                对了,如果不是汉化版的700+卡的版本的话,而是1114的话,这两种方法估计行不通了,因为上面用到了没用的卡的空间。这时候再找其他方法,楼主没试过。


                IP属地:广东9楼2019-08-09 20:49
                收起回复
                  还是不成功啊,什么情况


                  10楼2019-08-09 21:29
                  收起回复
                    改名字要怎么搜索卡片


                    11楼2019-08-09 21:58
                    收起回复
                      挽尊


                      IP属地:广东来自Android客户端12楼2019-08-10 14:24
                      回复
                        昨天整理了一下,把一点修改心得丢上来,是关于data.dat结构的。如果后面有什么更新,就在这个帖子更新了。
                        准备知识
                        游戏里卡片共有1114张,其中4张是token,771张可用卡。其余都被隐藏起来。
                        卡背也算一张卡的话,那就是1115张。
                        这里的数据按用途来分基本上只有2种:数据的内容和数据的索引。其中索引可以简单理解为开始位置。当然索引本身也是数据。
                        通常游戏运行的时候,需要加载一个媒体资源的时候,主程序会先获得索引,知道去哪里找,然后再去相应的位置读取。
                        以编程角度来看,对于数据是长度变化不大的,通常程序员会给它设置一个固定的长度限制,比如卡名,那么其计算索引是很简单的,基本不需要存储这种索引数据。但是如果数据长度变化太大,比如卡的描述,可以很长或者很短,那么就要存储这类索引数据,为了节省开销。
                        数据都是二进制编码存储的。使用16进制编辑器进行编辑的话,那么数据都是16进制表示。这里用0x前缀区别10进制来表示16进制。由于2个16进制位就对应1个字节,所以这里为了直观,每2个16进制位就用空格隔开。实际要用来搜索、读写的时候,记得去掉空格。比如16进制数0x2A582318,就写成0x2A 58 23 18。
                        卡片默认顺序为日文卡名首假名的五十音升序,依据是data.dat\card\list_card.txt。通常第一个就是「地缚灵」,第二个就是「装甲海星」,最后是三神卡加上4种token。
                        由于文件是按单字节写入的,因此在编辑器看到的数据是「写入状态」的次序。是由我们原来的写入文件之前的数据(叫做「写前状态」)进行变换来的。比如数据0x2A 58 23 18,它的写入状态就是0x18 23 58 2A。变换规则是从串结尾开始每2位取出来倒序排列,可逆。
                        data.dat
                        存放着所有程序相关的媒体数据(除了声音数据)。
                        是由许多子文件打包来的。
                        开头部分就存放着里面所有子文件的索引。
                        使用专用提取器能够解包。
                        不过这个提取器功能有限,没有展示或导出每个子文件的索引的功能。
                        bin#\card_desc***.bin
                        分别存放着6种语言的所有卡片的描述数据。
                        每张卡的数据存放空间没有长度限制。
                        每张卡之间用若干个分隔符0x00隔开。
                        原文件中分隔符个数非固定。有可能前后两张卡是由1个、或是2个、甚至3个分隔符隔开的。
                        我的改版把所有卡之间的分隔符个数改为了1个。
                        bin#\card_indx***.bin
                        分别存放着6种语言的所有卡片的描述的索引数据。
                        每个数据长度为4字节。
                        和card_desc***.bin一起来用来加载卡片描述。
                        bin#\card_id.bin
                        存放着所有卡片的编号数据。
                        每个数据长度为2字节。
                        card\list_card.txt提供了每张卡的编号(中括号括起来的数字)。
                        数据的范围是0x00 00~0x 09 55,10进制范围是0~2389,其中有大量编号是没有卡对应的。
                        卡组文件有用到这些编号数据。
                        另外这个属性对于程序员应该是方便于索引指定卡、比如展示卡。
                        bin#\card_intid.bin
                        存放着所有卡片(包括游戏中未实装的卡,约2300+)的整数编号数据。
                        每个数据长度为2字节。
                        card\list_card.txt提供了每张卡的整数编号(冒号前的数字)。
                        存放顺序是编号顺序(开头「蓝眼白龙」的),包括了游戏中没有入编的卡。
                        数据的范围是0x00 01~0x 04 5A,10进制范围是1~1114,和卡片是一一对应。
                        整数编号这个属性就是指程序要用到的卡进行编号得到的,为了程序而设计的。
                        与此区别,编号是卡片本身脱离程序就有的。
                        因此这里面,有大量的0x00 00,这是那些有编号但没有编入游戏里的卡的整数编号。
                        这个属性对于程序员应该是方便于卡表展示的时候用吧,用于遍历。
                        bin#\card_name***.bin
                        分别存放着6种语言的所有卡片的名字数据。
                        每张卡的数据存放空间长度为64字节,填充符为0x 00。
                        bin#\card_pack.bin
                        顾名思义,「卡包」。存放着所有卡片的卡片来源类型数据。
                        经测试,改动会影响卡片的来源类型属性,是海马包、城之内包、还是其他特殊的。
                        游戏里组卡界面中、可以编入卡组的卡是有来源限制的、比如token类不能入组。
                        对于城之内,依据选项,海马包的卡可能不能编入卡组。
                        所以改动这个文件,可以解锁隐藏可用的卡片,从原来的771扩增到1114张。
                        不过实际有意义的扩增的话,应该是1110张(排除掉4张token类)。
                        另外扩增后,新卡只会显示为token卡图,毕竟原data.dat中就没有这部分卡图资源。
                        范围是0x00~0x07?属性有7种状态?
                        每张卡的数据长度为1字节还是2字节?
                        bin#\card_pass.bin
                        未知,未测试。mod似乎不怎么需要这个文件。
                        bin#\card_prop.bin
                        存放着所有卡片的卡片属性数据。
                        每个数据长度为4字节。
                        开头0x00 00 00 00是卡背的卡片属性。
                        bin#\dlg_text***.bin
                        分别存放着6种语言的所有游戏文本数据。
                        每个数据存放空间没有长度限制。
                        每张卡之间用若干个分隔符0x00隔开。
                        bin#\dlg_indx***.bin
                        分别存放着6种语言的所有游戏文本的索引数据。
                        每个数据长度为4字节。
                        和dlg_text***.bin一起来用来加载游戏文本。
                        bin#\card_sort***.bin
                        存放着所有卡片的排序数据。
                        每个数据长度为2字节?4字节?未测试。
                        card\list_card.text
                        所有卡片的编号、整数编号、卡名、卡图名表。
                        card\******.bmp
                        所有可用的大卡图(772+1张卡背+4张token)。
                        怎么多了1张?
                        大小不是固定的,有部分多或少几个字节。
                        mini\******.bmp
                        所有可用的小卡图(772+1张卡背+4张token)。
                        怎么也多了1张?
                        大小不是固定的,有部分多或少几个字节。
                        cursor\*
                        光标相关数据,包括贴图、动画效果。
                        j\file\***_***.ydc
                        城之内用的卡组。
                        j\*
                        游戏界面贴图、动画效果等。
                        对应内容简介如下
                        bust_up弹出插图
                        deck_c组卡界面
                        duel决斗界面
                        file系统卡组
                        janken猜拳界面
                        lan_duel联机界面
                        list卡表界面
                        title标题界面
                        tutorial教程界面


                        IP属地:广东13楼2019-08-10 19:46
                        收起回复
                          太强了


                          IP属地:江苏14楼2019-08-11 23:27
                          回复
                            楼主是软件内替换,我以前自娱自乐的时候,是直接把dat文件全部解出来,以文件夹形式放在目录下,一样可以使用,就是不能联机


                            IP属地:江苏来自Android客户端15楼2019-08-12 00:01
                            收起回复


                              IP属地:江苏16楼2019-08-12 09:42
                              收起回复