NPC macros

The attack and armour macro

The natural attack and armour fields allow you to set the NPC to do damage like a certain type of weapons and to defend like a certain type of armour respectively. Let's say you had a metal cougar; it would have an attack type of claw and an armour type of plate while a normal dog would have an armour type of leather and an attack type of bite. The 'NATURAL_DEF' macro is what allows you to set these fields. This macro is defined in wmacros.h and looks like this.

#define NATURAL_DEF(weapon_category, armour_category) \
   armour armour_category \
   attack weapon_category

The word natural can sometimes be a little confusing since you can set any of the weapons types you like on the NPC. It doesn't exactly make sense to have a dog that attacks as if it uses a long sword but if you wish it you can do it. The following is a short list of just the natural weapon types but you can find a full list in the appendix called weapon definitions in values.h or in the values.h of your mud just in case you have added some weapon types.

#define WPN_FIST         34
#define WPN_KICK         35
#define WPN_BITE         36
#define WPN_STING        37
#define WPN_CLAW         38
#define WPN_CRUSH        39

Again you don't have to use leather for dogs as we have already mentioned with our metal cat idea you could make a cloth dragon if you really want but it's up to you to keep some sanity on your VME. The following is the list of armour types that can be set. You will see that the list is exactly the same as the list you will find later when making armour.

#define ARM_CLOTHES  0  /*Same as a Human in jeans and a T-shirt*/
#define ARM_LEATHER  1  /* A soft flexible leather base armour   */
#define ARM_HLEATHER 2  /* A hard inflexible leather base armour */
#define ARM_CHAIN    3  /* A flexible armour composed of interlocking 
rings */
#define ARM_PLATE    4  /* An inflexible plate armour. */

Now that you have the defines to work with we will return to our metal cat and normal dog. The definitions for them would look something like this.

//Metal Cat 

//normal dog

You should know that the weight of the monster determines the maximum amount of damage it can give when using a natural attack. The weight is categorized as follows:

Table 5. Weight size chart

0 - 5Tiny
6 - 40Small
41 - 160Medium
161 - 500Large
500 and upHuge

By default monsters are medium. So make sure you take this into account when you are creating your NPC.

The defense and offense bonus macro

There comes a time when you may want to make your NPC super naturally powerful. It is for those times that the offense and defense fields are available for you to set. Normally they default to 0 but you can set them from 0 to 5000. The higher you set the offense number the harder you will hit people you a re in combat with. The higher you set the defense the harder it will be for people to hit your NPC. The following macro allows you to set both the offense and defense.

#define ATTACK_DEFENSE(attack, defense) \
offensive attack \
defensive defense

Using this macro is rather easy you just put the value you want for each and you're all done

//a really hard hitting hard to kill NPC
ATTACK_DEFENSE( 1000, 1000)

The NPC abilities macro

All abilities are in the range [1..200]. Players usually have a maximum of 150, modified by magic... 200 is considered divine. When creating a monster you can not directly specify the size of the abilities, instead you specify a percentage distribution of points. The amount of points are then distributed by the computer according to the specified level. The 'MSET_ABILITY' macro is available for this purpose, and is defined as:

#define MSET_ABILITY(str,dex,con,hpp,bra,cha,mag,div)   \
ability[ABIL_STR]  str   \
  ability[ABIL_DEX]  dex   \
  ability[ABIL_CON]  con   \
  ability[ABIL_HP]   hpp   \
  ability[ABIL_BRA]  bra   \
  ability[ABIL_MAG]  mag   \
  ability[ABIL_DIV]  div   \
  ability[ABIL_CHA]  cha


Note the sum of the ability values must be 100%. This is therefore an example of an ability distribution:

     MSET_ABILITY(25,15,10,15,10,5,10,0)  /* Sum is 100% */

