diff -C 2 src/defines.h src2/defines.h
*** src/defines.h	Wed Dec 15 20:05:07 1999
--- src2/defines.h	Thu Dec 16 13:14:06 1999
***************
*** 3282,3285 ****
--- 3282,3292 ----
  #define TERM_L_UMBER            15  /* 'U' */   /* 3,2,1 */
  
+ #define TERM_SEQ_START          16
+ #define TERM_SEQ_END            33
+ 
+ /*
+  * Number of skill descriptions.
+  */
+ #define MAX_SKL_VAL             36
  
  /*** Sound constants ***/
diff -C 2 src/externs.h src2/externs.h
*** src/externs.h	Wed Dec 15 20:05:07 1999
--- src2/externs.h	Thu Dec 16 13:14:06 1999
***************
*** 73,76 ****
--- 73,77 ----
  extern martial_arts ma_blows[MAX_MA];
  extern cptr game_inscriptions[];
+ extern cptr skill_description[MAX_SKL_VAL];
  
  /* variable.c */
diff -C 2 src/files.c src2/files.c
*** src/files.c	Wed Dec 15 20:05:07 1999
--- src2/files.c	Thu Dec 16 13:14:06 1999
***************
*** 1280,1283 ****
--- 1280,1286 ----
  static cptr likert(int x, int y)
  {
+         /* The index of the highest skill description */
+ 	int skl_idx;
+ 
  	static char dummy[20] = "";
  
***************
*** 1289,1354 ****
  	{
  		likert_color = TERM_L_DARK;
! 		return ("Very Bad");
  	}
  
! 	/* Analyze the value */
! 	switch ((x / y))
! 	{
! 		case 0:
! 		case 1:
! 		{
! 			likert_color = TERM_RED;
! 			return ("Bad");
! 		}
! 		case 2:
! 		{
! 			likert_color = TERM_L_RED;
! 			return ("Poor");
! 		}
! 		case 3:
! 		case 4:
! 		{
! 			likert_color = TERM_ORANGE;
! 			return ("Fair");
! 		}
! 		case 5:
! 		{
! 			likert_color = TERM_YELLOW;
! 			return ("Good");
! 		}
! 		case 6:
! 		{
! 			likert_color = TERM_YELLOW;
! 			return ("Very Good");
! 		}
! 		case 7:
! 		case 8:
! 		{
! 			likert_color = TERM_L_GREEN;
! 			return ("Excellent");
! 		}
! 		case 9:
! 		case 10:
! 		case 11:
! 		case 12:
! 		case 13:
! 		{
! 			likert_color = TERM_GREEN;
! 			return ("Superb");
! 		}
! 		case 14:
! 		case 15:
! 		case 16:
! 		case 17:
! 		{
! 			likert_color = TERM_BLUE;
! 			return ("Chaos Rank");
! 		}
! 		default:
! 		{
! 			likert_color = TERM_VIOLET;
! 			sprintf(dummy,"Amber [%d]", (int) ((((x/y)-17)*5)/2));
! 			return dummy;
! 		}
  	}
  }
--- 1292,1316 ----
  	{
  		likert_color = TERM_L_DARK;
! 		return ("Minimal");
  	}
  
! 	/* Prevent invalid color for supra-maximal skills */
! 	if (x > y) {
! 	  /* Amber rank gets the highest color */
! 	  likert_color = TERM_SEQ_END;
! 
! 	  (void) sprintf(dummy, "Amber [%d]", x - y);
! 	  return dummy;
! 	} else {
! 	  /* The skill description index is based on what 
! 	     percentage of y x is */
! 	  skl_idx = x * (MAX_SKL_VAL - 1) / y;
! 
! 	  /* Color should not vary within a description */
! 	  likert_color = TERM_SEQ_START + skl_idx *
! 	    (TERM_SEQ_END - TERM_SEQ_START + 1) / MAX_SKL_VAL;
! 
! 	  /* Analyze the value */
! 	  return skill_description[skl_idx];
  	}
  }
***************
*** 1407,1440 ****
  
  	put_str("Fighting    :", 16, 1);
! 	desc = likert(xthn, 12);
  	c_put_str(likert_color, desc, 16, 15);
  
  	put_str("Bows/Throw  :", 17, 1);
! 	desc = likert(xthb, 12);
  	c_put_str(likert_color, desc, 17, 15);
  
  	put_str("Saving Throw:", 18, 1);
! 	desc = likert(xsav, 6);
  	c_put_str(likert_color, desc, 18, 15);
  
  	put_str("Stealth     :", 19, 1);
! 	desc = likert(xstl, 1);
  	c_put_str(likert_color, desc, 19, 15);
  
  
  	put_str("Perception  :", 16, 28);
! 	desc = likert(xfos, 6);
  	c_put_str(likert_color, desc, 16, 42);
  
  	put_str("Searching   :", 17, 28);
! 	desc = likert(xsrh, 6);
  	c_put_str(likert_color, desc, 17, 42);
  
  	put_str("Disarming   :", 18, 28);
