diff -ur /proj/Mud/servers/rom2.4b3/src/act_comm.c ./rom2.4b3-colour/src/act_comm.c
--- /proj/Mud/servers/rom2.4b3/src/act_comm.c	Sun Mar 17 23:04:53 1996
+++ ./rom2.4b3-colour/src/act_comm.c	Thu Oct 17 20:52:09 1996
@@ -302,7 +302,7 @@
 	REMOVE_BIT(ch->comm,COMM_NOAUCTION);
       }
 
-      sprintf( buf, "You auction '%s'\n\r", argument );
+      sprintf( buf, "{yYou auction '%s'{x\n\r", argument );
       send_to_char( buf, ch );
       for ( d = descriptor_list; d != NULL; d = d->next )
       {
@@ -315,7 +315,7 @@
 	     !IS_SET(victim->comm,COMM_NOAUCTION) &&
 	     !IS_SET(victim->comm,COMM_QUIET) )
 	{
-	    act_new("$n auctions '$t'",
+	    act_new("{y$n auctions '$t'{x",
 		    ch,argument,d->character,TO_VICT,POS_DEAD);
  	}
       }
@@ -358,7 +358,7 @@
 
       REMOVE_BIT(ch->comm,COMM_NOGOSSIP);
  
-      sprintf( buf, "You gossip '%s'\n\r", argument );
+      sprintf( buf, "{mYou gossip '%s'{x\n\r", argument );
       send_to_char( buf, ch );
       for ( d = descriptor_list; d != NULL; d = d->next )
       {
@@ -371,7 +371,7 @@
              !IS_SET(victim->comm,COMM_NOGOSSIP) &&
              !IS_SET(victim->comm,COMM_QUIET) )
         {
-          act_new( "$n gossips '$t'", 
+          act_new( "{m$n gossips '$t'{x", 
 		   ch,argument, d->character, TO_VICT,POS_SLEEPING );
         }
       }
@@ -523,7 +523,7 @@
  
         REMOVE_BIT(ch->comm,COMM_NOQUESTION);
  
-      sprintf( buf, "You question '%s'\n\r", argument );
+      sprintf( buf, "{yYou question '%s'{x\n\r", argument );
       send_to_char( buf, ch );
       for ( d = descriptor_list; d != NULL; d = d->next )
       {
@@ -536,7 +536,7 @@
              !IS_SET(victim->comm,COMM_NOQUESTION) &&
              !IS_SET(victim->comm,COMM_QUIET) )
         {
-	  act_new("$n questions '$t'",
+	  act_new("{y$n questions '$t'{x",
 	 	  ch,argument,d->character,TO_VICT,POS_SLEEPING);
         }
       }
@@ -578,7 +578,7 @@
  
         REMOVE_BIT(ch->comm,COMM_NOQUESTION);
  
-      sprintf( buf, "You answer '%s'\n\r", argument );
+      sprintf( buf, "{yYou answer '%s'{x\n\r", argument );
       send_to_char( buf, ch );
       for ( d = descriptor_list; d != NULL; d = d->next )
       {
@@ -591,7 +591,7 @@
              !IS_SET(victim->comm,COMM_NOQUESTION) &&
              !IS_SET(victim->comm,COMM_QUIET) )
         {
-	  act_new("$n answers '$t'",
+	  act_new("{y$n answers '$t'{x",
 		  ch,argument,d->character,TO_VICT,POS_SLEEPING);
         }
       }
@@ -633,9 +633,9 @@
  
         REMOVE_BIT(ch->comm,COMM_NOMUSIC);
  
-      sprintf( buf, "You MUSIC: '%s'\n\r", argument );
+      sprintf( buf, "{yYou MUSIC: '%s'{x\n\r", argument );
       send_to_char( buf, ch );
-      sprintf( buf, "$n MUSIC: '%s'", argument );
+      sprintf( buf, "{y$n MUSIC: '%s'{x", argument );
       for ( d = descriptor_list; d != NULL; d = d->next )
       {
         CHAR_DATA *victim;
@@ -647,7 +647,7 @@
              !IS_SET(victim->comm,COMM_NOMUSIC) &&
              !IS_SET(victim->comm,COMM_QUIET) )
         {
-	    act_new("$n MUSIC: '$t'",
+	    act_new("{y$n MUSIC: '$t'{x",
 		    ch,argument,d->character,TO_VICT,POS_SLEEPING);
         }
       }
