Multi Classing [by Garadon]
Snippet Posted Wednesday, August 12th @ 11:30:55 PM, by George Greer in the Players dept.
Added May 6, 1997. Click the link below to read it or download it.

From: Daniel Houghton <danielh@ren.cnu.edu>
Subject: Multiclassing: My approach

  Since I've already mentioned my experimental approach to multiclassing
based on skills which define a character's effective level in a given
class, I figured I may as well post a patchfile as a reference to anyone
who'd like to try such an approach.  Going with this approach will force
you to edit the code further at various points for things such as
guildguards, class checks, etc... but to me, it seems more elegant than
other approaches I've seen.

  Before you start, realize that this is a patch derived from my own
customized CircleMUD 3.0 beta 11, and as such WON'T work as a drop-in
patch.  DO NOT apply this to your MUD without backing things up first, and
as per the standard disclaimer, I'm in no way responsible or liable for
whatever may happen as a result of this patch.

  What this patch does NOT do is...

  A) Establish a system for advancing in multiple classes.  I had to test
     it by using the implementor "skillset" command on the skills
     corresponding to the classes.
  B) Allow skill dependency on multiple skills, which unfortunately you
     can't have a spell castable by both mages and clerics.  Since this
     code hasn't been developed fully, I haven't bothered - but it should
     be ridiculously easy to fix this.

  Quite simply, this is mailer code.  But it should demonstrate the
feasibility of using skills to effectively multiclass or dual-class.

  Have fun!







Daniel Houghton






      aka






    Garadon


------ Diff File ------
diff -bcN -C 3 --exclude=*.o --exclude=*.rej --exclude=*.orig --exclude=*~ tlo/
class.c tlo_multiclass/class.c
*** tlo/class.c
Sat Mar 29 20:16:42 1997
--- tlo_multiclass/class.c
Sat Mar 29 19:17:17 1997
***************
*** 453,552 ****



