130 lines
2.9 KiB
Markdown
130 lines
2.9 KiB
Markdown
# *.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` | Boolean - whether to show the thing |
|
|
| `SPRITEID` | `-1`, `0`, `123` | Select from `.obj` file |
|
|
| `ACCELERATOR` | | |
|
|
| `DRAW TYPE` | | |
|
|
| `SHARE` | | |
|
|
| `X-CORD` | | |
|
|
| `Y-CORD` | | |
|
|
| `FONTTYPE` | | |
|
|
| `SOUNDTYPE` | | |
|
|
| `DESC` | | |
|
|
|
|
|
|
Submenus also show a couple of unique values:
|
|
|
|
|------|----------|---------|
|
|
| Name | Examples | Purpose |
|
|
|------|----------|---------|
|
|
| `SUBMENUID` | | |
|
|
| `SUBMENUTYPE` | | |
|
|
|
|
|
|
|