diff -ur /proj/Mud/servers/rom2.3/src/act_comm.c ./rom2.3-colour/src/act_comm.c
--- /proj/Mud/servers/rom2.3/src/act_comm.c	Mon Dec 27 22:10:11 1993
+++ ./rom2.3-colour/src/act_comm.c	Sat Jan 13 23:59:00 1996
@@ -741,7 +741,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 )
       {
@@ -754,7 +754,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);
  	}
       }
@@ -797,7 +797,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 )
       {
@@ -810,7 +810,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 );
         }
       }
@@ -852,7 +852,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 )
       {
@@ -865,7 +865,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);
         }
       }
@@ -907,7 +907,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 )
       {
@@ -920,7 +920,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);
         }
       }
@@ -962,9 +962,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;
@@ -976,7 +976,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);
         }
       }
@@ -1005,15 +1005,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_HERO(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);
 	}
     }
 
@@ -1030,8 +1030,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;
 }
 
@@ -2049,4 +2049,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.3/src/comm.c ./rom2.3-colour/src/comm.c
--- /proj/Mud/servers/rom2.3/src/comm.c	Fri Mar 18 23:50:49 1994
+++ ./rom2.3-colour/src/comm.c	Fri Oct 25 22:50:38 1996
@@ -1251,7 +1251,9 @@
         {
             int percent;
             char wound[100];
-	    char buf[MAX_STRING_LENGTH];
+	    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;
@@ -1278,7 +1280,9 @@
             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);
+	    pbuff = buffer;
+	    colourconv( pbuff, buf, d->character );
+            write_to_buffer( d, buffer, 0 );
         }
 
 
@@ -1288,11 +1292,15 @@
 
 	if ( IS_SET(ch->comm, COMM_PROMPT) )
 	{
+	    char *pbuff;
+	    char buffer[ 80 ];
 	    char buf[40];
 
 	    ch = d->character;
-	    sprintf( buf, "<%dhp %dm %dmv> ", ch->hit,ch->mana,ch->move);
-	    write_to_buffer( d, buf, 0 );
+	    sprintf( buf, "{c<%dhp %dm %dmv>{x ", ch->hit,ch->mana,ch->move);
+	    pbuff = buffer;
+	    colourconv( pbuff, buf, ch );
+	    write_to_buffer( d, buffer, 0 );
 	}
 
 	if (IS_SET(ch->comm,COMM_TELNET_GA))
@@ -2129,7 +2137,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) );
@@ -2137,9 +2145,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)
 	return;
@@ -2154,6 +2213,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';
+		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++;
+			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;
+}
+
 
 /* string pager */
 void show_string(struct descriptor_data *d, char *input)
@@ -2224,138 +2340,192 @@
     act_new(format,ch,arg1,arg2,type,POS_RESTING);
 }
 
+/*
+ * The colour version of the act( ) 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;
- 
-    /*
-     * Discard null and zero-length messages.
-     */
-    if ( format == NULL || format[0] == '\0' )
+    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;
+    char 		*point;
+    char 		*pbuff;
+    char 		buf[ MAX_STRING_LENGTH   ];
+    char 		buffer[ MAX_STRING_LENGTH*2 ];
+    char 		fname[ MAX_INPUT_LENGTH  ];
+    bool		fColour = FALSE;
+
+    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 )
         {
-            if ( *str != '$' )
+            if( *str != '$' )
             {
                 *point++ = *str++;
                 continue;
             }
-            ++str;
- 
-            if ( arg2 == NULL && *str >= 'A' && *str <= 'Z' )
-            {
-                bug( "Act: missing arg2 for code %d.", *str );
-                i = " <@@@> ";
-            }
-            else
-            {
-                switch ( *str )
-                {
-                default:  bug( "Act: bad code %d.", *str );
-                          i = " <@@@> ";                                break;
-                /* Thx alex for 't' idea */
-                case 't': i = (char *) arg1;                            break;
-                case 'T': i = (char *) arg2;                            break;
-                case 'n': i = PERS( ch,  to  );                         break;
-                case 'N': i = PERS( vch, to  );                         break;
-                case 'e': i = he_she  [URANGE(0, ch  ->sex, 2)];        break;
-                case 'E': i = he_she  [URANGE(0, vch ->sex, 2)];        break;
-                case 'm': i = him_her [URANGE(0, ch  ->sex, 2)];        break;
-                case 'M': i = him_her [URANGE(0, vch ->sex, 2)];        break;
-                case 's': i = his_her [URANGE(0, ch  ->sex, 2)];        break;
-                case 'S': i = his_her [URANGE(0, vch ->sex, 2)];        break;
- 
-                case 'p':
-                    i = can_see_obj( to, obj1 )
-                            ? obj1->short_descr
-                            : "something";
-                    break;
+
+	    i = NULL;
+	    switch( *str )
+	    {
+		case '$':
+		    fColour = TRUE;
+		    ++str;
+		    i = " <@@@> ";
+		    if ( !arg2 && *str >= 'A' && *str <= 'Z' )
+		    {
+			bug( "Act: missing arg2 for code %d.", *str );
+			i = " <@@@> ";
+		    }
+		    else
+		    {
+			switch ( *str )
+			{
+			    default:  
+				bug( "Act: bad code %d.", *str );
+				i = " <@@@> ";                                
+				break;
+
+			    case 't': 
+				i = (char *) arg1;                            
+				break;
+
+			    case 'T': 
+				i = (char *) arg2;                            
+				break;
+
+			    case 'n': 
+				i = PERS( ch,  to  );                         
+				break;
+
+			    case 'N': 
+				i = PERS( vch, to  );                         
+				break;
+
+			    case 'e': 
+				i = he_she  [URANGE(0, ch  ->sex, 2)];        
+				break;
+
+			    case 'E': 
+				i = he_she  [URANGE(0, vch ->sex, 2)];        
+				break;
+
+			    case 'm': 
+				i = him_her [URANGE(0, ch  ->sex, 2)];        
+				break;
+
+			    case 'M': 
+				i = him_her [URANGE(0, vch ->sex, 2)];        
+				break;
+
+			    case 's': 
+				i = his_her [URANGE(0, ch  ->sex, 2)];        
+				break;
+
+			    case 'S': 
+				i = his_her [URANGE(0, vch ->sex, 2)];        
+				break;
  
-                case 'P':
-                    i = can_see_obj( to, obj2 )
-                            ? obj2->short_descr
-                            : "something";
-                    break;
+			    case 'p':
+				i = can_see_obj( to, obj1 )
+				  ? obj1->short_descr
+				  : "something";
+				break;
  
-                case 'd':
-                    if ( arg2 == NULL || ((char *) arg2)[0] == '\0' )
-                    {
-                        i = "door";
-                    }
-                    else
-                    {
-                        one_argument( (char *) arg2, fname );
-                        i = fname;
-                    }
-                    break;
-                }
-            }
+			    case 'P':
+				i = can_see_obj( to, obj2 )
+				  ? obj2->short_descr
+				  : "something";
+				break;
  
+			    case 'd':
+				if ( !arg2 || ((char *) arg2)[0] == '\0' )
+				{
+				    i = "door";
+				}
+				else
+				{
+				    one_argument( (char *) arg2, fname );
+				    i = fname;
+				}
+				break;
+			}
+		    }
+		    break;
+
+		default:
+		    fColour = FALSE;
+		    *point++ = *str++;
+		    break;
+	    }
+
             ++str;
-            while ( ( *point = *i ) != '\0' )
-                ++point, ++i;
+	    if( i )
+	    {
+		while( ( *point = *i ) != '\0' )
+		{
+		    ++point;
+		    ++i;
+		}
+	    }
         }
  
