Difference between revisions of "FF7/Menu Module"
my_wiki>Synergy Blades (→The Save Game format) |
(→Menu Modules) |
||
(7 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
− | == Menu Overview == | + | == Menu Overview == |
− | === Important Files === | + | === Important Files === |
− | {| | + | {| class="wikitable" |
− | ! style="background:rgb(0,255,0)" align="center" | PSX Version | + | ! style="background: rgb(0,255,0)" align="center" | PSX Version |
− | ! style="background:rgb(0,255,0)" align="center" | PC Version | + | ! style="background: rgb(0,255,0)" align="center" | PC Version |
|- | |- | ||
− | |style="background:rgb(0,255,0)" | /MENU/*.MNU | + | | style="background: rgb(0,255,0)" | /MENU/*.MNU |
− | |style="background:rgb(0,255,0)" | /DATA/MENU/MENU_US.LGP | + | | style="background: rgb(0,255,0)" | /DATA/MENU/MENU_US.LGP |
− | |||
− | |||
− | |||
|- | |- | ||
+ | | style="background: rgb(0,255,0)" | /INIT/WINDOW.BIN | ||
+ | | style="background: rgb(0,255,0)" | /DATA/KERNEL/WINDOW.BIN | ||
|} | |} | ||
− | The menu module is probably the second most powerful module in the game. From here you can set a multitude of environment variables and view character records directly. It's really more of a master variable controller than the "select-o-thing" it appears to be. | + | The menu module is probably the second most powerful module in the game. From here you can set a multitude of environment variables and view character records directly. It's really more of a master variable controller than the "select-o-thing" it appears to be. |
− | Because the menu can have some rather fancy and complicated management features, it also can be placed in "Tutorial mode". This mode, when called from the field module will "play" prerecorded menu selections for the player. | + | Because the menu can have some rather fancy and complicated management features, it also can be placed in "Tutorial mode". This mode, when called from the field module will "play" prerecorded menu selections for the player. |
− | Another major function of the menu system is the ability to save your game. This is probably the most powerful and vital part as the Menu has access to every single variable in the system, excluding the script temporary variables. | + | Another major function of the menu system is the ability to save your game. This is probably the most powerful and vital part as the Menu has access to every single variable in the system, excluding the script temporary variables. |
− | The Menu module is actually a collection of 13 modules, to which 4 can be called from the field scripting language. The 13 are called Begin, Party, Item, Magic, Eqip, Stat, Change, Limit, Config, Form, Save, Name, and Shop. | + | The Menu module is actually a collection of 13 modules, to which 4 can be called from the field scripting language. The 13 are called Begin, Party, Item, Magic, Eqip, Stat, Change, Limit, Config, Form, Save, Name, and Shop. |
− | == Menu Initialization == | + | == Menu Initialization == |
Menu has the incredible honor of being initialized right after the kernel. It is also the only module that keeps permanent data in VRAM for other modules to access. In the case of the PSX version, the graphics are loaded out of /INIT/WINDOW.BIN. This is a BIN-GZIP archive described in the Kernel section of this document. WINDOW.BIN has the following format. | Menu has the incredible honor of being initialized right after the kernel. It is also the only module that keeps permanent data in VRAM for other modules to access. In the case of the PSX version, the graphics are loaded out of /INIT/WINDOW.BIN. This is a BIN-GZIP archive described in the Kernel section of this document. WINDOW.BIN has the following format. | ||
− | {| | + | {| class="wikitable" |
− | ! | + | ! Offset |
− | ! | + | ! Length |
− | ! style="background:rgb(204,204,204); width:150px" align="center" | Description | + | ! style="background: rgb(204,204,204); width: 150px" align="center" | Description |
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
− | | | + | | 0x0000 |
− | | | + | | 6 bytes |
− | | | + | | Header [0x4827208200] |
|- | |- | ||
− | | | + | | 0x0006 |
− | | | + | | 1062 bytes |
− | | | + | | Static Menu textures |
|- | |- | ||
− | | | + | | 0x2754 |
− | | | + | | 3034 bytes |
− | | | + | | Font texture |
|- | |- | ||
+ | | style="background: rgb(255,255,204)" | 0x332E | ||
+ | | style="background: rgb(255,255,204)" | 163 bytes | ||
+ | | style="background: rgb(255,255,204)" | Unknown | ||
|} | |} | ||
− | After initialization, the first Menu module ran is "Begin" The following is a picture of "Begin" in VRAM. Things to note is the font and static menu textures from /INIT/WINNDOW.BIN are highlighted in the lower right hand corner. | + | After initialization, the first Menu module ran is "Begin" The following is a picture of "Begin" in VRAM. Things to note is the font and static menu textures from /INIT/WINNDOW.BIN are highlighted in the lower right hand corner. |
− | [[ | + | [[File:Menu Windowbin.jpg|thumb]] |
− | The following is an expanded picture of the textures from the PC version. The PSX version only differs in texture size and the way the buttons are displayed. | + | The following is an expanded picture of the textures from the PC version. The PSX version only differs in texture size and the way the buttons are displayed. |
− | [[ | + | [[File:Menu PC Textures.jpg|thumb]] |
To better see what each section is, here is an annotated version with the more obvious textures labeled. | To better see what each section is, here is an annotated version with the more obvious textures labeled. | ||
− | [[ | + | [[File:Menu PCT Annotated.jpg|thumb]] |
− | This is never banked out, however small parts are overwritten and cashed for a while when Battle is loaded, but are overwritten again when menu is loaded. The large blank spot under the menu text is for the Japanese characters that were removed in the non-Japanese version of the game. This spot is unused in these versions. | + | This is never banked out, however small parts are overwritten and cashed for a while when Battle is loaded, but are overwritten again when menu is loaded. The large blank spot under the menu text is for the Japanese characters that were removed in the non-Japanese version of the game. This spot is unused in these versions. |
− | == Menu Modules == | + | == Menu Modules == |
− | The 13 Modules are displayed like the following. | + | The 13 Modules are displayed like the following. |
− | === Begin === | + | === Begin === |
− | This is the begin menu. | + | This is the begin menu. |
− | [[ | + | [[File:Menu Begin.jpg]] |
− | This is a screen form the "save" module. Begin initializes the menu system and calls save to load a game or to start the game. | + | This is a screen form the "save" module. Begin initializes the menu system and calls save to load a game or to start the game. |
− | === Party === | + | === Party === |
− | [[ | + | [[File:Menu Party.jpg]] |
− | This is the menu you see when you manually enter the menu system. Things to note is the empty box in the lower screen shows what location you are in. Debug rooms have no name most of the time. | + | This is the menu you see when you manually enter the menu system. Things to note is the empty box in the lower screen shows what location you are in. Debug rooms have no name most of the time. |
− | === Item === | + | === Item === |
This is the item menu. | This is the item menu. | ||
− | [[ | + | [[File:Menu Item.jpg]] |
− | === Magic === | + | === Magic === |
This is the magic menu. | This is the magic menu. | ||
− | [[ | + | [[File:Menu Magic.jpg]] |
Both magic and summon are accessed in the same module. | Both magic and summon are accessed in the same module. | ||
− | === Equip === | + | === Equip === |
The equip menu is a little strange. | The equip menu is a little strange. | ||
− | [[ | + | [[File:Menu Equip.jpg]] |
Equip and Materia are in the same module. | Equip and Materia are in the same module. | ||
− | === Status === | + | === Status === |
This is the status menu. | This is the status menu. | ||
− | [[ | + | [[File:Menu Status.jpg]] |
− | === Change === | + | === Change === |
− | [[ | + | [[File:Menu Change.jpg]] |
Also known as "Order", this is the simplest and smallest of all the menu modules, it just changes the order of the party, it uses the party screen as a background. | Also known as "Order", this is the simplest and smallest of all the menu modules, it just changes the order of the party, it uses the party screen as a background. | ||
− | === Limit === | + | === Limit === |
This is the limit menu. | This is the limit menu. | ||
− | [[ | + | [[File:Menu Limit.jpg]] |
− | === Config === | + | === Config === |
− | [[ | + | [[File:Menu Config.jpg]] |
− | This is where a good deal of environment variables can be changed. | + | This is where a good deal of environment variables can be changed. |
− | === Form === | + | === Form === |
− | This is also known as the PHS screen. | + | This is also known as the PHS screen. |
− | [[ | + | [[File:Menu Form.jpg]] |
Form can also be called when you need to make a two or three teams of people. | Form can also be called when you need to make a two or three teams of people. | ||
− | === Save === | + | === Save === |
− | The all important save screen. | + | The all important save screen. |
− | [[ | + | [[File:Menu Save.jpg]] |
To save time, this will only load the first 80 bytes of each save as a preview. It allows a quick look without having to load the whole memory card, which can take upward of a minute. This is also responsible for loading games too, when called from "Begin". | To save time, this will only load the first 80 bytes of each save as a preview. It allows a quick look without having to load the whole memory card, which can take upward of a minute. This is also responsible for loading games too, when called from "Begin". | ||
− | === Name === | + | === Name === |
This is the naming screen. | This is the naming screen. | ||
− | [[ | + | [[File:Menu Name.jpg]] |
If you try and use the same name screen twice in a game, you will loose your old name and will be overwritten with the default one. | If you try and use the same name screen twice in a game, you will loose your old name and will be overwritten with the default one. | ||
− | === Shop === | + | === Shop === |
− | This is your typical shop. | + | This is your typical shop. |
− | [[ | + | [[File:Menu Shop.jpg]] |
You can, of course, sell items from this module as well. | You can, of course, sell items from this module as well. | ||
− | == Calling the various menus == | + | == Calling the various menus == |
− | The PSX version keeps the menu modules contained in a .MNU file. The PC version has the menu code internal to the executable. The highlighted modules can be called with the MENU script command. The MENU command always takes a first argument of 00. The second argument is the Menu ID number, and the third is the argument. | + | The PSX version keeps the menu modules contained in a .MNU file. The PC version has the menu code internal to the executable. The highlighted modules can be called with the MENU script command. The MENU command always takes a first argument of 00. The second argument is the Menu ID number, and the third is the argument. |
− | {| | + | {| class="wikitable" |
− | ! | + | ! Module Name |
− | ! | + | ! PSX Filename |
− | ! style="background:rgb(204,204,204); width:100px" align="center" | Menu ID Number | + | ! style="background: rgb(204,204,204); width: 100px" align="center" | Menu ID Number |
− | ! | + | ! Argument |
|- | |- | ||
− | + | | Begin | |
− | + | | /MENU/BGINMENU.MNU | |
− | + | | N/A | |
− | + | | N/A | |
|- | |- | ||
− | |style="background:rgb(152,204,255)" | Party | + | | style="background: rgb(152,204,255)" | Party |
− | |style="background:rgb(152,204,255)" | /MENU/PATYMENU.MNU | + | | style="background: rgb(152,204,255)" | /MENU/PATYMENU.MNU |
− | |style="background:rgb(152,204,255)" | 0x09 | + | | style="background: rgb(152,204,255)" | 0x09 |
− | |style="background:rgb(152,204,255)" | 0x00 | + | | style="background: rgb(152,204,255)" | 0x00 |
|- | |- | ||
− | + | | Item | |
− | + | | /MENU/ITEMMENU.MNU | |
− | + | | N/A | |
− | + | | N/A | |
|- | |- | ||
− | + | | Magic | |
− | + | | /MENU/MGICMENU.MNU | |
− | + | | N/A | |
− | + | | N/A | |
|- | |- | ||
− | + | | Equip | |
− | + | | /MENU/EQIPMENU.MNU | |
− | + | | N/A | |
− | + | | N/A | |
|- | |- | ||
− | + | | Status | |
− | + | | /MENU/STATMENU.MNU | |
− | + | | N/A | |
− | + | | N/A | |
|- | |- | ||
− | + | | Change | |
− | + | | /MENU/CHNGMENU.MNU | |
− | + | | N/A | |
− | + | | N/A | |
|- | |- | ||
− | + | | Limit | |
− | + | | /MENU/LIMTMENU.MNU | |
− | + | | N/A | |
− | + | | N/A | |
|- | |- | ||
− | + | | Config | |
− | + | | /MENU/CNFGMENU.MNU | |
− | + | | N/A | |
− | + | | N/A | |
|- | |- | ||
− | |style="background:rgb(152,204,255)" rowspan="3" | Form | + | | style="background: rgb(152,204,255)" rowspan="3" | Form |
− | |style="background:rgb(152,204,255)" rowspan="3" | /MENU/FORMMENU.MNU | + | | style="background: rgb(152,204,255)" rowspan="3" | /MENU/FORMMENU.MNU |
− | |style="background:rgb(152,204,255)" rowspan="3" | 0x07 | + | | style="background: rgb(152,204,255)" rowspan="3" | 0x07 |
− | |style="background:rgb(152,204,255)" | 0x00 - Make a party of 3 | + | | style="background: rgb(152,204,255)" | 0x00 - Make a party of 3 |
|- | |- | ||
− | |style="background:rgb(152,204,255)" | 0x01 - Split into 3 groups | + | | style="background: rgb(152,204,255)" | 0x01 - Split into 3 groups |
|- | |- | ||
− | |style="background:rgb(152,204,255)" | 0x02 - Split into 2 groups | + | | style="background: rgb(152,204,255)" | 0x02 - Split into 2 groups |
|- | |- | ||
− | |style="background:rgb(152,204,255)" | Save | + | | style="background: rgb(152,204,255)" | Save |
− | |style="background:rgb(152,204,255)" | /MENU/SAVEMENU.MNU | + | | style="background: rgb(152,204,255)" | /MENU/SAVEMENU.MNU |
− | |style="background:rgb(152,204,255)" | 0x0E | + | | style="background: rgb(152,204,255)" | 0x0E |
− | |style="background:rgb(152,204,255)" | 0x00 | + | | style="background: rgb(152,204,255)" | 0x00 |
|- | |- | ||
− | |style="background:rgb(152,204,255)" rowspan="10" | Name | + | | style="background: rgb(152,204,255)" rowspan="10" | Name |
− | |style="background:rgb(152,204,255)" rowspan="10" | /MENU/NAMEMENU.MNU | + | | style="background: rgb(152,204,255)" rowspan="10" | /MENU/NAMEMENU.MNU |
− | |style="background:rgb(152,204,255)" rowspan="10" | 0x06 | + | | style="background: rgb(152,204,255)" rowspan="10" | 0x06 |
− | |style="background:rgb(152,204,255)" | 0x00 - Cloud | + | | style="background: rgb(152,204,255)" | 0x00 - Cloud |
|- | |- | ||
− | |style="background:rgb(152,204,255)" | 0x01 - Barret | + | | style="background: rgb(152,204,255)" | 0x01 - Barret |
|- | |- | ||
− | |style="background:rgb(152,204,255)" | 0x02 - Tifa | + | | style="background: rgb(152,204,255)" | 0x02 - Tifa |
|- | |- | ||
− | |style="background:rgb(152,204,255)" | 0x03 - Aerith | + | | style="background: rgb(152,204,255)" | 0x03 - Aerith |
|- | |- | ||
− | |style="background:rgb(152,204,255)" | 0x04 - Red XII | + | | style="background: rgb(152,204,255)" | 0x04 - Red XII |
|- | |- | ||
− | |style="background:rgb(152,204,255)" | 0x05 - Yuffie | + | | style="background: rgb(152,204,255)" | 0x05 - Yuffie |
|- | |- | ||
− | |style="background:rgb(152,204,255)" | 0x06 - Cait Sith | + | | style="background: rgb(152,204,255)" | 0x06 - Cait Sith |
|- | |- | ||
− | |style="background:rgb(152,204,255)" | 0x07 - Vincent | + | | style="background: rgb(152,204,255)" | 0x07 - Vincent |
|- | |- | ||
− | |style="background:rgb(152,204,255)" | 0x08 - Cid | + | | style="background: rgb(152,204,255)" | 0x08 - Cid |
|- | |- | ||
− | |style="background:rgb(152,204,255)" | 0x09 - Chocobo | + | | style="background: rgb(152,204,255)" | 0x09 - Chocobo |
|- | |- | ||
− | |style="background:rgb(152,204,255)" | Shop | + | | style="background: rgb(152,204,255)" | Shop |
− | |style="background:rgb(152,204,255)" | /MENU/SHOPMENU.MNU | + | | style="background: rgb(152,204,255)" | /MENU/SHOPMENU.MNU |
− | |style="background:rgb(152,204,255)" | 0x08 | + | | style="background: rgb(152,204,255)" | 0x08 |
− | |style="background:rgb(152,204,255)" | (0x00-0xFF) Shop Number | + | | style="background: rgb(152,204,255)" | (0x00-0xFF) Shop Number |
|} | |} | ||
− | == Menu dependencies == | + | == Menu dependencies == |
− | On the PSX, Menu dependencies are kept in two different directories. The window dressing textures that stay in memory are found in /INIT/WINDOW.BIN and stored as a BIN-GZIP archive. In the MENU directory, some MNU files contain TIM files appended at the end that are displayed when they are loaded. Two of them, PARTYMENU.MNU and FORMMENU.MNU, externally reference TIM files on the disk as they share these resources. SAVEMENU.MNU also externally references the memory card ports. | + | On the PSX, Menu dependencies are kept in two different directories. The window dressing textures that stay in memory are found in /INIT/WINDOW.BIN and stored as a BIN-GZIP archive. In the MENU directory, some MNU files contain TIM files appended at the end that are displayed when they are loaded. Two of them, PARTYMENU.MNU and FORMMENU.MNU, externally reference TIM files on the disk as they share these resources. SAVEMENU.MNU also externally references the memory card ports. |
− | The PC version has the MNU files internal to the executable and only have external resources. These are kept within the MENU_US.LGP file. The PC version has textures in two different sizes to support the two resolutions the game runs in. The following is a table of the menu resources and where they are located in both the PC and PSX version. | + | The PC version has the MNU files internal to the executable and only have external resources. These are kept within the MENU_US.LGP file. The PC version has textures in two different sizes to support the two resolutions the game runs in. The following is a table of the menu resources and where they are located in both the PC and PSX version. |
− | {| | + | {| class="wikitable" |
− | ! | + | ! Picture |
− | ! | + | ! Description |
− | ! | + | ! Low Resolution<br />PC Filename |
− | ! | + | ! High Resolution<br />PC Filename |
− | ! | + | ! PSX Location (in<br /> /MENU unless noted) |
− | ! | + | ! TIM Offset |
|- | |- | ||
− | + | | | |
− | + | | Cloud Avatar | |
− | + | | CLOUD_L.TEX | |
− | + | | CLOUD.TEX | |
− | + | | CLOUD.TIM | |
− | + | | N/A | |
|- | |- | ||
− | + | | | |
− | + | | Barret Avatar | |
− | + | | BARRE_L.TEX | |
− | + | | BARRE.TEX | |
− | + | | BARRE.TIM | |
− | + | | N/A | |
|- | |- | ||
− | + | | | |
− | + | | Tifa Avatar | |
− | + | | TIFA_L.TEX | |
− | + | | TIFA.TEX | |
− | + | | TIFA.TIM | |
− | + | | N/A | |
|- | |- | ||
− | + | | | |
− | + | | Cloud Avatar | |
− | + | | CLOUD_L.TEX | |
− | + | | CLOUD.TEX | |
− | + | | CLOUD.TIM | |
− | + | | N/A | |
|- | |- | ||
− | + | | | |
− | + | | Aeris Avatar | |
− | + | | EARITH_L.TEX | |
− | + | | EARITH.TEX | |
− | + | | EARITH.TIM | |
− | + | | N/A | |
|- | |- | ||
− | + | | | |
− | + | | Red XIII Avatar | |
− | + | | RED_L.TEX | |
− | + | | RED.TEX | |
− | + | | RED.TIM | |
− | + | | N/A | |
|- | |- | ||
− | + | | | |
− | + | | Yuffie Avatar | |
− | + | | YUFI_L.TEX | |
− | + | | YUFI.TEX | |
− | + | | YUFI.TIM | |
− | + | | N/A | |
|- | |- | ||
− | + | | | |
− | + | | Cait Sith Avatar | |
− | + | | KETC_L.TEX | |
− | + | | KETC.TEX | |
− | + | | KETC.TIM | |
− | + | | N/A | |
|- | |- | ||
− | + | | | |
− | + | | Vincent Avatar | |
− | + | | BINS_L.TEX | |
− | + | | BINS.TEX | |
− | + | | BINS.TIM | |
− | + | | N/A | |
|- | |- | ||
− | + | | | |
− | + | | Cid Avatar | |
− | + | | CIDO_L.TEX | |
− | + | | CIDO.TEX | |
− | + | | CIDO_L.TIM | |
− | + | | N/A | |
|- | |- | ||
− | + | | | |
− | + | | Young Cloud Avatar | |
− | + | | PCLOUD_L.TEX | |
− | + | | PCLOUD.TEX | |
− | + | | PCLOUD.TIM | |
− | + | | N/A | |
|- | |- | ||
− | + | | | |
− | + | | Sephiroth Avatar | |
− | + | | PCEFI_L.TEX | |
− | + | | PCEFI.TEX | |
− | + | | PCEFI.TIM | |
− | + | | N/A | |
|- | |- | ||
− | + | | | |
− | + | | Chocobo Avatar | |
− | + | | CHOCO_L.TEX | |
− | + | | CHOCO.TEX | |
− | + | | CHOCO.TIM | |
− | + | | N/A | |
|- | |- | ||
− | + | | | |
− | + | | Placeholder Avatar | |
− | + | | N/A | |
− | + | | N/A | |
− | + | | KALI.TIM | |
− | + | | N/A | |
|- | |- | ||
− | |style="background:rgb(230,230,255)" | | + | | style="background: rgb(230,230,255)" | |
− | |style="background:rgb(230,230,255)" | Cloud Avatar | + | | style="background: rgb(230,230,255)" | Cloud Avatar |
− | |style="background:rgb(230,230,255)" | CLOUD_L.TEX | + | | style="background: rgb(230,230,255)" | CLOUD_L.TEX |
− | |style="background:rgb(230,230,255)" | CLOUD.TEX | + | | style="background: rgb(230,230,255)" | CLOUD.TEX |
− | |style="background:rgb(230,230,255)" | NAMEMENU.MNU | + | | style="background: rgb(230,230,255)" | NAMEMENU.MNU |
− | |style="background:rgb(230,230,255)" | 0x1E7C | + | | style="background: rgb(230,230,255)" | 0x1E7C |
|- | |- | ||
− | |style="background:rgb(230,230,255)" | | + | | style="background: rgb(230,230,255)" | |
− | |style="background:rgb(230,230,255)" | Barret Avatar | + | | style="background: rgb(230,230,255)" | Barret Avatar |
− | |style="background:rgb(230,230,255)" | BARRE_L.TEX | + | | style="background: rgb(230,230,255)" | BARRE_L.TEX |
− | |style="background:rgb(230,230,255)" | BARRE.TEX | + | | style="background: rgb(230,230,255)" | BARRE.TEX |
− | |style="background:rgb(230,230,255)" | NAMEMENU.MNU | + | | style="background: rgb(230,230,255)" | NAMEMENU.MNU |
− | |style="background:rgb(230,230,255)" | 0x29A0 | + | | style="background: rgb(230,230,255)" | 0x29A0 |
|- | |- | ||
− | |style="background:rgb(230,230,255)" | | + | | style="background: rgb(230,230,255)" | |
− | |style="background:rgb(230,230,255)" | Tifa Avatar | + | | style="background: rgb(230,230,255)" | Tifa Avatar |
− | |style="background:rgb(230,230,255)" | TIFA_L.TEX | + | | style="background: rgb(230,230,255)" | TIFA_L.TEX |
− | |style="background:rgb(230,230,255)" | TIFA.TEX | + | | style="background: rgb(230,230,255)" | TIFA.TEX |
− | |style="background:rgb(230,230,255)" | NAMEMENU.MNU | + | | style="background: rgb(230,230,255)" | NAMEMENU.MNU |
− | |style="background:rgb(230,230,255)" | 0x34C4 | + | | style="background: rgb(230,230,255)" | 0x34C4 |
|- | |- | ||
− | |style="background:rgb(230,230,255)" | | + | | style="background: rgb(230,230,255)" | |
− | |style="background:rgb(230,230,255)" | Aeris Avatar | + | | style="background: rgb(230,230,255)" | Aeris Avatar |
− | |style="background:rgb(230,230,255)" | EARITH_L.TEX | + | | style="background: rgb(230,230,255)" | EARITH_L.TEX |
− | |style="background:rgb(230,230,255)" | EARITH.TEX | + | | style="background: rgb(230,230,255)" | EARITH.TEX |
− | |style="background:rgb(230,230,255)" | NAMEMENU.MNU | + | | style="background: rgb(230,230,255)" | NAMEMENU.MNU |
− | |style="background:rgb(230,230,255)" | 0x3FE8 | + | | style="background: rgb(230,230,255)" | 0x3FE8 |
|- | |- | ||
− | |style="background:rgb(230,230,255)" | | + | | style="background: rgb(230,230,255)" | |
− | |style="background:rgb(230,230,255)" | Red XIII Avatar | + | | style="background: rgb(230,230,255)" | Red XIII Avatar |
− | |style="background:rgb(230,230,255)" | RED_L.TEX | + | | style="background: rgb(230,230,255)" | RED_L.TEX |
− | |style="background:rgb(230,230,255)" | RED.TEX | + | | style="background: rgb(230,230,255)" | RED.TEX |
− | |style="background:rgb(230,230,255)" | NAMEMENU.MNU | + | | style="background: rgb(230,230,255)" | NAMEMENU.MNU |
− | |style="background:rgb(230,230,255)" | 0x4B0C | + | | style="background: rgb(230,230,255)" | 0x4B0C |
|- | |- | ||
− | |style="background:rgb(230,230,255)" | | + | | style="background: rgb(230,230,255)" | |
− | |style="background:rgb(230,230,255)" | Yuffie Avatar | + | | style="background: rgb(230,230,255)" | Yuffie Avatar |
− | |style="background:rgb(230,230,255)" | YUFI_L.TEX | + | | style="background: rgb(230,230,255)" | YUFI_L.TEX |
− | |style="background:rgb(230,230,255)" | YUFI.TEX | + | | style="background: rgb(230,230,255)" | YUFI.TEX |
− | |style="background:rgb(230,230,255)" | NAMEMENU.MNU | + | | style="background: rgb(230,230,255)" | NAMEMENU.MNU |
− | |style="background:rgb(230,230,255)" | 0x5630 | + | | style="background: rgb(230,230,255)" | 0x5630 |
|- | |- | ||
− | |style="background:rgb(230,230,255)" | | + | | style="background: rgb(230,230,255)" | |
− | |style="background:rgb(230,230,255)" | Cait Sith Avatar | + | | style="background: rgb(230,230,255)" | Cait Sith Avatar |
− | |style="background:rgb(230,230,255)" | KETC_L.TEX | + | | style="background: rgb(230,230,255)" | KETC_L.TEX |
− | |style="background:rgb(230,230,255)" | KETC.TEX | + | | style="background: rgb(230,230,255)" | KETC.TEX |
− | |style="background:rgb(230,230,255)" | NAMEMENU.MNU | + | | style="background: rgb(230,230,255)" | NAMEMENU.MNU |
− | |style="background:rgb(230,230,255)" | 0x6154 | + | | style="background: rgb(230,230,255)" | 0x6154 |
|- | |- | ||
− | |style="background:rgb(230,230,255)" | | + | | style="background: rgb(230,230,255)" | |
− | |style="background:rgb(230,230,255)" | Vincent Avatar | + | | style="background: rgb(230,230,255)" | Vincent Avatar |
− | |style="background:rgb(230,230,255)" | BINS_L.TEX | + | | style="background: rgb(230,230,255)" | BINS_L.TEX |
− | |style="background:rgb(230,230,255)" | BINS.TEX | + | | style="background: rgb(230,230,255)" | BINS.TEX |
− | |style="background:rgb(230,230,255)" | NAMEMENU.MNU | + | | style="background: rgb(230,230,255)" | NAMEMENU.MNU |
− | |style="background:rgb(230,230,255)" | 0x6C78 | + | | style="background: rgb(230,230,255)" | 0x6C78 |
|- | |- | ||
− | |style="background:rgb(230,230,255)" | | + | | style="background: rgb(230,230,255)" | |
− | |style="background:rgb(230,230,255)" | Cid Avatar | + | | style="background: rgb(230,230,255)" | Cid Avatar |
− | |style="background:rgb(230,230,255)" | CIDO_L.TEX | + | | style="background: rgb(230,230,255)" | CIDO_L.TEX |
− | |style="background:rgb(230,230,255)" | CIDO.TEX | + | | style="background: rgb(230,230,255)" | CIDO.TEX |
− | |style="background:rgb(230,230,255)" | NAMEMENU.MNU | + | | style="background: rgb(230,230,255)" | NAMEMENU.MNU |
− | |style="background:rgb(230,230,255)" | 0x779C | + | | style="background: rgb(230,230,255)" | 0x779C |
|- | |- | ||
− | |style="background:rgb(230,230,255)" | | + | | style="background: rgb(230,230,255)" | |
− | |style="background:rgb(230,230,255)" | Chocobo Avatar | + | | style="background: rgb(230,230,255)" | Chocobo Avatar |
− | |style="background:rgb(230,230,255)" | CHOCO_L.TEX | + | | style="background: rgb(230,230,255)" | CHOCO_L.TEX |
− | |style="background:rgb(230,230,255)" | CHOCO.TEX | + | | style="background: rgb(230,230,255)" | CHOCO.TEX |
− | |style="background:rgb(230,230,255)" | NAMEMENU.MNU | + | | style="background: rgb(230,230,255)" | NAMEMENU.MNU |
− | |style="background:rgb(230,230,255)" | 0x82C0 | + | | style="background: rgb(230,230,255)" | 0x82C0 |
|- | |- | ||
− | + | | | |
− | + | | Load screen background | |
− | + | | BUSTER.TEX | |
− | + | | N/A | |
− | + | | SAVEMENU.MNU | |
− | + | | 0x4EDC | |
|- | |- | ||
− | + | | | |
− | + | | Save Icon 1 | |
− | + | | N/A | |
− | + | | N/A | |
− | + | | SAVEMENU.MNU | |
− | + | | 0xF4F4 | |
|- | |- | ||
− | + | | | |
− | + | | Save Icon 2 | |
− | + | | N/A | |
− | + | | N/A | |
− | + | | SAVEMENU.MNU | |
− | + | | 0xF502 | |
|- | |- | ||
− | + | | | |
− | + | | Save Icon 3 | |
− | + | | N/A | |
− | + | | N/A | |
− | + | | SAVEMENU.MNU | |
− | + | | 0xF8F8 | |
|- | |- | ||
− | + | | | |
− | + | | Save Icon 4 | |
− | + | | N/A | |
− | + | | N/A | |
− | + | | SAVEMENU.MNU | |
− | + | | 0xFCEE | |
|- | |- | ||
− | + | | | |
− | + | | Save Icon 5 | |
− | + | | N/A | |
− | + | | N/A | |
− | + | | SAVEMENU.MNU | |
− | + | | 0x100E4 | |
|- | |- | ||
− | + | | | |
− | + | | Save Icon 6 | |
− | + | | N/A | |
− | + | | N/A | |
− | + | | SAVEMENU.MNU | |
− | + | | 0x104DA | |
|- | |- | ||
− | + | | | |
− | + | | Save Icon 7 | |
− | + | | N/A | |
− | + | | N/A | |
− | + | | SAVEMENU.MNU | |
− | + | | 0x108DA | |
|- | |- | ||
− | + | | | |
− | + | | Save Icon 8 | |
− | + | | N/A | |
− | + | | N/A | |
− | + | | SAVEMENU.MNU | |
− | + | | 0x10CC6 | |
|- | |- | ||
− | + | | | |
− | + | | Save Icon 9 | |
− | + | | N/A | |
− | + | | N/A | |
− | + | | SAVEMENU.MNU | |
− | + | | 0x110BC | |
|- | |- | ||
− | + | | | |
− | + | | Save Icon 10 | |
− | + | | N/A | |
− | + | | N/A | |
− | + | | SAVEMENU.MNU | |
− | + | | 0x114B2 | |
|- | |- | ||
− | + | | | |
− | + | | Save Icon 11 | |
− | + | | N/A | |
− | + | | N/A | |
− | + | | SAVEMENU.MNU | |
− | + | | 0x118A8 | |
|- | |- | ||
− | + | | | |
− | + | | Save Icon 12 | |
− | + | | N/A | |
− | + | | N/A | |
− | + | | SAVEMENU.MNU | |
− | + | | 0x11C9E | |
|- | |- | ||
− | + | | | |
− | + | | Save Icon 13 | |
− | + | | N/A | |
− | + | | N/A | |
− | + | | SAVEMENU.MNU | |
− | + | | 0x12094 | |
|- | |- | ||
− | + | | | |
− | + | | Save Icon 14 | |
− | + | | N/A | |
− | + | | N/A | |
− | + | | SAVEMENU.MNU | |
− | + | | 0x1248A | |
|- | |- | ||
− | + | | | |
− | + | | Save Icon 15 | |
− | + | | N/A | |
− | + | | N/A | |
− | + | | SAVEMENU.MNU | |
− | + | | 0x12880 | |
|- | |- | ||
− | + | | | |
− | + | | Coin command | |
− | + | | ZENI.TEX | |
− | + | | ZENI_H.TEX | |
− | + | | ITEMMENU.MNU | |
− | + | | 0x3890 | |
|- | |- | ||
− | |style="background:rgb(255,255,255)" rowspan="8" | | + | | style="background: rgb(255,255,255)" rowspan="8" | |
− | |style="background:rgb(255,255,255)" rowspan="8" | Window Dressings | + | | style="background: rgb(255,255,255)" rowspan="8" | Window Dressings |
− | + | | BTL_WIN_H.TEX | |
− | + | | BTL_WIN_A_H.TEX | |
− | |style="background:rgb(255,255,255)" rowspan="8" | /INIT/WINDOW.BIN | + | | style="background: rgb(255,255,255)" rowspan="8" | /INIT/WINDOW.BIN |
− | |style="background:rgb(255,255,255)" rowspan="8" | 0x0006 | + | | style="background: rgb(255,255,255)" rowspan="8" | 0x0006 |
|- | |- | ||
− | | | + | | |
− | + | | BTL_WIN_B_H.TEX | |
|- | |- | ||
− | | | + | | |
− | + | | BTL_WIN_C_H.TEX | |
|- | |- | ||
− | | | + | | |
− | + | | BTL_WIN_D_H.TEX | |
|- | |- | ||
− | + | | BTL_WIN_L.TEX | |
− | + | | BTL_WIN_A_L.TEX | |
|- | |- | ||
− | | | + | | |
− | + | | BTL_WIN_B_L.TEX | |
|- | |- | ||
− | | | + | | |
− | + | | BTL_WIN_C_L.TEX | |
|- | |- | ||
− | | | + | | |
− | + | | BTL_WIN_D_L.TEX | |
|- | |- | ||
− | |style="background:rgb(255,255,255)" rowspan="4" | | + | | style="background: rgb(255,255,255)" rowspan="4" | |
− | |style="background:rgb(255,255,255)" rowspan="4" | Menu Font | + | | style="background: rgb(255,255,255)" rowspan="4" | Menu Font |
− | + | | USFONT_L.TEX | |
− | + | | USFONT_A_L.TEX | |
− | |style="background:rgb(255,255,255)" rowspan="4" | /INIT/WINDOW.BIN | + | | style="background: rgb(255,255,255)" rowspan="4" | /INIT/WINDOW.BIN |
− | |style="background:rgb(255,255,255)" rowspan="4" | 0x2754 | + | | style="background: rgb(255,255,255)" rowspan="4" | 0x2754 |
|- | |- | ||
− | | | + | | |
− | + | | USFONT_B_L.TEX | |
|- | |- | ||
− | + | | USFONT_H.TEX | |
− | + | | USFONT_A_H.TEX | |
|- | |- | ||
− | | | + | | |
− | + | | USFONT_B_H.TEX | |
|} | |} | ||
− | == The Save Game format == | + | == The Save Game format == |
− | The save game format is lengthy; as such you can find the save game format in a seperate section [[Savemap|here]]. | + | The save game format is lengthy; as such you can find the save game format in a seperate section [[FF7/Savemap|here]]. |
Latest revision as of 02:14, 13 July 2019
Contents
Menu Overview
Important Files
PSX Version | PC Version |
---|---|
/MENU/*.MNU | /DATA/MENU/MENU_US.LGP |
/INIT/WINDOW.BIN | /DATA/KERNEL/WINDOW.BIN |
The menu module is probably the second most powerful module in the game. From here you can set a multitude of environment variables and view character records directly. It's really more of a master variable controller than the "select-o-thing" it appears to be.
Because the menu can have some rather fancy and complicated management features, it also can be placed in "Tutorial mode". This mode, when called from the field module will "play" prerecorded menu selections for the player.
Another major function of the menu system is the ability to save your game. This is probably the most powerful and vital part as the Menu has access to every single variable in the system, excluding the script temporary variables.
The Menu module is actually a collection of 13 modules, to which 4 can be called from the field scripting language. The 13 are called Begin, Party, Item, Magic, Eqip, Stat, Change, Limit, Config, Form, Save, Name, and Shop.
Menu Initialization
Menu has the incredible honor of being initialized right after the kernel. It is also the only module that keeps permanent data in VRAM for other modules to access. In the case of the PSX version, the graphics are loaded out of /INIT/WINDOW.BIN. This is a BIN-GZIP archive described in the Kernel section of this document. WINDOW.BIN has the following format.
Offset | Length | Description |
---|---|---|
0x0000 | 6 bytes | Header [0x4827208200] |
0x0006 | 1062 bytes | Static Menu textures |
0x2754 | 3034 bytes | Font texture |
0x332E | 163 bytes | Unknown |
After initialization, the first Menu module ran is "Begin" The following is a picture of "Begin" in VRAM. Things to note is the font and static menu textures from /INIT/WINNDOW.BIN are highlighted in the lower right hand corner.
The following is an expanded picture of the textures from the PC version. The PSX version only differs in texture size and the way the buttons are displayed.
To better see what each section is, here is an annotated version with the more obvious textures labeled.
This is never banked out, however small parts are overwritten and cashed for a while when Battle is loaded, but are overwritten again when menu is loaded. The large blank spot under the menu text is for the Japanese characters that were removed in the non-Japanese version of the game. This spot is unused in these versions.
Menu Modules
The 13 Modules are displayed like the following.
Begin
This is the begin menu.
This is a screen form the "save" module. Begin initializes the menu system and calls save to load a game or to start the game.
Party
This is the menu you see when you manually enter the menu system. Things to note is the empty box in the lower screen shows what location you are in. Debug rooms have no name most of the time.
Item
This is the item menu.
Magic
This is the magic menu.
Both magic and summon are accessed in the same module.
Equip
The equip menu is a little strange.
Equip and Materia are in the same module.
Status
This is the status menu.
Change
Also known as "Order", this is the simplest and smallest of all the menu modules, it just changes the order of the party, it uses the party screen as a background.
Limit
This is the limit menu.
Config
This is where a good deal of environment variables can be changed.
Form
This is also known as the PHS screen.
Form can also be called when you need to make a two or three teams of people.
Save
The all important save screen.
To save time, this will only load the first 80 bytes of each save as a preview. It allows a quick look without having to load the whole memory card, which can take upward of a minute. This is also responsible for loading games too, when called from "Begin".
Name
This is the naming screen.
If you try and use the same name screen twice in a game, you will loose your old name and will be overwritten with the default one.
Shop
This is your typical shop.
You can, of course, sell items from this module as well.
The PSX version keeps the menu modules contained in a .MNU file. The PC version has the menu code internal to the executable. The highlighted modules can be called with the MENU script command. The MENU command always takes a first argument of 00. The second argument is the Menu ID number, and the third is the argument.
Module Name | PSX Filename | Menu ID Number | Argument |
---|---|---|---|
Begin | /MENU/BGINMENU.MNU | N/A | N/A |
Party | /MENU/PATYMENU.MNU | 0x09 | 0x00 |
Item | /MENU/ITEMMENU.MNU | N/A | N/A |
Magic | /MENU/MGICMENU.MNU | N/A | N/A |
Equip | /MENU/EQIPMENU.MNU | N/A | N/A |
Status | /MENU/STATMENU.MNU | N/A | N/A |
Change | /MENU/CHNGMENU.MNU | N/A | N/A |
Limit | /MENU/LIMTMENU.MNU | N/A | N/A |
Config | /MENU/CNFGMENU.MNU | N/A | N/A |
Form | /MENU/FORMMENU.MNU | 0x07 | 0x00 - Make a party of 3 |
0x01 - Split into 3 groups | |||
0x02 - Split into 2 groups | |||
Save | /MENU/SAVEMENU.MNU | 0x0E | 0x00 |
Name | /MENU/NAMEMENU.MNU | 0x06 | 0x00 - Cloud |
0x01 - Barret | |||
0x02 - Tifa | |||
0x03 - Aerith | |||
0x04 - Red XII | |||
0x05 - Yuffie | |||
0x06 - Cait Sith | |||
0x07 - Vincent | |||
0x08 - Cid | |||
0x09 - Chocobo | |||
Shop | /MENU/SHOPMENU.MNU | 0x08 | (0x00-0xFF) Shop Number |
Menu dependencies
On the PSX, Menu dependencies are kept in two different directories. The window dressing textures that stay in memory are found in /INIT/WINDOW.BIN and stored as a BIN-GZIP archive. In the MENU directory, some MNU files contain TIM files appended at the end that are displayed when they are loaded. Two of them, PARTYMENU.MNU and FORMMENU.MNU, externally reference TIM files on the disk as they share these resources. SAVEMENU.MNU also externally references the memory card ports.
The PC version has the MNU files internal to the executable and only have external resources. These are kept within the MENU_US.LGP file. The PC version has textures in two different sizes to support the two resolutions the game runs in. The following is a table of the menu resources and where they are located in both the PC and PSX version.
Picture | Description | Low Resolution PC Filename |
High Resolution PC Filename |
PSX Location (in /MENU unless noted) |
TIM Offset |
---|---|---|---|---|---|
Cloud Avatar | CLOUD_L.TEX | CLOUD.TEX | CLOUD.TIM | N/A | |
Barret Avatar | BARRE_L.TEX | BARRE.TEX | BARRE.TIM | N/A | |
Tifa Avatar | TIFA_L.TEX | TIFA.TEX | TIFA.TIM | N/A | |
Cloud Avatar | CLOUD_L.TEX | CLOUD.TEX | CLOUD.TIM | N/A | |
Aeris Avatar | EARITH_L.TEX | EARITH.TEX | EARITH.TIM | N/A | |
Red XIII Avatar | RED_L.TEX | RED.TEX | RED.TIM | N/A | |
Yuffie Avatar | YUFI_L.TEX | YUFI.TEX | YUFI.TIM | N/A | |
Cait Sith Avatar | KETC_L.TEX | KETC.TEX | KETC.TIM | N/A | |
Vincent Avatar | BINS_L.TEX | BINS.TEX | BINS.TIM | N/A | |
Cid Avatar | CIDO_L.TEX | CIDO.TEX | CIDO_L.TIM | N/A | |
Young Cloud Avatar | PCLOUD_L.TEX | PCLOUD.TEX | PCLOUD.TIM | N/A | |
Sephiroth Avatar | PCEFI_L.TEX | PCEFI.TEX | PCEFI.TIM | N/A | |
Chocobo Avatar | CHOCO_L.TEX | CHOCO.TEX | CHOCO.TIM | N/A | |
Placeholder Avatar | N/A | N/A | KALI.TIM | N/A | |
Cloud Avatar | CLOUD_L.TEX | CLOUD.TEX | NAMEMENU.MNU | 0x1E7C | |
Barret Avatar | BARRE_L.TEX | BARRE.TEX | NAMEMENU.MNU | 0x29A0 | |
Tifa Avatar | TIFA_L.TEX | TIFA.TEX | NAMEMENU.MNU | 0x34C4 | |
Aeris Avatar | EARITH_L.TEX | EARITH.TEX | NAMEMENU.MNU | 0x3FE8 | |
Red XIII Avatar | RED_L.TEX | RED.TEX | NAMEMENU.MNU | 0x4B0C | |
Yuffie Avatar | YUFI_L.TEX | YUFI.TEX | NAMEMENU.MNU | 0x5630 | |
Cait Sith Avatar | KETC_L.TEX | KETC.TEX | NAMEMENU.MNU | 0x6154 | |
Vincent Avatar | BINS_L.TEX | BINS.TEX | NAMEMENU.MNU | 0x6C78 | |
Cid Avatar | CIDO_L.TEX | CIDO.TEX | NAMEMENU.MNU | 0x779C | |
Chocobo Avatar | CHOCO_L.TEX | CHOCO.TEX | NAMEMENU.MNU | 0x82C0 | |
Load screen background | BUSTER.TEX | N/A | SAVEMENU.MNU | 0x4EDC | |
Save Icon 1 | N/A | N/A | SAVEMENU.MNU | 0xF4F4 | |
Save Icon 2 | N/A | N/A | SAVEMENU.MNU | 0xF502 | |
Save Icon 3 | N/A | N/A | SAVEMENU.MNU | 0xF8F8 | |
Save Icon 4 | N/A | N/A | SAVEMENU.MNU | 0xFCEE | |
Save Icon 5 | N/A | N/A | SAVEMENU.MNU | 0x100E4 | |
Save Icon 6 | N/A | N/A | SAVEMENU.MNU | 0x104DA | |
Save Icon 7 | N/A | N/A | SAVEMENU.MNU | 0x108DA | |
Save Icon 8 | N/A | N/A | SAVEMENU.MNU | 0x10CC6 | |
Save Icon 9 | N/A | N/A | SAVEMENU.MNU | 0x110BC | |
Save Icon 10 | N/A | N/A | SAVEMENU.MNU | 0x114B2 | |
Save Icon 11 | N/A | N/A | SAVEMENU.MNU | 0x118A8 | |
Save Icon 12 | N/A | N/A | SAVEMENU.MNU | 0x11C9E | |
Save Icon 13 | N/A | N/A | SAVEMENU.MNU | 0x12094 | |
Save Icon 14 | N/A | N/A | SAVEMENU.MNU | 0x1248A | |
Save Icon 15 | N/A | N/A | SAVEMENU.MNU | 0x12880 | |
Coin command | ZENI.TEX | ZENI_H.TEX | ITEMMENU.MNU | 0x3890 | |
Window Dressings | BTL_WIN_H.TEX | BTL_WIN_A_H.TEX | /INIT/WINDOW.BIN | 0x0006 | |
BTL_WIN_B_H.TEX | |||||
BTL_WIN_C_H.TEX | |||||
BTL_WIN_D_H.TEX | |||||
BTL_WIN_L.TEX | BTL_WIN_A_L.TEX | ||||
BTL_WIN_B_L.TEX | |||||
BTL_WIN_C_L.TEX | |||||
BTL_WIN_D_L.TEX | |||||
Menu Font | USFONT_L.TEX | USFONT_A_L.TEX | /INIT/WINDOW.BIN | 0x2754 | |
USFONT_B_L.TEX | |||||
USFONT_H.TEX | USFONT_A_H.TEX | ||||
USFONT_B_H.TEX |
The Save Game format
The save game format is lengthy; as such you can find the save game format in a seperate section here.