/* merc.h */

add in the con statements...


CON_GET_HAIR
CON_GET_WEIGHT
CON_GET_HEIGHT
CON_GET_EYE

/* Under attack_type add */

/* Coded by Shinji - mudnet.net 7000 */

struct weight_type
{
char * name;
long flag;
int level;
};

struct hair_type
{
char * name;
long flag;
int level;
}

struct eye_type
{
char * name;
long flag;
int level;
}

struct height_type
{
char * name;
long flag;
int level;
}

/* In struct pc_data add */

/* Coded by Shinji - mudnet.net 7000 */

int weight;
int height;
int hair;
int eye;

/* Underneath group_table add */

extern const struct eye_type eye_table []; /* Coded by Shinji - mudnet.net
7000 */
extern const struct hair_type hair_table []; /* Coded by Shinji - mudnet.net
7000 */
extern const struct height_type height_table []; /* Coded by Shinji -
mudnet.net 7000 */
extern const struct weight_type weight_table []; /* Coded by Shinji -
mudnet.net 7000 */

/* Under the PLR_ flags add */

/* Coded by Shinji - mudnet.net - 7000 */

#define WEIGHT_SLENDER (A)
#define WEIGHT_SLIM (B)
#define WEIGHT_AVERAGE (C)
#define WEIGHT_STOCKY (D)
#define WEIGHT_HEAVY (E)
#define EYE_BLUE (A)
#define EYE_GREEN (B)
#define EYE_BROWN (C)
#define HEIGHT_SHORT (A)
#define HEIGHT_MIDGET (B)
#define HEIGHT_AVERAGE (C)
#define HEIGHT_TALL (D)
#define HEIGHT_GIANT (E)
#define HAIR_BLOND (A)
#define HAIR_RED (B)
#define HAIR_BLACK (C)

/* Const.c, underneath the weapon tables add */

/* Coded by Shinji - mudnet.net 7000 */

const struct weight_type weight_table [] =
{
{ "slender", WEIGHT_SLENDER, 1 },
{ "slim", WEIGHT_SLIM, 1 },
{ "average", WEIGHT_AVERAGE, 1 },
{ "stocky", WEIGHT_STOCKY, 1 },
{ "heavy", WEIGHT_HEAVEY, 1 },
{ NULL, 0, 0 }
};

const struct eye_type eye_table [] =
{
{ "blue", EYE_BLUE, 1 },
{ "green", EYE_GREEN, 1 },
{ "brown", EYE_BROWN, 1 },
{ NULL, 0, 0 }
};

const struct height_type height_table [] =
{
{ "short", HEIGHT_SHORT, 1 },
{ "midget", HEIGHT_MIDGET, 1 },
{ "average",HEIGHT_AVERAGE, 1 },
{ "tall", HEIGHT_TALL, 1 },
{ "giant", HEIGHT_GIANT, 1 },
{ NULL, 0, 0 }
};

const struct hair_type hair_table [] =
{
{ "blond", HAIR_BLOND, 1 },
{ "red", HAIR_RED, 1 },
{ "black",HAIR_BLACK, 1 },
{ NULL, 0, 0 }
};

/* save.c */

/* in void fwrite_char */

/* Coded by Shinji - mudnet.net 7000 */

if (ch->pcdata->height)
fprintf( fp, "Height %s\n", print_flags(ch->pcdata->height));

if (ch->pcdata->weight)
fprintf( fp, "Weight %s\n", print_flags(ch->pcdata->weight));

if (ch->pcdata->eye)
fprintf( fp, "Eye %s \n", print_flags(ch->pcdata->eye));

if (ch->pcdata->hair)
fprintf( fp, "Hair %s\n", print_flags(ch->pcdata->hair));



/* in void fread_char */

/* In the designated cases */

KEY( "Height", ch->pcdata->height, fread_flag( fp ) );
KEY( "Weight", ch->pcdata->weight, fread_flag( fp ) );
KEY( "Eye", ch->pcdata->eye, fread_flag( fp ) );
KEY( "Hair", ch->pcdata->hair, fread_flag( fp ) );

/* Now the lengthy Part! */

/* comm.c */

in void nanny add:

bool hairChoice, eyeChoice, heightChoice, sizeChoice


after these lines...

        group_add(ch,"rom basics",FALSE);
        group_add(ch,class_table[ch->class].base_group,FALSE);
        ch->pcdata->learned[gsn_recall] = 50;


add:

        write_to_buffer( d, echo_on_str, 0 );
        write_to_buffer(d,"Which more suits your hair color for your character?\n\rBlonde, Red, Black? [B/R/L]: ",0);
        d->connected = CON_GET_HAIR;
        break;

    case CON_GET_HAIR:
#if defined(unix)
        write_to_buffer( d, "\n\r", 2 );
