圣魔之光石吧 关注:26,981贴子:390,685

回复:(随缘更) FE8U的Pre-Battle阶段程序解读

取消只看楼主收藏回复

【2.1】 Menu与Command的数据结构
首先,UnitMenu分为两个部分,分别是Menu_Defination与Menu_Command。
Menu_Defination的结构如下:

当系统试图开启一个菜单的时候,首先会寻址Menu_definition,随后循着其0x8的位置查找对应的Menu_Command。
Menu_Command的结构如下:

其中,Menu_Command中的每一个Command_definition分别对应一个选项(Size、Attack、Item、Wait等等)。而在Command_definition内部则可以找到是否可选(U****lity)、点击后的效果(Effect)等函数以及其他数据。


IP属地:上海19楼2021-07-07 14:03
回复
    尼玛Usa------bility竟然给屏蔽了????彳亍


    IP属地:上海21楼2021-07-07 14:05
    回复
      2026-01-31 12:15:32
      广告
      不感兴趣
      开通SVIP免广告
      回到FE8U,具体到UnitMenu部分,其数据如下(可以采用FEB查看):
      Menu_Defination(UnitMenu):

      Command_definition:

      转换成我们刚才罗列的格式就是:



      IP属地:上海22楼2021-07-07 14:06
      回复
        实际上基于上述少量的知识,我们已经可以着手制作一个简单的菜单了:
        首先,将59D1F0(UnitMenu处)覆盖上我们重新做的UM Defination:

        我们在这里只简单地把+0x8,也即MenuCommand的部分单列出来。
        那么接下来来做Command吧:

        改动同样很简单,只把+0xC处,也即Command U****lity的函数做了定义 ( return r0=1 ),即可让这一Command永远可选。
        那么烧录进游戏看一下情况吧:

        "Eirika"正是我们定义在MenuCommand+0x4处的字串ID,0x212。
        当然了目前点击之后没有任何效果,因为MenuCommand+0x14处,即Command Effect处并没有指向某一个函数。你可以尝试抄来Wait的效果函数,烧录进游戏看看效果


        IP属地:上海26楼2021-07-22 20:59
        回复