@@ -728,15 +728,15 @@
 
     REMOVE_BIT(ch->comm,COMM_NOWIZ);
 
-    sprintf( buf, "$n: %s", argument );
-    act_new("$n: $t",ch,argument,NULL,TO_CHAR,POS_DEAD);
+    sprintf( buf, "{c[{y$n{c]: %s{x", argument );
+    act_new("{c[{y$n{c]: $t{x",ch,argument,NULL,TO_CHAR,POS_DEAD);
     for ( d = descriptor_list; d != NULL; d = d->next )
     {
 	if ( d->connected == CON_PLAYING && 
 	     IS_IMMORTAL(d->character) && 
              !IS_SET(d->character->comm,COMM_NOWIZ) )
 	{
-	    act_new("$n: $t",ch,argument,d->character,TO_VICT,POS_DEAD);
+	    act_new("{c[{y$n{c]: $t{x",ch,argument,d->character,TO_VICT,POS_DEAD);
 	}
     }
 
@@ -753,8 +753,8 @@
 	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;
 }
 
@@ -1948,4 +1948,36 @@
     if ( ach->leader != NULL ) ach = ach->leader;
     if ( bch->leader != NULL ) 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/rom2.4b3/src/act_info.c ./rom2.4b3-colour/src/act_info.c
--- /proj/Mud/servers/rom2.4b3/src/act_info.c	Sun Mar 17 23:04:53 1996
+++ ./rom2.4b3-colour/src/act_info.c	Sun Oct 20 18:21:50 1996
@@ -889,7 +889,7 @@
    }
  
    if( !strcmp( argument, "all" ) )
-      strcpy( buf, "<%hhp %mm %vmv> ");
+      strcpy( buf, "{c<%hhp %mm %vmv>{x " );
    else
    {
       if ( strlen(argument) > 50 )
diff -ur /proj/Mud/servers/rom2.4b3/src/comm.c ./rom2.4b3-colour/src/comm.c
--- /proj/Mud/servers/rom2.4b3/src/comm.c	Sun Mar 17 23:04:56 1996
+++ ./rom2.4b3-colour/src/comm.c	Fri Oct 25 22:51:58 1996
@@ -1235,7 +1235,9 @@
         {
             int percent;
             char wound[100];
+	    char *pbuff;
 	    char buf[MAX_STRING_LENGTH];
+	    char buffer[MAX_STRING_LENGTH*2];
  
             if (victim->max_hit > 0)
                 percent = victim->hit * 100 / victim->max_hit;
@@ -1261,8 +1263,10 @@
  
             sprintf(buf,"%s %s \n\r", 
 	            IS_NPC(victim) ? victim->short_descr : victim->name,wound);
-	    buf[0] = UPPER(buf[0]);
-            write_to_buffer( d, buf, 0);
+	    buf[0]	= UPPER( buf[0] );
+	    pbuff	= buffer;
+	    colourconv( pbuff, buf, d->character );
+            write_to_buffer( d, buffer, 0);
         }
 
 
@@ -1321,6 +1325,8 @@
     const char *str;
     const char *i;
     char *point;
+    char *pbuff;
+    char buffer[ MAX_STRING_LENGTH*2 ];
     char doors[MAX_INPUT_LENGTH];
     EXIT_DATA *pexit;
     bool found;
@@ -1329,11 +1335,11 @@
  
     point = buf;
     str = ch->prompt;
-    if (str == NULL || str[0] == '\0')
+    if( !str || str[0] == '\0')
     {
-        sprintf( buf, "<%dhp %dm %dmv> %s",
-	    ch->hit,ch->mana,ch->move,ch->prefix);
-	send_to_char(buf,ch);
+        sprintf( buf, "{c<%dhp %dm %dmv>{x %s",
+	    ch->hit, ch->mana, ch->move, ch->prefix );
+	send_to_char( buf, ch );
 	return;
     }
 
@@ -1445,7 +1451,10 @@
       while( (*point = *i) != '\0' )
          ++point, ++i;
    }
-   write_to_buffer( ch->desc, buf, point - buf );
+   *point	= '\0';
+   pbuff	= buffer;
+   colourconv( pbuff, buf, ch );
+   write_to_buffer( ch->desc, buffer, 0 );
 
    if (ch->prefix[0] != '\0')
         write_to_buffer(ch->desc,ch->prefix,0);
