********************************* USER INFO **********************************

Users have a complex structure associated with them. Unlike the object
structures they are not dynamically allocated but rather are created on boot
up - MAX_USERS number of structures are created. This is perhaps not the best 
method but its baggage left over from the NUTS talker system from which
OGHAM was developed. With hindsite I'd have made user structures a subset of
the objects structure which would have made user and object interaction a bit
easier but what the hell - its too late now.

Races
-----

A new user chooses a race when he first logs in. The races are defined
in globals.h with NUM_RACES the macro, *races[NUM_RACES] storing the race
name and race_data[NUM_RACES][3] storing the preset race attributes 
eg strength. See globals.h to understand it properly.


Gender
------

As with races gender is set on login. ustr[user].gender is the variable
that stores the gender: 0 = male , 1 = female


Alignment
---------

A user can be anything from angelic (1) to evil (100) but all users start
off as neutral. ustr[user].evil stores the value and the array 
*evil_data[EVIL_LEVELS*2] stores the names and boundary values of 
alignments. See globals.h. main.c uses the evil level but does not alter
it - thats up to the mudlib.


Classes
-------

A user is not prompted for a class when he logs in and his class is
set to 0 which is classless. The reason for not prompting at login is that
users generally join a class guild within the mud (so the mudlib must
contain the code that sets the class) whereas a user can't really be of 
unspecified race so that must be prompted for.


Structure info:
---------------

name - user name
desc - user description
in_phrase - phrase printed after name on entering room
out_phrase - ditto above on leaving room.
site, logging_in, attleft, sutd, file_posn, - boring system vars.
login_time, rnum, last_input_time - boring system vars.

dead - 1 if user is dead
room - current user room (-1 if logging in)
ws - weapon skill 0 - 100. Can only wield a weapon if ws is equal or higher 
     than that of the weapon.
dam - damage of weapon being carried.
dodge - dodge speed 0 - 100
arm[5] - Strength of various types of armour worn. The total armour is 
         added up on fighting and used to effect the hits.
         0 = head armour, 1 = body, 2 = hand, 3 = leg, 4 = shield.
stren - user strength 0 - 100
weight - weight of objects being carried. Max weight that can be carried is
         equal to users strength.
stam - user stamina 0 - 100
eps - experience points
magic - user magic 0 - 100
money - money carried
level - user level 1 - GOD
race - user race
gender - user gender
evil - user evil level (0 = angelic , 100=evil)
magic_spell - last spell cast.
wizlight - is wizlight on
user_victim - current user being attacked (-1 if none)
npc_victim - current npc being attacked (NULL if none)
can_move - 1 if user can move
gen[GEN_SIZE] - general use array. Saved and loaded by main.c but not otherwise
                used by it.
misc_func - miscellanious function that can be called in place of normal
            command functions.
struct event[MAX_EVENTS] - contains list of functions that are 
                           called in user_events()
struct skill[MAX_SKILL] - contains names and functions of skill commands.
object[MAX_OBJECT_CARRY] - list of objects carried.