! 	desc = likert(xdis, 8);
  	c_put_str(likert_color, desc, 18, 42);
  
  	put_str("Magic Device:", 19, 28);
! 	desc = likert(xdev, 6);
  	c_put_str(likert_color, desc, 19, 42);
  
--- 1369,1402 ----
  
  	put_str("Fighting    :", 16, 1);
! 	desc = likert(xthn, 416);
  	c_put_str(likert_color, desc, 16, 15);
  
  	put_str("Bows/Throw  :", 17, 1);
! 	desc = likert(xthb, 418);
  	c_put_str(likert_color, desc, 17, 15);
  
  	put_str("Saving Throw:", 18, 1);
! 	desc = likert(xsav, 131);
  	c_put_str(likert_color, desc, 18, 15);
  
  	put_str("Stealth     :", 19, 1);
! 	desc = likert(xstl, 11);
  	c_put_str(likert_color, desc, 19, 15);
  
  
  	put_str("Perception  :", 16, 28);
! 	desc = likert(xfos, 39);
  	c_put_str(likert_color, desc, 16, 42);
  
  	put_str("Searching   :", 17, 28);
! 	desc = likert(xsrh, 44);
  	c_put_str(likert_color, desc, 17, 42);
  
  	put_str("Disarming   :", 18, 28);
! 	desc = likert(xdis, 165);
  	c_put_str(likert_color, desc, 18, 42);
  
  	put_str("Magic Device:", 19, 28);
! 	desc = likert(xdev, 146);
  	c_put_str(likert_color, desc, 19, 42);
  
diff -C 2 src/main-x11.c src2/main-x11.c
*** src/main-x11.c	Thu Dec 16 05:48:36 1999
--- src2/main-x11.c	Thu Dec 16 13:14:06 1999
***************
*** 1704,1713 ****
   * Color table
   */
! static infoclr *clr[16];
  
  /*
   * Color info
   */
! static char color_info[16][8];
  
  /*
--- 1704,1713 ----
   * Color table
   */
! static infoclr *clr[256];
  
  /*
   * Color info
   */
! static char color_info[256][8];
  
  /*
***************
*** 2131,2135 ****
  
  	/* Check the colors */
! 	for (i = 0; i < 16; i++)
  	{
  		if (Metadpy->color)
--- 2131,2135 ----
  
  	/* Check the colors */
! 	for (i = 0; i < 256; i++)
  	{
  		if (Metadpy->color)
***************
*** 2512,2516 ****
  
  	/* Prepare normal colors */
! 	for (i = 0; i < 16; ++i)
  	{
  		char cname[8];
--- 2512,2516 ----
  
  	/* Prepare normal colors */
! 	for (i = 0; i < 256; ++i)
  	{
  		char cname[8];
diff -C 2 src/main-xaw.c src2/main-xaw.c
*** src/main-xaw.c	Thu Dec 16 05:42:39 1999
--- src2/main-xaw.c	Thu Dec 16 13:14:06 1999
***************
*** 147,152 ****
  
  /* External definitions */
! #define COLOR_XOR 16
! #define NUM_COLORS 16
  
  /* C Widget type definition */
--- 147,153 ----
  
  /* External definitions */
! #define COLOR_XOR 256
! 
! #define NUM_COLORS 256
  
  /* C Widget type definition */
***************
*** 334,340 ****
  	{ XtNcolor15, XtCColor, XtRPixel, sizeof(Pixel),
  	offset(color[15]), XtRString, "#b28b48" },
- 
  #endif
- 
  	{ XtNredrawCallback, XtCCallback, XtRCallback, sizeof(XtPointer),
  	offset(redraw_callbacks), XtRCallback, (XtPointer)NULL }
--- 335,339 ----
***************
*** 465,468 ****
--- 464,473 ----
  	(TopLevelShellWidget)XtParent((Widget) new);
  	int n;
+ 	
+ 	/* Add in all the colors greater than 15 */
+ 	int i;
+ 	for (i = 16; i < NUM_COLORS; i++)
+ 	  new->angband.color[i] = (angband_color_table[i][1] << 16) + 
+ 	    (angband_color_table[i][2] << 8) + angband_color_table[i][3];
  
  	/* Fix the background color */
***************
*** 1137,1141 ****
  
  	/* Draw the text */
! 	AngbandOutputText(td->widget, x, y, (String)s, n, (a & 0x0F));
  
  	/* Success */
--- 1142,1146 ----
  
  	/* Draw the text */
! 	AngbandOutputText(td->widget, x, y, (String)s, n, a);
  
  	/* Success */
diff -C 2 src/tables.c src2/tables.c
*** src/tables.c	Wed Dec 15 20:05:08 1999
--- src2/tables.c	Thu Dec 16 13:14:06 1999
***************
*** 6484,6485 ****
--- 6484,6525 ----
  	"special",       /* FEEL_SPECIAL */
  };
+ 
+ cptr skill_description[MAX_SKL_VAL] = 
+ {
+ 	"Terminal",  /* 0 */
+ 	"Abysmal",   /* 1 */
+ 	"Horrible",  /* 2 */
+ 	"Terrible",  /* 3 */
+ 	"Awful",     /* 4 */
+ 	"Very Bad",  /* 5 */
+ 	"Bad",       /* 6 */
+ 	"Laughable", /* 7 */
+ 	"Poor",      /* 8 */
+ 	"Mediocre",  /* 9 */
+ 	"Dubious",   /* 10 */
+ 	"Doubtful",  /* 11 */
+ 	"Sub-Par",   /* 12 */
+ 	"Limited",   /* 13 */
+ 	"Okay",      /* 14 */
+ 	"Fair",      /* 15 */
+ 	"Tolerable", /* 16 */
+ 	"Adequate",  /* 17 */
+ 	"Innocuous", /* 18 */
+ 	"Normal",    /* 19 */
+ 	"Credible",  /* 20 */
+ 	"Admirable", /* 21 */
+ 	"Estimable", /* 22 */
+ 	"Good",      /* 23 */
+ 	"Very Good", /* 24 */
+ 	"Superior",  /* 25 */
+ 	"Great",     /* 26 */
+ 	"Excellent", /* 27 */
+ 	"Superb",    /* 28 */
+ 	"Awesome",   /* 29 */
+ 	"Heroic",    /* 30 */
+ 	"Wonderful", /* 31 */
+ 	"Legendary", /* 32 */
+ 	"Magical",   /* 33 */
+ 	"Mystical",  /* 34 */
+ 	"Maximal"    /* 35 */
+ };
diff -C 2 src/variable.c src2/variable.c
*** src/variable.c	Wed Dec 15 20:05:07 1999
--- src2/variable.c	Thu Dec 16 13:14:06 1999
***************
*** 535,539 ****
  	{0x00, 0x00, 0xFF, 0x00},	/* TERM_L_GREEN */
  	{0x00, 0x00, 0xFF, 0xFF},	/* TERM_L_BLUE */
! 	{0x00, 0xC0, 0x80, 0x40}	/* TERM_L_UMBER */
  };
  
--- 535,557 ----
  	{0x00, 0x00, 0xFF, 0x00},	/* TERM_L_GREEN */
  	{0x00, 0x00, 0xFF, 0xFF},	/* TERM_L_BLUE */
! 	{0x00, 0xC0, 0x80, 0x40},	/* TERM_L_UMBER */
! 	{0x0C, 0xFF, 0x3F, 0x3F},	/* defaults to TERM_RED */
! 	{0x03, 0xFF, 0x7F, 0x3F},
! 	{0x0F, 0xFF, 0xBF, 0x3F},	/* defaults to TERM_L_RED */
! 	{0x0B, 0xFF, 0xFF, 0x3F},
! 	{0x0D, 0xBF, 0xFF, 0x3F},	/* defaults to TERM_UMBER */
! 	{0x0D, 0x7F, 0xFF, 0x3F},	/* defaults to TERM_ORANGE */
! 	{0x0D, 0x3F, 0xFF, 0x3F},
! 	{0x0D, 0x3F, 0xFF, 0x7F},	/* defaults to TERM_YELLOW */
! 	{0x0E, 0x3F, 0xFF, 0xBF},
! 	{0x0E, 0x3F, 0xFF, 0xFF},	/* defaults to TERM_L_UMBER */
! 	{0x0E, 0x3F, 0xBF, 0xFF},	/* defaults to TERM_GREEN */
! 	{0x06, 0x3F, 0x7F, 0xFF},
! 	{0x06, 0x3F, 0x3F, 0xFF},	/* defaults to TERM_L_GREEN */
! 	{0x0A, 0x7F, 0x3F, 0xFF},
! 	{0x0A, 0xBF, 0x3F, 0xFF},	/* defaults to TERM_L_BLUE */
! 	{0x0A, 0xFF, 0x3F, 0xFF},
! 	{0x0A, 0xFF, 0x3F, 0xBF},	/* defaults to TERM_BLUE */
! 	{0x0A, 0xFF, 0x3F, 0x7F}	/* defaults to TERM_VIOLET */
  };
  
diff -C 2 src/z-term.c src2/z-term.c
*** src/z-term.c	Thu Dec 16 11:12:31 1999
--- src2/z-term.c	Thu Dec 16 13:14:06 1999
***************
*** 542,545 ****
--- 542,553 ----
  #endif /* USE_TRANSPARENCY */
  
+ #ifndef FF_COLORS
+ 
+ 	/* Convert to one of the basic 16 colors */
+ 	if (a > 15)
+ 	  a = angband_color_table[a][0] & 0x0F;
+ 
+ #endif /* FF_COLORS */
+ 
  	/* Save the "literal" information */
  	scr_aa[x] = a;
***************
*** 605,608 ****
--- 613,624 ----
  
  #endif /* USE_TRANSPARENCY */
+ 
+ #ifndef FF_COLORS
+ 
+ 		/* Convert to one of the basic 16 colors */
+ 		if (a > 15)
+ 		  a = angband_color_table[a][0] & 0x0F;
+ 
+ #endif /* FF_COLORS */
  
  		/* Save the "literal" information */
