/*
Dragonball Z Dimension Snippet Version 1.0
Author: David Piner
Email: Dapiner@yahoo.com    <---Not that long
http://newpinerorder.hypermart.net
Date: June 26, 2001
*/
Binary files old/bin/circle and new/bin/circle differ
Binary files old/src/act.informative.o and new/src/act.informative.o differ
Binary files old/src/act.item.o and new/src/act.item.o differ
Binary files old/src/act.movement.o and new/src/act.movement.o differ
Binary files old/src/act.offensive.o and new/src/act.offensive.o differ
Binary files old/src/act.other.o and new/src/act.other.o differ
Binary files old/src/act.social.o and new/src/act.social.o differ
Binary files old/src/act.wizard.o and new/src/act.wizard.o differ
Binary files old/src/asciimap.o and new/src/asciimap.o differ
Binary files old/src/castle.o and new/src/castle.o differ
diff -uNr old/src/class.c new/src/class.c
--- old/src/class.c	2013-01-29 18:11:10.000000000 -0800
+++ new/src/class.c	2013-01-29 18:52:11.013294335 -0800
@@ -1585,78 +1585,85 @@
 void init_spell_levels(void)
 {
   /* MAGES */
-  spell_level(SPELL_MAGIC_MISSILE, CLASS_MAGIC_USER, 1);
-  spell_level(SPELL_DETECT_INVIS, CLASS_MAGIC_USER, 2);
-  spell_level(SPELL_DETECT_MAGIC, CLASS_MAGIC_USER, 2);
-  spell_level(SPELL_CHILL_TOUCH, CLASS_MAGIC_USER, 3);
-  spell_level(SPELL_INFRAVISION, CLASS_MAGIC_USER, 3);
-  spell_level(SPELL_INVISIBLE, CLASS_MAGIC_USER, 4);
-  spell_level(SPELL_ARMOR, CLASS_MAGIC_USER, 4);
-  spell_level(SPELL_BURNING_HANDS, CLASS_MAGIC_USER, 5);
-  spell_level(SPELL_LOCATE_OBJECT, CLASS_MAGIC_USER, 6);
-  spell_level(SPELL_STRENGTH, CLASS_MAGIC_USER, 6);
-  spell_level(SPELL_SHOCKING_GRASP, CLASS_MAGIC_USER, 7);
-  spell_level(SPELL_SLEEP, CLASS_MAGIC_USER, 8);
-  spell_level(SPELL_LIGHTNING_BOLT, CLASS_MAGIC_USER, 9);
-  spell_level(SPELL_BLINDNESS, CLASS_MAGIC_USER, 9);
-  spell_level(SPELL_DETECT_POISON, CLASS_MAGIC_USER, 10);
-  spell_level(SPELL_COLOR_SPRAY, CLASS_MAGIC_USER, 11);
-  spell_level(SPELL_ENERGY_DRAIN, CLASS_MAGIC_USER, 13);
-  spell_level(SPELL_CURSE, CLASS_MAGIC_USER, 14);
-  spell_level(SPELL_POISON, CLASS_MAGIC_USER, 14);
-  spell_level(SPELL_FIREBALL, CLASS_MAGIC_USER, 15);
-  spell_level(SPELL_CHARM, CLASS_MAGIC_USER, 16);
-  spell_level(SPELL_IDENTIFY, CLASS_MAGIC_USER, 20);
-  spell_level(SPELL_FLY, CLASS_MAGIC_USER, 22);
-  spell_level(SPELL_ENCHANT_WEAPON, CLASS_MAGIC_USER, 26);
-  spell_level(SPELL_CLONE, CLASS_MAGIC_USER, 30);
+  spell_level_class(SPELL_MAGIC_MISSILE, CLASS_MAGIC_USER, 1);
+  spell_level_class(SPELL_DETECT_INVIS, CLASS_MAGIC_USER, 2);
+  spell_level_class(SPELL_DETECT_MAGIC, CLASS_MAGIC_USER, 2);
+  spell_level_class(SPELL_CHILL_TOUCH, CLASS_MAGIC_USER, 3);
+  spell_level_class(SPELL_INFRAVISION, CLASS_MAGIC_USER, 3);
+  spell_level_class(SPELL_INVISIBLE, CLASS_MAGIC_USER, 4);
+  spell_level_class(SPELL_ARMOR, CLASS_MAGIC_USER, 4);
+  spell_level_class(SPELL_BURNING_HANDS, CLASS_MAGIC_USER, 5);
+  spell_level_class(SPELL_LOCATE_OBJECT, CLASS_MAGIC_USER, 6);
+  spell_level_class(SPELL_STRENGTH, CLASS_MAGIC_USER, 6);
+  spell_level_class(SPELL_SHOCKING_GRASP, CLASS_MAGIC_USER, 7);
+  spell_level_class(SPELL_SLEEP, CLASS_MAGIC_USER, 8);
+  spell_level_class(SPELL_LIGHTNING_BOLT, CLASS_MAGIC_USER, 9);
+  spell_level_class(SPELL_BLINDNESS, CLASS_MAGIC_USER, 9);
+  spell_level_class(SPELL_DETECT_POISON, CLASS_MAGIC_USER, 10);
+  spell_level_class(SPELL_COLOR_SPRAY, CLASS_MAGIC_USER, 11);
+  spell_level_class(SPELL_ENERGY_DRAIN, CLASS_MAGIC_USER, 13);
+  spell_level_class(SPELL_CURSE, CLASS_MAGIC_USER, 14);
+  spell_level_class(SPELL_POISON, CLASS_MAGIC_USER, 14);
+  spell_level_class(SPELL_FIREBALL, CLASS_MAGIC_USER, 15);
+  spell_level_class(SPELL_CHARM, CLASS_MAGIC_USER, 16);
+  spell_level_class(SPELL_IDENTIFY, CLASS_MAGIC_USER, 20);
+  spell_level_class(SPELL_FLY, CLASS_MAGIC_USER, 22);
+  spell_level_class(SPELL_ENCHANT_WEAPON, CLASS_MAGIC_USER, 26);
+  spell_level_class(SPELL_CLONE, CLASS_MAGIC_USER, 30);
 
   /* CLERICS */
-  spell_level(SPELL_CURE_LIGHT, CLASS_CLERIC, 1);
-  spell_level(SPELL_ARMOR, CLASS_CLERIC, 1);
-  spell_level(SPELL_CREATE_FOOD, CLASS_CLERIC, 2);
-  spell_level(SPELL_CREATE_WATER, CLASS_CLERIC, 2);
-  spell_level(SPELL_DETECT_POISON, CLASS_CLERIC, 3);
-  spell_level(SPELL_DETECT_ALIGN, CLASS_CLERIC, 4);
-  spell_level(SPELL_CURE_BLIND, CLASS_CLERIC, 4);
-  spell_level(SPELL_BLESS, CLASS_CLERIC, 5);
-  spell_level(SPELL_DETECT_INVIS, CLASS_CLERIC, 6);
-  spell_level(SPELL_BLINDNESS, CLASS_CLERIC, 6);
-  spell_level(SPELL_INFRAVISION, CLASS_CLERIC, 7);
-  spell_level(SPELL_PROT_FROM_EVIL, CLASS_CLERIC, 8);
-  spell_level(SPELL_POISON, CLASS_CLERIC, 8);
-  spell_level(SPELL_GROUP_ARMOR, CLASS_CLERIC, 9);
-  spell_level(SPELL_CURE_CRITIC, CLASS_CLERIC, 9);
-  spell_level(SPELL_SUMMON, CLASS_CLERIC, 10);
-  spell_level(SPELL_REMOVE_POISON, CLASS_CLERIC, 10);
-  spell_level(SPELL_IDENTIFY, CLASS_CLERIC, 11);
-  spell_level(SPELL_WORD_OF_RECALL, CLASS_CLERIC, 12);
-  spell_level(SPELL_EARTHQUAKE, CLASS_CLERIC, 12);
-  spell_level(SPELL_DISPEL_EVIL, CLASS_CLERIC, 14);
-  spell_level(SPELL_DISPEL_GOOD, CLASS_CLERIC, 14);
-  spell_level(SPELL_SANCTUARY, CLASS_CLERIC, 15);
-  spell_level(SPELL_CALL_LIGHTNING, CLASS_CLERIC, 15);
-  spell_level(SPELL_HEAL, CLASS_CLERIC, 16);
-  spell_level(SPELL_CONTROL_WEATHER, CLASS_CLERIC, 17);
-  spell_level(SPELL_SENSE_LIFE, CLASS_CLERIC, 18);
-  spell_level(SPELL_HARM, CLASS_CLERIC, 19);
-  spell_level(SPELL_GROUP_HEAL, CLASS_CLERIC, 22);
-  spell_level(SPELL_REMOVE_CURSE, CLASS_CLERIC, 26);
+  spell_level_class(SPELL_CURE_LIGHT, CLASS_CLERIC, 1);
+  spell_level_class(SPELL_ARMOR, CLASS_CLERIC, 1);
+  spell_level_class(SPELL_CREATE_FOOD, CLASS_CLERIC, 2);
+  spell_level_class(SPELL_CREATE_WATER, CLASS_CLERIC, 2);
+  spell_level_class(SPELL_DETECT_POISON, CLASS_CLERIC, 3);
+  spell_level_class(SPELL_DETECT_ALIGN, CLASS_CLERIC, 4);
+  spell_level_class(SPELL_CURE_BLIND, CLASS_CLERIC, 4);
+  spell_level_class(SPELL_BLESS, CLASS_CLERIC, 5);
+  spell_level_class(SPELL_DETECT_INVIS, CLASS_CLERIC, 6);
+  spell_level_class(SPELL_BLINDNESS, CLASS_CLERIC, 6);
+  spell_level_class(SPELL_INFRAVISION, CLASS_CLERIC, 7);
+  spell_level_class(SPELL_PROT_FROM_EVIL, CLASS_CLERIC, 8);
+  spell_level_class(SPELL_POISON, CLASS_CLERIC, 8);
+  spell_level_class(SPELL_GROUP_ARMOR, CLASS_CLERIC, 9);
+  spell_level_class(SPELL_CURE_CRITIC, CLASS_CLERIC, 9);
+  spell_level_class(SPELL_SUMMON, CLASS_CLERIC, 10);
+  spell_level_class(SPELL_REMOVE_POISON, CLASS_CLERIC, 10);
+  spell_level_class(SPELL_IDENTIFY, CLASS_CLERIC, 11);
+  spell_level_class(SPELL_WORD_OF_RECALL, CLASS_CLERIC, 12);
+  spell_level_class(SPELL_EARTHQUAKE, CLASS_CLERIC, 12);
+  spell_level_class(SPELL_DISPEL_EVIL, CLASS_CLERIC, 14);
+  spell_level_class(SPELL_DISPEL_GOOD, CLASS_CLERIC, 14);
+  spell_level_class(SPELL_SANCTUARY, CLASS_CLERIC, 15);
+  spell_level_class(SPELL_CALL_LIGHTNING, CLASS_CLERIC, 15);
+  spell_level_class(SPELL_HEAL, CLASS_CLERIC, 16);
+  spell_level_class(SPELL_CONTROL_WEATHER, CLASS_CLERIC, 17);
+  spell_level_class(SPELL_SENSE_LIFE, CLASS_CLERIC, 18);
+  spell_level_class(SPELL_HARM, CLASS_CLERIC, 19);
+  spell_level_class(SPELL_GROUP_HEAL, CLASS_CLERIC, 22);
+  spell_level_class(SPELL_REMOVE_CURSE, CLASS_CLERIC, 26);
 
   /* THIEVES */
-  spell_level(SKILL_SNEAK, CLASS_THIEF, 1);
-  spell_level(SKILL_PICK_LOCK, CLASS_THIEF, 2);
-  spell_level(SKILL_BACKSTAB, CLASS_THIEF, 3);
-  spell_level(SKILL_STEAL, CLASS_THIEF, 4);
-  spell_level(SKILL_HIDE, CLASS_THIEF, 5);
-  spell_level(SKILL_TRACK, CLASS_THIEF, 6);
+  spell_level_class(SKILL_SNEAK, CLASS_THIEF, 1);
+  spell_level_class(SKILL_PICK_LOCK, CLASS_THIEF, 2);
+  spell_level_class(SKILL_BACKSTAB, CLASS_THIEF, 3);
+  spell_level_class(SKILL_STEAL, CLASS_THIEF, 4);
+  spell_level_class(SKILL_HIDE, CLASS_THIEF, 5);
+  spell_level_class(SKILL_TRACK, CLASS_THIEF, 6);
 
   /* WARRIORS */
-  spell_level(SKILL_KICK, CLASS_WARRIOR, 1);
-  spell_level(SKILL_RESCUE, CLASS_WARRIOR, 3);
-  spell_level(SKILL_TRACK, CLASS_WARRIOR, 9);
-  spell_level(SKILL_BASH, CLASS_WARRIOR, 12);
-  spell_level(SKILL_WHIRLWIND, CLASS_WARRIOR, 12);
+  spell_level_class(SKILL_KICK, CLASS_WARRIOR, 1);
+  spell_level_class(SKILL_RESCUE, CLASS_WARRIOR, 3);
+  spell_level_class(SKILL_TRACK, CLASS_WARRIOR, 9);
+  spell_level_class(SKILL_BASH, CLASS_WARRIOR, 12);
+  spell_level_class(SKILL_WHIRLWIND, CLASS_WARRIOR, 12);
+
+  /* WARRIORS */
+  spell_level(SKILL_KICK, RACE_HUMANOID, 1);
+  spell_level(SKILL_RESCUE, RACE_HUMANOID, 3);
+  spell_level(SKILL_TRACK, RACE_HUMANOID, 9);
+  spell_level(SKILL_BASH, RACE_HUMANOID, 12);
+  spell_level(SKILL_WHIRLWIND, RACE_HUMANOID, 12);
 }
 
 /* This is the exp given to implementors -- it must always be greater than the
Binary files old/src/class.o and new/src/class.o differ
Binary files old/src/comm.o and new/src/comm.o differ
Binary files old/src/db.o and new/src/db.o differ
Binary files old/src/dg_handler.o and new/src/dg_handler.o differ
Binary files old/src/dg_misc.o and new/src/dg_misc.o differ
Binary files old/src/dg_mobcmd.o and new/src/dg_mobcmd.o differ
Binary files old/src/dg_scripts.o and new/src/dg_scripts.o differ
Binary files old/src/dg_triggers.o and new/src/dg_triggers.o differ
Binary files old/src/dg_variables.o and new/src/dg_variables.o differ
Binary files old/src/fight.o and new/src/fight.o differ
Binary files old/src/genmob.o and new/src/genmob.o differ
Binary files old/src/graph.o and new/src/graph.o differ
Binary files old/src/handler.o and new/src/handler.o differ
Binary files old/src/interpreter.o and new/src/interpreter.o differ
Binary files old/src/limits.o and new/src/limits.o differ
Binary files old/src/magic.o and new/src/magic.o differ
Binary files old/src/medit.o and new/src/medit.o differ
Binary files old/src/mobact.o and new/src/mobact.o differ
Binary files old/src/modify.o and new/src/modify.o differ
Binary files old/src/oasis_list.o and new/src/oasis_list.o differ
Binary files old/src/objsave.o and new/src/objsave.o differ
Binary files old/src/oedit.o and new/src/oedit.o differ
Binary files old/src/races.o and new/src/races.o differ
Binary files old/src/shop.o and new/src/shop.o differ
diff -uNr old/src/spec_procs.c new/src/spec_procs.c
--- old/src/spec_procs.c	2012-04-04 16:11:23.000000000 -0700
+++ new/src/spec_procs.c	2013-01-29 18:56:29.573294339 -0800
@@ -101,6 +101,7 @@
   const char *overflow = "\r\n**OVERFLOW**\r\n";
   int i, sortpos;
   size_t len = 0, nlen;
+  char buf[MAX_STRING_LENGTH];
   char buf2[MAX_STRING_LENGTH];
 
   len = snprintf(buf2, sizeof(buf2), "You have %d practice session%s remaining.\r\n"
@@ -115,6 +116,10 @@
         break;
       len += nlen;
     }
+    if (GET_LEVEL(ch) >= spell_info[i].min_level_race[(int) GET_RACE(ch)]) {
+      sprintf(buf, "%-20s %s\r\n", spell_info[i].name, how_good(GET_SKILL(ch, i)));
+      strcat(buf2, buf);	/* This shows the Race practices */
+    }
   }
   if (len >= sizeof(buf2))
     strcpy(buf2 + sizeof(buf2) - strlen(overflow) - 1, overflow); /* strcpy: OK */