-
- /*
-  * SPELLS AND SKILLS.  This area defines which spells are assigned to
-  * which classes, and the minimum level the character must be to use
-  * the spell or skill.
-  */
- void init_spell_levels(void)
- {
-   /* MAGES */
-   spell_level(SPELL_MAGIC_MISSILE, CLASS_MAGIC_USER, 1);
-   spell_level(SPELL_CREATE_LIGHT, 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_FAERIE_FIRE, CLASS_MAGIC_USER, 7);
-   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_LEVITATE, CLASS_MAGIC_USER, 10);
-   spell_level(SPELL_COLOR_SPRAY, CLASS_MAGIC_USER, 11);
-   spell_level(SPELL_ENERGY_DRAIN, CLASS_MAGIC_USER, 12);
-   spell_level(SPELL_CURSE, CLASS_MAGIC_USER, 13);
-   spell_level(SPELL_FIREBALL, CLASS_MAGIC_USER, 14);
-   spell_level(SPELL_STONESKIN, CLASS_MAGIC_USER, 15);
-   spell_level(SPELL_CHARM, CLASS_MAGIC_USER, 16);
-   spell_level(SPELL_HASTE, CLASS_MAGIC_USER, 17);
-   spell_level(SPELL_ICE_STORM, CLASS_MAGIC_USER, 19);
-   spell_level(SPELL_FIRE_SHIELD, CLASS_MAGIC_USER, 22);
-   spell_level(SPELL_INFERNO, CLASS_MAGIC_USER, 24);
-   spell_level(SPELL_ENCHANT_WEAPON, CLASS_MAGIC_USER, 26);
-
-
-   /* CLERICS */
-   spell_level(SPELL_CURE_LIGHT, CLASS_CLERIC, 1);
-   spell_level(SPELL_REFRESH, 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_CAUSE_LIGHT, CLASS_CLERIC, 3);
-   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_CREATE_LIGHT, 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_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_CAUSE_CRITIC, 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_HARM, CLASS_CLERIC, 19);
-   spell_level(SPELL_GROUP_HEAL, CLASS_CLERIC, 22);
-   spell_level(SPELL_REMOVE_CURSE, CLASS_CLERIC, 24);
-   spell_level(SPELL_BLADE_BARRIER, CLASS_CLERIC, 26);
-   spell_level(SPELL_HOLY_WORD, CLASS_CLERIC, 28);
-
-
-   /* 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);
-
-
-   /* 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_SECOND_ATTACK, CLASS_WARRIOR, 15);
- }
-
-
  /* Names of class/levels and exp required for each level

  const struct title_type titles[NUM_CLASSES][LVL_IMPL + 1] = {
--- 453,458 ----
diff -bcN -C 3 --exclude=*.o --exclude=*.rej --exclude=*.orig --exclude=*~ tlo/
spec_procs.c tlo_multiclass/spec_procs.c
*** tlo/spec_procs.c
Sat Mar 29 20:16:42 1997
--- tlo_multiclass/spec_procs.c
Sat Mar 29 19:14:53 1997
***************
*** 168,174 ****
        strcat(buf2, "**OVERFLOW**\r\n");
        break;
      }
!     if (GET_LEVEL(ch) >= spell_info[i].min_level[(int) GET_CLASS(ch)]) {

        sprintf(buf, "%-20s %-15s%s", spells[i], how_good(GET_SKILL(ch, i)),
               (!(++practwocolumn % 2) ? "\r\n" : "\t"));
--- 168,175 ----
        strcat(buf2, "**OVERFLOW**\r\n");
        break;
      }
! /*    if (GET_LEVEL(ch) >= spell_info[i].min_level[(int) GET_CLASS(ch)]) { */
!     if (GET_SKILL(ch, spell_info[i].base_skill) >= spell_info[i].min_level) {

        sprintf(buf, "%-20s %-15s%s", spells[i], how_good(GET_SKILL(ch, i)),
               (!(++practwocolumn % 2) ? "\r\n" : "\t"));
***************
*** 209,216 ****

    skill_num = find_skill_num(argument);

!   if (skill_num < 1 ||
!       GET_LEVEL(ch) < spell_info[skill_num].min_level[(int) GET_CLASS(ch)]) {
      sprintf(buf, "You do not know of that %s.\r\n", SPLSKL(ch));
      send_to_char(buf, ch);
      return 1;
--- 210,219 ----

    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_SKILL(ch, spell_info[skill_num].base_skill) < spell_info[skill_nu
m].min_level)) {
      sprintf(buf, "You do not know of that %s.\r\n", SPLSKL(ch));
      send_to_char(buf, ch);
      return 1;
diff -bcN -C 3 --exclude=*.o --exclude=*.rej --exclude=*.orig --exclude=*~ tlo/
spell_parser.c tlo_multiclass/spell_parser.c
*** tlo/spell_parser.c
Sat Mar 29 20:16:42 1997
--- tlo_multiclass/spell_parser.c
Sat Mar 29 19:53:20 1997
***************
*** 207,213 ****
    "!UNUSED466!", "!UNUSED467!", "!UNUSED468!", "!UNUSED469!", "!UNUSED470!",
/* 470 */
    "!UNUSED471!", "!UNUSED472!", "!UNUSED473!", "!UNUSED474!", "!UNUSED475!",
/* 475 */
    "!UNUSED476!", "!UNUSED477!", "!UNUSED478!", "!UNUSED479!", "!UNUSED480!",
/* 480 */
!   "!UNUSED481!", "!UNUSED482!", "!UNUSED483!", "!UNUSED484!", "!UNUSED485!",
/* 485 */
    "!UNUSED486!", "!UNUSED487!", "!UNUSED488!", "!UNUSED489!", "!UNUSED490!",
/* 490 */
    "!UNUSED491!", "!UNUSED492!", "!UNUSED493!", "!UNUSED494!", "!UNUSED495!",
/* 495 */
    "!UNUSED496!", "!UNUSED497!", "!UNUSED498!", "!UNUSED499!", "!UNUSED500!",
/* 500 */
--- 207,221 ----
    "!UNUSED466!", "!UNUSED467!", "!UNUSED468!", "!UNUSED469!", "!UNUSED470!",
/* 470 */
    "!UNUSED471!", "!UNUSED472!", "!UNUSED473!", "!UNUSED474!", "!UNUSED475!",
/* 475 */
    "!UNUSED476!", "!UNUSED477!", "!UNUSED478!", "!UNUSED479!", "!UNUSED480!",
/* 480 */
!
!   /* CLASS TYPES */
!
!   "Magic Theory",
!   "Priestly Ordination",
!   "Thiefcraft",
!   "Way of the Warrior",
!
!   "!UNUSED485!", /* 485 */
    "!UNUSED486!", "!UNUSED487!", "!UNUSED488!", "!UNUSED489!", "!UNUSED490!",
/* 490 */
    "!UNUSED491!", "!UNUSED492!", "!UNUSED493!", "!UNUSED494!", "!UNUSED495!",
/* 495 */
    "!UNUSED496!", "!UNUSED497!", "!UNUSED498!", "!UNUSED499!", "!UNUSED500!",
/* 500 */
***************
*** 319,326 ****
  {
    int mana;

!   mana = MAX(SINFO.mana_max - (SINFO.mana_change *


    (GET_LEVEL(ch) - SINFO.min_level[(int) GET_CLASS(ch)])),

     SINFO.mana_min);

    return mana;
--- 327,337 ----
  {
    int mana;

! /*  mana = MAX(SINFO.mana_max - (SINFO.mana_change *


    (GET_LEVEL(ch) - SINFO.min_level[(int) GET_CLASS(ch)])),
+
     SINFO.mana_min); */
+   mana = MAX(SINFO.mana_max - (SINFO.mana_change *
+          (GET_SKILL(ch, SINFO.base_skill) - SINFO.min_level)),

     SINFO.mana_min);

    return mana;
***************
*** 777,783 ****
      return;
    }
    if (!npc_casting) {
!     if (GET_LEVEL(ch) < SINFO.min_level[(int) GET_CLASS(ch)]) {
        send_to_char("You do not know that spell!\r\n", ch);
        return;
      }
--- 788,794 ----
      return;
    }
    if (!npc_casting) {
!     if (GET_SKILL(ch, SINFO.base_skill) < SINFO.min_level) {
        send_to_char("You do not know that spell!\r\n", ch);
        return;
      }
***************
*** 901,907 ****
      return;
    }

!   if (class < 0 || class >= NUM_CLASSES) {
      sprintf(buf, "SYSERR: assigning '%s' to illegal class %d",

    skill_name(spell), class);
      log(buf);
--- 912,918 ----
      return;
    }

!   if (class < SKILL_MAGE || class >= (SKILL_MAGE + NUM_CLASSES)) {
      sprintf(buf, "SYSERR: assigning '%s' to illegal class %d",

    skill_name(spell), class);
      log(buf);
***************
*** 915,922 ****
      bad = 1;
    }

!   if (!bad)
!     spell_info[spell].min_level[class] = level;
  }


--- 926,935 ----
      bad = 1;
    }