#endif
        switch ( *argument )
          {
          case 'b': case 'B':
            SET_BIT( ch->pcdata->hair, HAIR_BLOND );
            REMOVE_BIT(ch->pcdata->hair, HAIR_RED);
            REMOVE_BIT(ch->pcdata->hair, HAIR_BLACK);
            hairChoice = TRUE;
            break;
          case 'r': case 'R':
            SET_BIT( ch->pcdata->hair, HAIR_RED );
            REMOVE_BIT(ch->pcdata->hair, HAIR_BLACK);
            REMOVE_BIT(ch->pcdata->hair, HAIR_BLOND);
            hairChoice = TRUE;
            break;
          case 'l': case 'L':
            SET_BIT(ch->pcdata->hair,HAIR_BLACK);
            REMOVE_BIT(ch->pcdata->hair, HAIR_RED);
            REMOVE_BIT(ch->pcdata->hair, HAIR_BLOND);
            hairChoice = TRUE;
          default:
            write_to_buffer( d, "Please type either B/R/L? ", 0 );
            hairChoice = FALSE;
            break;
          }
        if(!hairChoice)
          break;

        write_to_buffer(d,echo_on_str, 0);
        write_to_buffer(d,"Which eye color do you prefer for your character?\n\rBlue, Green, Brown? [B/G/R]: ",0);
        d->connected = CON_GET_EYE;
        break;

    case CON_GET_EYE:
#if defined(unix)
        write_to_buffer( d, "\n\r", 2 );
#endif
        switch ( *argument )
          {
          case 'b': case 'B':
            SET_BIT( ch->pcdata->eye, EYE_BLUE );
            REMOVE_BIT(ch->pcdata->eye, EYE_GREEN);
            REMOVE_BIT(ch->pcdata->eye, EYE_BROWN);
            eyeChoice = TRUE;
            break;
          case 'g': case 'G':
            SET_BIT( ch->pcdata->eye, EYE_GREEN );
            REMOVE_BIT(ch->pcdata->eye, EYE_BLUE);
            REMOVE_BIT(ch->pcdata->eye, EYE_BROWN);
            eyeChoice = TRUE;
            break;
          case 'r': case 'R':
            SET_BIT(ch->pcdata->eye,EYE_BROWN);
            REMOVE_BIT(ch->pcdata->eye, EYE_BLUE);
            REMOVE_BIT(ch->pcdata->eye, EYE_GREEN);
            eyeChoice = TRUE;
          default:
            write_to_buffer( d, "Please type either B/G/R? ", 0 );
            eyeChoice = FALSE;
            break;
          }
        if(!eyeChoice)
          break;


        write_to_buffer(d,echo_on_str, 0);
        write_to_buffer(d,"Which height would best describe your character?\n\rShort, Midget, Average, Tall, Giant?
[S/M/A/T/G]: ",0);
        d->connected = CON_GET_HEIGHT;
        break;

    case CON_GET_HEIGHT:
#if defined(unix)
        write_to_buffer( d, "\n\r", 2 );
#endif
        switch ( *argument )
          {
          case 's': case 'S':
            SET_BIT( ch->pcdata->height, HEIGHT_SHORT );
            REMOVE_BIT(ch->pcdata->height, HEIGHT_MIDGET);
            REMOVE_BIT(ch->pcdata->height, HEIGHT_AVERAGE);
            REMOVE_BIT(ch->pcdata->height, HEIGHT_TALL);
            REMOVE_BIT(ch->pcdata->height, HEIGHT_GIANT);
            heightChoice = TRUE;
            break;
          case 'm': case 'M':
            SET_BIT( ch->pcdata->height, HEIGHT_MIDGET );
            REMOVE_BIT(ch->pcdata->height, HEIGHT_SHORT );
            REMOVE_BIT(ch->pcdata->height, HEIGHT_AVERAGE);
            REMOVE_BIT(ch->pcdata->height, HEIGHT_TALL);
            REMOVE_BIT(ch->pcdata->height, HEIGHT_GIANT);
            heightChoice = TRUE;
            break;
          case 'a': case 'A':
            SET_BIT(ch->pcdata->height,HEIGHT_AVERAGE);
            REMOVE_BIT(ch->pcdata->height, HEIGHT_SHORT );
            REMOVE_BIT(ch->pcdata->height, HEIGHT_MIDGET);
            REMOVE_BIT(ch->pcdata->height, HEIGHT_TALL);
            REMOVE_BIT(ch->pcdata->height, HEIGHT_GIANT);
            heightChoice = TRUE;
            break;
          case 't': case 'T':
            SET_BIT(ch->pcdata->height,HEIGHT_TALL);
            REMOVE_BIT(ch->pcdata->height, HEIGHT_SHORT );
            REMOVE_BIT(ch->pcdata->height, HEIGHT_MIDGET);
            REMOVE_BIT(ch->pcdata->height, HEIGHT_AVERAGE);
            REMOVE_BIT(ch->pcdata->height, HEIGHT_GIANT);
            heightChoice = TRUE;
            break;
          case 'g': case 'G'
            SET_BIT(ch->pcdata->height,HEIGHT_GIANT);
            REMOVE_BIT(ch->pcdata->height, HEIGHT_SHORT );
            REMOVE_BIT(ch->pcdata->height, HEIGHT_MIDGET);
            REMOVE_BIT(ch->pcdata->height, HEIGHT_TALL);
            REMOVE_BIT(ch->pcdata->height, HEIGHT_AVERAGE);
            heightChoice;
            break;
          default:
            write_to_buffer( d, "Please type either S/M/A/T/G? ", 0 );
            heightChoice = FALSE;
            break;
          }
        if(!heightChoice)
          break;