How weapons are wielded.
========================

First, a weapon object must be on the player, and initialized correctly.
This is done with the void init_weapon_data() function with the following
arguments:

 * skill: The array of strings, defining of what skill this weapon
 * belongs to. An example is ({ "skill", "offensive", "sharp", "knife" }).
 *
 * stats: An array of integers, defining what stats are good to have for
 * this weapon. Example: ({ STAT_STR, STAT_DEX }). It is possible to have
 * the same stat several times, which will add extra weight for that
 * stat.
 *
 * max_beg: How much damage an utter novice will be able to do if lucky.
 *
 * max_exp: How much maximal damage an expert player will do with this
 * weapon.
 *
 * learn_type: Choose one type from config.h, LEARNING_X etc.


For every attack being done, there is a check if the player has any
weapon. If not, he will get the "hands" weapon by default.

When the player gives the command 'wield', defined in /basic/living/attack.c,
the function wield_command() defined in attack.c is called, and
a check is done that the object is carried. If a weapon was already
wielded, the function stop_wield() is called in the
weapon (/basic/weapon_logic.c). The weapon will then remember that is is
not wielded any longer. Next, the wield command will call 'unwield' in
/basic/living/attack.c, which will generate the proper messages.

Now, do_wield() will be called in /basic/weapon_logic(). The weapon will then
know that it is wielded. It will also ask the player object of the values
of the stats that the weapon needs. That means that even if the stats will
change, new values will not be used until the player wields a weapon again.

At last, the wield command will set an internal variable to point to the
weapon object and compute an average value of the skills for the weapon.
The average skill value and the stats values will be used to compute
the damage done by the weapon.


