展现武器射程的话涉及三个问题:
1.角色移动后,一级菜单 (Unit-Menu, UM. 选择攻击/物品/待机)时展示攻击范围;
2.选择”攻击“后,在武器选择菜单 (Sub-AttackMenu )展示不同武器的攻击范围;
3.角色移动前会展示移动范围+外圈的最大攻击范围。
其中1/2两种情况对应的是同一个函数组,我们这里就以情况1为例做讨论:
在FEB的“菜单”一栏下可以查询到展示攻击范围的函数:
在UM中展示攻击范围的函数位于 [0x8022C30+1] 的位置,我们将这一函数命名为”DisplayUnitStandingAttackRange”,意思显而易见。另外提一下,后续可能我也会顺手将其称为”UMAttack_Hover”之类的名称。
用IDA对这个Hover函数分析一下,长这样:
函数最开始的一些初始化的问题我们暂且不去关注(我想后续会提到的,如果我能写到类风花雪月的战技系统制作部分的话);中间的判定部分是在判定当前道具是魔法(Ballista,理光暗)还是武器(NoInBallista,剑斧枪弓);如果是武器的话,随后引入了两个函数, Get-UnitRangeMask [0x80171E8]与Fill-RangeMap-By-RangeMask[0x801B460];