Guidelines for the new damage types code:
I have added new code which will allow for different damage types.
Instead of all damage being the same, it can now be broken into different categories.
Each category has its own armor class and resistance, based on what armor the person is
wearing.  Armor also has new code to create special cases for each damage type.

The new types are:
physical (default)
magical
other

The other category will be broken down into non standard categories.
These categories are:
other|fire
other|poison
other|light

ONLY USED THESE CATEGORIES.  New categories may be added upon request.


Files changed: living.c, monster.c, armor.c

living.c:

There is now a replacement for the hit_player function in living.c called do_damage()
The paramaters to do damage are two arrays.  The first array is damage,
the second is the corresponding damage type (see above)

The old hit_player will still work.  It will default to being type "physical"


monster.c

I have added code that will allow set_ac to work with the new damage types.
I also added 2 new parameters to set a monsters resistance and to call a special funciton.
set_res(int) allows you to set a resistance to physical damage.
set_special(string) is the name of a function you would have in your code to allow flexible ac and resistance


armor.c

I have changed the wear function to work with the new damage types.
I also added new functions to utilize the new damage types.
set_protect(string) allows you to set the damage type (see above)
set_res(int) allows you to set the resistance amount
set_special(string) is the name of a function you would have in your code to allow flexible ac and resistance


What is compatible:
Monsters that use /obj/monster.c and /obj/living.c
Armors that use /obj/armor.c
Armors that use call_armor_special code

what is NOT compatible:
Monsters that use non standard monster.c or living.c (they can co-exist though)
Armors that use non standard armor.c (also can co-exist)
Armors that use paladin code (needs a 1 line fix to paladin object)
Armors that use knight templar code (needs a 1 line fix to guild object)




Examples:

In a monster:

reset(arg){
   set_ac(17)
}
--> monster will have ac 17 for type physical 

reset(arg){
   set_ac(17)
   set_res(10)
   set_special("spec")
}

spec(){
   return 1112;
}

--> monster will have ac 29 (17+12) and 21 (10+11) resistance to type physical

reset(arg){
   set_ac(17)
   set_res(10)
   set_special("spec")
   set_params("other|fire",1,0,"spec2");
}

--> same as above example but also adds 1 ac and call to spec2() for type other|fire



In an armor:

reset(arg){
   ::reset();
   set_ac(2);
}

--> armor will have ac 2 to type physical (will also use call_armor_special if it exists)

reset(arg){
  ::reset()
  set_ac(2);
  set_res(5);
  set_special("spec");
}

spec(){
  return 101;
}

--> armor will have ac 3 (2+1) and 6 (5+1) resistance to type physical (this will use "spec" rather than call_armor_special)

reset(arg){
  ::reset();
  set_ac(2);
  set_res(5);
  set_special("spec");
  set_params("other|fire",1,0,"spec2");
}

--> same as above example but also adds 1 ac and call to spec2() for type other|fire


