#include "conf.h"
#include "sysdep.h"
#include "structs.h"
#include "utils.h"
const char *race_abbrevs[] = {
"Hum",
"Elf",
"Gno",
"Dwa",
"\n"
};
const char *pc_race_types[] = {
"Human",
"Elf",
"Gnome",
"Dwarf",
"\n"
};
const char *race_names[] = {
"human",
"elf",
"gnome",
"dwarf",
"\n"
};
#define Y TRUE
#define N FALSE
/* Original Race/Gender Breakout */
int race_ok_gender[NUM_SEX][NUM_RACES] = {
/* H, E, G, D */
/* N */ { N, N, N, N },
/* M */ { Y, Y, Y, Y },
/* F */ { Y, Y, Y, Y }
};
const char *race_display[NUM_RACES] = {
"@B1@W) Human\r\n",
"@B2@W) @GElf\r\n",
"@B3@W) @MGnome\r\n",
"@B4@W) @BDwarf\r\n",
};
/*
* The code to interpret a race letter (used in interpreter.c when a
* new character is selecting a race).
*/
int parse_race(struct char_data *ch, int arg)
{
int race = RACE_UNDEFINED;
switch (arg) {
case 1: race = RACE_HUMAN ; break;
case 2: race = RACE_ELF ; break;
case 3: race = RACE_GNOME ; break;
case 4: race = RACE_DWARF ; break;
default: race = RACE_UNDEFINED ; break;
}
if (race >= 0 && race < NUM_RACES)
if (!race_ok_gender[(int)GET_SEX(ch)][race])
race = RACE_UNDEFINED;
return (race);
}
void racial_ability_modifiers(struct char_data *ch)
{
switch (GET_RACE(ch)) {
case RACE_HUMAN:
break;
case RACE_ELF:
ch->real_abils.dex += 1;
ch->real_abils.con -= 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.cha -= 1;
break;
default:
break;
}
}
void set_height_by_race(struct char_data *ch)
{
if (GET_SEX(ch) == SEX_MALE) {
if (IS_DWARF(ch))
GET_HEIGHT(ch) = 43 + dice(1, 10);
else if (IS_ELF(ch))
GET_HEIGHT(ch) = 55 + dice(1, 10);
else if (IS_GNOME(ch))
GET_HEIGHT(ch) = 38 + dice(1, 6);
else /* if (IS_HUMAN(ch)) */
GET_HEIGHT(ch) = 60 + dice(2, 10);
} else /* if (IS_FEMALE(ch)) */ {
if (IS_DWARF(ch))
GET_HEIGHT(ch) = 41 + dice(1, 10);
else if (IS_ELF(ch))
GET_HEIGHT(ch) = 50 + dice(1, 10);
else if (IS_GNOME(ch))
GET_HEIGHT(ch) = 36 + dice(1, 6);
else /* if (IS_HUMAN(ch)) */
GET_HEIGHT(ch) = 59 + dice(2, 10);
}
return;
}
void set_weight_by_race(struct char_data *ch)
{
if (GET_SEX(ch) == SEX_MALE) {
if (IS_DWARF(ch))
GET_WEIGHT(ch) = 130 + dice(4, 10);
else if (IS_ELF(ch))
GET_WEIGHT(ch) = 90 + dice(3, 10);
else if (IS_GNOME(ch))
GET_WEIGHT(ch) = 72 + dice(5, 4);
else /* if (IS_HUMAN(ch)) */
GET_WEIGHT(ch) = 140 + dice(6, 10);
} else /* if (IS_FEMALE(ch)) */ {
if (IS_DWARF(ch))
GET_WEIGHT(ch) = 105 + dice(4, 10);
else if (IS_ELF(ch))
GET_WEIGHT(ch) = 70 + dice(3, 10);
else if (IS_GNOME(ch))
GET_WEIGHT(ch) = 68 + dice(5, 4);
else /* if (IS_HUMAN(ch)) */
GET_WEIGHT(ch) = 100 + dice(6, 10);
}
return;
}
int invalid_race(struct char_data *ch, struct obj_data *obj)
{
if (GET_LEVEL(ch) >= LVL_IMMORT)
return FALSE;
if (OBJ_FLAGGED(obj, ITEM_ANTI_HUMAN) && IS_HUMAN(ch))
return (TRUE);
if (OBJ_FLAGGED(obj, ITEM_ANTI_ELF) && IS_ELF(ch))
return (TRUE);
if (OBJ_FLAGGED(obj, ITEM_ANTI_DWARF) && IS_DWARF(ch))
return (TRUE);
if (OBJ_FLAGGED(obj, ITEM_ANTI_GNOME) && IS_GNOME(ch))
return (TRUE);
return (FALSE);
}