[FE8] Status Screen R-Text

At A01CC0 there is data in the following format:
[pointer1][pointer2][pointer3][pointer4][ ][y][text ID in little endian][4 bytes of zeroes]. These correspond to the text displayed when you click the R button for “info”. The x,y coordinates are where the little pointer finger and text box is drawn, and the pointers are used to determine where you go to when you press the arrow keys when viewing the info.
Sample:

I suspect other info box text is stored in similar ways.

2 Likes

It’s interesting that a lot of peoples’ fears of customizing menus could be exaggerated if more of the components of menus are formatted this simply. A lot of good hack ideas are precluded by a need for an interface for the players.

2 Likes

Okay, at least for the stat screen, the format is a little different.

[pointerUp][pointerDown][pointerLeft][pointerRight][x][y][textID][00 00 00 00][pointer to routine]

The final pointer is for getting dynamic text such as character names/classes and stuff. If not found it displays the default text ID as a backup.

You can edit with Event Assembler as usual:


#define RMenu(up,down,left,right,x,y,TID) "POIN up down left right;BYTE x y; SHORT TID; WORD 0 0"
#define RMenu(up,down,left,right,x,y,BackupTID,TIDGetter) "POIN up down left right; BYTE x y; SHORT TID; POIN 0 TIDGetter|1"
//
#define NameDescGetter $88bd5
#define ClassDescGetter $88c01
//
ORG $8a00b38 //original location
ST_Name:
RMenu(0,ST_Class,0,ST_Luk,$18,$50,0,NameDescGetter)
ST_Class:
RMenu(ST_Name,ST_Lv,0,ST_Res,$6,$68,$6E8,ClassDescGetter)
ST_Lv:
RMenu(ST_Class,ST_HP,0,ST_Exp,$6,$78,$542)
ST_Exp:
RMenu(ST_Class,ST_HP,ST_Lv,ST_Res,$26,$78,$543)
ST_HP:
RMenu(up, down, left, right, you get the drill)
//
//..and so on

Looks like inventory is yet again different in order to handle the different number of items:

[pointerUp][pointerDown][pointerLeft][pointerRight][x][y][slot number][pointer to loop routine][pointer to text getter]

original location at 8A00DBC

Depending on which direction you press, the routine looks up the appropriate pointer and checks if there is a loop routine set. If no loop routine, everything continues as normal.

If there is a loop routine, it checks if there is an item at that slot, and returns if there is. If not, it calls the parent routine again, effectively moving the cursor one more space. There it once again checks if there is a loop routine, and if so then it checks for an item, and if no item it calls the parent again…

Once it hits an item or something without a loop routine, it returns and that’s where the cursor jumps to.

http://pastebin.com/Yc7q6q3E