Races [by Nashak]
Snippet Posted Wednesday, August 12th @ 11:34:42 PM, by George Greer in the Players dept.
Added Dec 3, 1996. Click the link below to read it or download it.

From: Brian Williams <bmw@efn.org>
Subject: Races

-=-=-=-=-=-=-=-=-=-
     structs.h
-=-=-=-=-=-=-=-=-=-

Search for:
#define CLASS_GIANT       5

Below it, add:
#define RACE_UNDEFINED   -1
#define RACE_HUMAN        0
#define RACE_ELF          1
#define RACE_GNOME        2
#define RACE_DWARF        3

#define NUM_RACES         4

Search for:
#define CON_DELCNF2      16             /* Delete confirmation 2        */

Below it, add:
#define CON_QRACE        17             /* Race?                        */

Search for:
struct char_player_data {
   char *name;         /* PC / NPC s name (kill ...  )         */
   char *short_descr;  /* for NPC 'actions'                    */
   char *long_descr;   /* for 'look'                           */
   char *description;  /* Extra descriptions                   */
   char *title;        /* PC / NPC's title                     */
   byte sex;           /* PC / NPC's sex                       */
   byte class;         /* PC / NPC's class                     */

Below it, add:
   byte race;          /* PC / NPC's race                      */

Search for:
struct char_file_u {
   /* char_player_data */
   char name[MAX_NAME_LENGTH+1];
   char description[EXDSCR_LENGTH];
   char title[MAX_TITLE_LENGTH+1];
   byte sex;
   byte class;

Below it, add:
   byte race;

-=-=-=-=-=-=-=-=-=-
      utils.h
-=-=-=-=-=-=-=-=-=-

Search for:
#define CLASS_ABBR(ch) (IS_NPC(ch) ? "--" : class_abbrevs[(int)GET_CLASS(ch)])

Below it, add:
#define RACE_ABBR(ch) (IS_NPC(ch) ? "--" : race_abbrevs[(int)GET_RACE(ch)])

Search for:
#define GET_CLASS(ch)   ((ch)->player.class)

Below it, add:
#define GET_RACE(ch)    ((ch)->player.race)

-=-=-=-=-=-=-=-=-=-
races.c(MAKE NEW FILE)
-=-=-=-=-=-=-=-=-=-
#include "sysdep.h"
#include "conf.h"

#include "structs.h"
#include "interpreter.h"
#include "utils.h"

const char *race_abbrevs[] = {
  "Hum",
  "Elf",
  "Gno",
  "Dwa",
  "\n"
};

const char *pc_race_types[] = {
  "Human",
  "Elf",
  "Gnome",
  "Dwarf",
  "\n"
};

/* The menu for choosing a race in interpreter.c: */
const char *race_menu =
"\r\n"
"Select a race:\r\n"
"  [H]uman\r\n"
"  [E]lf\r\n"
"  [G]nome\r\n"
"  [D]warf\r\n";

/*
 * The code to interpret a race letter (used in interpreter.c when a
 * new character is selecting a race).
 */
int parse_race(char arg)
{
  arg = LOWER(arg);

  switch (arg) {
  case 'h':
    return RACE_HUMAN;
    break;
  case 'e':
    return RACE_ELF;
    break;
  case 'g':
    return RACE_GNOME;
    break;
  case 'd':
    return RACE_DWARF;
    break;
  default:
    return RACE_UNDEFINED;
    break;
  }
}

long find_race_bitvector(char arg)
{
  arg = LOWER(arg);

  switch (arg) {
    case 'h':
      return (1 << 0);
      break;
    case 'e':
      return (1 << 1);
      break;
    case 'g':
      return (1 << 2);
      break;
    case 'd':
      return (1 << 3);
      break;
    default:
      return 0;
      break;
  }
}

-=-=-=-=-=-=-=-=-=-
     class.c
-=-=-=-=-=-=-=-=-=-

Search for:
  case CLASS_WARRIOR:
    ch->real_abils.str = table[0];
    ch->real_abils.dex = table[1];
    ch->real_abils.con = table[2];
    ch->real_abils.wis = table[3];
    ch->real_abils.intel = table[4];
    ch->real_abils.cha = table[5];
    if (ch->real_abils.str == 18)
      ch->real_abils.str_add = number(0, 100);
    break;
  }

Below it, add:
  switch (GET_RACE(ch)) {
    case RACE_HUMAN:
      break;
    case RACE_ELF:
      ch->real_abils.dex += 1;
      ch->real_abils.intel += 1;
      ch->real_abils.con -= 1;
      ch->real_abils.str -= 1;
      break;
    case RACE_GNOME:
      ch->real_abils.intel += 1;
      ch->real_abils.wis -= 1;
      break;
    case RACE_DWARF:
      ch->real_abils.con += 1;
      ch->real_abils.intel -= 1;
      ch->real_abils.cha -= 1;
      break;
    default:
      break;
   }

-=-=-=-=-=-=-=-=-=-
    constants.c
-=-=-=-=-=-=-=-=-=-
Search for:
  "Self-Delete 2",

Below it, add:
  "Select race",

-=-=-=-=-=-=-=-=-=-
       db.c
-=-=-=-=-=-=-=-=-=-

Search for:
  GET_CLASS(ch) = st->class;

Below it, add:
  GET_RACE(ch) = st->race;

Search for:
  st->class = GET_CLASS(ch);

Below it, add:
  st->race = GET_RACE(ch);

-=-=-=-=-=-=-=-=-=-
   interpreter.c
-=-=-=-=-=-=-=-=-=-

Search for:
  extern const char *class_menu;

Below it, add:
  extern const char *race_menu;

Search for:
  int parse_class(char arg);

Below it, add:
  int parse_race(char arg);

Search for:
  SEND_TO_Q(class_menu, d);
  SEND_TO_Q("Class: ", d);
  STATE(d) = CON_QCLASS;
  break;

Change it to:
  SEND_TO_Q(race_menu, d);
  SEND_TO_Q("Race: ", d);
  STATE(d) = CON_QRACE;
  break;

Below it, add:
  case CON_QRACE:
    load_result = parse_race(*arg);
    if (load_result == RACE_UNDEFINED) {
      SEND_TO_Q("\r\nThat's not a race.\r\nRace: ", d);
      return;
    } else
      GET_RACE(d->character) = load_result;

