WinCircle-3.1/cnf/
WinCircle-3.1/lib/
WinCircle-3.1/lib/etc/
WinCircle-3.1/lib/house/
WinCircle-3.1/lib/misc/
WinCircle-3.1/lib/plralias/A-E/
WinCircle-3.1/lib/plralias/F-J/
WinCircle-3.1/lib/plralias/K-O/
WinCircle-3.1/lib/plralias/P-T/
WinCircle-3.1/lib/plralias/U-Z/
WinCircle-3.1/lib/plralias/ZZZ/
WinCircle-3.1/lib/plrobjs/
WinCircle-3.1/lib/plrobjs/A-E/
WinCircle-3.1/lib/plrobjs/F-J/
WinCircle-3.1/lib/plrobjs/K-O/
WinCircle-3.1/lib/plrobjs/P-T/
WinCircle-3.1/lib/plrobjs/U-Z/
WinCircle-3.1/lib/plrobjs/ZZZ/
WinCircle-3.1/lib/world/
WinCircle-3.1/lib/world/shp/
WinCircle-3.1/lib/world/trg/
WinCircle-3.1/log/
WinCircle-3.1/src/doc/
/* ************************************************************************
*   File: races.c                                  Extension of CircleMUD *
*  Usage: Source file for race-specific code                              *
* Author: Brian Williams <bmw@efn.org>                                    *
*                                                                         *
*  All rights reserved.  See license.doc for complete information.        *
*                                                                         *
*  Copyright (C) 1993, 94 by the Trustees of the Johns Hopkins University *
*  CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991.               *
************************************************************************ */

#include "conf.h"
#include "sysdep.h"


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

/* Local functions */
const char *race_abbrevs[];
const char *pc_race_types[];
const char *race_menu;
int parse_race(char arg);
bitvector_t find_race_bitvector(const char *arg);
int invalid_race(struct char_data *ch, struct obj_data *obj);

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


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


const char *race_menu =
"\r\n"
"Select a race:\r\n"
"  1) Human\r\n"
"  2) Elf\r\n"
"  3) Gnome\r\n"
"  4) Dwarf\r\n"
"  5) Hobbit\r\n";


int parse_race(char arg)
{
  switch (arg) {
    case '1': return RACE_HUMAN;
    case '2': return RACE_ELF;
    case '3': return RACE_GNOME;
    case '4': return RACE_DWARF;
    case '5': return RACE_HOBBIT;
    default : return RACE_UNDEFINED;
  }
}


bitvector_t find_race_bitvector(const char *arg)
{
  size_t rpos, ret = 0;

  for (rpos = 0; rpos < strlen(arg); rpos++)
    ret |= (1 << parse_race(arg[rpos]));

  return (ret);
}

int invalid_race(struct char_data *ch, struct obj_data *obj)
{
  if ((OBJ_FLAGGED(obj, ITEM_ANTI_HUMAN) && IS_HUMAN(ch)) ||
      (OBJ_FLAGGED(obj, ITEM_ANTI_ELF) && IS_ELF(ch)) ||
      (OBJ_FLAGGED(obj, ITEM_ANTI_GNOME) && IS_GNOME(ch)) ||
      (OBJ_FLAGGED(obj, ITEM_ANTI_DWARF) && IS_DWARF(ch)) ||
      (OBJ_FLAGGED(obj, ITEM_ANTI_HOBBIT) && IS_HOBBIT(ch)))
    return (1);
  else
    return (0);
}