断断续续一天多的研究,对仙剑4的战斗模式结构有了些了解,看下面:
PS:感谢游侠论坛的lckiu提供人物战斗基地址和是否在战斗中的基地址。
基地址:
PS:ReadMemoryToInt这个函数是读取指定地址中的数值
人物战斗基地址(战斗中的人物,最多3名)
ReadMemoryToInt(ReadMemoryToInt($00400000+$004f3128)+$34)
左侧人物:+$00000000
中间人物:+$00000004
右侧人物:+$00000008
是否在战斗中的基地址,不在战斗中则为0
ReadMemoryToInt($00400000+$004f3190)
交换的人物,如果4个人物进入战斗模式,排在最后的人会在这个地址里保存数据
基地址:ReadMemoryToInt(ReadMemoryToInt($00400000+$004f3128)+$24)
偏移值:+$0000000C
战斗敌人基地址,战斗模式中最多容下6个敌人位置
ReadMemoryToInt(ReadMemoryToInt($00400000+$004f3128)+$14)
第一敌人:+$00000000
第二敌人:+$00000004
第三敌人:+$00000008
第四敌人:+$0000000C
第五敌人:+$00000010
第六敌人:+$00000014
以下为人物和敌人的战斗中数据结构(前部):
$8
$c
$10
$14 基础攻
$18
$1C 基础速
$20 基础运
$24 基础灵
$E0
$E4
$14C
$158
$15C
$160
$164 攻
$168防
$16c速
$170运
$174灵
$230 显示等级
$234 显示经验
$23C 精
$240 气
$244 神
$29C 位置
偏移值
$38
$8C
$D0
$d4
$150
$154
特殊
人数数据里的位置指的就是人物在战斗模式中位置,0为左边,1为中间,2为右边,6为交换人物。
我这里辨认人物在哪个位置是利用读取迷宫模式里的人物基础精,再去与战斗模式中我方的4个地址里的基础精做比较,对上了则直接赋值。
判别基地址里是否有敌人或我方人物,则判断他们地址位置上(偏移$0)上的值是多少,值为$846008是我方,值为$00845D00是敌人。
每次战斗结束或战斗中有敌人死亡后(针对战场上可攻击敌人少于6人)。如果有7个敌人,打死第2个,那第7个敌人数据会出现在第二敌人基地址上。所以第N敌人的基地址是战斗模式里的位置。一些规律如下:
遇到6个敌人
第一敌人 A1
第二敌人 A2
第三敌人 A3
第四敌人 A4
第五敌人 A5
第六敌人 A6
当第二敌人死亡,则会变成
第一敌人 A1
第二敌人 A3
第三敌人 A4
第四敌人 A5
第五敌人 A6
第六敌人 A6
当第一敌人死亡
第一敌人 A3
第二敌人 A4
第三敌人 A5
第四敌人 A6
第五敌人 A6
第六敌人 A6
当全灭敌人结束战斗,回到迷宫模式后
第一敌人 A6
第二敌人 A6
第三敌人 A6
第四敌人 A6
第五敌人 A6
第六敌人 A6
下场遇到3个敌人
第一敌人 B1
第二敌人 B2
第三敌人 B3
第四敌人 A6
第五敌人 A6
第六敌人 A6
在换人位置里的数据貌似是不可改写的。
人物死亡后再锁定精补满不会复活,现在粗略的感觉有2个地址有关,但都是表示头像状态和人物模型的,所以可能人物死亡后会比较麻烦。