!   if (!bad) {
!     spell_info[spell].min_level = level;
!     spell_info[spell].base_skill = class;
!   }
  }


***************
*** 927,933 ****
    int i;

    for (i = 0; i < NUM_CLASSES; i++)
!     spell_info[spl].min_level[i] = LVL_IMMORT;
    spell_info[spl].mana_max = max_mana;
    spell_info[spl].mana_min = min_mana;
    spell_info[spl].mana_change = mana_change;
--- 940,946 ----
    int i;

    for (i = 0; i < NUM_CLASSES; i++)
!     spell_info[spl].min_level = LVL_IMMORT;
    spell_info[spl].mana_max = max_mana;
    spell_info[spl].mana_min = min_mana;
    spell_info[spl].mana_change = mana_change;
***************
*** 943,949 ****
    int i;

    for (i = 0; i < NUM_CLASSES; i++)
!     spell_info[spl].min_level[i] = LVL_IMPL + 1;
    spell_info[spl].mana_max = 0;
    spell_info[spl].mana_min = 0;
    spell_info[spl].mana_change = 0;
--- 956,962 ----
    int i;

    for (i = 0; i < NUM_CLASSES; i++)
!     spell_info[spl].min_level = LVL_IMPL + 1;
    spell_info[spl].mana_max = 0;
    spell_info[spl].mana_min = 0;
    spell_info[spl].mana_change = 0;
***************
*** 1205,1214 ****
    skillo(SKILL_SNEAK);
    skillo(SKILL_STEAL);
    skillo(SKILL_TRACK);
  #ifdef RANGED_WEAPONS
    skillo(SKILL_SHOOT);
    skillo(SKILL_THROW);
  #endif
-   skillo(SKILL_SECOND_ATTACK);
  }

--- 1218,1322 ----
    skillo(SKILL_SNEAK);
    skillo(SKILL_STEAL);
    skillo(SKILL_TRACK);
+   skillo(SKILL_SECOND_ATTACK);
+   skillo(SKILL_THIRD_ATTACK);
  #ifdef RANGED_WEAPONS
    skillo(SKILL_SHOOT);
    skillo(SKILL_THROW);
  #endif
  }
