This file is an archive which contains 118 files, that will be called section in this wiki.
It is important to note that the independent files like tkmnmes, m00x.bin or m00x.msg are not used by the game even tho they exist (they are loaded in memory by MenuReadFiles but never read). Only the data in mngrp is taken into account. The standalone tkmnmes2.bin is even a stale copy: its text differs from the mngrp copy the game displays.
Some sections are pure data that are irrelevant for ShumiTranslator, they are just mention for archive purpose.
This section list is for the english version. Others language should have the same sections but not the same size or offset.
The definition of this file with the different offset and size is determine by Mngrphd.bin.
The Pos column below is the position among valid sections (the order tools like ShumiTranslator use). The Header entry column is the raw mngrphd.bin entry index, which is what the engine uses to load a section (see Mngrphd.bin). For example the refine menu asks for entries 188-192 (m00X.bin) and 196-200 (m00X.msg), the SeeD written test for entry 96 + test number, and the Card Album pages for entry 48 + page.
If the file is modified, all sections keep a size multiple of 0x800 (2048, the PSX CD sector size) in the retail file, padded with 0. The engine itself only trusts the offset/size pairs of mngrphd.bin; the practical limit is the fixed capacity of the destination buffer each section is loaded into, so avoid growing a section beyond its original 0x800-multiple size.
Duplicated files: which copy is authoritative
Some menu files exist both as standalone files in the menu archive and as sections inside mngrp.bin. In every case the mngrp.bin copy is the one the game uses:
- tkmnmes1/2/3.bin: the standalone files are never opened by the engine; menu text is read exclusively from mngrp raw entries 0-2.
- m000-m004.bin / .msg: the standalone files are loaded into buffers at menu startup, but those buffers are dead (their only references are the loader and the free routine); the refine menus read the copies at raw entries 188-192 / 196-200.
The other standalone menu files (mmag.bin, mmag2.bin, mtmag.bin, mitem.bin, mwepon.bin, mmagic.bin, mag_sort.bin, shop.bin, price.bin, pet_exp.bin, mthomas.bin, cyocobo.bin, areames.dc1/dc2, icon.sp1, face.sp2, cardanm.sp2…) have no copy inside mngrp.bin — they are loaded by name from ff8/data/eng/menu/.
Mapped Data
| Pos | Header entry | Seek | Size | Filename | Content of the section | Present in ShumiTranslator |
|---|---|---|---|---|---|---|
| 0 | 0 | 0x0 | 0x800 | tkmnmes1.bin | Menu text | Yes |
| 1 | 1 | 0x800 | 0x1800 | tkmnmes2.bin | Menu text | Yes |
| 2 | 2 | 0x2000 | 0x2000 | tkmnmes3.bin | Menu text | Yes |
| 3 | 3 | 0x4000 | 0xE000 | Chocobo World PocketStation image: a complete 7-block PS1 save file (“SC” magic, MCX app marker, SJIS title “FF8/Chocobo World”) installed on the emulated memory card by the save screen | No | |
| 4 | 7 | 0x12000 | 0x1000 | Magazine picture sprites in the SP2 quad-list format: 79 declared sprite ids, 39 used. Referenced by the picture overlay slots of mmag.bin entries | No | |
| 5 | 9 | 0x13000 | 0x6800 | face1.bin | Character portraits (main menu UI texture, reloaded on every sub-screen exit) | No |
| 6 | 10 | 0x19800 | 0x6800 | face2.bin | GF portraits (main menu UI texture, reloaded on every sub-screen exit) | No |
| 7 | 12 | 0x20000 | 0x800 | magita.tim | Tutorial/magazine background texture | No |
| 8 | 16 | 0x20800 | 0xE000 | start00_and_start01.tim | Title screen logo | No |
| 9 | 20 | 0x2E800 | 0xC800 | Combat King 001-005 pictures (magazine viewer category 1) | No | |
| 10 | 24 | 0x3B000 | 0xC800 | mag07.tim | Pet Pals Vol.1-6 pictures (magazine viewer category 2) | No |
| 11 | 28 | 0x47800 | 0xC800 | mag00.tim | Weapons Monthly, 1st Issue | No |
| 12 | 29 | 0x54000 | 0xC800 | mag01.tim | Weapons Monthly, March Issue | No |
| 13 | 30 | 0x60800 | 0xC800 | mag02.tim | Weapons Monthly, April Issue | No |
| 14 | 31 | 0x6D000 | 0xC800 | mag03.tim | Weapons Monthly, May Issue | No |
| 15 | 32 | 0x79800 | 0xC800 | mag04.tim | Weapons Monthly, June Issue | No |
| 16 | 33 | 0x86000 | 0xC800 | mag05.tim | Weapons Monthly, July Issue | No |
| 17 | 34 | 0x92800 | 0xC800 | mag06.tim | Weapons Monthly, August Issue | No |
| 18 | 44 | 0x9F000 | 0xC800 | mag08.tim | Occult Fan I & II | No |
| 19 | 45 | 0xAB800 | 0xC800 | mag09.tim | Occult Fan III & IV | No |
| 20 | 48 | 0xB8000 | 0xC800 | mc00.tim | Card textures for menus (Card Album page N loads header entry 48 + N) | No |
| 21 | 49 | 0xC4800 | 0xC800 | mc01.tim | Card textures for menus | No |
| 22 | 50 | 0xD1000 | 0xC800 | mc02.tim | Card textures for menus | No |
| 23 | 51 | 0xDD800 | 0xC800 | mc03.tim | Card textures for menus | No |
| 24 | 52 | 0xEA000 | 0xC800 | mc04.tim | Card textures for menus | No |
| 25 | 53 | 0xF6800 | 0xC800 | mc05.tim | Card textures for menus | No |
| 26 | 54 | 0x103000 | 0xC800 | mc06.tim | Card textures for menus | No |
| 27 | 55 | 0x10F800 | 0xC800 | mc07.tim | Card textures for menus | No |
| 28 | 56 | 0x11C000 | 0xC800 | mc08.tim | Card textures for menus | No |
| 29 | 57 | 0x128800 | 0xC800 | mc09.tim | Card textures for menus | No |
| 30 | 63 | 0x135000 | 0x11800 | PSX_Controller00.tim | Field controls tutorial image | No |
| 31 | 64 | 0x146800 | 0x11800 | PSX_Controller01.tim | World map controls tutorial image | No |
| 32 | 65 | 0x158000 | 0x11800 | PSX_Controller02.tim | Battle controls tutorial image | No |
| 33 | 71 | 0x169800 | 0xC800 | mag10.tim | Triple Triad tutorial | No |
| 34 | 72 | 0x176000 | 0xC800 | mag11.tim | Triple Triad tutorial | No |
| 35 | 73 | 0x182800 | 0xC800 | mag12.tim | Triple Triad tutorial | No |
| 36 | 74 | 0x18F000 | 0xC800 | mag13.tim | Battle tutorial | No |
| 37 | 75 | 0x19B800 | 0xC800 | mag14.tim | Battle tutorial | No |
| 38 | 87 | 0x1A8000 | 0x3000 | Mngrp_string_section00 | Book text | Yes |
| 39 | 88 | 0x1AB000 | 0x800 | Mngrp_string_section01 | Battle tutorial | Yes |
| 40 | 89 | 0x1AB800 | 0x1000 | Mngrp_string_section02 | Card rules + Icon | Yes |
| 41 | 90 | 0x1AC800 | 0x1000 | Mngrp_string_section03 | Chocobo World screen text: story slides (0-4) + Solo RPG manual pages (5-14), referenced by mmag2.bin | Yes |
| 42 | 95 | 0x1AD800 | 0x800 | Mngrp_string_section04 | Test seed generic text (congrats, fail,…) | Yes |
| 43 | 96 | 0x1AE000 | 0x800 | Mngrp_string_section05 | Test seed 1 | Yes |
| 44 | 97 | 0x1AE800 | 0x800 | Mngrp_string_section06 | Test seed 2 | Yes |
| 45 | 98 | 0x1AF000 | 0x800 | Mngrp_string_section07 | Test seed 3 | Yes |
| 46 | 99 | 0x1AF800 | 0x800 | Mngrp_string_section08 | Test seed 4 | Yes |
| 47 | 100 | 0x1B0000 | 0x800 | Mngrp_string_section09 | Test seed 5 | Yes |
| 48 | 101 | 0x1B0800 | 0x800 | Mngrp_string_section10 | Test seed 6 | Yes |
| 49 | 102 | 0x1B1000 | 0x800 | Mngrp_string_section11 | Test seed 7 | Yes |
| 50 | 103 | 0x1B1800 | 0x800 | Mngrp_string_section12 | Test seed 8 | Yes |
| 51 | 104 | 0x1B2000 | 0x800 | Mngrp_string_section13 | Test seed 9 | Yes |
| 52 | 105 | 0x1B2800 | 0x800 | Mngrp_string_section14 | Test seed 10 | Yes |
| 53 | 106 | 0x1B3000 | 0x800 | Mngrp_string_section15 | Test seed 11 | Yes |
| 54 | 107 | 0x1B3800 | 0x800 | Mngrp_string_section16 | Test seed 12 | Yes |
| 55 | 108 | 0x1B4000 | 0x800 | Mngrp_string_section17 | Test seed 13 | Yes |
| 56 | 109 | 0x1B4800 | 0x800 | Mngrp_string_section18 | Test seed 14 | Yes |
| 57 | 110 | 0x1B5000 | 0x800 | Mngrp_string_section19 | Test seed 15 | Yes |
| 58 | 111 | 0x1B5800 | 0x800 | Mngrp_string_section20 | Test seed 16 | Yes |
| 59 | 112 | 0x1B6000 | 0x800 | Mngrp_string_section21 | Test seed 17 | Yes |
| 60 | 113 | 0x1B6800 | 0x800 | Mngrp_string_section22 | Test seed 18 | Yes |
| 61 | 114 | 0x1B7000 | 0x800 | Mngrp_string_section23 | Test seed 19 | Yes |
| 62 | 115 | 0x1B7800 | 0x800 | Mngrp_string_section24 | Test seed 20 | Yes |
| 63 | 116 | 0x1B8000 | 0x800 | Mngrp_string_section25 | Test seed 21 | Yes |
| 64 | 117 | 0x1B8800 | 0x800 | Mngrp_string_section26 | Test seed 22 | Yes |
| 65 | 118 | 0x1B9000 | 0x800 | Mngrp_string_section27 | Test seed 23 | Yes |
| 66 | 119 | 0x1B9800 | 0x800 | Mngrp_string_section28 | Test seed 24 | Yes |
| 67 | 120 | 0x1BA000 | 0x800 | Mngrp_string_section29 | Test seed 25 | Yes |
| 68 | 121 | 0x1BA800 | 0x800 | Mngrp_string_section30 | Test seed 26 | Yes |
| 69 | 122 | 0x1BB000 | 0x800 | Mngrp_string_section31 | Test seed 27 | Yes |
| 70 | 123 | 0x1BB800 | 0x800 | Mngrp_string_section32 | Test seed 28 | Yes |
| 71 | 124 | 0x1BC000 | 0x800 | Mngrp_string_section33 | Test seed 29 | Yes |
| 72 | 125 | 0x1BC800 | 0x800 | Mngrp_string_section34 | Test seed 30 | Yes |
| 73 | 126 | 0x1BD000 | 0x800 | Mngrp_string_section35 | Test seed 31: unused (the engine caps the test number at 30) and a byte-exact duplicate of Test seed 30 | Yes |
| 74 | 127 | 0x1BD800 | 0x800 | Mngrp_TextBox_map | Information browser page directory (per page id: {offset, TextBox section 0-5}) | Yes |
| 75 | 128 | 0x1BE000 | 0x4800 | Mngrp_TextBox_section00 | TextBox | Yes |
| 76 | 129 | 0x1C2800 | 0x4000 | Mngrp_TextBox_section01 | TextBox | Yes |
| 77 | 130 | 0x1C6800 | 0x4800 | Mngrp_TextBox_section02 | TextBox | Yes |
| 78 | 131 | 0x1CB000 | 0x4000 | Mngrp_TextBox_section03 | TextBox | Yes |
| 79 | 132 | 0x1CF000 | 0x2800 | Mngrp_TextBox_section04 | TextBox | Yes |
| 80 | 133 | 0x1D1800 | 0x4800 | Mngrp_TextBox_section05 | TextBox | Yes |
| 81 | 160 | 0x1D6000 | 0x1000 | Mngrp_string_section36 | Junction tutorial | Yes |
| 82 | 161 | 0x1D7000 | 0x800 | Mngrp_string_section37 | Magic junction tutorial | Yes |
| 83 | 162 | 0x1D7800 | 0x800 | Mngrp_string_section38 | Elemental junction tutorial | Yes |
| 84 | 163 | 0x1D8000 | 0x800 | Mngrp_string_section39 | Status junction tutorial | Yes |
| 85 | 164 | 0x1D8800 | 0x800 | Mngrp_string_section40 | GF tutorial | Yes |
| 86 | 165 | 0x1D9000 | 0x800 | Mngrp_string_section41 | Squall limit break tutorial | Yes |
| 87 | 166 | 0x1D9800 | 0x800 | Mngrp_string_section42 | Zell limit break tutorial | Yes |
| 88 | 167 | 0x1DA000 | 0x800 | Mngrp_string_section43 | Rinoa limit break tutorial | Yes |
| 89 | 168 | 0x1DA800 | 0x800 | Tutorial demo script: Junction demo | No | |
| 90 | 169 | 0x1DB000 | 0x800 | Tutorial demo script: Magic junction demo | No | |
| 91 | 170 | 0x1DB800 | 0x800 | Tutorial demo script: Elemental junction demo | No | |
| 92 | 171 | 0x1DC000 | 0x800 | Tutorial demo script: Status junction demo | No | |
| 93 | 172 | 0x1DC800 | 0x800 | Tutorial demo script: GF demo | No | |
| 94 | 173 | 0x1DD000 | 0x800 | Tutorial demo script: Squall limit break demo | No | |
| 95 | 174 | 0x1DD800 | 0x800 | Tutorial demo script: Zell limit break demo | No | |
| 96 | 175 | 0x1DE000 | 0x800 | Tutorial demo script: Rinoa limit break demo | No | |
| 97 | 176 | 0x1DE800 | 0x800 | Tutorial demo mock characters A (8 × 152-byte savemap character records) | No | |
| 98 | 177 | 0x1DF000 | 0x800 | Tutorial demo mock GF records A (16 × 68-byte savemap GF records; names misspelled, e.g. “Quetcoatl”, replaced by the real save’s names in game) | No | |
| 99 | 178 | 0x1DF800 | 0x800 | Tutorial demo mock characters B (variant used by elemental/status junction and character switch demos) | No | |
| 100 | 179 | 0x1E0000 | 0x800 | Tutorial demo mock GF records B. Very similar to 0x1DF000 | No | |
| 101 | 180 | 0x1E0800 | 0xC800 | mag15.tim | Chocobo World story pictures (mmag2.bin category 6, page 0) | No |
| 102 | 181 | 0x1ED000 | 0xC800 | mag16.tim | Chocobo World Solo RPG manual pictures (mmag2.bin category 6, page 1) | No |
| 103 | 182 | 0x1F9800 | 0xC800 | mag17.tim | Card icon explanation pictures (magazine viewer category 6) | No |
| 104 | 183 | 0x206000 | 0xC800 | mag18.tim | Chocobo world sketch cartoon. Apparently unused: no mmag.bin/mmag2.bin entry selects category 6 page 3 | No |
| 105 | 184 | 0x212800 | 0xC800 | mag19.tim | Chocobo world sketch cartoon, duplicate of 0x206000. Apparently unused (category 6 page 4) | No |
| 106 | 188 | 0x21F000 | 0x800 | m000.bin | Locations for msg file and Refine values. | Yes |
| 107 | 189 | 0x21F800 | 0x800 | m001.bin | Locations for msg file and Refine values. | Yes |
| 108 | 190 | 0x220000 | 0x800 | m002.bin | Locations for msg file and Refine values. | Yes |
| 109 | 191 | 0x220800 | 0x800 | m003.bin | Locations for msg file and Refine values. | Yes |
| 110 | 192 | 0x221000 | 0x800 | m004.bin | Locations for msg file and Refine values. | Yes |
| 111 | 196 | 0x221800 | 0x1800 | m000.msg | Yes | |
| 112 | 197 | 0x223000 | 0x2000 | m001.msg | Yes | |
| 113 | 198 | 0x225000 | 0x800 | m002.msg | Yes | |
| 114 | 199 | 0x225800 | 0x800 | m003.msg | Yes | |
| 115 | 200 | 0x226000 | 0x1800 | m004.msg | Yes | |
| 116 | 204 | 0x227800 | 0x800 | Mngrp_string_section44 | Character switch tutorial | Yes |
| 117 | 205 | 0x228000 | 0x800 | Tutorial demo script: Character switch demo | No |
The SeeD test sections (Pos 42-73)
Raw file 95 holds the shared exam UI strings, raw files 96-125 the 30 tests (10 questions each, string N = question N+1; raw 126 is an unused duplicate “test 31” — the engine caps the test number at 30).
These are normal string sections with one twist: every string starts with one extra byte before the FF8 text — the expected answer, as a 0-based cursor index (questions: 0 = YES, 1 = NO). The question text then contains 0x0B n cursor stop codes (n = 0x20 + choice index) marking each selectable position; the engine counts the stops dynamically, so a question can offer more than two choices simply by adding more cursor stops — the answer byte just has to match the index of the correct one. On confirm the selected index is compared to the answer byte; a perfect 10/10 raises the SeeD test level and the rank.
In the retail files each string (answer byte, FF8 text, 0x00 terminator) is zero-padded to a multiple of 4 bytes, so the string offsets keep a constant alignment inside the section.
How the choices are drawn
The choice labels are not laid out by the engine — they are simply part of the question text. A 0x0B n code emits nothing visible: as Menu_SeedTest_ParseCursorStops renders the string, each stop records the current pen position (x, y) and the choice index into Menu_SeedTest_CursorStops (8-byte entries {x, y, …}), returning the count in Menu_SeedTest_ChoiceCount. The selection cursor sprite is then drawn at CursorStops[selected], and navigation wraps within [0, ChoiceCount). So the on-screen position of each choice is decided by where its 0x0B stop sits in the text (the surrounding spaces and \n line breaks); to add a 3rd choice you write its label into the text with its own cursor stop before it. Menu_SeedTest_CursorStops (0x1D7EB40) runs up to Menu_SeedTest_ExpectedAnswer (0x1D7EC40), i.e. a fixed 32-entry buffer, the practical ceiling on choices per question.
| Address | Name | Description |
|---|---|---|
| 0x4D4D30 | Menu_SeedTest_Update | Exam state machine (program 23) |
| 0x4D4A80 | Menu_SeedTest_ParseCursorStops | Collects the 0x0B stops of a string |
| 0x1D7EC40 | Menu_SeedTest_ExpectedAnswer | Answer byte of the displayed string |
| 0x1D7EAB8 | Menu_SeedTest_ChoiceCount | Number of cursor stops found |
The SP2 quad-list sprite format (Pos 4)
Pos 4 uses the same sprite format as the standalone .sp2 files (cardanm.sp2, face.sp2 — see Menu sprite tables for the full .sp1/.sp2 reference), all rendered by the same function:
| Offset | Size | Description |
|---|---|---|
| 0x00 | 4 | UInt32 sprite count (79 in Pos 4) |
| 0x04 | 4×N | UInt32 offsets from the start of the file, one per sprite id (0 = unused id) |
| … | - | Sprite records |
Each sprite record is a UInt32 quad count followed by 12 bytes per quad:
| Offset | Size | Description |
|---|---|---|
| 0x00 | 1 | Texture U |
| 0x01 | 1 | Texture V |
| 0x02 | 2 | CLUT id |
| 0x04 | 2 | Width |
| 0x06 | 2 | Height |
| 0x08 | 1 | Signed X offset from the sprite draw position |
| 0x09 | 1 | Signed Y offset from the sprite draw position |
| 0x0A | 2 | Texture page (PS1 GPU E1 bits, masked with 0x9FF) |
In Pos 4 every used sprite is a single quad selecting a 128×96 or 128×104 region of the magazine page picture texture currently loaded (chosen by the category/page fields of the mmag.bin entry). The magazine text overlays use a different path: a string section (raw 87 + the entry’s text file index) loaded into a dedicated buffer, not the menu VRAM arena.
The Chocobo World PocketStation image (Pos 3)
Section 3 is a complete PlayStation memory-card save file holding the Chocobo World PocketStation application:
| Offset | Size | Description |
|---|---|---|
| 0x00 | 2 | “SC” title-frame magic |
| 0x02 | 1 | Icon display flag 0x11 (one icon frame) |
| 0x03 | 1 | Block count: 7 (7 × 8192 = 0xE000, the exact section size) |
| 0x04 | 64 | Shift-JIS title “FF8/Chocobo World” |
| 0x50 | 16 | PocketStation fields, including the “MCX0” application marker at 0x52 |
| 0x60 | 32 | Icon CLUT (16 colors) |
| 0x80 | 128 | Icon frame (16×16, 4bpp) |
| 0x100 | - | PocketStation application code and data (438 of 448 128-byte frames are used) |
The save screen’s Chocobo World feature installs this image on the emulated memory card. Prepending a 128-byte memory-card directory frame turns it into a standard .mcs save usable in PS1/PocketStation emulators (the PC executable embeds no product-code filename, so any name can be used in the directory frame).