      SEND_TO_Q(class_menu, d);
      SEND_TO_Q("Class: ", d);
      STATE(d) = CON_QCLASS;
      break;

-=-=-=-=-=-=-=-=-=-
   act.wizard.c
-=-=-=-=-=-=-=-=-=-

Search for:
ACMD(do_set)
{
  int i, l;
  struct char_data *vict = NULL, *cbuf = NULL;
  struct char_file_u tmp_store;
  char field[MAX_INPUT_LENGTH], name[MAX_INPUT_LENGTH], val_arg[MAX_INPUT_LENGT
H]
  int on = 0, off = 0, value = 0;
  char is_file = 0, is_mob = 0, is_player = 0;
  int player_i = 0;
  int parse_class(char arg);

Below it, add:
  int parse_race(char arg);

Search for:
   { "cha",             LVL_GRGOD,      BOTH,   NUMBER },

Below it, add:
   { "race",            LVL_GRGOD,      PC,     MISC },

Search for:
  case 47:
    if (IS_NPC(vict) || GET_LEVEL(vict) >= LVL_GRGOD)
      RANGE(3, 25);
    else
      RANGE(3, 18);
    vict->real_abils.cha = value;
    affect_total(vict);
    break;

Below it, add:
  case 48:
    if ((i = parse_race(*val_arg)) == RACE_UNDEFINED) {
      send_to_char("That is not a race.\r\n", ch);
      return;
    }
    GET_RACE(vict) = i;
    break;

-=-=-=-=-=-=-=-=-=-
     Makefile
-=-=-=-=-=-=-=-=-=-

Search for:

objsave.o olc.o shop.o spec_assign.o spec_procs.o spell_parser.o \

Change it to:

objsave.o olc.o races.o shop.o spec_assign.o spec_procs.o \

spell_parser.o \

Search for:
random.o: random.c

$(CC) -c $(CFLAGS) random.c

Below it, add:
races.o: races.c sysdep.h conf.h structs.h interpreter.h utils.h

$(CC) -c $(CFLAGS) races.c

^^^^^^^^
***MAKE SURE THIS IS A <TAB> OR ELSE THE MAKEFILE WILL PRODUCE ERRORS!!!!!***


That's all you need. Simple, eh? Hope this helps... - Nashak


<< Quest Shops [by Frollo] | Reply | View as text | Flattened | Races vs. Classes [by Nashak] >>

 


Related Links
  Intel
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.