The client user interface is made up of a number of independent graphical
components - I'll call them subclients here since they are pretty
much client programs of their own. The main client will consists of a number
of these subclients assembled in a single window. In certain cases new
subclients will pop up in their own little windows (ie become floating
subclients), but this will usually only happen when the user explicitely
requests such a window. Otherwise the screen would become littered with
floating subclients in no time...
Furthermore there will be different version of the main client depending
on how you logged in. Here is a list of planned main client types:
Player client (used when you control your character in the game
- this is the most frequently used client)
God client (used when you are a "god" but want to physically walk
around in the world. A god client is like a player client augmented with
Builder client (used when you are creating, deleting, and redefining
objects objects in the world)
Admin client (used for general administration, statistics, starting
and stopping the server, spying on what the citizens of the world are doing,
etc. This may be merged with the god client).
Character creation client (used when you are creating a new character
... probably some more specialized client types will be added as well....
(nice sword, eh? I drew it myself :o) Each main client
is composed of a number of subclients. Most of these subclients will display
"items" in one way or another. In this document the term "item" refers
to any object which has a name and a graphical icon representation. All
references to items in subclients are considered to be items, and
hence have the following behaviour:
Clicking on an item with the left mousebutton will cause all other
representations of that item to blink quickly (or something like that).
That way the user can see in which other subclients that icon is represented.
A text output client might display the word "George" which is the name
of an item, so when the user clicks on this word all other words and icons
in all other subclients will blink to illustrate that they, too, refer
to George. Furthermore, that item will be "selected" which means that any
operations specified will be carried out on the selected item.
Note that all the above actions should work on text as well as icon
representations of items.
All items provide a context-sensitive right-button menu which contains
at least the following item: "properties" (opens a floating subclient displaying
the properties of the item). If the object can be picked up, for example,
a "get" option will also be available in the popup menu. This menu will
also be present in the toolbar and be dynamically updated when new items
Drag and drop
All items are drag/drop enabled. Each subclient may decide what to do when
an item is dropped on it. In general, when an item is dropped onto another
item, that will be equivalent to a "put X in Y" command. Some subclients
might have specialized "drop zones" for certain actions, for example an
"inventory" drop-zone where any item dragged in is added to the player's
Main client specifications
So far I have only specified one:
This is the client you use when you are controlling a character in the
game. The layout will be approximately like this:
The menu bar contains menus for all possible operations. The button
toolbar contains "shortcuts" to frequently performed operations, or
operations that must be performed quickly (for example "flee"). This will
include an inventory button which has dual purpose. When clicked it will
produce a floating inventory window, and when an item is dragged to that
button it will be added to the inventory. Or something like that.
The Text input area is a text component that allows the user
to type actions. Most or all actions should be possible to perform using
text when desired. See "action client" below for more details. The Text
output area is where the system sends messages to the player. Most
of these messages will be descriptions of events that occur in the world.
Only events that cannot be described graphically should be displayed here.
See "event client" below for more details.
General info is a general purpose panel that displays static
information about the world relevant to the current context of the player.
During outdoor travel it might include weather information, while in combat
it would display the most important combat attributes, such as the player's
Info about selected item is a general purpose property-panel.
It show information about the currently selected item. The main difference
between this and the general info panel is that the player controls
what is displayed in this panel. See "property client" below for more details.
The Map view displays the character's current location and which
other objects are nearby.
The player client will map some global keys as well, for certain
frequently performed actions. So far now only one is specified:
The numeric keypad are used as movement direction keys, ie regardless of
which subclient currently has the focus the numpad keys will always control
the character movement. If the user does not have a numeric keypad on his
computer, he can use shift together with the normal arrow keys instead.
All subclients share a client context. The client context contains
information that is to be shared among all subclients, and the main client
itself. This includes global information and operations such as:
Links to all subclients currently open
What time the player logged in
Server status (lag, etc)
Operations for parsing a word and deciding which item it refers to. This
is done by asking all the open subclients in turn. That way all subclients
share a "dictionary" of terms. This includes the names of all actions and
Each of the main clients listed above is assembled using subclients. Some
of the subclients will appear in more than one type of main client. Here
is a description of the subclients defined so far:
This is where the user specifies, using text, which action to perform.
Whenever ENTER is pressed, the last typed line will be executed. Queries
can also be performed here, and may in some cases spawn external windows.
The exact set of actions is not defined yet, but here are some examples:
The only output shown here is error messages when the input could not be
parsed, or if the action could not be carried out at all. All text representing
items will be colored differently than the rest of the text, since these
can be dragged and clicked using the mouse.
emote pulls his hair in frustration (results in the event: "Fred pulls
his hair in frustration")
properties George (opens a property window displaying info about George)
In order to minimize unnecessary typing, a number of "smart" shortcuts
will be available here. First of all, "frequently used" commands will have
shortcut representations. "say", for example, might replaced by a simple
".", and "emote" might be replaced by a ":". Here is a list of other "shortcut"
features (of which several are stolen from UNIX...):
Pressing TAB will "complete" the current word being typed, if possible.
That way you only need to type the first few letters of a word as long
as it isn't ambigous. It will use the client context to find out which
items or actions the word might possible refer to.
All words are non-casesensitive
If the command contains incomplete words when the user presses ENTER, the
parser will attempt to automatically complete each incomplete word. If
all words could be unambiguously resolved, the words will be completed
and the action will be carried out. Thus TAB is not really necessary -
it just shows the user how the parser will complete the word (a mistake
might be fatal in certain cases...)
The "up" and "down" keys can be used to recall previous actions and to
move up and down the command history.
All shortcut keys can be redefined and customized by the user.
This displays information from the system to the player, usually an
event report (as in the screenshot above). As specified earlier, all words
representing items will be highlighted in a different color, indicating
that they can be manipulated with the mouse. This window does not accept
Note that only events that aren't suitable for other mediums will be
displayed here. If a sound file is available for a certain sound, for example,
that will be used instead of describing the sound in the event window.
Above are two property clients - one for Weezy the Orc, showing his
location and inventory, and one for the place represented by coordinate
6@6 in the Pub, and it's contents.
Property clients are very generic - each type of object provides it's
own type of property client adapted to it's own needs. In fact, the server
creates the property window on the fly. All the values in the property
client are dynamically updated when the value changes. If input facilities
are provided, the input is directed straight to the server. All icons and
words representing items provide the usual set of item operations.
Map client (or Area client)
A map client shows the contents of a given place, and may be constrained
to the field-of-view of a character (ie if it is dark most of the map will
be dark as well). Normally this will take the form of a rectangular grid
of items as shown above, but in some cases it may look different (for example
if the character is inside a bag it might just show what other objects
are inside the bag). When several items are located in the same square,
only one will be shown (the "topmost", ie the one judged to be of most
direct interest). Clicking on this item will select it. Clicking
again on the square will instead select the actual square (in a
player client the rest of the contents of the square will be visible in
the property window). Each click will switch between selecting the item
and the selecting the square containing the item.
That's it for now
Yep. That's all I've specified for now. When most of this is implemented
I will specify more GUI components - there's no real reason to think too
far ahead... :o)