here is a reposting of the color parser for those who asked/missed it:
first we make some changes/additions to utils.h.. add the following at the
top whereever you want to place it.
#define colorcode(x) ( (x>=64 && x<=127) ? de_col[x-64] : 0 )
char de_col[] =
{ /* Not beautiful, but efficient :) */
0, 0, '4', '6',
0, 0, 0, '2',
0, 0, 0, 0,
'0', '5', 0, 0,
0, 0, '1', 0,
0, 0, 0, '7',
0, '3', 0, 0,
0, 0, 0, 0,
0, 0, '4', '6',
0, 0, 0, '2',
0, 0, 0, 0,
'0', '5', 0, 0,
0, 0, '1', 0,
0, 0, 0, '7',
0, '3', 0, 0,
0, 0, 0, 0,
};
then we add this function down at the bottom (don't forget to prototype it
*grin*)
char *fix_color (struct char_data *ch, unsigned char *src)
{
char *dest;
static char str5[LARGE_BUFSIZE + GARBAGE_SPACE];
int flash = 0;
int changed = 0;
dest = str5;
while (*src != 0) {
if (*src != '&') {
*dest++ = *src++;
} else {
if (*(src + 1) == '*') {
flash = 1;
src++;
}
switch (*(src + 1)) {
case '&':
src += 2;
*dest++ = '&';
continue;
case '+':
changed = 1;
if (colorcode (*(src + 2))) {
if (clr(ch, 1)) {
if (flash) {
flash = 0;
strcpy((char *) dest, "\033[1;5;30m");
dest[7] = colorcode (*(src + 2));
if (*(src + 2) >= 96)
dest[2] = '0';
dest += 9;
} else {
strcpy ((char *) dest, "\033[1;30m");
dest[5] = colorcode (*(src + 2));
if (*(src + 2) >= 96)
dest[2] = '0';
dest += 7;
}
}
src += 3;
continue;
} else {
*dest++ = *src++;
continue;
}
case '-':
changed = 1;
if (colorcode (*(src + 2))) {
if (clr(ch, 1)) {
if (flash) {
flash = 0;
strcpy((char *) dest, "\033[1;40m");
dest[5] = colorcode (*(src + 2));
if (*(src + 2) >= 96)
dest[2] = '0';
dest += 9;
} else {
strcpy ((char *) dest, "\033[1;0;40m");
dest[7] = colorcode (*(src + 2));
if (*(src + 2) >= 96)
dest[2] = '0';
dest += 7;
}
}
src += 3;
continue;
} else {
*dest++ = *src++;
continue;
}
case '=':
changed = 1;
if (colorcode (*(src + 2)) && colorcode (*(src + 3))) {
if (clr(ch, 1)) {
if (flash) {
flash = 0;
strcpy((char *) dest, "\033[1;5;40;30m");
dest[7] = colorcode (*(src + 3));
dest[9] = colorcode (*(src + 2));
if (*(src + 2) >= 96)
dest[2] = '0';
dest += 12;
} else {
strcpy ((char *) dest, "\033[1;40;30m");
dest[5] = colorcode (*(src + 3));
dest[8] = colorcode (*(src + 2));
if (*(src + 2) >= 96)
dest[2] = '0';
dest += 10;
}
}
src += 4;
continue;
} else {
*dest++ = *src++;
continue;
}
default:
*dest++ = *src++;
continue;
}
}
}
if(changed == 1)
strcpy ((char *) dest, "\033[0m\0");
else
strcpy((char *) dest, "\0");
return(str5);
}
then we make some changes in comm.c in void process_output.. the
added/changed lines are marked with a +
int process_output(struct descriptor_data * t)
{
static char i[LARGE_BUFSIZE + GARBAGE_SPACE];
static int result;
+ extern char *fix_color(struct char_data *ch, char *src);
+ char *col2;
+ col2 = fix_color(t->character, t->output);
/* we may need this \r\n for later -- see below */
strcpy(i, "\r\n");
/* now, append the 'real' output */
+ strcpy(i + 2, col2);
thats it.. then you use the & in your text (gossip/gecho/etc.. or in your
room descrips and what have you.)
the following letters represent colors, lowercase is standard color,
UPPERcase is BOLD color, &+ is color, &- is highlighted, &=## is set
foreground/background where the # is a letter. placeing a * after the & and
before the following character will create blinking colors.
(r)ed
(y)ellow
(c)yan
(b)lue
(g)reen
(w)hite
(m)agenta
(l)black/grey
note.. a lowercase white is the same as normal text.
This archive was generated by hypermail 2b30 : 12/07/00 PST