Player Descriptions, by Xrakisis
I wrote this for my Age of Heroes codebase, (dystopia 1.4)
this is what you see when you look at my char, Xrakisis.

Xrakisis has blue-green eyes, is broad with a protruding beer belly, 
He has albino skin, as white as snow and short white hair.

and my alt...

Drakkul has green eyes, is broad with a protruding beer belly, 
He has pale skin and a bald head

i think the number_range is telling me i drink too much beer,
and need to go on a diet.

// put this stuff in const.c

const struct pc_eyes pc_eye_table [] = 
{
	{"null"},
	{"hazel"},
	{"red"},
	{"blue"},
	{"green"},
	{"blue-green"},
	{"light green"},
	{"dark green"},
	{"light brown"},
        {"dark brown"},
	{"black as coal"}
};

const struct pc_looks pc_looks_table [] =
{
        {"null"},
        {"has albino skin, as white as snow"},
        {"has pale skin"},
        {"is slightly tanned"},
        {"has tanned skin, with battle scars"},
        {"has a dark complextion"}
};

const struct pc_build pc_build_table [] =
{
	{"null"},
	{"lean and lanky"},
	{"broad with a protruding beer belly"},
	{"stocky"},
	{"althleticly built"}
};

const struct pc_hair pc_hair_table [] =
{
	{"null"},
        {"a bald head"},
        {"short white hair"},
        {"long white hair"},
        {"short blond hair"},
        {"long blond hair"},
        {"short red hair"},
        {"long red hair"},
        {"short brown hair"},
        {"long brown hair"},
        {"short black hair"},
        {"long black hair"}
};




// somewhere where you want to have their desc generated..
// maybie selfclass, have this.
	if (ch->pcdata->pc_eyes == 0)
	ch->pcdata->pc_eyes = number_range(1,10);
        if (ch->pcdata->pc_looks == 0)
	ch->pcdata->pc_looks = number_range(1,4);
        if (ch->pcdata->pc_hair == 0)
	ch->pcdata->pc_hair = number_range(1,11);
        if (ch->pcdata->pc_build == 0)
	ch->pcdata->pc_build = number_range(1,4);



// in act_info.c, in do_look...

// below this..
  else
  {
    act("You see nothing special about $M.", ch, NULL, victim, TO_CHAR);
  }



// add this
  if (!IS_NPC(victim) && victim->pcRace != 0)
  {

        char const *eyes;
        char const *build;
        char const *looks;
        char const *hair;


	eyes = pc_eye_table[victim->pcdata->pc_eyes].pc_eyes;
        build = pc_build_table[victim->pcdata->pc_build].pc_build;
        looks = pc_looks_table[victim->pcdata->pc_looks].pc_looks;
        hair = pc_hair_table[victim->pcdata->pc_hair].pc_hair;

   sprintf(buf, "%s has %s eyes, is %s, \n\r", victim->name, eyes, build);
   send_to_char(buf, ch);
   if (victim->sex == SEX_FEMALE) send_to_char("She",ch);
   if (victim->sex == SEX_MALE) send_to_char("He",ch);
   sprintf(buf, " %s and %s. \n\r", looks, hair);
   send_to_char(buf, ch);

  }


// in save.c
fwrite_char
        fprintf(fp, "Pc_build %d\n", ch->pcdata->pc_build);
        fprintf(fp, "Pc_eyes %d\n", ch->pcdata->pc_eyes);
        fprintf(fp, "Pc_hair %d\n", ch->pcdata->pc_hair);
        fprintf(fp, "Pc_looks %d\n", ch->pcdata->pc_looks);


	ch->pcdata->pc_build = 0;
        ch->pcdata->pc_eyes = 0;
        ch->pcdata->pc_hair = 0;
        ch->pcdata->pc_looks = 0;


                        KEY("Pc_build", ch->pcdata->pc_build, fread_number( fp ) );
                        KEY("Pc_eyes", ch->pcdata->pc_eyes, fread_number( fp ) );
                        KEY("Pc_hair", ch->pcdata->pc_hair, fread_number( fp ) );
                        KEY("Pc_looks", ch->pcdata->pc_looks, fread_number( fp ) );


merc.h
in struct pc_data..

  int pc_eyes;
  int pc_hair;
  int pc_looks;
  int pc_build;



i put these under social_type..
struct pc_eyes
{
   char pc_eyes[40];
};

struct pc_looks
{
   char pc_looks[40];
};

struct pc_build
{
   char pc_build[40];
};

struct pc_hair
{
   char pc_hair[40];
};



then these..
extern const struct pc_eyes pc_eye_table [];
extern const struct pc_looks pc_looks_table [];
extern const struct pc_build pc_build_table [];
extern const struct pc_hair pc_hair_table [];

i put them over the tables for J.O.P.E