3代风格切换的修改器最终还是被老外先搞出来了,但是有人说用得不太方便。
修改原理已经看懂了,但是游戏和修改器我已经删了。因为我只是想看一下修改原理,对于我这个手残,一个风格都玩不过来,更别说是玩什么随时切换风格了……
说下修改原理,正常3代不能像4代那样随时切换风格是因为程序本身给分配风格数据的地址不用够,所以在时空神像切换风格时,会把前一次的风格数据清掉,写上新的风格数据,所以导致仅仅只是修改风格状态值后,程序读不到数据而出错。
首先是风格状态值
00 Swordmaster
01 Gunslinger
02 Trickster
03 Royalguard
04 Quicksilver
05 Doppelganger
地址我没记,在时空神像切换风格后,退出神像菜单返回场景画面后用CE搜以上值的变化很容易找到,地址大概位置是01c8xxxx.
然后下面是风格数据的指针地址,指针地址存放着指向风格的数据的访问地址。
Trickster
01c8c9ec 这里数值是风格数据的访问指针,下同
Swordmaster
01c8c9c4
01c8c9d4
Gunslinger
01c8c9d8
01c8c9dc
Royalguard
01c8c9f0
Quicksilver
01c8c9f4
Doppelganger
01c8c9f8
每当切换一种风格时,其它风格的指针就会被清0,强行修改风格值,就会造成游戏无法访问到数据的指针。
数据的指针指向下面的每种风格的数据
Trickster 数据
50 41 43 00 12 00 00 00 50 00 00 00 70 1D 00 00
。
。
。
一共19800字节数据(十六进,下同)
Swordmaster 数据一
50 41 43 00 15 00 00 00 60 00 00 00 00 00 00 00
。
。
。
一共1f000字节数据
Swordmaster 数据二
50 41 43 00 0A 00 00 00 30 00 00 00 70 29 00 00
。
。
。
一共12000字节数据
Gunslinger 数据一
50 41 43 00 13 00 00 00 60 00 00 00 50 1A 00 00
。
。
。
一共12800字节数据
Gunslinger 数据二
50 41 43 00 06 00 00 00 20 00 00 00 50 1F 00 00
。
。
。
一共9000字节数据
Royalguard 数据
50 41 43 00 15 00 00 00 60 00 00 00 50 17 00 00
。
。
。
一共1e000字节数据
Quicksilver 数据
50 41 43 00 02 00 00 00 10 00 00 00 C0 16 00 00
。
。
。
一共3000字节数据
Doppelganger 数据
50 41 43 00 03 00 00 00 20 00 00 00 A0 16 00 00
。
。
。
一共6800字节数据
正常游戏每切换一次风格,就会重新写入对应的风格数据,然后改变访问这些数据的指针。前一种风格的数据会被覆盖掉,前一风格的访问指针也会被清0。
随时切换风格的修改器就是把上面所有这些风格的数据,全部都重新写到修改器另外定义的地址,然后把所有风格的访问指针也都指向修改器定义的数据地址,也就是修改器F7这个功能。然后就可以随时修改风格状态值,那么程序就会根据风格状态值,访问被修改器改过的访问指针,访问到修改器另外找地址写的所有风格数据,以此来实现随时切换风格。
刚才有人说重新切换场景,又要重新按F7,可能就是因为每次切换场景,风格数据的访问指针又被游戏重置了,所以需要把访问指针全部锁定才行。但原修改器一直锁定的话也会出错,中因为没有考虑到是否在游戏中的状态判定。
那么其实可以重新这样做一个修改器,首先是判定是否在游戏场景中游戏的状态
判定指针[b6c4c0]+0c是否为01c8a600,如果是则表示在游戏场景中,那么就锁定上面全部的风格数据和指针。如果指针[b6c4c0]+0c为0,则表示不在游戏场景中,则不锁定。
至于每种风格数据到底是什么,这个还需要文件访问功能。就访问鬼泣3游戏目录下data子目录中的那个1G多的数据压缩包文件。可以用16进制文件编辑器,比如HxD打开那个1G多的数据压缩包文件,然后搜索上面开关的那16个字节,就可以找到每种风格数据在文件中的地址。
比如Trickster 数据
50 41 43 00 12 00 00 00 50 00 00 00 70 1D 00 00
。
。
。
一共19800字节数据
搜50 41 43 00 12 00 00 00 50 00 00 00 70 1D 00 00
就可以找到这一段数据开头地址,然后往后一共19800字节数据(十六进)
读这段数据写到内存,然后重新定义程序访问这段数据的指针,并同理将所有风格的数据都读到内存,并锁定就可以实现游戏中随时切换风格了。
另外原作的风格修改器没有正常风格的声音,这大概也是同上面一样的原理,前一种风格的声音的访问数据被之后的覆盖掉了,同理应该也是可以做到每种风格的声音保留的。
最后就是利用游戏中的按键来切换风格。
游戏中有专门的按键的状态值,2字节整数。比如按下跳键时就是0400,不按时就是0000,按攻击键就是0100,射击键就是0200等等,就是二进制状态字表示按键。找到这个数据的地址,然后读这个地址的值就可以判定是否按了什么键,然后可以根据这个判定来切换风格。4代键盘按住跳走不放走路的修改就是这个原理。
因为本人还是一如既往的不会编程,更不会读文件的数据,所以这样的修改器也就只能是想一想而已了。相信lethe555还有很多懂编程的高手们,这应该不算是难事,有兴趣的话试试吧。
修改原理已经看懂了,但是游戏和修改器我已经删了。因为我只是想看一下修改原理,对于我这个手残,一个风格都玩不过来,更别说是玩什么随时切换风格了……
说下修改原理,正常3代不能像4代那样随时切换风格是因为程序本身给分配风格数据的地址不用够,所以在时空神像切换风格时,会把前一次的风格数据清掉,写上新的风格数据,所以导致仅仅只是修改风格状态值后,程序读不到数据而出错。
首先是风格状态值
00 Swordmaster
01 Gunslinger
02 Trickster
03 Royalguard
04 Quicksilver
05 Doppelganger
地址我没记,在时空神像切换风格后,退出神像菜单返回场景画面后用CE搜以上值的变化很容易找到,地址大概位置是01c8xxxx.
然后下面是风格数据的指针地址,指针地址存放着指向风格的数据的访问地址。
Trickster
01c8c9ec 这里数值是风格数据的访问指针,下同
Swordmaster
01c8c9c4
01c8c9d4
Gunslinger
01c8c9d8
01c8c9dc
Royalguard
01c8c9f0
Quicksilver
01c8c9f4
Doppelganger
01c8c9f8
每当切换一种风格时,其它风格的指针就会被清0,强行修改风格值,就会造成游戏无法访问到数据的指针。
数据的指针指向下面的每种风格的数据
Trickster 数据
50 41 43 00 12 00 00 00 50 00 00 00 70 1D 00 00
。
。
。
一共19800字节数据(十六进,下同)
Swordmaster 数据一
50 41 43 00 15 00 00 00 60 00 00 00 00 00 00 00
。
。
。
一共1f000字节数据
Swordmaster 数据二
50 41 43 00 0A 00 00 00 30 00 00 00 70 29 00 00
。
。
。
一共12000字节数据
Gunslinger 数据一
50 41 43 00 13 00 00 00 60 00 00 00 50 1A 00 00
。
。
。
一共12800字节数据
Gunslinger 数据二
50 41 43 00 06 00 00 00 20 00 00 00 50 1F 00 00
。
。
。
一共9000字节数据
Royalguard 数据
50 41 43 00 15 00 00 00 60 00 00 00 50 17 00 00
。
。
。
一共1e000字节数据
Quicksilver 数据
50 41 43 00 02 00 00 00 10 00 00 00 C0 16 00 00
。
。
。
一共3000字节数据
Doppelganger 数据
50 41 43 00 03 00 00 00 20 00 00 00 A0 16 00 00
。
。
。
一共6800字节数据
正常游戏每切换一次风格,就会重新写入对应的风格数据,然后改变访问这些数据的指针。前一种风格的数据会被覆盖掉,前一风格的访问指针也会被清0。
随时切换风格的修改器就是把上面所有这些风格的数据,全部都重新写到修改器另外定义的地址,然后把所有风格的访问指针也都指向修改器定义的数据地址,也就是修改器F7这个功能。然后就可以随时修改风格状态值,那么程序就会根据风格状态值,访问被修改器改过的访问指针,访问到修改器另外找地址写的所有风格数据,以此来实现随时切换风格。
刚才有人说重新切换场景,又要重新按F7,可能就是因为每次切换场景,风格数据的访问指针又被游戏重置了,所以需要把访问指针全部锁定才行。但原修改器一直锁定的话也会出错,中因为没有考虑到是否在游戏中的状态判定。
那么其实可以重新这样做一个修改器,首先是判定是否在游戏场景中游戏的状态
判定指针[b6c4c0]+0c是否为01c8a600,如果是则表示在游戏场景中,那么就锁定上面全部的风格数据和指针。如果指针[b6c4c0]+0c为0,则表示不在游戏场景中,则不锁定。
至于每种风格数据到底是什么,这个还需要文件访问功能。就访问鬼泣3游戏目录下data子目录中的那个1G多的数据压缩包文件。可以用16进制文件编辑器,比如HxD打开那个1G多的数据压缩包文件,然后搜索上面开关的那16个字节,就可以找到每种风格数据在文件中的地址。
比如Trickster 数据
50 41 43 00 12 00 00 00 50 00 00 00 70 1D 00 00
。
。
。
一共19800字节数据
搜50 41 43 00 12 00 00 00 50 00 00 00 70 1D 00 00
就可以找到这一段数据开头地址,然后往后一共19800字节数据(十六进)
读这段数据写到内存,然后重新定义程序访问这段数据的指针,并同理将所有风格的数据都读到内存,并锁定就可以实现游戏中随时切换风格了。
另外原作的风格修改器没有正常风格的声音,这大概也是同上面一样的原理,前一种风格的声音的访问数据被之后的覆盖掉了,同理应该也是可以做到每种风格的声音保留的。
最后就是利用游戏中的按键来切换风格。
游戏中有专门的按键的状态值,2字节整数。比如按下跳键时就是0400,不按时就是0000,按攻击键就是0100,射击键就是0200等等,就是二进制状态字表示按键。找到这个数据的地址,然后读这个地址的值就可以判定是否按了什么键,然后可以根据这个判定来切换风格。4代键盘按住跳走不放走路的修改就是这个原理。
因为本人还是一如既往的不会编程,更不会读文件的数据,所以这样的修改器也就只能是想一想而已了。相信lethe555还有很多懂编程的高手们,这应该不算是难事,有兴趣的话试试吧。