Re: Requesting help for multi-class code bpl21

From: Thomas Arp (
Date: 08/12/02

I decided to answer the first post. More below:

From: "Thomas Larcombe" <raucous@DIM.COM>
>    I am requesting some help with multi class code I am attempting
> to develop on my own. I have checked the archives and the ftp site
> and they are sadly lacking in multi class code for the later patch
> levels. I am using circlemud3.0 bpl21, major code additions are
> OasisOLC, 128 bit patch, DG_scripts. Other minor code additions that
> are pertinent (or may be) are additions of 5 classes and 24 races.

24 races.. I assume you let the race decide stats, then.
One problem gone :P

>    My problem is in one section only. I am using a GET_CLASS2, chclass2
> route towards the multiclassing.

I would have suggested a more generic approach of changing the GET_CLASS
to a bitvector of classes, combined with a level[NUM_CLASSES] array.
You would avoid the double checking[1] throughout the code, but it would
mean more changes to the rest of the code[2].

> I have differing xp tables for classes
> which I want to keep. I can get the values into GET_CLASS2 and all the
> other pertinent variables, however when I try to set the initial skills
> (and I would assume skills gained with levels later on) I cannot get
> the mud to accept the skills from the second class. I think that they
> are assigned via init_spell_levels in class.c and spell_level in
> spell_parser.c. If this is correct can anyone give me a bit of help in
> how I can get the skills from the second class to actually be given to
> the character?

As it is, init_spell_levels() only makes sure a certain class can use
a certain skill/spell from a certain level. In order to use it, you must
find the place where it check if you can use it;

mag_manacost(), list_skills(), SPECIAL(guild) all assume that
GET_CLASS(ch) is the class using the skill.
I suggest you look into at least these three places, and make sure they
check for the other class. Also, you must have a way of storing the
second classes level in the pfile.

> Concept only is fine and hopefully I can translate it into
> code. If my assumption there is wrong could someone please tell me exactly
> where the skills are assigned on character creation and on level gains?

Skills are assigned on creation in do_start - make sure to check for CLASS2
there, too.


      spell_level = GET_LEVEL(ch);
    else if (GET_CLASS2(ch) == CLASS_MAGIC_USER)
      spell_level = GET_LEVEL2(ch);, or

    switch GET_CLASS(ch) {
    switch GET_CLASS2(ch) {

[2] Do you realize how many arrays are indexed by GET_CLASS ?
    spell_info, guild_info and prac_params :P

   | FAQ: |
   | Archives: |
   | Newbie List:   |

This archive was generated by hypermail 2b30 : 06/25/03 PDT