                           BALANCE DOCUMENTATION v2.0
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


I.      Newbie Monsters
II.     Higher Level Monsters
III.    RHM's (Really Hard Monsters)
IV.     Quest Points


Some of the wizzes have asked about game balance in terms of the monsters 
that they code.  Here some guidelines to think about when you are 
designing your monsters.


I.  Newbie Monsters

First, think about the level of player that you are targeting this monster
at.  A level 1 player has around 100hp.  Therefore, a level 1 monster 
should only have from 100-200 hp.  Here is a chart detailing some ballpark 
figures for newbie monsters.



Level         exp             silver            skills             hp
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
1             100-200         under 100         10-20%             100-200

3             300-500         100-200           25-40%             300-500  

5             500-1500        200-300           40-50%             500-700


This is about as high as newbie monsters should go.  The monster's stats
and exp are automatically set according to the monster's level but the
wizard can set them manually also.  The main skills for a monster are 
attack, parry, and dodge.  A rule of thumb when it comes to silver is this, 
a monster should NEVER have more silver than hp.  A monster that carries 
equipment should carry less silver.



II.  Higher Level Monsters

When you design a higher level monster, keep in mind that their skills and 
stats need to be higher.  That is very IMPORTANT.  A monster with a lot of 
hp can be slaughtered by a lesser player with good skills.  Monsters that 
are very high, such as level 19 or 20 monsters should have skills around 
100.  You should also consider giving them spells and the mp to use them.  
Monsters that do not cast spells should have better physical attack as 
well as have more hp. These monsters should give good xp in the range 
of 30K-80K but they must also be almost impossible for a solo player of 
under 20th level to kill.  Such monsters should have at least 2500hp.

Here is an example of a basic 20th level monster:

Level 20        exp:50K        gold:200       hp:2500

skills: attack 100%     weapon skill 100%
        parry  90%      spellcasting 90%     
        dodge  90%
        
stats:  str 90  dex 90  

spells: heal*6
        harm*6
        blizzard*6

This monster would be tough for a 20th level character and would probably
require a party.  That should be the case for any monsters of 20th level
and giving tens of thousands of xp.

III.  RHM's (Really Hard Monsters)

The DarkeMUD system is such that monsters such as the 20th level monster 
described above are not enough to provide either the challenge OR the exp
necessary for high level players, particularly ones above 20.  This is 
where it gets challenging but extremely fun to be a coder.  

Any generic monster, even one with disgusting amounts of hp, can still get
creamed by your average 20th level party, merely because DarkeMUD 
characters are so powerful.  Therefore, high level players need to be 
provided with a challenge that goes beyond the 'generic' monster, ie, one 
with some cool skills and spells and maybe a cool item or two.  Take a 
while to learn some advanced coding, and you can let your creativity 
loose.  Some examples of non-standard stuff that monsters could do:

1.  Warsyn has coded a 'shadow' monster that has 200% invisibility art.  
When you walk into a room, the shadow begins following you (you of course 
can't tell because he is invisible).  Fine and dandy, until you attack another
monster...because all monsters level 12 and above automatically 'gang 
bang', meaning if one monster in a room attacks a player, all monsters in 
the room will.  Therefore, if a player attacks another monster, the 
shadow starts beating on him, too.

2.  A monster could automatically gate in minions to beat on players.

3.  A door could close, trapping the player(s) in the room.

4.  The monster could do weird stuff, like teleport around the area if he 
is injured to avoid getting killed.  (Shadowlords from Ultima V)

5.  Anything you can think of.

If you cannot figure out how to code these things, DO NOT HESITATE to get 
help from an arch, preferably Diewarzau, since he knows most about the 
lib and how it works.  But in the interest of saving time, I will include 
some tips.

The monster has four (possibly more) important 'applies'.  An apply is a 
function that is called by the mud driver at a particular time, allowing 
you to make the monster do stuff.  I will describe them below.

void create()
     This apply is called only once....right as the monster is cloned.

void reset()
     This apply is called every half hour, allowing you to perform 
periodic 'maintenance' functions in the monster.

void init()
     This apply is possibly the most useful, as it is called EVERY time a 
living thing (player or monster) walks into the room.  If you want to 
know who the player or monster is, this_player() contains the object 
variable pointing to the person who just walked in.

void heart_beat()
     This is another useful one, as it is called every 2 seconds, but 
only under certain circumstances.  In the interest of conserving memory 
and processor time, the heart beat of the monster is turned off if all of
the following condition are met:
    1.  There are no players in the room..
    2.  The monster is fully healed (hp and mp).
    3.  The monster is not in combat with either a monster
        or a player.
Note that when the heart_beat is off, the monster will not cast spells 
which you have set with the add-spell functions.


Now that you know the important applies (by the way, you can get info on 
all of them by typing 'man <whatever>', eg, man heart_beat), I can give 
you some tips on how to use them.  The MOST IMPORTANT thing to remember 
is that the first line of anny of the apply functions must be a '::' 
followed by the function name.  For example, if you want to use init(), 
it MUST begin:

void init() {
  ::init();
  etc...

Another important rule is NEVER to have something that may cause an error 
in heart_beat, because that will shut off the monster's heart_beat, and 
he will be unable to fight, heal, or cast spells.

Now that we know the rules, lets talk about some stuff you could put in 
these functions.  If you, for instance, wanted a monster to try and back 
stab someone every time he/she walked into the room:

void init() {
  ::init();
  force_me("use back stab at "+(string)this_player()->query_name());
  return;
}

Remember, in the create() function, you MUST set_skill so that the 
monster will have back stab skill.

void create() {
  ::create();
  ...
  ...
  set_skill("back stab", 67);
  etc...
}

You could have the monster cast a spell rather than use a skill with:

  force_me("cast *4 fireball at "+(string)this_player()->query_name());

As before, you must set_spell_level in the create() fucntion. 

void create() {
  ::create();
  ...
  ...
  set_spell_level("fireball", 4);
  set_skill("conjration", 75);
/*  Be SURE to include casting skill....this is a common mistake */

  etc...
}

As a final example, you could have the monster WAIT to back stab someone 
like this...the monster will wait 6 sec after someone enters the room 
then do the deed.

void init() {
  ::init();
  if(!this_player()->is_player())
    return;    <-- does not do it if the living thing is NOT a
  			player, ie, IS a monster.
  delayed_call("do_stab", 6, this_player());
  return;
}

void do_stab(object tp) {
  if(!tp || !present(tp, environment()) return;
/* Make sure the player is still there! */
  force_me("use back stab at "+(string)tp->query_name());
  return;
}

Basically, it doesn't take too much thought to realize that you can do 
just about anything by using reset(), init(), and heart_beat().  The best 
way to approach the design of RHM's is to FIRST think of what you WANT to 
do, then try to think of how to do it.  If you can't figure out how, ask 
Diewarzau, because there is probably a way.

IV.   Quest Points

Many of you are designing quests for your areas.  For easy quests, you should
give no more than 10-15 quest points.  Easy quest means that a newbie player
of level 5 or under could solve it.  An average quest for medium level 
characters should only give 25 points or under.  Regardless of difficulty, 
no quest should really give more than 50 points.  If you have coded a quest 
that you believe deserves more than 50, talk to an arch.  For an idea of what 
quest points can do, look in the Quest Point Shop in the city.