The amount of points distributed depends directly upon the level of the monster and the percentage. If the percentage is too high and the level is also set high some ability points may be lost since a NPC gets all abilities over 255 cut off. For example a level 199 monster with an ability percentage a bit above 20% will make an ability above the 255 points maximum. In the current combat system in the VME 2.0 it is not necessary to spend points on both 'mag' and 'div' on the NPC since only one or the other is ever used depending on which is higher.

The NPC weapon and spell macros

NPCs know about weapons and spells but not at the same detailed level as the player. For NPCs the spell and weapon group are used. Thus the axe/hammer category defines all defense and all attack for all kinds of axes and hammers, whereas the player would have to train individually in each axe and hammer type. The same is true for spells. Thus if a monster has 25 points in the weapon sword category it will fight (and defend) with all sword-like weapons at skill 25. When you define weapon and spell skills (monsters have no skill skills) you also define these as percentages, and the program automatically distributes the points. Use the pre-defined macros:

#define MSET_WEAPON(axe_ham, sword, club_mace, pole, unarmed, special)  
weapon[WPN_AXE_HAM]    axe_ham   \
weapon[WPN_SWORD]      sword      \
weapon[WPN_CLUB_MACE]  club_mace  \
weapon[WPN_POLEARM]    pole \
weapon[WPN_UNARMED]    unarmed    \
weapon[WPN_SPECIAL]    special

Table 6. MSET_WEAPON arguments

axe_hamany hammer or axe
swordany sword like weapon, including dagger and rapier, etc.
club_maceany club or mace like weapon, flails, morning star, etc.
polearmany spear or pole like weapon: spear, trident, sickle, scythe etc.
unarmed Is any bite, claw, sting or other natural attack.
specialany very peculiar weapon, currently only whip.

#define MSET_SPELL(div, pro, det, sum, cre, min, hea, col, cel, int, 
ext)  \
spell[SPL_DIVINE]      div  \
spell[SPL_PROTECTION]  pro  \
spell[SPL_DETECTION]   det  \
spell[SPL_SUMMONING]   sum  \
spell[SPL_CREATION]    cre  \
spell[SPL_MIND]        min  \
spell[SPL_HEAT]        hea  \
spell[SPL_COLD]        col  \
spell[SPL_CELL]        cel  \
spell[SPL_INTERNAL]    int  \
spell[SPL_EXTERNAL]    ext

Table 7. MSET_SPELL arguments

divCovers all divine sphere spell.
proCovers all protection sphere spells.
detCovers all detection sphere spells.
sumCovers all summoning spells.
CreCovers all creation spells.
minCovers all mind spells.
heaCovers all heat spells (fireball, etc.)
colCovers all cold spells (frostball, etc.)
celCovers all cell (electricity) spells (lightning bolt, etc.)
intCovers all internal (poison) spells (toxicate, etc.)
extCovers all external (acid) spells (acid ball etc).


If you're not sure what your weapon or spell is categorized as you can look in the weapons.def or the spells.def for that you are using for your VME server.

The sum of all spell and weapon skills must be 100%. For example, the following would be a legal setting of weapons and spells.

//  75%  Total,  Club/Mace  is primary

//  25%  Total,  Fire  is primary

Remember that the groups define both attack and defense. So if you make an orc that has 0% in the flail group it can only use its dexterity to defend itself. Likewise with spell groups. For this reason the groups are both "resistance" as well as attack groups.

Using the composed.h

The file composed.h contains many standard monsters. It is a good idea to study these definitions, as they form the basis of many different monsters. Note that the definitions by no means are perfect, but we are hoping to make a more or less complete monster compendium. If you create certain (general) monsters, please design it as a macro so it can be incorporated in the file. The more monsters created by using these macros the easier it will be for your builders to create NPCs. If you think you have a really all inclusive Composed.h and want to share it with the rest of the VME servers running out there on the internet. Feel free to submit it to the VME staff and we will put it in the contribution directories on our release site.


For more information on how to use the composed.h when building your NPC see the Section called Building your first NPC.