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).