

You may find examples of monsters already built in %^ORANGE%^/tmp/swap%^RESET%^.

What must be done in each and every monster ::
To build a monster, you must first inherit MONSTER;
In the %^BLACK%^%^BOLD%^create()%^RESET%^ functions, you must call the following functions;

%^GREEN%^%^BOLD%^set_name(%^BLACK%^%^BOLD%^<monster's name string>%^GREEN%^%^BOLD%^);
                       Normally a simple string like "begger" is perfered so
			 intelligent objects can use phrases like "a beggar".
			 This function simply gives the monster a generic
			 name. (Also see set_proper_name()) 

%^GREEN%^%^BOLD%^set_id( ({ "beggar", "poor beggar", "a poor beggar", "a beggar" }) );
		    	 These are the things a player must type to make 
			 reference to the monster, as in look at poor beggar.
			 You can have any number of id's inside the ({ }),
			 but make sure you separate them by , and enclose them
			 in "".  For advanced information, this is an example
			 of an array.  Please inquire of the current training
                        Archwizard and the help files about arrays for more.

%^GREEN%^%^BOLD%^set_level(%^BLACK%^%^BOLD%^<integer for monster's level>%^GREEN%^%^BOLD%^);

                         This actually does alot of things besides setting the
			 monster's level, and that is why you should call it
			 before you call other things.  Besides making the
			 beggar 4th level, it also sets all other attributes
			 necessary to keep the beggar MINIMALLY balanced.
			 To name a few examples, this will set the monster's
			 skills and stats to a minimum level for a level 4 
			 monster.  It will set the monster exp to the level
			 of a fourth level player, and so on.  

%^GREEN%^%^BOLD%^set_short(%^BLACK%^%^BOLD%^<monster's short description string>%^GREEN%^%^BOLD%^);

                       This sets the desciption you see when you look at a
				  room with the monster in it.

%^GREEN%^%^BOLD%^set_long(%^BLACK%^%^BOLD%^<monster's long description string>%^GREEN%^%^BOLD%^);

		         This sets the decription you see when you look at
                        the monster. Make sure you surround the string with
                         ""s.

%^GREEN%^%^BOLD%^set_race(%^BLACK%^%^BOLD%^<monster's race string>%^GREEN%^%^BOLD%^);
			 See %^BLACK%^%^BOLD%^help races%^RESET%^ for a list of races.  This
			 list is never complete, and it is meant to be added
			 to, but any time you want to add a race that is not
			 on the list, mail APPROVAL so that the race can be
			 added to the list. 

%^GREEN%^%^BOLD%^set_gender(%^BLACK%^%^BOLD%^<monster's gender string>%^GREEN%^%^BOLD%^);
			 Nowadays gender is set with a string.  Acceptable 
			 strings are "male", "female", "neuter".  Make sure
			 you set this, as a neuter knight is a silly thing.

Either :
%^GREEN%^%^BOLD%^set_body_type(%^BLACK%^%^BOLD%^<String for Monster's body type>%^GREEN%^%^BOLD%^);

OR

%^GREEN%^%^BOLD%^add_limb(%^BLACK%^%^BOLD%^<Limb name>%^GREEN%^%^BOLD%^,%^BLACK%^%^BOLD%^<referent_limb>%^GREEN%^%^BOLD%^,%^GREEN%^%^BOLD%^<limb's HP>%^GREEN%^%^BOLD%^, %^BLACK%^%^BOLD%^<Limb's current damage>%^GREEN%^%^BOLD%^ , %^BLACK%^%^BOLD%^<Limb's natural armour class>%^GREEN%^%^BOLD%^);
			    Let's start from the back up.  In the 
			 Primal Darkness limb combat system, you must create
			 a body for a monster.  You do this by adding limbs.
			 %^GREEN%^%^BOLD%^set_body_type()%^RESET%^ automatically adds the limbs used
                         by the player race you pass, or by the monster
                         body type you pass as an arg.  Examples:
                         %^GREEN%^%^BOLD%^set_body_type("artrell")%^RESET%^ %^GREEN%^%^BOLD%^set_body_type("quadruped")%^RESET%^
			 If you want ANY odd combination, you must %^GREEN%^%^BOLD%^add_limb()%^RESET%^
			 from scratch.  If you simply want two heads for a
			 two headed giant, %^GREEN%^%^BOLD%^set_body_type("human")%^RESET%^ and add a
			 "right head" or something.  You cannot have two limbs
			 with the same name.  Now the meaning of the stuff in
			 %^GREEN%^%^BOLD%^add_limb()%^RESET%^:
			 add_limb( limb_name, referent_limb, max_dam, dam, ac);
			 The limb_name is self explanatory, it gives the limb
			 a name, like "right forepaw".
			 referent_limb is the name of any limb that must
			 necessarily be lost if this one is.  For example,
			 if you lose your "right arm" you WILL lose you
			 "right hand".  So in adding the "right arm", you
			 put "right hand as the referent limb.  If no limb
			 will be lost, put "".  If the loss of the limb = death
			 put "FATAL".  Fatal limbs must have AT LEAST half of
			 the damage taking ability as the monster has hp.
			 max_dam is the maximum amount of damage the limb can
			 take before being lost.  As I just said, for fatal
			 limbs, this number should be 1/2 (at least) the 
			 monster's hp.
			 dam is the amount of damage the monster is starting
			 with on the limb.  In this way you can creatively
			 make wounded monsters, great for newbie areas.
			 ac is the ac of the limb.  Limbs should have an ac
			 at least = to the monster's level in low levels and
			 right at the monster level at high levels.

%^GREEN%^%^BOLD%^set_overall_ac(%^BLACK%^%^BOLD%^<armour rating for limbs>%^GREEN%^%^BOLD%^);
                         This sets the ac of all limbs to the integer entered
                         except for the torso, which is automatically
                         set to a little higher then the integer.

========================================================================

These are all of the functions minimally necessary to create a monster.
However, just using these functions will not help you get a monster past
QC, as they will be dull monsters set up for hack and slash.  Below is a
listing of optional functions you may put in code to individualize your monster.
========================================================================

%^GREEN%^%^BOLD%^set_wielding_limbs( ({ "right hand", "left hand" }) );
		      	 Sets the limbs in which a monster
		    	 is able to wield a weapon.

%^GREEN%^%^BOLD%^set_ac("right hand", 7);
                           This sets the armour class of a limb to the
                           integer supplied.

%^GREEN%^%^BOLD%^set_fingers(%^BLACK%^%^BOLD%^<integer reflecting the finger count>%^GREEN%^%^BOLD%^);
                         This function gives fingers to the monster. It is
                         necessary to have the monster wearing rings.

%^GREEN%^%^BOLD%^set_moving(1); 
*and*
%^GREEN%^%^BOLD%^set_speed(%^BLACK%^%^BOLD%^<integer representing speed>%^GREEN%^%^BOLD%^);
                        This makes the monster move around. A 1 MUST be
			 the argument to moving, whereas speed is how often
			 the monster moves in seconds.  ALL wandering
			 monsters on Primal MUST be intelligent monsters.
			 This means they have to respond to external stimuli
			 beyond kill.  Their wandering needs a purpose.

%^GREEN%^%^BOLD%^set_max_hp(%^BLACK%^%^BOLD%^<integer representing the HP>%^GREEN%^%^BOLD%^);
                         Sets the maximun number of HP a monster
			 may have. You would set this if you want to create
			 a monster that is wounded and can heal.

%^GREEN%^%^BOLD%^set_hp(%^BLACK%^%^BOLD%^<integer representing the HP>%^GREEN%^%^BOLD%^);
                         Sets the current number of HP a monster has. This
			 will not allow you to set it below a certain number
			 depending on the level of the monster.

%^GREEN%^%^BOLD%^set_max_sp(%^BLACK%^%^BOLD%^<integer representing the SP>%^GREEN%^%^BOLD%^);
                         Sets the maximun number of stamina points
                         the monster currently has.

%^GREEN%^%^BOLD%^set_sp(%^BLACK%^%^BOLD%^<integer representing the SP>%^GREEN%^%^BOLD%^);
                       Sets the starting value for the monster's SP.

%^GREEN%^%^BOLD%^set_exp(%^BLACK%^%^BOLD%^<integer representing the monster's experience>%^GREEN%^%^BOLD%^);
                    This function sets the amount of experience points the
                    monster has and how much the player recieves at its death.
                   You can also set_exp(0); if you wish you monster to have
                   no experience to dispense.

%^GREEN%^%^BOLD%^set_skill(%^BLACK%^%^BOLD%^<String for skill's name>%^GREEN%^%^BOLD%^,%^BLACK%^%^BOLD%^<integer for skill's value>%^GREEN%^%^BOLD%^);
                    This function will set the skill named to the integer
                     given in the second arguement. 

%^GREEN%^%^BOLD%^set_stats(%^BLACK%^%^BOLD%^<String for stats's name>%^GREEN%^%^BOLD%^,%^BLACK%^%^BOLD%^<integer for stats' value>%^GREEN%^%^BOLD%^);
                       This function will set the stat named to the integer
                       you supply in the second arguement.

%^GREEN%^%^BOLD%^set_class(%^BLACK%^%^BOLD%^<String for the class' name>%^GREEN%^%^BOLD%^);
                        Makes the monster a member of the named class. 
                       The monster will be able to harness the skills from
                       their class and sub-class using %^GREEN%^%^BOLD%^set_spells()%^RESET%^.

%^GREEN%^%^BOLD%^set_wimpy(20);	      %^RESET%^	 Makes the monster wimp out at 20% of its max_hp

%^GREEN%^%^BOLD%^set_wimpydir("out");   %^RESET%^  Makes "out" the preferred direction of wimping out.
			 Keep in mind that if you set out and there is no out,
			 it will search for a direction that is there.

%^GREEN%^%^BOLD%^set_spell_chance(30);   %^RESET%^ Sets the percent chance the monster has during an
			 and attack for each round for casting a spell.
                        In this case it is 30, but you can pass any #.

%^GREEN%^%^BOLD%^set_spells( ({ "missile", "shock", "fireball" }) );
		         Sets up a list of possible commands the monster
			 can execute during combat.  Note that game defined
			 attack spells need no argument during combat.  But
			 other spells, like heal spells, stealing, and
			 immortal defined spells need any appropriate arguments
			 Remember that the monster needs the right amount of
			 magic points in order to cast a spell.  Also, some
			 spells require the monster to be a member of a certain
			 class.  And if you want the monster to cast the spell
			 effectively, remember to set that skill.

                        This command also refers to other combat skills.
                        You may name ANY of the class' or sub_class' skills
                        in this command to be executed at the % rate defined
                         in %^GREEN%^%^BOLD%^set_spell_chance()%^RESET%^. You may also use %^GREEN%^%^BOLD%^add_action()%^RESET%^
                        Please see %^BLACK%^%^BOLD%^help add_action()%^RESET%^ for more information
                         about adding a custom attack to you monsters.

%^GREEN%^%^BOLD%^set_languages( ({ "farsi", "borgish" }) );
                        Makes the monster be able to speak each of these
                        languages fluently.  A monster needs to be able
                        to speak a language fluently in order ALWAYS to
                        understand the utterances of another fluent speaker
                        in the same language (for insteance, when you use
                        %^GREEN%^%^BOLD%^set_speech()%^RESET%^ or define %^GREEN%^%^BOLD%^catch_tell()%^RESET%^)

%^GREEN%^%^BOLD%^set_lang_prof("nibelungen", 7);
                        Useful for making a monster partially adept
                        at a given language.  (fluency range: 1-10)

%^GREEN%^%^BOLD%^set_emotes(20, ({"The beggar grovels a bit.","The beggar whines."}), 0);
                        This sends emotes and other messages to the room.
                        Every heart beat, this beggar will have a 20% chance
                        (the first arg) of sending out randomly one of these
                        messages.  The third argument is either 1 or 0.
                        1 means the message is for combat, 0 is for peace.

%^GREEN%^%^BOLD%^set_speech(20, "farsi", ({"I have nothing to sell.", "My brain hurts."}),0);
                        Much like set_emotes(), except this sets up text
                        which the monster will randomly try to speak using
                        the speak command.  Of course, the monster must
                        already have had set_lang_prof() or set_languages()
                        set for the language (in this case "farsi") being
                        spoken.


%^GREEN%^%^BOLD%^set_achats(20, ({ "The beggar bleeds on you.\n", "The beggar spits on you.\n" }) );		    \\ This is the same as set_chats(), except that these chats
			are given while the monster is engaged in combat.

*******************************************************************************


Signed,

Ironman, The absent-minded Professor

