From: Jon Barrett Subject: Affects screen for spell affects This small function will display a well organized list of all of the players spell affects. It will only display spell/skill affect, ie: no flags or object affects. The information will get more specific as the char gains levels. There are 4 states, currently they are: level 1-6: will show only the spell name level 7-13: will show the spell name, how many applies it has and the duration of the spell level 14-20: will show all of the abov plus the apply name level 20+: will show all of the above plus the added AFF_X bit To change the levels for the states, just change the number at each stage to the minimum level of the char for that stage. Each stage is marked. To add this function: Add the following to act.informative.c: // Affects screen for spell affects {Jon Barrett, mizzrym@hotmail.com, 26APR98} ACMD(do_affects) { struct affected_type* af; int type=1; char sname[256]; char added_aff[MAX_STRING_LENGTH]; extern char *spells[]; extern char *apply_types[]; extern char *affected_bits[]; send_to_char("You carry these affections: \r\n", ch); for (af = ch->affected; af; af = af->next) { strcpy(sname, spells[af->type]); strcat(sname, ":"); if (GET_LEVEL(ch) >= 7) { // first state is here sprintf(buf, " %s%-22s%s affects %s%s%s by %s%d%s for %s%d%s hours\r\n", CCCYN(ch, C_NRM), (type ? sname : ""), CCNRM(ch, C_NRM), CCCYN(ch, C_NRM), ((GET_LEVEL(ch)>=14 && af->location) ? apply_types[af->location] : "Something") , // second state is here CCNRM(ch, C_NRM), CCCYN(ch, C_NRM), af->modifier, CCNRM(ch, C_NRM), CCCYN(ch, C_NRM), af->duration, CCNRM(ch, C_NRM)); send_to_char(buf, ch); if (GET_LEVEL(ch) >= 21 && (af->bitvector && (!af->next || af->next->bitvector != af->bitvector))) { // third state is here sprintbit(af->bitvector, affected_bits, added_aff); sprintf(buf1, "%35sadds %s%s\r\n", CCCYN(ch, C_NRM), added_aff, CCNRM(ch, C_NRM )); send_to_char(buf1, ch); } } else if (type){ sprintf(buf, " %s%-25s%s\r\n", CCCYN(ch, C_NRM), sname, CCNRM(ch, C_NRM)); send_to_char(buf, ch); } type = af->next ? (af->next->type != af->type) : 1; } } Add this to the function declarations in interpreter.c: ACMD(do_affects); Finally add this to the command table in interpreter.c: { "affects" , POS_DEAD , do_affects , 0, 0 }, That should do it. This code was tested, and it worked fine, but I am not responsible for any problem it may cause. Hope you like it.