In structs.h: near: /* memory structure for characters */ struct memory_rec_struct { add: char *name; In interpreter.c: At the prototype section, under ACMD(do_look); add: ACMD(do_mobmem); In the master command list, under { "motd" , POS_DEAD , do_gen_ps , 0, SCMD_MOTD }, add: { "mobmem" , POS_DEAD , do_mobmem , LVL_GOD, 0 }, In mobact.c: near: /* make ch remember victim */ void remember(struct char_data *ch, struct char_data *victim) if (!present) { CREATE(tmp, memory_rec, 1); tmp->next = MEMORY(ch); tmp->id = GET_IDNUM(victim); tmp->name = GET_NAME(victim); <--- Add. MEMORY(ch) = tmp; } near: /* make ch forget victim */ void forget(struct char_data *ch, struct char_data *victim) replace: while ((curr && curr->id != GET_IDNUM(victim)) { prev = curr; curr = curr->next; } with: while ((curr && curr->id != GET_IDNUM(victim)) || (curr && curr->name != GET_NAME(victim))) { prev = curr; curr = curr->next; } In act.wizard.c: in the function do_stat_character, near the other structures, add: struct memory_rec_struct *names; Then look for /* Showing the bitvector */ Add: /* Show player on mobs memory list */ if (IS_NPC(k) && (MOB_FLAGGED(k, MOB_MEMORY))) { send_to_char(ch, "Mob Memory: "); for (names = MEMORY(k); names && !found; names = names->next) send_to_char(ch, "%s ", names->name); } send_to_char(ch, "\r\n"); Finally, slap in this function: ACMD(do_mobmem) { void forget(struct char_data * ch, struct char_data * victim); int i = 1; char arg1[5], arg2[80], arg3[80]; struct char_data *vic; struct char_data *mob; one_argument(two_arguments(argument, arg1, arg2), arg3); if (!*arg1) { send_to_char(ch, "Usage: mobmem \r\n"); return; } switch (*arg1) { /* add */ case 'a': i--; break; /* remove */ case 'r': i++; break; default: send_to_char(ch, "Usage: mobmem \r\n"); return; } if (((vic = get_char_vis(ch, arg2, NULL, FIND_CHAR_WORLD))) && (!IS_NPC(vic))) { if (((mob = get_char_vis(ch, arg3, NULL, FIND_CHAR_WORLD))) && (IS_NPC(mob))) { if (MOB_FLAGGED(mob, MOB_MEMORY)) if (!i) remember(mob, vic); else forget(mob, vic); else { send_to_char(ch, "Mobile does not have the memory flag set!\r\n"); return; } } else { send_to_char(ch, "Sorry, Player Not Found!\r\n"); return; } } else { send_to_char(ch, "Sorry, Mobile Not Found!\r\n"); return; } send_to_char(ch, "%s has been %s %s pissed list.\r\n", GET_NAME(vic), i ? "removed from" : "added to", GET_NAME(mob)); mudlog(NRM, MAX(LVL_GOD, GET_INVIS_LEV(ch)), TRUE, "(GC) %s has %s %s %s %s memory.", GET_NAME(ch), i ? "removed" : "added", GET_NAME(vic), i ? "from" : "to", GET_NAME(mob)); }