the command 'powers' (do_racecommands in interp.c) has been changed 
slightly, as has the command table found in interp.c. This was made such 
that powers only show on the 'powers' command, if the character has 
learned that specific command. There are two ways to use this system, 
fx for cyberdemons the following can be found :

  /* the do_pentagram command */
  if (ch->pcdata->powers[CDEMON_SOULS] < 10)
  {
    send_to_char("You cannot use this power.\n\r", ch);
    return;
  }

to make sure the power is only shown on 'powers', we change the entry in 
the command table (in interp.c) to the following

  {
    "pentagram",      do_pentagram,      POS_STANDING,  3,  LOG_NORMAL,
    CLASS_CYBERDEMON, CDEMON_SOULS,      10,                CP_LEVEL     
  },

Notice that CDEMON_SOULS is set, and the number just after is set to 10. 
The important flag to set is CP_LEVEL, which means that this command is 
only shown if CDEMON_SOULS is at least 10.

Another command for cyberdemons is do_radarscan

  if (!IS_SET(ch->pcdata->powers[CDEMON_IMPLANTS], IMPLANT_RADARSCAN))
  {
    send_to_char("You cannot use this power.\n\r", ch);
    return;
  }

Here the entry in interp.c would look like this

  {
    "radarscan",      do_radarscan,      POS_STANDING,  3,  LOG_NORMAL,
    CLASS_CYBERDEMON, CDEMON_IMPLANTS,   4,                 CP_BIT       
  },

If you check cyberdemon.h, you will see that IMPLANT_RADARSCAN is assigned 
the value 4 (which is the same number that is right under POS_STANDING). 
The important flag this time is CP_BIT, which tells the interpreter, that 
this is a bitvector, and the command should only be shown if bit 4 (which 
was the radarscan implant) was set on CDEMON_IMPLANTS.

If you set the last three entries to 0, then the power will always be 
shown on 'powers' for that class.

It is also important to notice that all new classes should be added to the 
class_table found in db.c

/* the class table */
const struct class_type class_table[] =
{
  { "None",        0                },
  { "Shadow",      CLASS_SHADOW     },
  { "Cyberdemon",  CLASS_CYBERDEMON },

  /* NULL Terminator */
  { "", 0 }
};

This makes sure that a class can be picked when creating a new character.


NOTICE
======
To remove the two stock classes (cyberdemon and shadows), simply search 
the files for CLASS_REMOVE, and remove the appropriate bits of code found 
at these locations.

The two stock classes does not have help files, nor have they been 
balanced, this is left as a job for you.

regards

Brian Graversen