@@ -2306,7 +2315,7 @@
 /*
  * 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 != NULL && ch->desc != NULL )
         write_to_buffer( ch->desc, txt, strlen(txt) );
@@ -2314,9 +2323,60 @@
 }
 
 /*
+ * Write 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';
+        	write_to_buffer( ch->desc, buf, point2 - buf );
+	    }
+	    else
+	    {
+		for( point = txt ; *point ; point++ )
+	        {
+		    if( *point == '{' )
+		    {
+			point++;
+			continue;
+		    }
+		    *point2 = *point;
+		    *++point2 = '\0';
+		}
+		*point2 = '\0';
+        	write_to_buffer( ch->desc, buf, point2 - buf );
+	    }
+	}
+    return;
+}
+
+/*
  * Send a page to one char.
  */
-void page_to_char( const char *txt, CHAR_DATA *ch )
+void page_to_char_bw( const char *txt, CHAR_DATA *ch )
 {
     if ( txt == NULL || ch->desc == NULL)
 
@@ -2337,6 +2397,63 @@
 #endif
 }
 
+/*
+ * Page to one char, new colour version, by Lope.
+ */
+void page_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';
+		ch->desc->showstr_head  = alloc_mem( strlen( buf ) + 1 );
+		strcpy( ch->desc->showstr_head, buf );
+		ch->desc->showstr_point = ch->desc->showstr_head;
+		show_string( ch->desc, "" );
+	    }
+	    else
+	    {
+		for( point = txt ; *point ; point++ )
+	        {
+		    if( *point == '{' )
+		    {
+			point++;
+			continue;
+		    }
+		    *point2 = *point;
+		    *++point2 = '\0';
+		}
+		*point2 = '\0';
+		ch->desc->showstr_head  = alloc_mem( strlen( buf ) + 1 );
+		strcpy( ch->desc->showstr_head, buf );
+		ch->desc->showstr_point = ch->desc->showstr_head;
+		show_string( ch->desc, "" );
+	    }
+	}
+    return;
+}
+
 
 /* string pager */
 void show_string(struct descriptor_data *d, char *input)
@@ -2407,74 +2524,82 @@
     act_new(format,ch,arg1,arg2,type,POS_RESTING);
 }
 