-        *point++ = '\n';
-        *point++ = '\r';
-        buf[0]   = UPPER(buf[0]);
-        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;
 }
 
-
-
 /*
  * Macintosh support functions.
  */
@@ -2366,3 +2536,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.3/src/db.c ./rom2.3-colour/src/db.c
--- /proj/Mud/servers/rom2.3/src/db.c	Mon Jan 10 21:30:58 1994
+++ ./rom2.3-colour/src/db.c	Thu Oct 17 20:18:58 1996
@@ -32,11 +32,6 @@
 #include "db.h"
 
 
-#if defined(unix)
-extern int getrlimit(int resource, struct rlimit *rlp);
-extern int setrlimit(int resource, struct rlimit *rlp);
-#endif
-
 #if !defined(macintosh)
 extern	int	_filbuf		args( (FILE *) );
 #endif
@@ -2654,7 +2649,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;
     }
 
@@ -2668,7 +2663,7 @@
     {
 	sprintf( buf, "%-39s%-39s\n\r",
 	    pArea1->name, (pArea2 != NULL) ? pArea2->name : "" );
-	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.3/src/handler.c ./rom2.3-colour/src/handler.c
--- /proj/Mud/servers/rom2.3/src/handler.c	Sat Jan 15 05:14:24 1994
+++ ./rom2.3-colour/src/handler.c	Sat Jan 13 17:41:17 1996
@@ -2186,6 +2186,7 @@
     else
     {
 	strcat(buf," player");
+	if (act_flags & PLR_COLOUR      ) strcat(buf, " colour");
 	if (act_flags & PLR_BOUGHT_PET	) strcat(buf, " owner");
 	if (act_flags & PLR_AUTOASSIST	) strcat(buf, " autoassist");
 	if (act_flags & PLR_AUTOEXIT	) strcat(buf, " autoexit");
diff -ur /proj/Mud/servers/rom2.3/src/interp.c ./rom2.3-colour/src/interp.c
--- /proj/Mud/servers/rom2.3/src/interp.c	Sat Jan 15 05:09:31 1994
+++ ./rom2.3-colour/src/interp.c	Sat Jan 13 17:38:56 1996
@@ -139,6 +139,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.3/src/interp.h ./rom2.3-colour/src/interp.h
--- /proj/Mud/servers/rom2.3/src/interp.h	Thu Nov  4 05:48:11 1993
+++ ./rom2.3-colour/src/interp.h	Sat Jan 13 17:37:53 1996
@@ -62,6 +62,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.3/src/merc.h ./rom2.3-colour/src/merc.h
--- /proj/Mud/servers/rom2.3/src/merc.h	Mon Feb  7 12:33:41 1994
+++ ./rom2.3-colour/src/merc.h	Fri Oct 25 21:51:28 1996
@@ -142,6 +142,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	""
 
 
 /*
@@ -1060,6 +1079,11 @@
 #define PLR_NOFOLLOW		(R)
 /* 4 bits reserved, S-V */
 
+/*
+ * Colour stuff by Lope of Loping Through The MUD
+ */
+#define PLR_COLOUR		(T)    /* Colour Flag By Lope */
+
 
 /* penalty flags */
 #define PLR_LOG			(W)
@@ -1833,6 +1857,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 */
 void	boot_db		args( ( void ) );
diff -ur /proj/Mud/servers/rom2.3/src/startup ./rom2.3-colour/src/startup
--- /proj/Mud/servers/rom2.3/src/startup	Sat Oct 23 10:08:57 1993
+++ ./rom2.3-colour/src/startup	Sat Jan 13 18:18:07 1996
@@ -1,3 +1,4 @@
+#! /bin/csh -f
 # Written by Furey.
 # With additions from Tony.