# *.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` | | |