
OBJECT:
	living 


SYNOPSIS:
	inherit "std/living";

	#include <properties.h>
	#include <living.h>


DESCRIPTION:
	This is the generic living object which 'lives', can move,
	can fight.

	It has a number of 'stats', also called 'attributes' in
	the new system. These include the former stats 
	strength, dexterity, intelligence and constitution.
	These attributes determine the life functions and
	variables like hitpoints and spellpoints, but also the
	ability to perform certain actions like spellcasting or
	swordfighting. Attributs are implemented as a property
	P_ATTRIBUTES. Attributes can be set by using the functions

	SetAttribute(string attribute, int value)
	  Sets <attribute> to <value>. Certain restrictions might
	  exist, and the requested attribute might not be set.
	  Attributes are integer values, and are in the range
	  of 1 (very bad) to 20 (excellent and highest possible
	  for a normal human).

	int QueryAttribute(string attribute)
	  Returns value of <attribute>

	Abilities. A living creature may have special abilities
	to perform certain actions. These may be very different
	types of actions, like fighting with a sword, casting
	a fireball or climbing up a tree. Abilities are
	implemented as the P_ABILITIES property. An ability may
	be accompanied by an object which may define special
	actions and which uses the values of P_ABILITES, for 
	example a spellbook will store spell levels there or
	a weapon uses a weapon ability (skill). The abilities
	can be manipulated:

	SetAbility(string ability, int value)
	  Sets <ability> to <value>.

	int QueryAbility(string ability)
	  Ask the value of <ability>.

	Equipment. Weaponclass and armourclass are defined. Unless
	a weapon is used, the wc is 0. Unless an armour is used,
	the ac is 0. (P_WC and P_AC)

	Live variables. A living creature has several needs just
	because it is alive. The complex life functions are
	reducced to some crucial factors.

	P_HP
	  These are mainly determined by the constitution and give
	  the ability of the body to absorb damage. If the
	  hitpoints go below zero, the creature is dead.

	P_SP
	  Spellpoints (sometimes called mana) describe the magical
	  (spiritual) capability of the creature. It is mainly
	  determined by Intelligence and Wisdom. It is up to the
	  creature how good it uses the spellpoint resource.
	  Spellpoints will go down when supernatural actions are
	  performed by the creature.

	P_MAX_SP, P_MAX_HP
	  Readonly variable which are computed from attributes.

	P_FOOD, P_DRINK, P_ALCOHOL, (P_POISON)
	  These three variables describe hunger, thirst and
	  intoxication by alcohol. The max is dependent on the
	  constitution of the living, and of the weight.
	  These variables automatically decrease with time.
	  When food or drink goes below zero, the creature
	  suffers hunger or thirst and will lose hitpoints.

	P_MAX_FOOD, P_MAX_DRINK, P_MAX_ALCOHOL
	  Readonly variables which are computed from attributes.

	P_WEIGHT, P_SIZE
	  These variables describe the physical proportions of
	  the creatures body. Both variables are standard properties
	  and are also used in normal objects.

	P_MAX_WEIGHT 
	  This is a readonly variable which describes how much
	  a living creature may carry around.

	P_GENDER
	  This is obvious. Gender may be MALE, FEMALE or NEUTER,
	  as defined in <living.h>. Player gender may be only
	  MALE or FEMALE.

	P_RACE
	  A string which defines the race.

	P_ALIGNMENT
	  The alignment of the living, ranging frO

	P_AGE
	  The age of the living creature in seconds
	

INHERITANCE TREE:
	living
	  |-thing/moving
	  |-thing/properties
	  `-thing/description


SEE ALSO:
	properties(C), units(C)