+/*
+ * The colour version of the act_new( ) function, -Lope
+ */
 void act_new( const char *format, CHAR_DATA *ch, const void *arg1, 
-	      const void *arg2, int type, int min_pos)
+	      const void *arg2, int type, int min_pos )
 {
     static char * const he_she  [] = { "it",  "he",  "she" };
     static char * const him_her [] = { "it",  "him", "her" };
     static char * const his_her [] = { "its", "his", "her" };
  
-    char buf[MAX_STRING_LENGTH];
-    char fname[MAX_INPUT_LENGTH];
-    CHAR_DATA *to;
-    CHAR_DATA *vch = (CHAR_DATA *) arg2;
-    OBJ_DATA *obj1 = (OBJ_DATA  *) arg1;
-    OBJ_DATA *obj2 = (OBJ_DATA  *) arg2;
-    const char *str;
-    const char *i;
-    char *point;
- 
+    CHAR_DATA 		*to;
+    CHAR_DATA 		*vch = ( CHAR_DATA * ) arg2;
+    OBJ_DATA 		*obj1 = ( OBJ_DATA  * ) arg1;
+    OBJ_DATA 		*obj2 = ( OBJ_DATA  * ) arg2;
+    const 	char 	*str;
+    char 		*i = NULL;
+    char 		*point;
+    char 		*pbuff;
+    char 		buffer[ MAX_STRING_LENGTH*2 ];
+    char 		buf[ MAX_STRING_LENGTH   ];
+    char 		fname[ MAX_INPUT_LENGTH  ];
+    bool		fColour = FALSE;
+
     /*
      * Discard null and zero-length messages.
      */
-    if ( format == NULL || format[0] == '\0' )
+    if( !format || !*format )
         return;
 
     /* discard null rooms and chars */
-    if (ch == NULL || ch->in_room == NULL)
+    if( !ch || !ch->in_room )
 	return;
 
     to = ch->in_room->people;
-    if ( type == TO_VICT )
+    if( type == TO_VICT )
     {
-        if ( vch == NULL )
+        if( !vch )
         {
             bug( "Act: null vch with TO_VICT.", 0 );
             return;
         }
 
-	if (vch->in_room == NULL)
+	if( !vch->in_room )
 	    return;
 
         to = vch->in_room->people;
     }
  
-    for ( ; to != NULL; to = to->next_in_room )
+    for( ; to ; to = to->next_in_room )
     {
-        if ( to->desc == NULL || to->position < min_pos )
+        if( !to->desc || to->position < min_pos )
             continue;
  
-        if ( (type == TO_CHAR) && to != ch )
+        if( ( type == TO_CHAR ) && to != ch )
             continue;
-        if ( type == TO_VICT && ( to != vch || to == ch ) )
+        if( type == TO_VICT && ( to != vch || to == ch ) )
             continue;
-        if ( type == TO_ROOM && to == ch )
+        if( type == TO_ROOM && to == ch )
             continue;
-        if ( type == TO_NOTVICT && (to == ch || to == vch) )
+        if( type == TO_NOTVICT && (to == ch || to == vch) )
             continue;
  
         point   = buf;
         str     = format;
-        while ( *str != '\0' )
+        while( *str != '\0' )
         {
-            if ( *str != '$' )
+            if( *str != '$' )
             {
                 *point++ = *str++;
                 continue;
             }
-            ++str;
  
-            if ( arg2 == NULL && *str >= 'A' && *str <= 'Z' )
+	    fColour = TRUE;
+	    ++str;
+	    i = " <@@@> ";
+            if( !arg2 && *str >= 'A' && *str <= 'Z' )
             {
                 bug( "Act: missing arg2 for code %d.", *str );
                 i = " <@@@> ";
@@ -2530,8 +2655,11 @@
  
         *point++ = '\n';
         *point++ = '\r';
+	*point	 = '\0';
         buf[0]   = UPPER(buf[0]);
-        write_to_buffer( to->desc, buf, point - buf );
+	pbuff	 = buffer;
+	colourconv( pbuff, buf, to );
+        write_to_buffer( to->desc, buffer, 0 );
     }
  
     return;
@@ -2549,3 +2677,127 @@
     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/rom2.4b3/src/db.c ./rom2.4b3-colour/src/db.c
--- /proj/Mud/servers/rom2.4b3/src/db.c	Sun Mar 17 23:04:57 1996
+++ ./rom2.4b3-colour/src/db.c	Sun Oct 20 17:54:37 1996
@@ -2618,6 +2618,7 @@
     {
         bug("Attempt to recyle invalid memory of size %d.",sMem);
         bug((char*) pMem + sizeof(*magic),0);
+	abort( );
         return;
     }
 
@@ -2730,7 +2731,7 @@
 
     if (argument[0] != '\0')
     {
-	send_to_char("No argument is used with this command.\n\r",ch);
+	send_to_char_bw("No argument is used with this command.\n\r",ch);
 	return;
     }
 
@@ -2744,7 +2745,7 @@
     {
 	sprintf( buf, "%-39s%-39s\n\r",
 	    pArea1->credits, (pArea2 != NULL) ? pArea2->credits : "" );
-	send_to_char( buf, ch );
+	send_to_char_bw( buf, ch );
 	pArea1 = pArea1->next;
 	if ( pArea2 != NULL )
 	    pArea2 = pArea2->next;
diff -ur /proj/Mud/servers/rom2.4b3/src/handler.c ./rom2.4b3-colour/src/handler.c
--- /proj/Mud/servers/rom2.4b3/src/handler.c	Sun Mar 17 23:05:00 1996
+++ ./rom2.4b3-colour/src/handler.c	Thu Oct 17 21:59:05 1996
@@ -2688,6 +2688,7 @@
 	if (act_flags & PLR_NOSUMMON	) strcat(buf, " no_summon");
 	if (act_flags & PLR_NOFOLLOW	) strcat(buf, " no_follow");
 	if (act_flags & PLR_FREEZE	) strcat(buf, " frozen");
+	if (act_flags & PLR_COLOUR	) strcat(buf, " colour");
 	if (act_flags & PLR_THIEF	) strcat(buf, " thief");
 	if (act_flags & PLR_KILLER	) strcat(buf, " killer");
     }
diff -ur /proj/Mud/servers/rom2.4b3/src/interp.c ./rom2.4b3-colour/src/interp.c
--- /proj/Mud/servers/rom2.4b3/src/interp.c	Sun Mar 17 23:05:03 1996
+++ ./rom2.4b3-colour/src/interp.c	Thu Oct 17 20:49:49 1996
@@ -157,6 +157,7 @@
     { "autosplit",	do_autosplit,	POS_DEAD,        0,  LOG_NORMAL, 1 },
     { "brief",		do_brief,	POS_DEAD,        0,  LOG_NORMAL, 1 },
 /*  { "channels",	do_channels,	POS_DEAD,	 0,  LOG_NORMAL, 1 }, */
+    { "colour",		do_colour,	POS_DEAD,        0,  LOG_NORMAL, 1 },
     { "combine",	do_combine,	POS_DEAD,        0,  LOG_NORMAL, 1 },
     { "compact",	do_compact,	POS_DEAD,        0,  LOG_NORMAL, 1 },
     { "description",	do_description,	POS_DEAD,	 0,  LOG_NORMAL, 1 },
diff -ur /proj/Mud/servers/rom2.4b3/src/interp.h ./rom2.4b3-colour/src/interp.h
--- /proj/Mud/servers/rom2.4b3/src/interp.h	Sun Mar 17 23:05:03 1996
+++ ./rom2.4b3-colour/src/interp.h	Thu Oct 17 20:49:49 1996
@@ -95,6 +95,7 @@
 DECLARE_DO_FUN( do_channels	);
 DECLARE_DO_FUN( do_clone	);
 DECLARE_DO_FUN(	do_close	);
+DECLARE_DO_FUN( do_colour       );	/* Colour Command By Lope */
 DECLARE_DO_FUN(	do_commands	);
 DECLARE_DO_FUN( do_combine	);
 DECLARE_DO_FUN( do_compact	);
diff -ur /proj/Mud/servers/rom2.4b3/src/merc.h ./rom2.4b3-colour/src/merc.h
--- /proj/Mud/servers/rom2.4b3/src/merc.h	Sun Mar 17 23:05:22 1996
+++ ./rom2.4b3-colour/src/merc.h	Thu Oct 24 23:17:21 1996
@@ -158,6 +158,25 @@
 #define AVATAR			(MAX_LEVEL - 8)
 #define HERO			LEVEL_HERO
 
+/*
+ * 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	""
 
 
 /*
@@ -1229,7 +1248,11 @@
 #define PLR_CANLOOT		(P)
 #define PLR_NOSUMMON		(Q)
 #define PLR_NOFOLLOW		(R)
-/* 2 bits reserved, S-T */
+/*
+ * Colour stuff by Lope of Loping Through The MUD
+ */
+#define PLR_COLOUR		(T)    /* Colour Flag By Lope */
+/* 1 bit reserved, S */
 
 /* penalty flags */
 #define PLR_PERMIT		(U)
@@ -2115,6 +2138,13 @@
 void	act_new		args( ( const char *format, CHAR_DATA *ch, 
 			    const void *arg1, const void *arg2, int type,
 			    int min_pos) );
+/*
+ * 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 ) );
+void	page_to_char_bw	args( ( const char *txt, CHAR_DATA *ch ) );
 
 /* db.c */
 char *	print_flags	args( ( int flag ));
diff -ur /proj/Mud/servers/rom2.4b3/src/save.c ./rom2.4b3-colour/src/save.c
--- /proj/Mud/servers/rom2.4b3/src/save.c	Sun Mar 17 23:05:23 1996
+++ ./rom2.4b3-colour/src/save.c	Sun Oct 20 18:19:16 1996
@@ -556,7 +556,7 @@
     ch->act				= PLR_NOSUMMON;
     ch->comm				= COMM_COMBINE 
 					| COMM_PROMPT;
-    ch->prompt 				= str_dup("<%hhp %mm %vmv> ");
+    ch->prompt 				= str_dup( "{c<%hhp %mm %vmv>{x " );
     ch->pcdata->confirm_delete		= FALSE;
     ch->pcdata->pwd			= str_dup( "" );
     ch->pcdata->bamfin			= str_dup( "" );
diff -ur /proj/Mud/servers/rom2.4b3/src/tables.c ./rom2.4b3-colour/src/tables.c
--- /proj/Mud/servers/rom2.4b3/src/tables.c	Sun Mar 17 23:05:23 1996
+++ ./rom2.4b3-colour/src/tables.c	Thu Oct 17 21:57:38 1996
@@ -123,6 +123,7 @@
     {	"can_loot",		P,	FALSE	},
     {	"nosummon",		Q,	FALSE	},
     {	"nofollow",		R,	FALSE	},
+    {	"colour",		T,	FALSE	},
     {	"permit",		U,	TRUE	},
     {	"log",			W,	FALSE	},
     {	"deny",			X,	FALSE	},