#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); }