+
+
+ /*
+  * SPELLS AND SKILLS.  This area defines which spells are assigned to
+  * which classes, and the minimum level the character must be to use
+  * the spell or skill.
+  */
+ void init_spell_levels(void)
+ {
+   /* MAGES */
+   spell_level(SPELL_MAGIC_MISSILE, SKILL_MAGE, 1);
+   spell_level(SPELL_CREATE_LIGHT, SKILL_MAGE, 1);
+   spell_level(SPELL_DETECT_INVIS, SKILL_MAGE, 2);
+   spell_level(SPELL_DETECT_MAGIC, SKILL_MAGE, 2);
+   spell_level(SPELL_CHILL_TOUCH, SKILL_MAGE, 3);
+   spell_level(SPELL_INFRAVISION, SKILL_MAGE, 3);
+   spell_level(SPELL_INVISIBLE, SKILL_MAGE, 4);
+   spell_level(SPELL_ARMOR, SKILL_MAGE, 4);
+   spell_level(SPELL_BURNING_HANDS, SKILL_MAGE, 5);
+   spell_level(SPELL_LOCATE_OBJECT, SKILL_MAGE, 6);
+   spell_level(SPELL_STRENGTH, SKILL_MAGE, 6);
+   spell_level(SPELL_FAERIE_FIRE, SKILL_MAGE, 7);
+   spell_level(SPELL_SHOCKING_GRASP, SKILL_MAGE, 7);
+   spell_level(SPELL_SLEEP, SKILL_MAGE, 8);
+   spell_level(SPELL_LIGHTNING_BOLT, SKILL_MAGE, 9);
+   spell_level(SPELL_BLINDNESS, SKILL_MAGE, 9);
+   spell_level(SPELL_DETECT_POISON, SKILL_MAGE, 10);
+   spell_level(SPELL_LEVITATE, SKILL_MAGE, 10);
+   spell_level(SPELL_COLOR_SPRAY, SKILL_MAGE, 11);
+   spell_level(SPELL_ENERGY_DRAIN, SKILL_MAGE, 12);
+   spell_level(SPELL_CURSE, SKILL_MAGE, 13);
+   spell_level(SPELL_FIREBALL, SKILL_MAGE, 14);
+   spell_level(SPELL_STONESKIN, SKILL_MAGE, 15);
+   spell_level(SPELL_CHARM, SKILL_MAGE, 16);
+   spell_level(SPELL_HASTE, SKILL_MAGE, 17);
+   spell_level(SPELL_ICE_STORM, SKILL_MAGE, 19);
+   spell_level(SPELL_FIRE_SHIELD, SKILL_MAGE, 22);
+   spell_level(SPELL_INFERNO, SKILL_MAGE, 24);
+   spell_level(SPELL_ENCHANT_WEAPON, SKILL_MAGE, 26);
+
+
+   /* CLERICS */
+   spell_level(SPELL_CURE_LIGHT, SKILL_CLERIC, 1);
+   spell_level(SPELL_REFRESH, SKILL_CLERIC, 1);
+   spell_level(SPELL_ARMOR, SKILL_CLERIC, 1);
+   spell_level(SPELL_CREATE_FOOD, SKILL_CLERIC, 2);
+   spell_level(SPELL_CREATE_WATER, SKILL_CLERIC, 2);
+   spell_level(SPELL_CAUSE_LIGHT, SKILL_CLERIC, 3);
+   spell_level(SPELL_DETECT_POISON, SKILL_CLERIC, 3);
+   spell_level(SPELL_DETECT_ALIGN, SKILL_CLERIC, 4);
+   spell_level(SPELL_CURE_BLIND, SKILL_CLERIC, 4);
+   spell_level(SPELL_CREATE_LIGHT, SKILL_CLERIC, 4);
+   spell_level(SPELL_BLESS, SKILL_CLERIC, 5);
+   spell_level(SPELL_DETECT_INVIS, SKILL_CLERIC, 6);
+   spell_level(SPELL_BLINDNESS, SKILL_CLERIC, 6);
+   spell_level(SPELL_INFRAVISION, SKILL_CLERIC, 7);
+   spell_level(SPELL_PROT_FROM_EVIL, SKILL_CLERIC, 8);
+   spell_level(SPELL_GROUP_ARMOR, SKILL_CLERIC, 9);
+   spell_level(SPELL_CURE_CRITIC, SKILL_CLERIC, 9);
+   spell_level(SPELL_SUMMON, SKILL_CLERIC, 10);
+   spell_level(SPELL_REMOVE_POISON, SKILL_CLERIC, 10);
+   spell_level(SPELL_CAUSE_CRITIC, SKILL_CLERIC, 11);
+   spell_level(SPELL_WORD_OF_RECALL, SKILL_CLERIC, 12);
+   spell_level(SPELL_EARTHQUAKE, SKILL_CLERIC, 12);
+   spell_level(SPELL_DISPEL_EVIL, SKILL_CLERIC, 14);
+   spell_level(SPELL_DISPEL_GOOD, SKILL_CLERIC, 14);
+   spell_level(SPELL_SANCTUARY, SKILL_CLERIC, 15);
+   spell_level(SPELL_CALL_LIGHTNING, SKILL_CLERIC, 15);
+   spell_level(SPELL_HEAL, SKILL_CLERIC, 16);
+   spell_level(SPELL_CONTROL_WEATHER, SKILL_CLERIC, 17);
+   spell_level(SPELL_HARM, SKILL_CLERIC, 19);
+   spell_level(SPELL_GROUP_HEAL, SKILL_CLERIC, 22);
+   spell_level(SPELL_REMOVE_CURSE, SKILL_CLERIC, 24);
+   spell_level(SPELL_BLADE_BARRIER, SKILL_CLERIC, 26);
+   spell_level(SPELL_HOLY_WORD, SKILL_CLERIC, 28);
+
+
+   /* THIEVES */
+   spell_level(SKILL_SNEAK, SKILL_THIEF, 1);
+   spell_level(SKILL_PICK_LOCK, SKILL_THIEF, 2);
+   spell_level(SKILL_BACKSTAB, SKILL_THIEF, 3);
+   spell_level(SKILL_STEAL, SKILL_THIEF, 4);
+   spell_level(SKILL_HIDE, SKILL_THIEF, 5);
+   spell_level(SKILL_TRACK, SKILL_THIEF, 6);
+
+
+   /* WARRIORS */
+   spell_level(SKILL_KICK, SKILL_WARRIOR, 1);
+   spell_level(SKILL_RESCUE, SKILL_WARRIOR, 3);
+   spell_level(SKILL_TRACK, SKILL_WARRIOR, 9);
+   spell_level(SKILL_BASH, SKILL_WARRIOR, 12);
+   spell_level(SKILL_SECOND_ATTACK, SKILL_WARRIOR, 15);
+ }
+

