r博物馆吧 关注:753贴子:14,827

RTT2机体与武器数据修改教程贴

只看楼主收藏回复

因为RTT2有很多文案对不上实际数据的情况(比如gridlock的德玛激光,描述表示是直向型激光但实际类型是偏转型激光),所以我花了很多功夫去研究游戏的数据都存在哪以及该怎么修改。我感觉我在这浪费了太多时间,所以秉承互联网分享精神,在这里开个帖子详细讲讲机体数据和武器数据该怎么修改


IP属地:日本1楼2024-06-20 11:03回复
    授人以鱼不如授人以渔,所以这个帖子应该会比较长,我也会把我目前已经发现的数据结构都分享出来


    IP属地:日本2楼2024-06-20 11:06
    回复
      度娘好像又把我帖子吞了= =
      用PC网页端没有人权,等晚点帖子被放出来了再随缘更新


      IP属地:日本3楼2024-06-20 11:07
      回复
        首先,如果你想体验自己探索的乐趣,你需要以下三种工具:
        1)模拟器;
        2)一个比较好用的16进制编辑查看器;
        3)cheat engine
        1的用处就不用我多说了,最好选ppsspp
        2虽然严格来说不是必需品,但是最好有,我用的是“绿色”版的WinHex(v18.7),WinHex带有储存地址的功能,这个功能很重要,不然一个个记地址太麻烦了;或者也可以用开源的imHex,看起来也挺好用的不过我没用过
        3也很重要,最主要的是CE有组合搜索模式,使用起来太方便了,如果你的16进制编辑器自带组合搜索那也可以不用CE


        IP属地:日本4楼2024-06-20 17:13
        回复
          然后你需要知道的是,PSP的架构是小端序(little endian),如果你不知道什么是小端序,一个简短的解释就是,一千二百三十四,我们中国人正常是从左往右书写,所以写成1234,但是小端序写出来是4321,当然这么解释不太严谨,不过我之后举例子的时候会具体说明


          IP属地:日本5楼2024-06-20 17:19
          回复
            然后就是,你需要知道,计算机有很多种表示数据的方法,其中两个大类是【整数】以及【浮点数】,整数很好理解,浮点数就是计算机用二进制数字进行科学计数的一种方式,当然你不懂浮点数是什么意思也没关系,只需要知道有这么个东西就行了


            IP属地:日本6楼2024-06-20 17:21
            回复
              还有就是你需要知道【位(bit)】和【字节(byte)】,还有【二进制】和【十六进制】
              首先,【位】其实就是我们数学里的“个位”“十位”的那个位,只不过计算机是二进制的,所以我们不能说是十位就只能说是一个bit,如果用两个bit来表示整数(integer)的话那么一共就有4个数字:“00”(十进制的0),“01”(十进制的1),“10”(十进制的2),“11”(十进制的3)。当然这只是无符号整数(unsigned integer),还有有符号整数,感兴趣的话你可以自己去了解
              那么【字节】是啥?字节其实就是8个【位】,也就是说一字节=(二进制的)8位数,就好像我们说一万=(十进制的)5位数一样。因为位和字节都是“b”开头,所以一般用大写B表示【字节】,小写b表示【位】。这就是为啥宽带的实际下载速度好像总是比宣传速度慢差不多十倍:宣传的时候一般都是用Mb,实际速度一般看的都是MB
              最后,你需要了解一下【二进制】和【十六进制】的关系。就和十进制每十个数进一位一样,十六进制每16个数进一位,也就是说十进制的9是十六进制的9,十进制的10是十六进制的A,以此类推直到十进制的15是十六进制的F,十进制的16是十六进制的10。有人可能会说,计算机是二进制的,用十六进制干啥?聪明的人或许已经看出来了,16不仅是2的倍数,还是2的整数次幂,也就是说用十六进制来表达二进制数更为方便,因为十六进制的一位数就刚好等于二进制的四位数(二进制的1111=十六进制的F),也就是说一个字节刚好等于两位十六进制数。没看懂?没看懂就算了,不重要,知道有这么个概念就行了
              从现在开始,为了区分不同的进制,我会用“0x”和“0b”来分别表示十六进制和二进制,比如“0xF”就是15,“0x1010”就是10


              IP属地:日本7楼2024-06-20 17:38
              回复
                好了废话说完了,总算能进入正题
                接下来我会介绍怎么找游戏里的这三个模块:
                1)武器数据
                2)单位数据
                3)单位描述


                IP属地:日本8楼2024-06-20 17:40
                回复
                  首先是准备工作:
                  1)用ppsspp打开RTT2
                  2)选择ppsspp的调试→查看内存,你可能会看到一堆问号或者0,没关系,右键数据区域选择dump,Location选RAM(注意Start地址是0x08800000),Filename那里自己随便起一个名字,不用勾那个什么“Include jit...”,起名字右边一个“...”的小方块可以让你选保存地址,默认是保存在ppsspp文件夹里,你找得到就行了,然后点OK,我们就把游戏的内存导出了
                  3)打开CE,它会提示你打开一个进程(select a process to open),不要用这个打开进程。点File(文件)里的Open File(打开文件),用这个打开你刚才dump的内存,这个时候它会问你Start Address是多少,输入8800000就行了,选32 bit,然后打开,你就可以愉快地搜索你dump出来的内存了
                  4)打开你的十六进制编辑器(Hex Editor),也打开你刚dump出来的内存,起始地址也改成0x08800000,不同的编辑器方法不一样我就不解释了你自己寻思,如果你不明白怎么改的话不改也行,但要记住你编辑器里的地址和实际地址相差了0x08800000,你得用计算器算加减法(windows自带的计算器有十六进制计算)


                  IP属地:日本9楼2024-06-20 17:53
                  收起回复
                    我的楼又被吞了= =
                    过段时间再来更新


                    IP属地:日本11楼2024-06-20 18:15
                    回复
                      我的楼估计是回不来了,我码了好久的字呀!过两天再回来更新


                      IP属地:日本来自Android客户端12楼2024-06-22 11:59
                      回复
                        先說怎麼搜索數值
                        像HP之類
                        打算先從有HP的開始找


                        IP属地:中国台湾13楼2024-06-24 23:03
                        收起回复
                          看來我需要圖解說明.....


                          IP属地:中国台湾14楼2024-06-28 19:07
                          回复
                            我的楼看来是不会放出来了,再加上这几天染上了风寒,停更了很多天,看看今天能更新多少


                            IP属地:日本15楼2024-06-30 12:26
                            回复
                              书接9楼,在继续之前,你还需要知道一些基础知识:
                              1)小端序:psp系统是小端序,小端序的意思是,一个数字的最高位(Most Significant Bit)在地址的最高处。简单点的说法就是0x1234(在地址从低到高排列的顺序来看)写作[34][12]而不是[12][34],这个我到后面会详细说明,你看不懂也没关系,或者你可以自己百度小端序是什么意思;
                              2)二进制和十六进制的关系,这个我在7楼解释过了;
                              3)字长:对于32位系统来说,一个标准的word(字长)是32位,也就是4个字节,所以不管一个数字是整数还是浮点数,它的标准长度都是4个字节。一个数字占用的字节越多,所能表示的范围就越大,所以有时候为了节省空间,程序员可能不会使用标准长度:比如说我要用一个数字表示生命值,假如生命值不会超过255也不会是负数,那么我用一个字节去保存生命值就够了。同理,假如标准的浮点数不够精准,我也可以用占用8个字节的双精度浮点数(double)来存数字。本游戏里应该是不存在double的所以不用去管这个,不过有的整数是4字节的有的是2字节甚至1字节的,我会在后面说明。
                              以上内容,看得明白最好,看不明白你就只能照葫芦画瓢,知其然不知其所以然了。当然,问题不大就是了。


                              IP属地:日本16楼2024-06-30 12:43
                              回复