Next: Level editor, Previous: Configuration, Up: MININIM: The Advanced Prince of Persia Engine [Contents][Index]
MININIM features an uniform43 and non-intrusive bottom-line menu interface intended as a way to provide quick and convenient access to engine features that would be utterly complex or unfeasible to provide as simple key bindings, and couldn’t be offered by the configuration system because of their dynamic on-the-fly characteristics.
When active the menu system makes use of the bottom line that is traditionally used for transitory messages. It looks like this:
Each capital letter indicates which key triggers the related menu command (case insensitive). Each menu command may be terminal or non-terminal. Terminal menu commands execute an action right away when the user presses its correspondent key, while non-terminal menu commands open a sub-menu with further menu commands to choose from. In principle, non-terminal menu commands may nest to arbitrary depth. A terminal menu command may be either an input command or a non-input command. The former puts the bottom line in input mode, so the user can enter a value expected by the command, while the latter needs no further information to perform its action. There are a few specialized input modes that are described in the following sections. Although capital letters usually represent the initials of the related command, they have no universal or intrinsic meaning, and are freely reused within sub-menus and may have been chosen arbitrarily in case they were ambiguous.
The ? key is present in every menu because it’s special: it’s used to query the exact command performed by a given key. When pressed the bottom line says: ‘PRESS KEY FOR HELP’. Then, if any key expected by the current menu is pressed, the description of the command performed by it is given. In case it’s a non-terminal command, the description ends with the ‘>’ character. Otherwise, if it’s an input command, the description ends with the ‘<’ character. Some commands may be terminal or non-terminal, input or non-input, depending upon some context like the mouse selection. These have their descriptions ended by the ‘*’ character. The current menu comes back into view, in case the user presses any key invalid for it.
Usually every menu command has a path prefix, indicating where in the menu hierarchy it’s located. Consider the following menu system bottom line:
The ‘HYT’ string before the ‘>’ character is the menu path. It says the current menu is three levels deep, and its direct parent is ‘T’, whose parent in turn is ‘Y’, whose parent in turn is ‘H’, which is located in the topmost menu. By looking at the menu path the user can figure out if he is actually where he’s supposed to, and how to quickly get there again from the topmost menu. Sometimes a path prefix may contain digits indicating the index of the object to which the menu commands apply, usually having a command to change the selected index. This is a provision to facilitate the manipulation of a multitude of objects whose mechanism of selection doesn’t give ubiquitous visual feedback.
A similar notation is used for unequivocal and brief menu command
references in documentation. Each top level menu is associated with a
capital letter — the level editor menu is associated with ‘E’,
for instance. If we want to describe the command to change the
foreground construction to BIG_PILLAR_TOP
, for example, we take
its path prefix, ‘CFPT’ and prefix it with the top level menu
letter ‘E’, like this: ‘E>CFPT’.
There are two universal keys (called menu return keys) that allow the user to go up into the menu hierarchy, from any type of command: BACKSPACE and /. The difference between both is that the former “confirms” before returning, while the latter doesn’t. What “to confirm” means is dependent on the specific context and input mode of the command at hand, but the general principle is that “to confirm” implies in a change of state. In cases where no change of state is involved, like a common non-terminal (sub-menu) command, both keys can be used interchangeably. Holding down any menu return key for a second or so, gets the user back to the topmost menu.
While the menu system is active any key bindings that doesn’t conflict with its input methods continue to work as usual. However, the menu system takes precedence over the others, like the ones consisting of alpha-numeric keys or any other keys with a special meaning, like ?, BACKSPACE and /. In order for well established, but conflicting key bindings to be easily accessed when working with the menu system, the menu persistence comes in hand. The menu system always remembers the last command invoked, so the menu is restored to the same state it was before being deactivated. This allows for a fast alternation between menu-based and key binding-based commands in tasks that require both, like navigating through and editing a level.
The menu system never takes over the kid control keys, so the game can be played while it’s active. On the other hand, it completely takes over the transitory message bottom line, so even though a certain key binding may take effect, any message that it usually shows on the bottom line is suppressed.
As the menu system is uniform we describe its general behavior and expected interface of interaction in this chapter and let the chapters intended to describe major features which make use of it, to focus on the specifics details of their subject matter.
Next: Level editor, Previous: Configuration, Up: MININIM: The Advanced Prince of Persia Engine [Contents][Index]