diff -bcN -C 3 --exclude=*.o --exclude=*.rej --exclude=*.orig --exclude=*~ tlo/
spells.h tlo_multiclass/spells.h
*** tlo/spells.h
Sat Mar 29 20:16:43 1997
--- tlo_multiclass/spells.h
Sat Mar 29 20:10:13 1997
***************
*** 8,13 ****
--- 8,16 ----
  *  CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991.               *
  ************************************************************************ */

+ #define NUM_DISCIPLINES

4
+ #define BASE_DISCIPLINE

481
+
  #define DEFAULT_STAFF_LVL
12
  #define DEFAULT_WAND_LVL
12

***************
*** 123,132 ****
  #endif

  /* Daniel Houghton's replacements for classes */
! #define SKILL_MAGE                   480
! #define SKILL_CLERIC                 481
! #define SKILL_THIEF                  482
! #define SKILL_WARRIOR                483


  /* WEAPON ATTACK TYPES */
--- 126,135 ----
  #endif

  /* Daniel Houghton's replacements for classes */
! #define SKILL_MAGE                   481
! #define SKILL_CLERIC                 482
! #define SKILL_THIEF                  483
! #define SKILL_WARRIOR                484


  /* WEAPON ATTACK TYPES */
***************
*** 200,207 ****
     int mana_min;
/* Min amount of mana used by a spell (highest lev) */
     int mana_max;
/* Max amount of mana used by a spell (lowest lev) */
     int mana_change;
/* Change in mana used by spell from lev to lev */
!
!    int min_level[NUM_CLASSES];
     int routines;
     byte violent;
     int targets;         /* See below for use with TAR_XXX  */
--- 203,211 ----
     int mana_min;
/* Min amount of mana used by a spell (highest lev) */
     int mana_max;
/* Max amount of mana used by a spell (lowest lev) */
     int mana_change;
/* Change in mana used by spell from lev to lev */
!    int base_skill;
!    int min_level;
! /*   int min_level[NUM_CLASSES]; */
     int routines;
     byte violent;
     int targets;         /* See below for use with TAR_XXX  */
Common subdirectories: tlo/util and tlo_multiclass/util


<< More Mazes [by Doppleganger Software] | Reply | View as text | Threaded | Multi Classing/Multi Leveling [by Demond LaZaro] >>

 


Related Links
  CircleMUD
download
Related Articles
More by greerga
 
 

CircleMUD Snippets
 
Note: Not all of these snippets will work perfectly with your version of code, so be prepared to fix one or two bugs that may arise, and please let me know what you needed to do to fix it. Sending a corrected version is always welcome.
Finally, if you wish to use any of the snippets from this page, you are more than welcome, just mention the authors in your credits. If you wish to release any of these snippets to the public on another site, contact me FIRST.