@@ -142,8 +147,9 @@
 
   skill_num = find_skill_num(argument);
 
-  if (skill_num < 1 ||
-      GET_LEVEL(ch) < spell_info[skill_num].min_level[(int) GET_CLASS(ch)]) {
+   if (skill_num < 1 ||
+      (GET_LEVEL(ch) < spell_info[skill_num].min_level[(int) GET_CLASS(ch)] &&
+      GET_LEVEL(ch) < spell_info[skill_num].min_level_race[(int) GET_RACE(ch)])){
     send_to_char(ch, "You do not know of that %s.\r\n", SPLSKL(ch));
     return (TRUE);
   }
Binary files old/src/spec_procs.o and new/src/spec_procs.o differ
diff -uNr old/src/spell_parser.c new/src/spell_parser.c
--- old/src/spell_parser.c	2012-04-04 16:11:23.000000000 -0700
+++ new/src/spell_parser.c	2013-01-29 18:55:50.721294311 -0800
@@ -520,10 +520,11 @@
     send_to_char(ch, "Cast what?!?\r\n");
     return;
   }
-  if (GET_LEVEL(ch) < SINFO.min_level[(int) GET_CLASS(ch)]) {
-    send_to_char(ch, "You do not know that spell!\r\n");
+ if ((GET_LEVEL(ch) < SINFO.min_level[(int) GET_CLASS(ch)]) &&
+    (GET_LEVEL(ch) < SINFO.min_level_race[(int) GET_RACE(ch)])) {
+    send_to_char(ch, "You do not know that attack!\r\n");
     return;
-  }
+ }
   if (GET_SKILL(ch, spellnum) == 0) {
     send_to_char(ch, "You are unfamiliar with that spell.\r\n");
     return;
@@ -626,7 +627,35 @@
   }
 }
 
