                    Commonly Used Properties in Monsters
                    -------------------------------------

"unit"
------
 unit is a string. In Chinese, the unit is regarded as the monster's 单位.
For example, if you set("unit", "只"), when there is more than one monster
in the same room, you will see "n只xxx". The default unit is "个".


"aggressive"
------------
 aggressive is an integer. If a monster's aggressive property is
1, the monster will attack any player entering the room automatically. If
aggressive is 0, the monster will wait to be attacked before engaging in
combat.


"killer"
--------
 killer is an integer. If killer==1, the monster attacks any object
that triggers its init function. This way, it attacks monsters in a room
that it enters (rather than waiting for the player to come to it). Killer
monsters are rather dangerous.


"forgetful"
-----------
 Forgetful is an integer. If forgetful==1, then the monster does
not remember players who attack it and leave. If the monster is not forgetful,
it will keep track of players who have fought  it and attack them when they
reappear.


"pursuing"
----------
 pursuing is an integer. If it is not zero, then the
monster will chase after its opponents if they leave during a fight. It uses
receive_message() to detect leaving, so a fast player can get away by
making several quick moves.

"moving"
---------
 Moving is an integer which controls the movement of a monster through 
the rooms of the MUD. If a monster is moving, then he will spontaneously move to
a random adjacent room every "speed" heartbeats (see below). To start a monster
will commence movement on its next heart_beat. If movement is set to -1, it
means the monster is moving about. If movement is set at 0, the monster will
not move around.


"speed"
--------
 speed is an integer which controls how fast the monster will move. It
will move every <speed> seconds, so low speeds are faster than high ones.
We should rename this property.


"patrol"
---------
 patrol is an array of strings. If it is set, then a monster will
move, once per speed seconds, in the directions specified by the array. EG,  
if patrol is set to ({ "north", "south" }) then the monster will move
north, then south, then north, then south, etc.


"chat_chance"
-------------
  Chat_chance is an integer which represents the percentile 
chance out of 100 that the monster will utter a chat at a given heartbeat.


"chat_output"
-------------
  Chat_output is an array holding all possible chat outputs. If
a chat is called, it will pick one of the chats randomly and output it.


"att_chat_output"
-----------------
  Att_chat_output is also an array like chat_output, but it
holds the chat outputs given when the monster is in a fight.


"exp_reward"
------------
 This is the experience gain when a player killed this monster.
The default formula to calculate this value is:
   exp_of_monster / ( level_of_monster + 4 )


"block_aim"
-----------
 An array that contains locations this monster won't have against healer's
 anatomlogy skill.


"tactic_func"
-------------
 A string. When the monster is fighting, the function named by this string
 is called each heart beat with one argument: the object it is fighting. If
 this function returns a non-zero value, the monster won't perform attack
 on that heart beat.
 This property is now obsolute but still available. You can define the
 function "tactic_func" directly to override the tactic_func() in monster.c
 like this:
 
 int tactic_func(object attacker)
 {
     ....
 }

