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 "[0m" /* Resets Colour */ +#define C_RED "[0;31m" /* Normal Colours */ +#define C_GREEN "[0;32m" +#define C_YELLOW "[0;33m" +#define C_BLUE "[0;34m" +#define C_MAGENTA "[0;35m" +#define C_CYAN "[0;36m" +#define C_WHITE "[0;37m" +#define C_D_GREY "[1;30m" /* Light Colors */ +#define C_B_RED "[1;31m" +#define C_B_GREEN "[1;32m" +#define C_B_YELLOW "[1;33m" +#define C_B_BLUE "[1;34m" +#define C_B_MAGENTA "[1;35m" +#define C_B_CYAN "[1;36m" +#define C_B_WHITE "[1;37m" /* @@ -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 },