-void spell_level(int spell, int chclass, int level)
+void spell_level(int spell, int race, int level)
+{
+  int bad = 0;
+
+  if (spell < 0 || spell > TOP_SPELL_DEFINE) {
+    log("SYSERR: attempting assign to illegal spellnum %d/%d", spell, TOP_SPELL_DEFINE);
+    return;
+  }
+
+  if (race < 0 || race >= NUM_RACES)  {
+	  log("SYSERR: assigning '%s' to illegal race %d/%d.", skill_name(spell),
+		  race, NUM_RACES -1); /* If you have a good compiler, this should not happen*/
+	  bad = 1;
+  }
+
+
+  if (level < 1 || level > LVL_IMPL) {
+    log("SYSERR: assigning '%s' to illegal level %d/%d.", skill_name(spell),
+		level, LVL_IMPL);
+    bad = 1;
+  }
+
+  if (!bad)    /*   Right there \ is the new race stuff to */
+    spell_info[spell].min_level_race[race] = level;
+}
+
+/* This is the old class one, if you don't use races that much
+   switch the names */
+void spell_level_class(int spell, int chclass, int level)
 {
   int bad = 0;
 
@@ -635,7 +664,7 @@
     return;
   }
 
-  if (chclass < 0 || chclass >= NUM_CLASSES) {
+ if (chclass < 0 || chclass >= NUM_CLASSES) {
     log("SYSERR: assigning '%s' to illegal class %d/%d.", skill_name(spell),
 		chclass, NUM_CLASSES - 1);
     bad = 1;
@@ -647,7 +676,7 @@
     bad = 1;
   }
 
-  if (!bad)
+  if (!bad)    
     spell_info[spell].min_level[chclass] = level;
 }
 
