# Original Input Keymap

Executable: `/home/exedev/hwanse/Hwanse2.exe`
Keyboard state buffer: `0x0055b868`

The action packer at `0x0042f6d2` scans one of these tables. Each row is one
action bit; if any listed key/state offset is pressed, that bit is ORed into
the returned 16-bit mask.

## Primary Table

Table VA: `0x00526d58`

| action | bit | hint | keys |
| ---: | --- | --- | --- |
| 0 | `0x0001` | left | `LEFT` (0x00cb), `NUMPAD_LEFT` (0x004b), `state+0x110` (0x0110) |
| 1 | `0x0002` | right | `RIGHT` (0x00cd), `NUMPAD_RIGHT` (0x004d), `state+0x111` (0x0111) |
| 2 | `0x0004` | up | `UP` (0x00c8), `NUMPAD_UP` (0x0048), `state+0x112` (0x0112) |
| 3 | `0x0008` | down | `DOWN` (0x00d0), `NUMPAD_DOWN` (0x0050), `state+0x113` (0x0113) |
| 4 | `0x0010` | - | `RETURN` (0x001c), `NUMPAD_ENTER` (0x009c), `SPACE` (0x0039), `state+0x114` (0x0114), `state+0x116` (0x0116), `state+0x101` (0x0101) |
| 5 | `0x0020` | - | `ESCAPE` (0x0001), `NUMPAD_INSERT` (0x0052), `state+0x115` (0x0115), `state+0x102` (0x0102) |
| 6 | `0x0040` | - | `RETURN` (0x001c), `NUMPAD_ENTER` (0x009c), `SPACE` (0x0039), `state+0x11c` (0x011c), `Z` (0x002c) |
| 7 | `0x0080` | - | `ESCAPE` (0x0001), `state+0x11c` (0x011c) |
| 8 | `0x0100` | - | `RETURN` (0x001c), `NUMPAD_ENTER` (0x009c), `SPACE` (0x0039), `state+0x114` (0x0114), `Z` (0x002c) |
| 9 | `0x0200` | - | `ESCAPE` (0x0001), `NUMPAD_INSERT` (0x0052), `X` (0x002d), `state+0x115` (0x0115) |
| 10 | `0x0400` | - | `C` (0x002e), `state+0x116` (0x0116) |
| 11 | `0x0800` | - | `BACK` (0x000e) |
| 12 | `0x1000` | - | - |
| 13 | `0x2000` | - | - |
| 14 | `0x4000` | - | `PRIOR` (0x00c9), `state+0x11a` (0x011a) |
| 15 | `0x8000` | - | `state+0x11b` (0x011b), `NEXT` (0x00d1) |

## Alternate Table

Table VA: `0x00526e58`

| action | bit | hint | keys |
| ---: | --- | --- | --- |
| 0 | `0x0001` | left | `LEFT` (0x00cb), `NUMPAD_LEFT` (0x004b), `state+0x120` (0x0120) |
| 1 | `0x0002` | right | `DOWN` (0x00d0), `NUMPAD_RIGHT` (0x004d), `state+0x121` (0x0121) |
| 2 | `0x0004` | up | `RIGHT` (0x00cd), `NUMPAD_UP` (0x0048), `state+0x122` (0x0122) |
| 3 | `0x0008` | down | `DOWN` (0x00d0), `NUMPAD_DOWN` (0x0050), `state+0x123` (0x0123) |
| 4 | `0x0010` | - | `RETURN` (0x001c), `NUMPAD_ENTER` (0x009c), `SPACE` (0x0039), `state+0x124` (0x0124), `state+0x126` (0x0126) |
| 5 | `0x0020` | - | `ESCAPE` (0x0001), `NUMPAD_INSERT` (0x0052), `state+0x125` (0x0125) |
| 6 | `0x0040` | - | `RETURN` (0x001c), `NUMPAD_ENTER` (0x009c), `SPACE` (0x0039), `state+0x12c` (0x012c), `Z` (0x002c) |
| 7 | `0x0080` | - | `ESCAPE` (0x0001), `state+0x12c` (0x012c) |
| 8 | `0x0100` | - | `SPACE` (0x0039), `state+0x124` (0x0124), `Z` (0x002c) |
| 9 | `0x0200` | - | `X` (0x002d), `state+0x125` (0x0125) |
| 10 | `0x0400` | - | `C` (0x002e), `state+0x126` (0x0126) |
| 11 | `0x0800` | - | - |
| 12 | `0x1000` | - | - |
| 13 | `0x2000` | - | - |
| 14 | `0x4000` | - | - |
| 15 | `0x8000` | - | - |

## Notes

- Each table has 16 action groups; the original routine ORs bit N when any nonzero key entry in group N is pressed.
- Values below 0x100 are DirectInput keyboard DIK offsets into the 256-byte state buffer.
- Values at or above 0x100 are retained as raw offsets into the same combined input state area until their producer is fully named.
