Dip switch 打开游戏碰撞检测框:
1、0x100000 = 0x02
P2rom包含的所有的的判定框的数据:
1、可以通过mame 内存搜索工具找到这些数据
2、从ACT封装章节里的Bank2找到box数据的起始地址是 0x21191A
3、FD05 type | box index = 05 根据000001 01 type左移2位
,所以类型是type = 1,在第一个判定框index = 1;1 * 4 + 1 + FD00 = FD05。
4、FD0A type | box index = 0A 根据000010 10 type左移2位所以类型是type = 2,在第一个判定框index = 2;2 * 4 + 2 + FD00 = FD0A。
代码部分分析 :
0x9DE0:
1、0x9e04=BoxCheck;碰撞检测,攻击被攻击。
2、0x9e0A=CheckP1P2BodyOverlap;过于近检测,过近弹开。
进入BoxCheck到3698位置4个循环检查box:
1、3F1E + 108000 = 10BF1E:攻击者携带的判定框。
2、3F9E + 108000 = 10BF9E:被攻击者携带的判定框。
3、8100 108190:P1人物携带的判定框。
4、8300 108390:P2人物携带的判定框。
5、2B00 = 102B00,102B70:ch,act:102B90,是这个对象判定框,每个结构体是固定,小100,大的对象200,最小40。
108190 P1判定框属性5组box0,box1,box2,box3,box4,boxBody:
1、5个字节一组,为啥是5个一组,因为数据是6个字节,第一个类型的分配到不同地址,人物一般都携带连三组判定框。
判定框碰撞有效性:
判定框类型0x38c0,switch{}:
0-B 一共12个被攻击判定。
C-17 是不摩血的攻击。
18-30 必杀技判定 38-39 架招。
3A-3F 飞行道具抵消框。
07 特瑞可以无限连击,不要在p2的108300 + 90位置设置07的判定框可以实现。
分析动态内存的技巧:
1、30B2 是动态内存分配的方法:在这个函数的返回的地方断点,打印出a1,就是他分配的内存地址
bp 3112,1,{printf a1;g}。
2、3794
每一帧
bp 3794,1,{pc+=4;g}
a4 结构体:
连技方面:
cancel:八神前爪 + 葵花,前抓处在半主动状态。
58ec 是否连技判断: