diff -ur /proj/Mud/servers/envy2.0/src/act_comm.c ./envy2.0-colour/src/act_comm.c
--- /proj/Mud/servers/envy2.0/src/act_comm.c	Wed Dec 27 06:17:54 1995
+++ ./envy2.0-colour/src/act_comm.c	Sun Oct 20 18:55:53 1996
@@ -531,8 +531,44 @@
 	sprintf( buf, "$n %ss '$t'",     verb );
 	break;
 
+    case CHANNEL_AUCTION:
+	sprintf( buf, "{yYou %s '%s'{x\n\r", verb, argument );
+	send_to_char( buf, ch );
+	sprintf( buf, "{y$n %ss '$t'{x",     verb );
+	break;
+
+    case CHANNEL_MUSIC:
+	sprintf( buf, "{yYou %s '%s'{x\n\r", verb, argument );
+	send_to_char( buf, ch );
+	sprintf( buf, "{y$n %ss '$t'{x",     verb );
+	break;
+
+    case CHANNEL_QUESTION:
+	sprintf( buf, "{yYou %s '%s'{x\n\r", verb, argument );
+	send_to_char( buf, ch );
+	sprintf( buf, "{y$n %ss '$t'{x",     verb );
+	break;
+
+    case CHANNEL_SHOUT:
+	sprintf( buf, "{rYou %s '%s'{x\n\r", verb, argument );
+	send_to_char( buf, ch );
+	sprintf( buf, "{r$n %ss '$t'{x",     verb );
+	break;
+
+    case CHANNEL_YELL:
+	sprintf( buf, "{bYou %s '%s'{x\n\r", verb, argument );
+	send_to_char( buf, ch );
+	sprintf( buf, "{b$n %ss '$t'{x",     verb );
+	break;
+
+    case CHANNEL_CHAT:
+	sprintf( buf, "{mYou %s '%s'{x\n\r", verb, argument );
+	send_to_char( buf, ch );
+	sprintf( buf, "{m$n %ss '$t'{x",     verb );
+	break;
+
     case CHANNEL_IMMTALK:
-	sprintf( buf, "$n: $t" );
+	sprintf( buf, "{c[{y$n{c]: $t{x" );
 	position	= ch->position;
 	ch->position	= POS_STANDING;
 	act( buf, ch, argument, NULL, TO_CHAR );
@@ -651,19 +687,19 @@
 {
     if ( argument[0] == '\0' )
     {
-	send_to_char( "Say what?\n\r", ch );
+	send_to_char_bw( "Say what?\n\r", ch );
 	return;
     }
 
     if ( IS_AFFECTED( ch, AFF_MUTE )
         || IS_SET( ch->in_room->room_flags, ROOM_CONE_OF_SILENCE ) )
     {
-        send_to_char( "You can't seem to break the silence.\n\r", ch );
+        send_to_char_bw( "You can't seem to break the silence.\n\r", ch );
         return;
     }
 
-    act( "$n says '$T'", ch, NULL, argument, TO_ROOM );
-    act( "You say '$T'", ch, NULL, argument, TO_CHAR );
+    act( "{g$n says '$T'{x", ch, NULL, argument, TO_ROOM );
+    act( "{gYou say '$T'{x", ch, NULL, argument, TO_CHAR );
     return;
 }
 
@@ -1658,5 +1694,37 @@
     if ( ach->leader ) ach = ach->leader;
     if ( bch->leader ) bch = bch->leader;
     return ach == bch;
+}
+
+/*
+ * Colour setting and unsetting, way cool, Lope Oct '94
+ */
+void do_colour( CHAR_DATA *ch, char *argument )
+{
+    char 	arg[ MAX_STRING_LENGTH ];
+
+    argument = one_argument( argument, arg );
+
+    if( !*arg )
+    {
+	if( !IS_SET( ch->act, PLR_COLOUR ) )
+	{
+	    SET_BIT( ch->act, PLR_COLOUR );
+	    send_to_char( "{bC{ro{yl{co{mu{gr{x is now {rON{x, Way Cool!\n\r", ch );
+	}
+	else
+	{
+	    send_to_char_bw( "Colour is now OFF, <sigh>\n\r", ch );
+	    REMOVE_BIT( ch->act, PLR_COLOUR );
+	}
+	return;
+    }
+    else
+    {
+	send_to_char_bw( "Colour Configuration is unavailable in this\n\r", ch );
+	send_to_char_bw( "version of colour, sorry\n\r", ch );
+    }
+
+    return;
 }
 
diff -ur /proj/Mud/servers/envy2.0/src/comm.c ./envy2.0-colour/src/comm.c
--- /proj/Mud/servers/envy2.0/src/comm.c	Sun Oct 20 19:51:31 1996
+++ ./envy2.0-colour/src/comm.c	Fri Oct 25 22:48:26 1996
@@ -1297,14 +1297,16 @@
    const char      *str;
    const char      *i;
          char      *point;
-         char       buf  [ MAX_STRING_LENGTH ];
-         char       buf2 [ MAX_STRING_LENGTH ];
+         char      *pbuff;
+         char       buffer[ MAX_STRING_LENGTH ];
+         char       buf  [ MAX_STRING_LENGTH  ];
+         char       buf2 [ MAX_STRING_LENGTH  ];
 
    /* Will always have a pc ch after this */
    ch = ( d->original ? d->original : d->character );
    if( !ch->pcdata->prompt || ch->pcdata->prompt[0] == '\0' )
    {
-      send_to_char( "\n\r\n\r", ch );
+      send_to_char_bw( "\n\r\n\r", ch );
       return;
    }
 
@@ -1394,7 +1396,10 @@
       while( ( *point = *i ) != '\0' )
          ++point, ++i;      
    }
-   write_to_buffer( d, buf, point - buf );
+   *point = '\0';
+   pbuff	= buffer;
+   colourconv( pbuff, buf, ch );
+   write_to_buffer( d, buffer, 0 );
    return;
 }
 
@@ -1887,7 +1892,7 @@
 		    [ch->sex == SEX_FEMALE ? 1 : 0] );
 	    set_title( ch, buf );
 	    free_string( ch->pcdata->prompt );
-	    ch->pcdata->prompt = str_dup( "<%hhp %mm %vmv> " );
+	    ch->pcdata->prompt = str_dup( "{c<%hhp %mm %vmv>{x " );
 
 	    obj = create_object( get_obj_index( OBJ_VNUM_SCHOOL_BANNER ), 0 );
 	    obj_to_char( obj, ch );
@@ -2165,16 +2170,16 @@
 /*
  * Write to one char.
  */
-void send_to_char( const char *txt, CHAR_DATA *ch )
+void send_to_char_bw( const char *txt, CHAR_DATA *ch )
 {
-    if ( !txt || !ch->desc )
+    if( !txt || !ch->desc )
         return;
 
     /*
      * Bypass the paging procedure if the text output is small
      * Saves process time.
      */
-    if ( strlen( txt ) < 600 )
+    if( strlen( txt ) < 600 )
 	write_to_buffer( ch->desc, txt, strlen( txt ) );
     else
     {
@@ -2187,6 +2192,68 @@
     return;
 }
 
+/*
+ * Send to one char, new colour version, by Lope.
+ */
+void send_to_char( const char *txt, CHAR_DATA *ch )
+{
+    const	char 	*point;
+    		char 	*point2;
+    		char 	buf[ MAX_STRING_LENGTH*4 ];
+		int	skip = 0;
+
+    buf[0] = '\0';
+    point2 = buf;
+    if ( txt && ch->desc )
+	{
+	    if ( IS_SET( ch->act, PLR_COLOUR ) )
+	    {
+		for( point = txt ; *point ; point++ )
+	        {
+		    if( *point == '{' )
+		    {
+			point++;
+			skip = colour( *point, ch, point2 );
+			while( skip-- > 0 )
+			    ++point2;
+			continue;
+		    }
+
+		    *point2 = *point;		    *++point2 = '\0';
+		}			
+		*point2 = '\0';
+		free_string( ch->desc->showstr_head );
+		ch->desc->showstr_head  = str_dup( buf );
+		ch->desc->showstr_point = ch->desc->showstr_head;
+		show_string( ch->desc, "" );
+	    }
+	    else
+	    {
+		for( point = txt ; *point ; point++ )
+	        {
+		    if( *point == '{' )
+		    {
+			point++;
+			if( *point == '{' )
+			{
+			    *point2 = *point;
+			    *++point2 = '\0';
+			}
+			continue;
+		    }
+		    *point2 = *point;
+		    *++point2 = '\0';
+		}
+		*point2 = '\0';
+		free_string( ch->desc->showstr_head );
+		ch->desc->showstr_head  = str_dup( buf );
+		ch->desc->showstr_point = ch->desc->showstr_head;
+		show_string( ch->desc, "" );
+	    }
+	}
+    return;
+}
+
  /* The heart of the pager.  Thanks to N'Atas-Ha, ThePrincedom
     for porting this SillyMud code for MERC 2.0 and laying down the groundwork.
     Thanks to Blackstar, hopper.cs.uiowa.edu 4000 for which
@@ -2272,9 +2339,10 @@
     }
 
     /* On advice by Scott Mobley and others */
+/*
     *scan++ = '\n';
     *scan++ = '\r';
-
+*/
     *scan = 0;
 
     write_to_buffer( d, buffer, strlen( buffer ) );
@@ -2304,8 +2372,10 @@
     const  char            *str;
     const  char            *i;
            char            *point;
+           char            *pbuff;
            char             buf     [ MAX_STRING_LENGTH ];
            char             buf1    [ MAX_STRING_LENGTH ];
+           char             buffer  [ MAX_STRING_LENGTH*2 ];
            char             fname   [ MAX_INPUT_LENGTH  ];
 
     /*
@@ -2412,11 +2482,14 @@
 		++point, ++i;
 	}
 
-	*point++ = '\n';
-	*point++ = '\r';
-	buf[0]   = UPPER( buf[0] );
-	if ( to->desc )
-	    write_to_buffer( to->desc, buf, point - buf );
+        *point++	= '\n';
+        *point++	= '\r';
+        *point		= '\0';
+	buf[0]		= UPPER( buf[0] );
+	pbuff		= buffer;
+	colourconv( pbuff, buf, to );
+	if( to->desc )
+	    write_to_buffer( to->desc, buffer, 0 );
     }
 
     return;
@@ -2434,3 +2507,128 @@
     tp->tv_usec = 0;
 }
 #endif
+
+int colour( char type, CHAR_DATA *ch, char *string )
+{
+    char	code[ 20 ];
+    char	*p = '\0';
+
+    if( IS_NPC( ch ) )
+	return( 0 );
+
+    switch( type )
+    {
+	default:
+	    sprintf( code, CLEAR );
+	    break;
+	case 'x':
+	    sprintf( code, CLEAR );
+	    break;
+	case 'b':
+	    sprintf( code, C_BLUE );
+	    break;
+	case 'c':
+	    sprintf( code, C_CYAN );
+	    break;
+	case 'g':
+	    sprintf( code, C_GREEN );
+	    break;
+	case 'm':
+	    sprintf( code, C_MAGENTA );
+	    break;
+	case 'r':
+	    sprintf( code, C_RED );
+	    break;
+	case 'w':
+	    sprintf( code, C_WHITE );
+	    break;
+	case 'y':
+	    sprintf( code, C_YELLOW );
+	    break;
+	case 'B':
+	    sprintf( code, C_B_BLUE );
+	    break;
+	case 'C':
+	    sprintf( code, C_B_CYAN );
+	    break;
+	case 'G':
+	    sprintf( code, C_B_GREEN );
+	    break;
+	case 'M':
+	    sprintf( code, C_B_MAGENTA );
+	    break;
+	case 'R':
+	    sprintf( code, C_B_RED );
+	    break;
+	case 'W':
+	    sprintf( code, C_B_WHITE );
+	    break;
+	case 'Y':
+	    sprintf( code, C_B_YELLOW );
+	    break;
+	case 'D':
+	    sprintf( code, C_D_GREY );
+	    break;
+	case '*':
+	    sprintf( code, "%c", 007 );
+	    break;
+	case '/':
+	    sprintf( code, "%c", 012 );
+	    break;
+	case '{':
+	    sprintf( code, "%c", '{' );
+	    break;
+    }
+
+    p = code;
+    while( *p != '\0' )
+    {
+	*string = *p++;
+	*++string = '\0';
+    }
+
+    return( strlen( code ) );
+}
+
+void colourconv( char *buffer, const char *txt , CHAR_DATA *ch )
+{
+    const	char	*point;
+		int	skip = 0;
+
+    if( ch->desc && txt )
+    {
+	if( IS_SET( ch->act, PLR_COLOUR ) )
+	{
+	    for( point = txt ; *point ; point++ )
+	    {
+		if( *point == '{' )
+		{
+		    point++;
+		    skip = colour( *point, ch, buffer );
+		    while( skip-- > 0 )
+			++buffer;
+		    continue;
+		}
+		*buffer = *point;
+		*++buffer = '\0';
+	    }			
+	    *buffer = '\0';
+	}
+	else
+	{
+	    for( point = txt ; *point ; point++ )
+	    {
+		if( *point == '{' )
+		{
+		    point++;
+		    continue;
+		}
+		*buffer = *point;
+		*++buffer = '\0';
+	    }
+	    *buffer = '\0';
+	}
+    }
+    return;
+}
+
diff -ur /proj/Mud/servers/envy2.0/src/interp.c ./envy2.0-colour/src/interp.c
--- /proj/Mud/servers/envy2.0/src/interp.c	Wed Dec 27 06:17:55 1995
+++ ./envy2.0-colour/src/interp.c	Sun Oct 20 19:07:47 1996
@@ -148,6 +148,7 @@
     { "blank",          do_blank,       POS_DEAD,        0,  LOG_NORMAL },
     { "brief",          do_brief,       POS_DEAD,        0,  LOG_NORMAL },
     { "channels",	do_channels,	POS_DEAD,	 0,  LOG_NORMAL	},
+    { "colour",         do_colour,      POS_DEAD,        0,  LOG_NORMAL },
     { "combine",        do_combine,     POS_DEAD,        0,  LOG_NORMAL },
     { "config",		do_config,	POS_DEAD,	 0,  LOG_NORMAL	},
     { "description",	do_description,	POS_DEAD,	 0,  LOG_NORMAL	},
diff -ur /proj/Mud/servers/envy2.0/src/merc.h ./envy2.0-colour/src/merc.h
--- /proj/Mud/servers/envy2.0/src/merc.h	Wed Dec 27 06:17:56 1995
+++ ./envy2.0-colour/src/merc.h	Fri Oct 25 21:42:38 1996
@@ -175,6 +175,26 @@
     int		sunlight;
 };
 
+/*
+ * Colour stuff by Lope of Loping Through The MUD
+ */
+#define CLEAR		""		/* Resets Colour	*/
+#define C_RED		""	/* Normal Colours	*/
+#define C_GREEN		""
+#define C_YELLOW	""
+#define C_BLUE		""
+#define C_MAGENTA	""
+#define C_CYAN		""
+#define C_WHITE		""
+#define C_D_GREY	""  	/* Light Colors		*/
+#define C_B_RED		""
+#define C_B_GREEN	""
+#define C_B_YELLOW	""
+#define C_B_BLUE	""
+#define C_B_MAGENTA	""
+#define C_B_CYAN	""
+#define C_B_WHITE	""
+ 
 
 
 /*
@@ -780,6 +800,7 @@
 #define PLR_KILLER		8388608
 #define PLR_AUTOGOLD           16777216
 #define PLR_AFK                33554432
+#define PLR_COLOUR             67108864
 
 /*
  * Obsolete bits.
@@ -1374,6 +1395,7 @@
 DECLARE_DO_FUN(	do_chat		);
 DECLARE_DO_FUN(	do_circle 	);		/* by Thelonius */
 DECLARE_DO_FUN(	do_close	);
+DECLARE_DO_FUN( do_colour       );	/* Colour Command By Lope */
 DECLARE_DO_FUN( do_combine      );
 DECLARE_DO_FUN(	do_commands	);
 DECLARE_DO_FUN(	do_compare	);
@@ -1844,6 +1866,12 @@
 void	act	         args( ( const char *format, CHAR_DATA *ch,
 				const void *arg1, const void *arg2,
 				int type ) );
+/*
+ * Colour stuff by Lope of Loping Through The MUD
+ */
+int	colour		args( ( char type, CHAR_DATA *ch, char *string ) );
+void	colourconv	args( ( char *buffer, const char *txt, CHAR_DATA *ch ) );
+void	send_to_char_bw	args( ( const char *txt, CHAR_DATA *ch ) );
 
 /* db.c */
 void	boot_db		args( ( void ) );
diff -ur /proj/Mud/servers/envy2.0/src/save.c ./envy2.0-colour/src/save.c
--- /proj/Mud/servers/envy2.0/src/save.c	Wed Dec 27 06:17:55 1995
+++ ./envy2.0-colour/src/save.c	Thu Oct 24 20:24:09 1996
@@ -370,7 +370,7 @@
     d->character			= ch;
     ch->desc				= d;
     ch->name				= str_dup( name );
-    ch->pcdata->prompt                  = str_dup( "<%hhp %mm %vmv> " );
+    ch->pcdata->prompt                  = str_dup( "{c<%hhp %mm %vmv>{x " );
     ch->last_note                       = 0;
     ch->act				= PLR_BLANK
 					| PLR_COMBINE
@@ -722,7 +722,7 @@
 	if ( !ch->pcdata->pagelen )
 	    ch->pcdata->pagelen = 20;
 	if ( !ch->pcdata->prompt || ch->pcdata->prompt == '\0' )
-	    ch->pcdata->prompt = str_dup ( "<%hhp %mm %vmv> " );
+	    ch->pcdata->prompt = str_dup ( "{c<%hhp %mm %vmv>{x " );
 
 	/* Make sure old chars do not have pagelen > 60 - Kahn */
 	if ( ch->pcdata->pagelen > 60 )