@@ -658,6 +687,9 @@
 {
   int i;
 
+  for (i = 0; i < NUM_RACES; i++)
+    spell_info[spl].min_level_race[i] = LVL_IMMORT;
+
   for (i = 0; i < NUM_CLASSES; i++)
     spell_info[spl].min_level[i] = LVL_IMMORT;
   spell_info[spl].mana_max = max_mana;
@@ -675,6 +707,9 @@
 {
   int i;
 
+  for (i = 0; i < NUM_RACES; i++)
+    spell_info[spl].min_level_race[i] = LVL_IMPL + 1;
+
   for (i = 0; i < NUM_CLASSES; i++)
     spell_info[spl].min_level[i] = LVL_IMPL + 1;
   spell_info[spl].mana_max = 0;
Binary files old/src/spell_parser.o and new/src/spell_parser.o differ
diff -uNr old/src/spells.h new/src/spells.h
--- old/src/spells.h	2012-04-04 16:11:23.000000000 -0700
+++ new/src/spells.h	2013-01-29 18:43:21.693294378 -0800
@@ -184,6 +184,7 @@
    int mana_change;	/* Change in mana used by spell from lev to lev */
 
    int min_level[NUM_CLASSES];
+   int min_level_race[NUM_RACES];
    int routines;
    byte violent;
    int targets;         /* See below for use with TAR_XXX  */
@@ -265,7 +266,8 @@
   struct obj_data *tobj, int spellnum);
 
 /* other prototypes */
-void spell_level(int spell, int chclass, int level);
+void spell_level(int spell, int race, int level);
+void spell_level_class(int spell, int chclass, int level);
 void init_spell_levels(void);
 const char *skill_name(int num);
 
Binary files old/src/spells.o and new/src/spells.o differ
Binary files old/src/utils.o and new/src/utils.o differ