4.4 KiB
*.mnu
These files appear to be the UI definitions for Chaos Gate. Some relate to
system menus, other to in-game menus. Their names are hardcoded into the
WH40K.exe
binary. Each has a .obj
file associated with it.
It's an ASCII-formatted text file with a 12-line header, followed by a number of descriptor records.
Here's the top of MainGame.mnu
:
MainGame.obj
BACKGROUND COLOR 0..255..-1 trans : 0
HYPERTEXT COLOR 0..255 : 120
FONT TYPE 0..5 : 10
wh40k_12
basfnt12
wh40k_47
wh40k_12_red
wh40k_12_blue
wh40k_12_green
wh40k_12_yellow
NULL
The first line of the header is a .obj
file containing sprites we want to
display on-screen. We see entries further down have a SPRITEID
, which must
reference entries in that file.
In SaveGame.mnu
, we can see multiple .obj
files can be referenced.
There are then 3 lines that seem to be fixed descriptor names with values that vary. Is this font colour, perhaps? Unsure.
Next is a variable-length list of font names, referencing files in the Fonts
directory.
Finally, there's a list of records that specify the menu itself. Truncated
contents of SaveGame.mnu
:
#rem..........Background
MENUID : 1
MENUTYPE : 0
MOVEABLE : 0
ACTIVE : 1
SPRITEID : 0
ACCELERATOR: 0
DRAW TYPE : 0
SHARE : -1
X-CORD : -1
Y-CORD : -1
DESC :
*
#rem..........MAIN BACKGROUND
MENUID : 2
MENUTYPE : 45
MOVEABLE : 0
ACTIVE : 1
SPRITEID : 0
ACCELERATOR: 0
DRAW TYPE : 0
SHARE : -1
X-CORD : -1
Y-CORD : -1
DESC :
#rem.......... MAIN BACKGROUND
SUBMENUID : 1
SUBMENUTYPE: 31
FONTTYPE : 20
ACTIVE : 0
SPRITEID : -1
ACCELERATOR: 0
DRAW TYPE : 0
SHARE : 0
SOUNDTYPE : 0
DESC :
*
#rem..........Chat List Box Menu
MENUID : 21
MENUTYPE : 1
MOVEABLE : 0
ACTIVE : 1
SPRITEID : 764
ACCELERATOR: 0
DRAW TYPE : 0
SHARE : -1
X-CORD : -1
Y-CORD : -1
DESC :
[...]
*
~
We start processing these as soon as we see MENUID
, I suppose. Each toplevel
item is *
-delimited, and the list is terminated with ~
.
Each menu has a list of parameters:
Name | Examples | Purpose |
---|---|---|
MENUID |
1 , 2 , 3 |
Maybe linking between menus? |
MENUTYPE |
0 , 1 , 2 , 3 , 45 , 300 |
? |
MOVEABLE |
0 |
Unimplemented functionality? |
ACTIVE |
0 , 1 , 1,0 |
? |
SPRITEID |
-1 , 0 , 123 , 16,-1,1 |
Select from .obj file? |
ACCELERATOR |
? | |
DRAW TYPE |
? | |
SHARE |
? | |
X-CORD |
-1 , 0 , 200 |
X coordinate to draw at |
Y-CORD |
-1 , 0 , 200 |
Y coordinate to draw at |
FONTTYPE |
Choose a font from the above? | |
SOUNDTYPE |
? | |
DESC |
CHARACTER SELECT , 51005 |
Text, or reference to Data/USEng.dta |
Submenus also show a couple of unique values:
Name | Examples | Purpose |
---|---|---|
SUBMENUID |
1 , 2 , 3 |
As MENUID |
SUBMENUTYPE |
0 , 1 , 2 |
As MENUTYPE |
It seems .mnu files can also include other files, which have the extension
.mni
(presumably for "Menu include"). Examples:
*
$GenDialog.mni
$GenLoad.mni
It looks like we just interpolate the named file into the text when we come across one of these lines.
(Sub)menu types
The types seem to refer to different types of UI widget. Here's a list of unique values:
Value | Meaning |
---|---|
0 | Background |
1 | Logical menu grouping? |
2 | ? |
3 | Standard button? |
30 | Equipment? |
31 | "Character helmet" / "Slot" |
40 | "X Line Y" |
41 | "X Line Y" |
45 | ? |
45,10,11,9 | ? |
45,11,12,10 | ? |
45,14,15,13 | ? |
45,17,18,16 | ? |
45,3,4,2 | ? |
45,5,6,4 | ? |
45,6,7,5 | ? |
45,7,8,6 | ? |
45,8,9,7 | ? |
45,9,10,8 | ? |
50 | ? |
60 | Other text to display? (UltEquip.mnu ) |
61 | Text to display |
70 | Hypertext to display |
91 | ? |
100 | ? |
110 | ? |
120 | ? |
200 | Drop-down button? |
205 | Single list box item? |
220 | Psyker power? |
221 | Page? |
228 | Big buttons in Main.mnu |
232 | ? |
233 | ? |
300 | Pop-up dialog box |
400,0,0,{8, 16} | ? |
400,22,22,{2, 4, 5, 6, 7, 8, 9, 9, 10, 13, 16} | ? |
400,30,-1,5 | ? |
405,0,0,{8, 16} | ? |
405,22,22,{2, 4, 5, 6, 7, 8, 9, 10, 13, 16} | ? |
405,30,-1,5 | ? |