From: Mark Gerritsen Subject: Scan snippet My version of scan. --- Somewhere in act.informative.c, add: ACMD(do_scan) { struct char_data *i; int is_in, dir, dis, maxdis, found = 0; const char *distance[] = { "right here", "immediately ", "nearby ", "a ways ", "far ", "very far ", "extremely far ", "impossibly far ", }; if (IS_AFFECTED(ch, AFF_BLIND)) { act("You can't see anything, you're blind!", TRUE, ch, 0, 0, TO_CHAR); return; } if ((GET_MOVE(ch) < 3) && (GET_LEVEL(ch) < LVL_IMMORT)) { act("You are too exhausted.", TRUE, ch, 0, 0, TO_CHAR); return; } maxdis = (1 + ((GET_SKILL(ch, SKILL_SCAN) * 5) / 100)); if (GET_LEVEL(ch) >= LVL_IMMORT) maxdis = 7; act("You quickly scan the area and see:", TRUE, ch, 0, 0, TO_CHAR); act("$n quickly scans the area.", FALSE, ch, 0, 0, TO_ROOM); if (GET_LEVEL(ch) < LVL_IMMORT) GET_MOVE(ch) -= 3; is_in = ch->in_room; for (dir = 0; dir < NUM_OF_DIRS; dir++) { ch->in_room = is_in; for (dis = 0; dis <= maxdis; dis++) { if (((dis == 0) && (dir == 0)) || (dis > 0)) { for (i = world[ch->in_room].people; i; i = i->next_in_room) { if ((!((ch == i) && (dis == 0))) && CAN_SEE(ch, i)) { sprintf(buf, "%33s: %s%s%s%s", GET_NAME(i), distance[dis], ((dis > 0) && (dir < (NUM_OF_DIRS - 2))) ? "to the " : "", (dis > 0) ? dirs[dir] : "", ((dis > 0) && (dir > (NUM_OF_DIRS - 3))) ? "wards" : ""); act(buf, TRUE, ch, 0, 0, TO_CHAR); found++; } } } if (!CAN_GO(ch, dir) || (world[ch->in_room].dir_option[dir]->to_room == is_in)) break; else ch->in_room = world[ch->in_room].dir_option[dir]->to_room; } } if (found == 0) act("Nobody anywhere near you.", TRUE, ch, 0, 0, TO_CHAR); ch->in_room = is_in; } --- In interpreter.c, with the ACMDs, add: ACMD(do_scan); --- and in the commands list: { "scan" , POS_STANDING, do_scan , 0, 0 }, You'll also need to define the skill like normal (on our MUD thieves can scan further) Enjoy, and happy coding, Havoc of Dagmarck (Mark Gerritsen)