Mud20/accounts/
Mud20/accounts/c/
Mud20/accounts/f/
Mud20/accounts/k/
Mud20/accounts/s/
Mud20/accounts/t/
Mud20/area_current/
Mud20/area_current/newareas/
Mud20/bin/
Mud20/clans/
Mud20/gods/
Mud20/old-sources/
Mud20/player/
Mud20/player/a/del/
Mud20/player/b/
Mud20/player/b/bak/
Mud20/player/b/del/
Mud20/player/f/
Mud20/player/f/bak/
Mud20/player/f/del/
Mud20/player/k/
Mud20/player/k/bak/
Mud20/player/k/del/
Mud20/player/k/dmp/
Mud20/player/m/
Mud20/player/m/bak/
Mud20/player/o/
Mud20/player/o/bak/
Mud20/player/p/
Mud20/player/s/
Mud20/player/s/bak/
Mud20/player/s/del/
Mud20/player/t/
Mud20/player/t/del/
Mud20/player/v/
Mud20/public_html/
Mud20/races/
Mud20/skilltables/
__MACOSX/Mud20/accounts/
__MACOSX/Mud20/accounts/c/
__MACOSX/Mud20/accounts/f/
__MACOSX/Mud20/accounts/k/
__MACOSX/Mud20/accounts/s/
__MACOSX/Mud20/area_current/
__MACOSX/Mud20/area_current/core_areas/
__MACOSX/Mud20/area_current/helps/
__MACOSX/Mud20/area_current/newareas/
__MACOSX/Mud20/backups/
__MACOSX/Mud20/bin/
__MACOSX/Mud20/clans/
__MACOSX/Mud20/gods/
__MACOSX/Mud20/log/
__MACOSX/Mud20/old-sources/
__MACOSX/Mud20/player/
__MACOSX/Mud20/player/a/del/
__MACOSX/Mud20/player/b/
__MACOSX/Mud20/player/b/bak/
__MACOSX/Mud20/player/f/
__MACOSX/Mud20/player/f/bak/
__MACOSX/Mud20/player/f/del/
__MACOSX/Mud20/player/k/
__MACOSX/Mud20/player/k/bak/
__MACOSX/Mud20/player/k/del/
__MACOSX/Mud20/player/k/dmp/
__MACOSX/Mud20/player/m/
__MACOSX/Mud20/player/m/bak/
__MACOSX/Mud20/player/o/
__MACOSX/Mud20/player/o/bak/
__MACOSX/Mud20/player/p/
__MACOSX/Mud20/player/s/
__MACOSX/Mud20/player/s/bak/
__MACOSX/Mud20/player/t/del/
__MACOSX/Mud20/player/v/
__MACOSX/Mud20/public_html/
__MACOSX/Mud20/races/
__MACOSX/Mud20/skilltables/
/***************************************************************************
 * Mud20 1.0 by Todd H. Johnson (Kregor) a derivative of the Open Gaming   *
 * License by Wizards of the Coast. All comments referring to D20, OGL,    *
 * and SRD refer to the System Reference Document for the Open Gaming      *
 * system. Any inclusion of these derivatives must include credit to the   *
 * Mud20 system, the full and complete Open Gaming LIcense, and credit to  *
 * the respective authors. See ../doc/srd.txt for more information.        *
 *                                                                         *
 * Emud  2.2 by Igor van den Hoven, Michiel Lange, and Martin Bethlehem.   *
 *                                                                         *
 * MrMud 1.4 by David Bills, Dug Michael and Martin Gallwey                *
 *                                                                         *
 * Merc  2.1 Diku Mud improvments copyright (C) 1992, 1993 by Michael      *
 * Chastain, Michael Quan, and Mitchell Tse.                               *
 *                                                                         *
 * Original Diku Mud copyright (C) 1990 1991 by Sebastian Hammer,          *
 * Michael Seifert, Hans Henrik St{rfeld, Tom Madsen, and Katje Nyboe.     *
 ***************************************************************************/

/***************************************************************************
 * interp.c: Handles interpretation and execution of commands						   *
 ***************************************************************************/

#include <sys/time.h>
#include "mud.h"

void    process_command( CHAR_DATA *, char *);
void preprocess_command( CHAR_DATA *, char *);

/*
	Command logging types.
*/

#define LOG_NORMAL      0
#define LOG_ALWAYS      1
#define LOG_NEVER       2

#define LI	LEVEL_IMMORTAL
#define ML	MAX_LEVEL
#define LD	75
#define LE	90
#define LH	60

/*
	Command table.
*/

const struct cmd_type cmd_table [] =
{
	{ "//",						do_osay,				POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_DEAD|CMD_NOHELP},
	{ "?",						do_context_help,POS_DEAD,		 	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_BERSERK|CMD_NOHELP},
	{ "'",						do_say,					POS_RESTING,	-8,	ACTION_FREE,			LOG_NORMAL,		CMD_DEAD|CMD_NOHELP},
	{ ">",						do_immtalk,			POS_SLEEPING,	LI,	ACTION_FREE,			LOG_NORMAL,		CMD_NOHELP},
	{ "*",						do_emote,				POS_DEAD,			-8,	ACTION_FREE,			LOG_NORMAL,		CMD_DEAD|CMD_BERSERK|CMD_NOHELP},

// 	{ "a",						do_a,						POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NOHELP},
	{ "attack",     	do_attack,			POS_FIGHTING,	-9,	ACTION_FREE,			LOG_NORMAL,		CMD_BERSERK|CMD_ATTACK},
	{ "activate",			do_activate,		POS_RESTING,	-9,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "affects",			do_affects,			POS_DEAD,			-8,	ACTION_FREE,			LOG_NORMAL,		CMD_BERSERK},
	{ "abilities",		do_abilities,		POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "adjective",		do_adjective,		POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "advance",			do_advance,			POS_DEAD,			ML,	ACTION_FREE,			LOG_ALWAYS,		CMD_NONE},
	{ "afk",					do_afk,					POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "aid",					do_aid,					POS_KNEELING,	 1,	ACTION_STANDARD,	LOG_NORMAL,		CMD_NONE},
	{ "alias",				do_alias,				POS_DEAD,			-3,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "alist",				do_alist,				POS_DEAD,   	LD,	ACTION_FREE,			LOG_NORMAL,		CMD_BUILDER},
	{ "answer",				do_answer,			POS_DEAD,			-3,	ACTION_FREE,			LOG_NORMAL,		CMD_HELPER|CMD_ENFORCER},
	{ "appraise",			do_appraise,		POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "areas",				do_areas,				POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "arrest",				do_arrest,			POS_DEAD,			-3,	ACTION_FREE,			LOG_NORMAL,		CMD_ENFORCER},
	{ "assassinate",	do_assassinate,	POS_STANDING,	-3,	ACTION_FREE,			LOG_NORMAL,		CMD_ATTACK},
	{ "astat",				do_astat,				POS_DEAD,			LD,	ACTION_FREE,			LOG_NORMAL,		CMD_BUILDER|CMD_TESTER},
	{ "at",						do_at,					POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "authorize",		do_authorize,		POS_DEAD,			-3,	ACTION_FREE,			LOG_NORMAL,		CMD_HELPER|CMD_ENFORCER},


	{ "bash",					do_bash,				POS_FIGHTING,	-3,	ACTION_FREE,			LOG_NORMAL,		CMD_BERSERK|CMD_ATTACK},
	{ "buy",					do_buy,					POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "bank",					do_bank,				POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "banish",				do_ban,					POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "bamfin",				do_bamfin,			POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "bamfout",			do_bamfout,			POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "beep",					do_beep,				POS_SLEEPING,	-3,	ACTION_FREE,			LOG_NORMAL,		CMD_ENFORCER},
	{ "bio",					do_bio,					POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "block",				do_block,				POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "bluff",				do_bluff,				POS_STANDING,	-3,	ACTION_STANDARD,	LOG_NORMAL,		CMD_NONE},
	{ "bounty",				do_bounty,			POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "brew",					do_brew,				POS_SITTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "breath",				do_breath,			POS_FIGHTING,	-3,	ACTION_STANDARD,	LOG_NORMAL,		CMD_ATTACK},
	{ "bullrush",			do_bullrush,		POS_FIGHTING,	-3,	ACTION_STANDARD,	LOG_NORMAL,		CMD_BERSERK|CMD_ATTACK},
	{ "buffer",				do_buffer,			POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "burn",					do_burn,				POS_STANDING,	-3,	ACTION_FULL,			LOG_NORMAL,		CMD_NONE},


	{ "cast",					do_cast,				POS_FIGHTING,	-8,	ACTION_FREE,			LOG_NORMAL,		CMD_NO_MAGIC},
	{ "camp",					do_camp,				POS_RESTING,	-3,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "chat",					do_chat,				POS_SLEEPING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "charge",				do_charge,			POS_FIGHTING,	-3,	ACTION_FULL,			LOG_NORMAL,		CMD_BERSERK|CMD_ATTACK},
// 	{ "clans",				do_clans,				POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
// 	{ "clanmessage",	do_clan_mssg,		POS_DEAD,			ML,	ACTION_FREE,			LOG_ALWAYS,		CMD_NONE},
// 	{ "clanset",			do_clanset,			POS_RESTING,	10,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
// 	{ "clanwhere",		do_clanwhere,		POS_RESTING,	10,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
// 	{ "clanrent",			do_clan_rent,				POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "claim",				do_claim,				POS_STANDING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "cloak",				do_cloak,				POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "close",				do_close,				POS_RESTING,	-8,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "clock",				do_clock,				POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
// 	{ "coffer",				do_coffer,			POS_RESTING,	10,	ACTION_FREE,			LOG_ALWAYS,		CMD_HIDE},
	{ "color",				do_color,				POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "combatmode",		do_combatmode,	POS_RESTING,	-9,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "commands",			do_commands,		POS_DEAD,			-8,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "compare",			do_compare,			POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "components",		do_components,	POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "complaint",		do_complaint,		POS_DEAD,			-3,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "consider",			do_consider,		POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "conceal",			do_conceal,			POS_RESTING,	-8,	ACTION_STANDARD,	LOG_NORMAL,		CMD_NONE},
	{ "connect",			do_connect,			POS_DEAD,			LD,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "config",				do_config,			POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "cook",					do_cook,				POS_RESTING,	-3,	ACTION_FULL,			LOG_NORMAL,		CMD_NONE},
	{ "copyover",			do_copyover,		POS_DEAD,			ML,	ACTION_FREE,			LOG_ALWAYS,		CMD_QUIT},
	{ "counterspell", do_counterspell,POS_FIGHTING,	-3,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "coupdegrace",  do_coupdegrace,	POS_FIGHTING,	-8,	ACTION_FULL,			LOG_NORMAL,		CMD_BERSERK|CMD_ATTACK},
	{ "craft",				do_craft,				POS_STANDING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "crouch",				do_crouch,			POS_RESTING,	-9,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "credits",			do_credits,			POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},


	{ "down",					do_down,				POS_STANDING,	-9,	ACTION_MOVE,			LOG_NORMAL,		CMD_IDLE|CMD_BERSERK},
	{ "diceroll",			do_diceroll,		POS_DEAD,			-9,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "death",				do_death,				POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "delay",     		do_delay,				POS_RESTING,	-9,	ACTION_FREE,			LOG_NORMAL,		CMD_BERSERK},
	{ "delete",				do_delete,			POS_DEAD,			 1,	ACTION_FREE,			LOG_NEVER,		CMD_QUIT},
	{ "demand",				do_demand,			POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "deny",					do_deny,				POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "description",	do_description,	POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "destroy",			do_destroy,			POS_DEAD,			ML,	ACTION_FREE,			LOG_ALWAYS,		CMD_NONE},
	{ "disarm",				do_disarm,			POS_FIGHTING,	-3,	ACTION_STANDARD,	LOG_NORMAL,		CMD_BERSERK|CMD_ATTACK},
	{ "disable",			do_disable,			POS_KNEELING,	-3,	ACTION_STANDARD,	LOG_NORMAL,		CMD_NONE},
	{ "disconnect",		do_disconnect,	POS_DEAD,			LI,	ACTION_FREE,			LOG_ALWAYS,		CMD_NONE},
	{ "discharge",		do_discharge,		POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "disguise",			do_disguise,		POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "dismount",			do_dismount,		POS_FIGHTING,	-9,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "dismiss",			do_dismiss,			POS_RESTING,	-3,	ACTION_STANDARD,	LOG_NORMAL,		CMD_NONE},
	{ "divert",				do_divert,			POS_FIGHTING,	 1,	ACTION_MOVE,			LOG_NORMAL,		CMD_NONE},
	{ "domains",			do_domain,			POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
// 	{ "donate",				do_donate,			POS_RESTING,	10,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "doorset",			do_door,				POS_DEAD,			LD,	ACTION_FREE,			LOG_NORMAL,		CMD_BUILDER},
	{ "drink",				do_drink,				POS_RESTING,	 1,	ACTION_STANDARD,	LOG_NORMAL,		CMD_NONE},
	{ "drag",					do_drag,				POS_RESTING,	-9,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "draw",					do_draw,				POS_SITTING,	-8,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "drop",					do_drop,				POS_RESTING,	-9,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "dump",					do_dump,				POS_RESTING,	LI,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},


	{ "east",					do_east,				POS_STANDING,	-9,	ACTION_MOVE,			LOG_NORMAL,		CMD_IDLE|CMD_BERSERK},
	{ "eat",					do_eat,					POS_RESTING,	-9,	ACTION_STANDARD,	LOG_NORMAL,		CMD_NONE},
	{ "echo",					do_echo,				POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "edit",					do_edit,				POS_DEAD,			LD,	ACTION_FREE,			LOG_NORMAL,		CMD_BUILDER},
	{ "email",				do_email,				POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "emote",				do_emote,				POS_RESTING,	-8,	ACTION_FREE,			LOG_NORMAL,		CMD_BERSERK},
	{ "empty",				do_empty,				POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NOFIGHT},
	{ "enchant",			do_enchant,			POS_STANDING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "enter",				do_enter,				POS_STANDING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "equipment",		do_equipment,		POS_DEAD,			-9,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "examine",			do_examine,			POS_RESTING,	-8,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "exits",				do_exits,				POS_RESTING,	-8,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},


	{ "familiar",			do_familiar,		POS_FIGHTING,	-3,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "faveenemy",		do_faveenemy,		POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "feats",				do_feats,				POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "feint",				do_feint,				POS_FIGHTING,	-3,	ACTION_FREE,			LOG_NORMAL,		CMD_ATTACK},
	{ "fly",					do_fly,					POS_STANDING,	-9,	ACTION_FREE,			LOG_NORMAL,		CMD_IDLE|CMD_BERSERK},
	{ "fight",     		do_fight,				POS_FIGHTING,	-9,	ACTION_FREE,			LOG_NORMAL,		CMD_BERSERK|CMD_ATTACK},
	{ "fill",					do_fill,				POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NOFIGHT},
	{ "finger",				do_finger,			POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "fish",					do_fish,				POS_STANDING,	 1,	ACTION_FULL,			LOG_NORMAL,		CMD_NONE},
	{ "fixpass",			do_fixpass,			POS_DEAD,			LI,	ACTION_FREE,			LOG_ALWAYS,		CMD_NONE},
	{ "follow",				do_follow,			POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "forage",				do_forage,			POS_STANDING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "force",				do_force,				POS_DEAD,			LI,	ACTION_FREE,			LOG_ALWAYS,		CMD_NONE},
// 	{ "forceren",			do_forceren,		POS_DEAD,			ML,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
// 	{ "forcerent",		do_forcerent,		POS_DEAD,			ML,	ACTION_FREE,			LOG_ALWAYS,		CMD_NONE},
	{ "forget",				do_forget, 			POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "freeze",				do_freeze,			POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},


	{ "get",					do_get,					POS_RESTING,	-9,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "give",					do_give,				POS_RESTING,	-8,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "gaze",					do_gaze,				POS_FIGHTING,	-3,	ACTION_STANDARD,	LOG_NORMAL,		CMD_NONE},
	{ "goto",					do_goto,				POS_DEAD,			LD,	ACTION_FREE,			LOG_NORMAL,		CMD_BUILDER|CMD_TESTER},
	{ "gouge",				do_gouge,				POS_FIGHTING,	-3,	ACTION_STANDARD,	LOG_NORMAL,		CMD_BERSERK|CMD_ATTACK},
	{ "greet",				do_greet,				POS_SLEEPING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "grapple",			do_grapple,			POS_FIGHTING,	-3,	ACTION_STANDARD,	LOG_NORMAL,		CMD_BERSERK|CMD_ATTACK},
	{ "grep",					do_grep,				POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE|CMD_BERSERK},
	{ "group",				do_group,				POS_SLEEPING,	-8,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},


	{ "help",					do_help,				POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "heal",					do_heal,				POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "hitch",				do_hitch,				POS_STANDING,	 1,	ACTION_FULL,			LOG_NORMAL,		CMD_NONE},
	{ "hlist",				do_hlist,				POS_DEAD, 		LD,	ACTION_FREE,			LOG_NORMAL,		CMD_BUILDER},
	{ "hold",					do_hold,				POS_RESTING,	-8,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "holylight",		do_holylight,		POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "html",					do_html,				POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},


	{ "inventory",		do_inventory,		POS_DEAD,			-8,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "identify",			do_identify,		POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "immtalk",			do_immtalk,			POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
// 	{ "initiate",			do_initiate,		POS_RESTING,	10,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "intimidate",		do_intimidate,	POS_STANDING,	-8,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "instaroom",		do_instaroom,		POS_DEAD,			LD,	ACTION_FREE,			LOG_NORMAL,		CMD_BUILDER},
	{ "instazone",		do_instazone,		POS_DEAD,			LD,	ACTION_FREE,			LOG_NORMAL,		CMD_BUILDER},
	{ "invis",				do_invis,				POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},


	{ "join",					do_join,				POS_RESTING,	-8,	ACTION_MOVE,			LOG_NORMAL,		CMD_NONE},
	{ "jump",					do_jump,				POS_STANDING,	-9,	ACTION_STANDARD,	LOG_NORMAL,		CMD_IDLE|CMD_BERSERK},
	{ "junk",					do_junk,				POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},


	{ "kneel",				do_kneel,				POS_RESTING,	-9,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE|CMD_DEAD},
	{ "knock",				do_knock,				POS_RESTING,	-8,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},


	{ "look",					do_look,				POS_RESTING,	-9,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE|CMD_BERSERK|CMD_DEAD},
	{ "land",					do_land,				POS_STANDING,	-9,	ACTION_FREE,			LOG_NORMAL,		CMD_IDLE|CMD_BERSERK},
	{ "languages",		do_languages,		POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "learn",				do_learn,				POS_SITTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "level",				do_level,				POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "list",					do_list,				POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "listen",				do_listen,			POS_RESTING,	-8,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE|CMD_BERSERK|CMD_DEAD},
	{ "link",					do_link,				POS_DEAD,			LD,	ACTION_FREE,			LOG_NORMAL,		CMD_BUILDER},
	{ "lock",					do_lock,				POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "locate",				do_locate,			POS_STANDING,	 1,	ACTION_FULL,			LOG_NORMAL,		CMD_NONE},
	{ "log",					do_log,					POS_DEAD,			-3,	ACTION_FREE,			LOG_NORMAL,		CMD_ENFORCER},


	{ "map",					do_map,					POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
// 	{ "makeclan",			do_makeclan,		POS_RESTING,	10,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mana",					do_mana,				POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "maze",					do_maze,				POS_DEAD,			LI,	ACTION_FREE,			LOG_ALWAYS,		CMD_NONE},
	{ "metamagic",		do_metamagic,		POS_RESTING,	-8,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "mfind",				do_mfind,				POS_DEAD,			LD,	ACTION_FREE,			LOG_NORMAL,		CMD_BUILDER},
	{ "mount",				do_mount,				POS_FIGHTING,	-9,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "move",					do_move,				POS_DEAD,			-9,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "makewild",			do_makewild,		POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "mute",					do_mute,				POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "mlist",				do_mlist,				POS_DEAD,   	LD,	ACTION_FREE,			LOG_NORMAL,		CMD_BUILDER|CMD_TESTER},
	{ "mload",				do_mload,				POS_DEAD,			LD,	ACTION_FREE,			LOG_NORMAL,		CMD_BUILDER},
	{ "mimic",				do_mimic,				POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "mpareaecho",		do_mpareaecho,	POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mpaset",				do_mpaset,			POS_DEAD,			LI,	ACTION_FREE,			LOG_ALWAYS,		CMD_HIDE},
	{ "mpasound",			do_mpasound,		POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mpat",					do_mpat,				POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mpcalculate",	do_mpcalculate,	POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mpclearfeat",	do_mpclearfeat,	POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mpcommands", 	do_mpcommands,	POS_DEAD, 		LI,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "mpdamage",			do_mpdamage,		POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mpdelay",			do_mpdelay,			POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mpdo",					do_mpdo,				POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mpecho",				do_mpecho,			POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mpechoaround",	do_mpechoaround,POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mpechoat",			do_mpechoat,		POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mpfollow",			do_mpfollow,		POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mpforce",			do_mpforce, 		POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mpgorand",			do_mpgorand,		POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mpgoto",				do_mpgoto,			POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mpinfect",			do_mpinfect,		POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mpjunk",				do_mpjunk,			POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mpjunkperson",	do_mpjunk_person,	POS_DEAD,		LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mpkill",				do_mpkill,			POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mplock",				do_mplock,			POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mplog",				do_mplog,				POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mpmadd",				do_mpmadd,			POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mpmload",			do_mpmload, 		POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mpmset",				do_mpmset,			POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mpoadd",				do_mpoadd,			POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mpoload",			do_mpoload, 		POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mposet",				do_mposet,			POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mppoison",			do_mppoison,		POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mppractice",		do_mppractice,	POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mppurge",			do_mppurge, 		POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mpquiet",			do_mpquiet, 		POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mpsetfeat",		do_mpsetfeat,		POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mpstat",				do_mpstat,			POS_DEAD,			LD,	ACTION_FREE,			LOG_NORMAL,		CMD_BUILDER|CMD_TESTER},
	{ "mpswap",				do_mpswap,			POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mptransfer",		do_mptransfer,	POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mptrigger",		do_mptrigger,		POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mpunintercept",do_mpunintercept,	POS_SLEEPING,	LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mpunlock",			do_mpunlock,		POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mpwalkto",			do_mpwalkto,		POS_SLEEPING,	LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "mpzset",				do_mpzset,			POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "madd",					do_madd,				POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "mset",					do_mset,				POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "mstat",				do_mstat,				POS_DEAD,			LD,	ACTION_FREE,			LOG_NORMAL,		CMD_BUILDER|CMD_TESTER},
	{ "mwhere",				do_mwhere,			POS_DEAD,   	LD,	ACTION_FREE,			LOG_NORMAL,		CMD_BUILDER},


	{ "north",				do_north,				POS_STANDING,	-9,	ACTION_MOVE,			LOG_NORMAL,		CMD_IDLE|CMD_BERSERK},
	{ "nbanish",			do_nban,				POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "nohelps",			do_nohelps,			POS_DEAD,			LD,	ACTION_FREE,			LOG_NORMAL,		CMD_BUILDER},
// 	{ "nominate",			do_nominate,		POS_RESTING,	10,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "note",					do_note,				POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},


	{ "open",					do_open,				POS_RESTING,	-8,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "offer",				do_value,				POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "ofind",				do_ofind,				POS_DEAD,			LD,	ACTION_FREE,			LOG_NORMAL,		CMD_BUILDER|CMD_TESTER},
	{ "order",				do_order,				POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "osay",					do_osay,				POS_RESTING,	-8,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "oset",					do_oset,				POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "ostat",				do_ostat,				POS_DEAD,			LD,	ACTION_FREE,			LOG_NORMAL,		CMD_BUILDER|CMD_TESTER},
	{ "olist",				do_olist,				POS_DEAD,   	LD,	ACTION_FREE,			LOG_NORMAL,		CMD_BUILDER|CMD_TESTER},
	{ "oload",				do_oload,				POS_DEAD,			LD,	ACTION_FREE,			LOG_NORMAL,		CMD_BUILDER},
	{ "opstat",				do_opstat,			POS_DEAD,			LD,	ACTION_FREE,			LOG_NORMAL,		CMD_BUILDER|CMD_TESTER},
	{ "otell",				do_otell,				POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
// 	{ "outcast",			do_outcast,			POS_RESTING,	10,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "owhere",				do_owhere,			POS_DEAD,   	LI,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},


	{ "pardon",				do_pardon,			POS_DEAD,			-3,	ACTION_FREE,			LOG_NORMAL,		CMD_ENFORCER},
	{ "password",			do_password,		POS_DEAD,			 1,	ACTION_FREE,			LOG_NEVER, 		CMD_NONE},
	{ "peace",				do_peace,				POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "peek",					do_peek,				POS_RESTING,	-3,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "pemote",				do_pemote,			POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "pick",					do_pick,				POS_KNEELING,	-3,	ACTION_STANDARD,	LOG_NORMAL,		CMD_NONE},
	{ "plant",				do_plant,	 			POS_RESTING,	-3,	ACTION_STANDARD,	LOG_NORMAL,		CMD_NONE},
// 	{ "pledge",				do_pledge,			POS_RESTING,	10,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE},
	{ "pload",				do_pload,				POS_DEAD,			LI,	ACTION_FREE,			LOG_ALWAYS,		CMD_NONE},
	{ "pquit",				do_pquit,				POS_DEAD,			LI,	ACTION_FREE,			LOG_ALWAYS,		CMD_NONE},
	{ "port",					do_port,				POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "pounce",				do_pounce,			POS_FIGHTING,	-3,	ACTION_FULL,			LOG_NORMAL,		CMD_BERSERK|CMD_ATTACK},
	{ "pose",					do_pose,				POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE|CMD_DEAD},
	{ "poison",				do_poison,			POS_SITTING,	 1,	ACTION_STANDARD,	LOG_NORMAL,		CMD_NONE},
	{ "prepare",			do_prepare, 		POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "pray",					do_pray,				POS_SLEEPING,	-9,	ACTION_MOVE,			LOG_NORMAL,		CMD_NONE|CMD_DEAD},
	{ "prompt",				do_prompt,			POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "purge",				do_purge,				POS_DEAD,			LD,	ACTION_FREE,			LOG_NORMAL,		CMD_BUILDER},
	{ "put",					do_put,					POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},


	{ "qui",					do_qui,					POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE|CMD_NOHELP},
	{ "question",			do_question,		POS_DEAD,			-3,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "quit",					do_quit,				POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_BERSERK|CMD_QUIT},


	{ "racecast",			do_racecast,		POS_FIGHTING,	-3,	ACTION_FREE,			LOG_NORMAL,		CMD_NO_MAGIC},
	{ "reply",				do_reply,				POS_DEAD,			 1,	ACTION_SWIFT,			LOG_NORMAL,		CMD_NONE},
	{ "read",					do_read,				POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "reboo",				do_reboo,				POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE|CMD_NOHELP},
	{ "reboot",				do_reboot,			POS_DEAD,			LI,	ACTION_FREE,			LOG_ALWAYS,		CMD_QUIT},
	{ "recall",				do_recall,			POS_FIGHTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "refresh",			do_refresh,			POS_DEAD,			-8,	ACTION_FREE,			LOG_NORMAL,		CMD_BERSERK},
	{ "regoto",				do_regoto,			POS_DEAD,			LD,	ACTION_FREE,			LOG_NORMAL,		CMD_BUILDER|CMD_TESTER},
	{ "reload",				do_reload,			POS_STANDING,	-8,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "rent",					do_rent,				POS_SITTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "rename",				do_rename,			POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
// 	{ "renounce",			do_renounce,		POS_RESTING,	10,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "release",			do_release,			POS_FIGHTING,	-3,	ACTION_STANDARD,	LOG_NORMAL,		CMD_BERSERK|CMD_ATTACK},
	{ "rend",					do_rend,				POS_FIGHTING,	-3,	ACTION_STANDARD,	LOG_NORMAL,		CMD_BERSERK|CMD_ATTACK},
	{ "remove",				do_remove,			POS_RESTING,	-8,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "repair",				do_repair,			POS_SITTING,	 1,	ACTION_FULL,			LOG_NORMAL,		CMD_NONE},
	{ "request",			do_request,			POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "rescue",				do_rescue,			POS_FIGHTING,	 1,	ACTION_MOVE,			LOG_NORMAL,		CMD_BERSERK|CMD_ATTACK},
	{ "rescale",			do_rescale,			POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "resetarea",		do_resetarea,		POS_DEAD,			LD,	ACTION_FREE,			LOG_NORMAL,		CMD_BUILDER|CMD_TESTER},
	{ "rest",					do_rest,				POS_SLEEPING,	-9,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE|CMD_DEAD},
	{ "resistances",	do_resistances,	POS_DEAD,			-8,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "restore",			do_restore,			POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "respawn",			do_respawn,			POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "resurrect",		do_resurrect,		POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "return",				do_return,			POS_DEAD,			-8,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "retran",				do_retran,			POS_DEAD,	 		LI,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "recover",			do_recover,			POS_DEAD,			ML,	ACTION_FREE,			LOG_ALWAYS,		CMD_NONE},
	{ "revert",				do_revert,			POS_RESTING,	-8,	ACTION_STANDARD,	LOG_NORMAL,		CMD_NONE},
	{ "reveal",				do_reveal,			POS_RESTING,	-8,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "reward",				do_reward,			POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "rlist",				do_rlist,				POS_DEAD,   	LD,	ACTION_FREE,			LOG_NORMAL,		CMD_BUILDER|CMD_TESTER},
	{ "rstat",				do_rstat,				POS_DEAD,   	LD,	ACTION_FREE,			LOG_NORMAL,		CMD_BUILDER|CMD_TESTER},
	{ "rpstat",				do_rpstat,			POS_DEAD,			LD,	ACTION_FREE,			LOG_NORMAL,		CMD_BUILDER|CMD_TESTER},


	{ "south",				do_south,				POS_STANDING,	-9,	ACTION_MOVE,			LOG_NORMAL,		CMD_IDLE|CMD_BERSERK},
	{ "say",					do_say,					POS_RESTING,	-8,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE|CMD_BERSERK|CMD_DEAD},
	{ "sayto",				do_sayto,				POS_RESTING,	-8,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE|CMD_BERSERK|CMD_DEAD},
	{ "sacrifice",		do_sacrifice,		POS_STANDING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE|CMD_NOHELP},
	{ "sunder",				do_sunder,			POS_FIGHTING,	-3,	ACTION_STANDARD,	LOG_NORMAL,		CMD_BERSERK|CMD_ATTACK},
	{ "save",					do_save,				POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "savearea",			do_savearea,		POS_DEAD,			LD,	ACTION_FREE,			LOG_NORMAL,		CMD_BUILDER},
	{ "savewho",			do_savewho,			POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "score",				do_score,				POS_DEAD,			-9,	ACTION_FREE,			LOG_NORMAL,		CMD_BERSERK},
	{ "scan",					do_scan,				POS_RESTING,	-8,	ACTION_FREE,			LOG_NORMAL,		CMD_BERSERK},
	{ "scribe",				do_scribe,			POS_SITTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "school",				do_school,			POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "search",				do_search,			POS_STANDING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "seal",					do_seal,				POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "sell",					do_sell,				POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "sset",					do_sset,				POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "sstat",				do_sstat,				POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "setfunc",			do_setfunc,			POS_DEAD,			ML,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "shoot",				do_shoot,	 			POS_FIGHTING,	-3,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "shadow",				do_shadow,			POS_STANDING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "sheath",				do_sheath,			POS_SITTING,	-8,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "shout",				do_shout,				POS_RESTING,	-8,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "shove",				do_shove,				POS_RESTING,	-9,	ACTION_FREE,			LOG_NORMAL,		CMD_BERSERK},
	{ "show",					do_show,				POS_DEAD, 		LI,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "shutdow",			do_shutdow,			POS_DEAD,			ML,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "shutdown",			do_shutdown,		POS_DEAD,			ML,	ACTION_FREE,			LOG_ALWAYS,		CMD_QUIT},
	{ "silence",			do_silence,			POS_DEAD,			-3,	ACTION_FREE,			LOG_NORMAL,		CMD_ENFORCER},
	{ "sing",					do_sing,				POS_STANDING,	 1,	ACTION_STANDARD,	LOG_NORMAL,		CMD_NONE},
	{ "sit",					do_sit,					POS_SLEEPING,	-9,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE|CMD_DEAD},
	{ "skills",				do_skills,			POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "sla",					do_sla,					POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "slay",					do_slay,				POS_DEAD,			LI,	ACTION_FREE,			LOG_ALWAYS,		CMD_NONE},
	{ "sleep",				do_sleep,				POS_SLEEPING,	-9,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "skin",					do_skin,				POS_STANDING,	-3,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "slice",				do_slice,				POS_STANDING,	-3,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "slookup",			do_slookup,			POS_DEAD,			LD,	ACTION_FREE,			LOG_NORMAL,		CMD_TESTER},
	{ "socials",			do_socials,			POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "snoop",				do_snoop,				POS_DEAD,			-3,	ACTION_FREE,			LOG_NORMAL,		CMD_ENFORCER},
	{ "speak",				do_speak,				POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "speed",				do_speed,				POS_DEAD,			-9,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "spells",				do_spells,			POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "songs",				do_songs,				POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "split",				do_split,				POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "spy",					do_spy,					POS_STANDING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "stand",				do_stand,				POS_SLEEPING,	-9,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE|CMD_DEAD},
	{ "stable",				do_stable,			POS_STANDING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "steal",				do_steal,				POS_STANDING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "stealth",			do_stealth,			POS_STANDING,	-3,	ACTION_SWIFT,			LOG_NORMAL,		CMD_NONE},
	{ "stun",					do_stun,				POS_FIGHTING,	-3,	ACTION_STANDARD,	LOG_NORMAL,		CMD_NONE},
	{ "strike",				do_strike,			POS_DEAD,			-3,	ACTION_FREE,			LOG_NORMAL,		CMD_ENFORCER},
	{ "swindle",			do_swindle,			POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "switch",				do_switch,			POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "showclass",		do_showclass,		POS_DEAD,			LD,	ACTION_FREE,			LOG_NORMAL,		CMD_BUILDER|CMD_TESTER},
	{ "showdomain",		do_showdomain,	POS_DEAD,			LD,	ACTION_FREE,			LOG_NORMAL,		CMD_BUILDER|CMD_TESTER},
	{ "showgod",			do_showgod,			POS_DEAD,			LD,	ACTION_FREE,			LOG_NORMAL,		CMD_BUILDER|CMD_TESTER},
	{ "showrace",			do_showrace,		POS_DEAD,			LD,	ACTION_FREE,			LOG_NORMAL,		CMD_BUILDER|CMD_TESTER},
	{ "showbloodline",do_showbloodline,	POS_DEAD,			LD,	ACTION_FREE,			LOG_NORMAL,		CMD_BUILDER|CMD_TESTER},


	{ "tell",					do_tell,				POS_DEAD,			 1,	ACTION_SWIFT,			LOG_NORMAL,		CMD_NONE},
	{ "take",					do_get,					POS_RESTING,	-9,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "taunt",				do_taunt,				POS_FIGHTING,	-3,	ACTION_STANDARD,	LOG_NORMAL,		CMD_NONE},
	{ "tame",					do_tame,				POS_FIGHTING,	 1,	ACTION_FULL,			LOG_NORMAL,		CMD_NONE},
	{ "teach",				do_teach,				POS_STANDING,	 1,	ACTION_FULL,			LOG_NORMAL,		CMD_NONE},
	{ "test",					do_test,				POS_DEAD,			ML,	ACTION_FREE,			LOG_ALWAYS,		CMD_NONE},
	{ "think",				do_think,				POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "throw",				do_throw,				POS_FIGHTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "tick",					do_tick,				POS_DEAD,			LI,	ACTION_FREE,			LOG_ALWAYS,		CMD_NONE},
	{ "title",				do_title,				POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "time",					do_time,				POS_DEAD,			 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "tie",					do_tie,					POS_FIGHTING,	-3,	ACTION_STANDARD,	LOG_NORMAL,		CMD_BERSERK|CMD_ATTACK},
	{ "trample",			do_trample,			POS_FIGHTING,	-3,	ACTION_STANDARD,	LOG_NORMAL,		CMD_BERSERK|CMD_ATTACK},
	{ "train",				do_train,				POS_STANDING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "track",				do_track,				POS_STANDING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "trip",					do_trip,				POS_FIGHTING,	-3,	ACTION_STANDARD,	LOG_NORMAL,		CMD_BERSERK|CMD_ATTACK},
	{ "transfer",			do_transfer,		POS_DEAD,	 		LI,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},


	{ "up",						do_up,					POS_STANDING,	-9,	ACTION_MOVE,			LOG_NORMAL,		CMD_IDLE|CMD_BERSERK},
	{ "unalias",			do_unalias,			POS_DEAD,			-3,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "unlock",				do_unlock,			POS_RESTING,	-3,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "untie",				do_untie,				POS_FIGHTING,	-3,	ACTION_STANDARD,	LOG_NORMAL,		CMD_BERSERK|CMD_ATTACK},
	{ "unhitch",			do_unhitch,			POS_STANDING,	 1,	ACTION_FULL,			LOG_NORMAL,		CMD_NONE},
	{ "use",					do_use,					POS_FIGHTING,	 1,	ACTION_STANDARD,	LOG_NORMAL,		CMD_NONE},
	{ "unseal",				do_unseal,			POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "unarrest",			do_unarrest,		POS_DEAD,			-3,	ACTION_FREE,			LOG_ALWAYS,		CMD_ENFORCER},


	{ "vt102",				do_vt100,				POS_DEAD,			-3,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "value",				do_value,				POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "version",			do_version,			POS_DEAD,		 	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "visible",			do_visible,			POS_DEAD,		 	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},


	{ "west",					do_west,				POS_STANDING,	-9,	ACTION_MOVE,			LOG_NORMAL,		CMD_IDLE|CMD_BERSERK},
	{ "weapons",			do_weapons,			POS_DEAD,		 	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "wake",					do_wake,				POS_SLEEPING,	-8,	ACTION_STANDARD,	LOG_NORMAL,		CMD_NONE},
	{ "waypoint",			do_waypoint,		POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "warn",					do_warn,				POS_DEAD,			-3,	ACTION_FREE,			LOG_NORMAL,		CMD_ENFORCER},
	{ "wear",					do_wear,				POS_RESTING,	-9,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "weather",			do_weather,			POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "where",				do_where,				POS_DEAD,			-3,	ACTION_FREE,			LOG_NORMAL,		CMD_ENFORCER},
	{ "whirl",				do_whirl,				POS_FIGHTING,	-3,	ACTION_FULL,			LOG_NORMAL,		CMD_BERSERK|CMD_ATTACK},
	{ "whisper",			do_whisper,			POS_RESTING,	-8,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "who",					do_who,					POS_DEAD,		 	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "wield",				do_hold,				POS_RESTING,	-8,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "withdraw",  		do_withdraw,		POS_FIGHTING,	-9,	ACTION_FREE,			LOG_NORMAL,		CMD_BERSERK},
	{ "wizhelp",			do_wizhelp,			POS_DEAD,			LI,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},
	{ "wizlock",			do_wizlock,			POS_DEAD,			ML,	ACTION_FREE,			LOG_ALWAYS,		CMD_NONE},
	{ "wiztime",			do_timemode,		POS_DEAD,	 		LD,	ACTION_FREE,			LOG_NORMAL,		CMD_BUILDER|CMD_TESTER},
	{ "write",				do_write,				POS_RESTING,	 1,	ACTION_FREE,			LOG_NORMAL,		CMD_NONE},


	{ "",							NULL,						POS_DEAD,	 	 	 0,	ACTION_FREE,			LOG_NORMAL,		CMD_HIDE}
};

/*
	The social table.
	Add new socials here.
	Alphabetical order is not required.
*/

const struct social_type social_table [] =
{
	{
		"accuse",
		"Accuse whom?",
		"$n is in an accusing mood.",
		"You look accusingly at $N.",
		"$n looks accusingly at $N.",
		"$n looks accusingly at you.",
		"You accuse yourself.",
		"$n seems to have a bad conscience."
	},

	{
		"ack",
		"You gasp and say 'ACK!' at your mistake.",
		"$n ACKS at $s big mistake.",
		"You gasp at $N and say 'ACK!'.",
		"$n gasps at $N and says 'ACK!'.",
		"$n gasps at you and says 'ACK!'.",
		"You say 'ACK!' at yourself.",
		"$n says 'ACK!' to $mself."
	},

	{
		"admire",
		"Admire whom?",
		 NULL,
		"You admire $N's beauty.",
		"$n admires $N's beauty.",
		"$n admires your beauty.",
		"You admire yourself.",
		"$n admires $mself."
	},

	{
		"adore",
		"Adore whom?",
		 NULL,
		"You look at $N adoringly.",
		"$n looks at $N adoringly.",
		"$n looks at you with adoring eyes.",
		"You adore yourself",
		"$n adores $mself in an extremely conceited fashion."
	},

	{
		"ahem",
		"You clear your throat.",
		"$n clears $s throat.",
		"You look at $N and clear your throat.",
		"$n looks at $N and clears $s throat.",
		"$n looks at you and clears $s throat.",
		"You cover your mouth and clear your throat loudly.",
		"$n covers $s mouth and clears $s throat loudly."
	},

	{
		"agree",
		"You nod in agreement.",
		"$n nods in agreement.",
		"You nod at $N in agreement.",
		"$n nods at $N in agreement.",
		"$n nods at you in agreement.",
		"You seem to agree with yourself.",
		"$n seems to agree with $s own thoughts."
	},

	{
		"applaud",
		"You give a round of applause.",
		"$n gives a round of applause.",
		"You clap for $N.",
		"$n claps for $N.",
		"$n gives you a round of applause.",
		"You applaud at yourself.  Boy, are we conceited!",
		"$n applauds at $mself.  Boy, are we conceited!"
	},

	{
		"ballad",
		"You raise your clear voice towards the sky.",
		"$n has begun to sing a bit offkey.",
		"You sing a ballad to $N.",
		"$n sings a ballad to $N.",
		"$n sings a ballad to you!  How sweet!",
		"You sing a little ditty to yourself.",
		"$n sings a little ditty to $mself."
	},

	{
		"bark",
		"Woof!  Woof!",
		"$n barks like a dog.",
		"You bark at $N.",
		"$n barks at $N.",
		"$n barks at you.",
		"You bark at yourself.  Woof!  Woof!",
		"$n barks at $mself.  Woof!  Woof!"
	},

	{
		"bat",
		"You bat your lashes and smile.",
		"$n bats $s lashes and smiles.",
		"You bat your lashes at $N with a smile.",
		"$n bats $s lashes at $N, and smiles at $M.",
		"$n bats $s lashes and smiles at you.",
		"Awww.. You're such an adorable being.",
		"$n looks cross-eyed while batting $s lashes."
	},

	{
		"beam",
		"You beam broadly.",
		"$n beams broadly.",
		"You beam at $N broadly.",
		"$n beams at $N broadly.",
		"$n beams at you broadly.",
		"Well, aren't you pleased with yourself?",
		"$n beams a $mself, obviously pleased."
	},

	{
		"bearhug",
		"Whom do you wish to bearhug?",
		 NULL,
		"You overwhelm $N with a great, big, hulking bearhug.",
		"$n encompasses $N in an ENORMOUS bearhug!",
		"$n clutches you tightly in an overwhelming bearhug!",
		"You vainly clutch yourself in a bearhug for consolation.",
		"$n hugs $mself as tightly as possible.",
	},

	{
		"beckon",
		"You beckon for anyone to follow.",
		"$n beckons for anyone to follow.",
		"You beckon for $N to follow you.",
		"$n beckons $N to follow $m.",
		"$n beckons for you to follow.",
		"You beckon to your shadow to follow.",
		"$n beckons to $s shadow to follow."
	},

	{
		"bkiss",
		"You blow a kiss for someone to catch.",
		"$n blows a kiss for someone to catch.",
		"You blow a kiss to $N.",
		"$n blows a kiss to $N.",
		"$n blows a kiss to you.",
		"Blow a kiss at yourself??",
		NULL
	},

	{
		"bleed",
		"You bleed all over the room!",
		"$n bleeds all over the room!",
		"You bleed all over $N!",
		"$n bleeds all over $N.",
		"$n bleeds all over you!",
		"You bleed all over yourself!",
		"$n bleeds all over $mself."
	},

	{
		"beg",
		"You beg the gods for mercy.",
		"$n falls on his knees pleading to the gods.",
		"You get on your knees and desperately plead to $N.",
		"$n falls on $s knees and pleas shamelessly at $N!",
		"$n falls on $s knees and pleas shamelessly to you.",
		"Begging yourself for help wouldn't be very smart.",
		"$n begs $mself for whatever, how ingenious."
	},

	{
		"blink",
		"You blink in confusion.",
		"$n blinks in confusion.",
		"You blink at $N in utter disbelief.",
		"$n blinks at $N in utter disbelief.",
		"$n blinks at you in utter disbelief.",
		"You blink at yourself in complete confusion.",
		"$n blinks at $mself in complete confusion."
	},

	{
		"blush",
		"Your cheeks are burning.",
		"$n blushes deeply.",
		"Your cheeks turn red at $N.",
		"$n blushes as $e looks at $N.",
		"$n looks at you and blushes deeply.",
		"You blush at your actions.",
		"$n blushes at $s actions."
	},

	{
		"bounce",
		"you bounce around the room!",
		"$n bounces around happily.",
		"You bounce onto $N's lap.",
		"$n bounces onto $N's lap.",
		"$n bounces onto your lap.",
		"You bounce your head like a basketball.",
		"$n plays basketball with $s head."
	},

	{
		"bow",
		"You bow deeply.",
		"$n bows deeply.",
		"You bow before $N.",
		"$n bows before $N.",
		"$n bows before you.",
		"You kiss your toes; how flexible.",
		"$n folds up like a jack knife and kisses $s own toes."
	},

	{
		"burp",
		"You burp loudly.",
		"$n burps loudly.",
		"You burp loudly to $N in response.",
		"$n burps loudly in response to $N's remark.",
		"$n burps loudly in response to your remark.",
		"You cover your mouth as you burp loudly.",
		"$n covers $s mouth as $e burps loudly."
	},

	{
		"bye",
		"You wave goodbye to all in the room.",
		"$n waves goodbye to everyone in the room.",
		"You wave goodbye to $N.",
		"$n waves goodbye to $N",
		"$n waves goodbye to you!",
		"You wave goodbye to all in the room.",
		"$n waves goodbye to everyone in the room, including $mself!"
	},

	{
		"cackle",
		"You throw back your head and cackle with insane glee!",
		"$n throws back $s head and cackles with insane glee!",
		"You cackle gleefully at $N",
		"$n cackles gleefully at $N.",
		"$n cackles gleefully at you.",
		"You cackle at yourself.  Now, THAT'S strange!",
		"$n is really crazy now! $e cackles at $mself!"
	},

	{
		"cheek",
		"Kiss whose cheek?",
		 NULL,
		"You lean forward to kiss $N gently on the cheek.",
		"$n leans forward to kiss $N gently on the cheek.",
		"$n leans forward to kiss you gently on the cheek.",
		"People might start to talk..",
		 NULL
	},

	{
		"cheer",
		"You cheer with great gusto.",
		"$n cheers with great gusto.",
		"You cheer for $N with great gusto.",
		"$n cheers for $N with great gusto.",
		"$n cheers for you with great gusto.",
		"You cheer for yourself since no one else does.",
		"$n cheers for $mself since no one else does."
	},

	{
		"chuckle",
		"You chuckle politely.",
		"$n chuckles politely.",
		"You chuckle at $N.",
		"$n chuckles at $N.",
		"$n chuckles at you.",
		"You chuckle to yourself.",
		"$n chuckles to $mself."
	},

	{
		"clap",
		"You clap your hands together.",
		"$n claps $s hands together.",
		"You clap for $N.",
		"$n claps for $N.",
		"$n claps for you.",
		"You clap at your own performance.",
		"$n claps at $s own performance."
	},

	{
		"comfort",
		"Comfort whom?",
		NULL,
		"You comfort $N.",
		"$n comforts $N.",
		"$n comforts you.",
		"You make a vain attempt to comfort yourself.",
		"$n has no one to comfort $m but $mself."
	},

	{
		"cough",
		"You cough loudly.",
		"$n coughs loudly.",
		"You cough loudly at $N.",
		"$n coughs loudly at $N.",
		"$n coughs loudly at you.",
		"You cough loudly. Why don't you take better care of yourself?",
		"$n coughs loudly. $n should take better care of $mself."
	},

	{
		"cringe",
		"You cringe.",
		"$n cringes.",
		"You look at $N and cringe.",
		"$n look at $N and cringe.",
		"$n looks at you and cringes.",
		"How do you cringe at yourself?!",
		 NULL
	},

	{
		"cry",
		"You burst into tears.",
		"$n bursts into tears.",
		"You cry on $N's shoulder.",
		"$n cries on $N's shoulder.",
		"$n cries on your shoulder.",
		"You cry to yourself.",
		"$n sobs quietly to $mself."
	},

	{
		"cuddle",
		"Whom do you feel like cuddling today?",
		NULL,
		"You attempt to cuddle $N warmly.",
		"$n attempts to cuddle $N warmly.",
		"$n attempts cuddle you warmly.",
		"Get a life.",
		 NULL
	},

	{
		"curse",
		"You swear loudly.",
		"$n swears loudly",
		"You swear at $N.",
		"$n swears at $N.",
		"$n swears at you!",
		"You swear at yourself.",
		"$n starts swearing at $mself audibly."
	},

	{
		"curtsey",
		"You curtsey gracefully.",
		"$n curtseys gracefully.",
		"You curtsey gracefully to $N.",
		"$n curtseys gracefully to $N.",
		"$n curtseys gracefully to you.",
		"You curtsey to your audience (yourself).",
		"$n curtseys to $mself, since no one is paying attention to $m."
	},

	{
		"dance",
		"You dance and sway to the music in your head...",
		"$n dances and sways to the music in $s head...",
		"You move to sweep $N into romantic waltz!",
		"$n moves to sweep $N into a romantic waltz!",
		"$n moves to sweep you into a romantic waltz!",
		"You skip and dance around by yourself.",
		"$n dances a pas-de-une."
	},

	{
		"doh",
		"You say, 'Doh!!' and slap yourself.",
		"$n slaps $mself and says, 'Doh!!!'",
		"You say, 'Doh!!' and slap yourself.",
		"$n slaps $mself and says, 'Doh!!!'",
		"$n slaps $mself and says, 'Doh!!!'",
		"You slap yourself and say, 'Doh!!!'",
		"$n slaps $mself and says, 'Doh!!!'"
	},

	{
		"drool",
		"You drool on yourself.",
		"$n drools on $mself.",
		"You drool all over $N.",
		"$n drools all over $N.",
		"$n drools all over you.",
		"You drool on yourself.",
		"$n drools on $mself."
	},

	{
		"embrace",
		"Who do you want to hold?",
		"$n looks around for someone to hold close to $m.",
		"You hold $N in a warm and loving embrace.",
		"$n holds $N in a warm and loving embrace.",
		"$n holds you in a warm and loving embrace.",
		"You hold yourself in a warm and loving embrace.  Feels silly doesn't it?",
		"$n holds $mself in a warm and loving embrace ($e looks pretty silly, doesn't $e?)"
	},

	{
		"eyeroll",
		"You roll your eyes.",
		"$n rolls $s eyes.",
		"You roll your eyes at $N.",
		"$n rolls $s eyes at $N.",
		"$n rolls $s eyes at you.",
		"You roll your eyes at yourself.",
		"$n rolls $s eyes at $mself."
	},

	{
		"eyebrow",
		"You raise an eyebrow.",
		"$n raises an eyebrow.",
		"You raise your eyebrow at $N.",
		"$n raises an eyebrow at $N.",
		"$n raises an eyebrow at you.",
		"You make weird faces, practising your eyebrow raise skills.",
		"$n makes weird faces while practising eyebrow raising."
	},

	{
		"faint",
		"You faint from the aromas that linger within.",
		"$n faints from the aromas that linger within.",
		"You faint as you smell $N.",
		"$n faints as $e smells $N.",
		"$n faints as $e smells you.",
		"You faint as you smell your stench.",
		"$n faints as $e smells $mself."
	},

	{
		"flirt",
		"You flirt aimlessly.",
		"$n flirts with anyone who will pay attention",
		"You flirt with $N trying to get $S attention.",
		"$n flirts with $N trying to get $S attention.",
		"$n flirts with you trying to get your attention.",
		"You flirt with yourself.",
		"$n flirts with $mself. Has $e no shame."
	},

	{
		"french",
		"Kiss whom?",
		 NULL,
		"You give $N a long and passionate kiss.",
		"$n kisses $N passionately.",
		"$n gives you a long and passionate kiss.",
		"You gather yourself in your arms and try to kiss yourself.",
		"$n makes an attempt at kissing $mself."
	},

	{
		"frown",
		"What's bothering you ?",
		"$n frowns.",
		"You frown at $N.",
		"$n frowns at $N.",
		"$n frowns at you.",
		"You frown at yourself.",
		"$n frowns at $mself."
	},

	{
		"fume",
		"You grit your teeth and fume with rage.",
		"$n grits $s teeth and fumes with rage.",
		"You stare at $N, fuming.",
		"$n stares at $N, fuming with rage.",
		"$n stares at you, fuming with rage!",
		"You fume at yourself and stomp about angrily",
		"$n clenches $s fists and stomps $s feet, fuming with anger."
	},

	{
		"gasp",
		"You gasp in astonishment.",
		"$n gasps in astonishment.",
		"You look at $N and gasp.",
		"$n gasps as $e looks at $N.",
		"$n gasps as $e looks at you.",
		"You look at yourself and gasp!",
		"$n takes one look at $mself and gasps!"
	},

	{
		"giggle",
		"You giggle.",
		"$n giggles.",
		"You giggle at $N.",
		"$n giggles at $N.",
		"$n giggles at you.",
		"You giggle at yourself. You must be nervous or something.",
		"$n giggles at $mself looking rather jittery."
	},

	{
		"glare",
		"You glare at nothing in particular.",
		"$n glares around $m.",
		"You glare icily at $N.",
		"$n glares icily at $N.",
		"$n glares icily at you.",
		"You glare icily at your feet.",
		"$n glares at $s feet."
	},

	{
		"girn",
		"You try to grin, but somehow get it slightly wrong.",
		"$n tries to grin, but somehow gets it slightly wrong.",
		"You try to grin at $N, but screw it up badly.",
		"$n tries to grin at $N, but screws up badly.",
		"$n tries to grin at you, but screws up badly.",
		"Your face becomes a ghastly mask as you fail to grin.",
		"$n's face becomes a strange mask as $e tries to grin."
	},

	{
		"grin",
		"You grin.",
		"$n grins.",
		"You grin at $N.",
		"$n grins at $N.",
		"$n grins at you.",
		"You grin to yourself.",
		"$n grins to $mself."
	},

	{
		"groan",
		"You groan loudly.",
		"$n groans loudly.",
		"You groan at the sight of $M.",
		"$n groans at the sight of $N.",
		"$n groans at the sight of you.",
		"You groan as you realize what you have done.",
		"$n groans in frustration with $mself."
	},

	{
		"grovel",
		"You grovel in the dirt.",
		"$n grovels in the dirt.",
		"You grovel before $N.",
		"$n grovels at $N's feet.",
		"$n grovels at your feet.",
		"That seems a little silly to me.",
		 NULL
	},

	{
		"growl",
		"Grrrrrrrrrr ...",
		"$n growls.",
		"You growl at $N",
		"$n growls at $N.",
		"$n growls at you.",
		"You growl at yourself.",
		"$n growls at $mself."
	},

	{
		"grumble",
		"You grumble.",
		"$n grumbles.",
		"You grumble to $N.",
		"$n grumbles to $N.",
		"$n grumbles to you.",
		"You grumble under your breath.",
		"$n grumbles under $s breath."
	},

	{
		"hand",
		"You reach out your hand.",
		"$n reaches out $s hand",
		"You take $N's hand to kiss it.",
		"$n takes $N's hand in $s to kiss it.",
		"$n takes your hand to kiss it.",
		"You kiss your own hand.",
		"$n kisses $s own hand."
	},

	{
		"howl",
		"You howl at the moon.",
		"$n howls at the moon.",
		"You howl soulfully at $N.",
		"$n howls soulfully at $N.",
		"$n howls soulfully at you.",
		"You throw back your head and howl in profound frustration!",
		"$n throws back $s head and howls in profound frustration!"
	},

	{
		"hug",
		"Hug whom?",
		 NULL,
		"You hug $N tightly.",
		"$n hugs $N tightly.",
		"$n hugs you tightly.",
		"You hug yourself.",
		"$n hugs $mself in a vain attempt to get friendship."
	},

	{
		"huggle",
		"Huggle whom?",
		 NULL,
		"You envelop $N in a warm huggle.",
		"$n envelops $N in a warm huggle.",
		"$n envelopes you in a warm huggle.",
		"Huggle yourself??",
		 NULL
	},

	{
		"hum",
		"You hum quietly.",
		"$n hums quietly.",
		"You hum a little ditty for $N.",
		"$n hums a little ditty for $N.",
		"$n hums a little ditty for you.",
		"You hum quietly to yourself.",
		"$n hums quietly to $mself."
	},

	{
		"kiss",
		"kiss whom?",
		NULL,
		"You kiss $N.",
		"$n kisses $N.",
		"$n kisses you.",
		"All the lonely people...",
		 NULL
	},

	{
		"laugh",
		"You laugh.",
		"$n laughs.",
		"You laugh at $N.",
		"$n laughs at $N.",
		"$n laughs at you.",
		"You laugh to yourself.",
		"$n laughs to $mself."
	},

	{
		"lag",
		"OOC: $n has a terrible lag.",
		"OOC: $n has a terrible lag.",
		NULL,
		NULL,
		NULL,
		NULL,
		NULL
	},

	{
		"lap",
		"Whose lap do you want to climb into?",
		NULL,
		"You climb into $N's lap and cuddle up with $M",
		"$n climbs into $N's lap and cuddles up with $M.",
		"$n climbs into your lap and cuddles up with you.",
		NULL,
		NULL
	},

	{
		"lick",
		"You lick your lips and smile.",
		"$n licks $s lips and smiles.",
		"You lick $N.",
		"$n licks $N.",
		"$n licks you.",
		"You lick yourself.",
		"$n licks $mself."
	},

	{
		"lol",
		"You laugh out loud.",
		"$n laughs out loud.",
		"You laugh at $N loudly.",
		"$n laughs at $N loudly.",
		"$n laughs at you loudly.",
		"You laugh to yourself.",
		"$n laughs to $mself."
	},

	{
		"love",
		"You love the whole world.",
		"$n loves everybody in the world.",
		"You tell your true feelings to $N.",
		"$n whispers softly to $N.",
		"$n whispers to you sweet words of love.",
		"Well, we already know you love yourself (lucky someone does!)",
		"$n loves $mself, can you believe it ?"
	},

	{
		"massage",
		"Massage what?  Thin air?",
		 NULL,
		"You gently massage $N's shoulders.",
		"$n massages $N's shoulders.",
		"$n gently massages your shoulders.",
		"You practice yoga as you try to massage yourself.",
		"$n gives a show on yoga positions, trying to massage $mself."
	},

	{
		"mischievous",
		"You give a mischievous smile at your thoughts.",
		"$n grins mischievously.",
		"You grin mischievously at $N, thinking obviously mischevious thoughts.",
		"$n grins mischievously at $N, thinking obviously mischevious thoughts.",
		"$n grins mischievously at you, thinking obviously mischevious thoughts.",
		"You grin mischievously to yourself.",
		"$n grins mischievously to $mself, thinking obviously mischevious thoughts."
	},

	{
		"moan",
		"You start to moan.",
		"$n starts moaning.",
		"You moan at $N.",
		"$n moans at $N.",
		"$n moans at you.",
		"You moan to yourself.",
		"$n moans to $mself."
	},

	{
		"muhaha",
		"MUHAHAHAHAHA",
		"$n laughs diabolically.  MUHAHAHAHAHAAAA!",
		"You laugh at $N diabolically. MUHAHAHAHAHAAAA",
		"$n laughs at $N diabolically.  MUHAHAHAHAHAAAA!",
		"$n laughs at you diabolically.  MUHAHAHAHAHAAAA!",
		"You must have funny thoughts.",
		 NULL
	},

	{
		"nibble",
		"Nibble on whom?",
		 NULL,
		"You nibble on $N's ear.",
		"$n nibbles on $N's ear.",
		"$n nibbles on your ear.",
		"You nibble on your OWN ear?",
		"$n nibbles on $s OWN ear?"
	},

	{
		"nod",
		"You nod.",
		"$n nods.",
		"You nod at $N.",
		"$n nods at $N.",
		"$n nods at you.",
		"You quietly nod to yourself.",
		"$n nods quietly to $mself."
	},

	{
		"nudge",
		"Nudge whom?",
		 NULL,
		"You nudge $N.",
		"$n nudges $N.",
		"$n nudges you.",
		"You nudge yourself, for some strange reason.",
		"$n nudges $mself, to keep $mself awake."
	},

	{
		"nuzzle",
		"Nuzzle whom?",
		 NULL,
		"You nuzzle $N's cheek softly.",
		"$n softly nuzzles $N's cheek.",
		"$n softly nuzzles your cheek.",
		"I'm sorry, friend, but that's impossible.",
		 NULL
	},

	{
		"ogle",
		"Whom do you want to ogle?",
		 NULL,
		"You ogle $N with a grin.",
		"$n ogles $N with a grin.",
		"$n ogles you with a grin.",
		"You ogle yourself??",
		"$n ogles $mself.  Better hope that $e stops there."
	},

	{
		"pat",
		"Pat whom?",
		 NULL,
		"You pat $N on $S back.",
		"$n pats $N on $S back.",
		"$n pats you on your back.",
		"You pat yourself on your back, great job!",
		"$n pats $mself on the back for $s accomplishment."
	},

	{
    "peck",
	  "Wouldn't you like to do that to a person, or do you prefer air?",
		"$n looks around with his lips puckered.",
		"You give $N a sweet peck on the cheek.",
		"$n gives $N a sweet peck on the cheek.",
		"$n gives you a sweet peck on the cheek.",
		"Wouldn't you like to do that to a person, or do you prefer air?",
		 NULL,
	},

	{
		"peer",
		"You peer intently about your surroundings.",
		"$n peers intently about the area.",
		"You peer at $N quizzically.",
		"$n peers at $N quizzically.",
		"$n peers at you quizzically.",
		"You peer intently about your surroundings.",
		"$n peers intently about the area."
	},

	{
		"point",
		"Point at whom?",
		 NULL,
		"You point at $N.",
		"$n points at $N.",
		"$n points at you.",
		"You point meaningfully at yourself.",
		"$n points meaningfully at $mself."
	},

	{
		"poke",
		"Poke whom?",
		 NULL,
		"You poke $N in the ribs.",
		"$n pokes $N in the ribs.",
		"$n pokes you in the ribs.",
		"You poke yourself in the ribs, feeling hungry.",
		"$n pokes $mself in the ribs, looking very peckish."
	},

	{
		"ponder",
		"You sit down and think deeply.",
		"$n sits down and thinks deeply.",
		"You ponder, looking at $N.",
		"$n looks at $N ponderously.",
		"$n looks at you ponderously.",
		"You ponder intently to yourself.",
		"$n stares in the distance, pondering a thought."
	},

	{
		"pout",
		"Ah, don't take it so hard.",
		"$n pouts.",
		"You pout at $N.",
		"$n pouts at $N.",
		"$n pouts at you.",
		"You pout to yourself.",
		"$n pouts to $mself."
	},

	{
		"pray",
		"You feel pious, and begin to pray.",
		"$n prays and grovels to the powers that be.",
		"You crawl in the dust before $N.",
		"$n falls down and grovels before $N.",
		"$n kisses the dirt at your feet.",
		"You mutter a prayer to yourself.",
		"$n mumbles a prayer to $mself."
	},

	{
		"puke",
		"You puke.",
		"$n pukes.",
		"You puke on $N's feet!",
		"$n pukes on $N's feet!",
		"$n pukes on your feet!",
		"You puke on yourself.",
		"$n pukes on $mself."
	},

	{
		"punch",
		"Punch whom?",
		 NULL,
		"You punch $N playfully.",
		"$n punches $N playfully.",
		"$n punches you playfully.",
		"You punch yourself. You deserve it.",
		"$n punches $mself."
	},

	{
		"purr",
		"You puuurrrrr.",
		"$n purrs contentedly.",
		"You purr contentedly, nuzzling against $N.",
		"$n purrs contentedly, nuzzling against $N.",
		"$n purrs contentedly, nuzzling against you.",
		"You purr at yourself.",
		"$n purrs at $mself.  Must be a cat thing."
	},

	{
		"raspberry",
	  "You stick your tongue out at ... well, no one.",
		"$n sticks $s tongue out.",
	  "You stick your tongue out at $N",
		"$n sticks $s tongue out at $N.",
	  "$n sticks $s tongue out at you.",
		"You try to stick your tongue out at yourself... Somehow it isn't the same.",
		 NULL
	},

	{
		"roar",
		"You take a deep breath and roar loadly!",
		"$n lets out a deafening roar!",
		"You roar loudly at $N!",
		"$n roars loudly at $N!",
		"$n roars loudly at you!",
		"You roar in frustration.",
		"$n roars in frustration."
	},

	{
		"rofl",
		"You roll around on the floor laughing hysterically.",
		"$n rolls around on the floor laughing hysterically.",
		"You roll around on the floor laughing hysterically at $N.",
		"$n rolls around on the floor laughing hysterically at $N.",
		"$n rolls around on the floor laughing hysterically at you.",
		"You roll around on the floor laughing hysterically.",
		"$n rolls around on the floor laughing hysterically."
	},

	{
		"roll",
		"You roll your eyes.",
		"$n rolls $s eyes.",
		"You roll your eyes at $N.",
		"$n rolls $s eyes at $N.",
		"$n rolls $s eyes at you.",
		"You roll your eyes at yourself.",
		"$n rolls $s eyes at $mself."
	},

	{
		"ruffle",
		"You've got to ruffle SOMEONE.",
		 NULL,
		"You ruffle $N's hair playfully.",
		"$n ruffles $N's hair playfully.",
		"$n ruffles your hair playfully.",
		"You ruffle your hair.",
		"$n ruffles $s hair."
	},

	{
		"salute",
		"You salute smartly.",
		"$n salutes smartly.",
		"You salute $N smartly",
		"$n salutes $N smartly.",
		"$n salutes you smartly.",
		"You salute yourself.",
		"$n salutes $mself."
	},

	{
		"scream",
		"You scream loudly!",
		"$n screams loudly!",
		"You scream loudly in $N's face",
		"$n screams loudly at $N.",
		"$n screams at you!",
		"You scream at yourself. Yes, that's ONE way of relieving tension!",
		"$n screams loudly at $mself!"
	},

	{
		"scuff",
		"You scuff your feet sheepishly.",
		"$n scuffs $s feet in the dirt, looking very sheepish.",
		"You scuff your foot, avoiding $N's gaze.",
		"$n scuffs $s foot, shyly avoiding $N's gaze.",
		"$n scuffs $s foot, shyly avoiding your gaze.",
		"You scuff your foot sheepishly.",
		"$n scuffs $s foot in the dirt, looking very sheepish."
	},

	{
		"seduce",
		"Whom did you wish to seduce?",
		 NULL,
		"You smile seductively at $N with darkened eyes.",
		"$n smiles seductively at $N with darkened eyes.",
		"$n smiles seductively at you with darkened eyes.",
		"Umm, are you sure about that?",
		 NULL
	},

	{
		"shake",
		"You shake your head.",
		"$n shakes $s head.",
		"You shake your head at $N.",
		"$n shakes $s head at $N.",
		"$n shakes $s head at you.",
		"You are shaken by yourself.",
		"$n shakes and quivers like a bowl full of jelly."
	},

	{
		"shiver",
		"You shiver with a chill down your spine.",
		"$n shivers with a chill down $s spine.",
		"You shiver at $N.",
		"$n shivers at $N.",
		"$n shivers at you.",
		NULL,
		NULL
	},

	{
		"shrug",
		"You shrug.",
		"$n shrugs.",
		"You shrug to $m.",
		"$n shrugs at $N.",
		"$n shrugs at you.",
		"You shrug to yourself.",
		"$n shrugs to $mself."
	},

	{
		"sigh",
		"You sigh.",
		"$n sighs loudly.",
		"You sigh loudly at $N.",
		"$n sighs loudly at $N.",
		"$n sighs as $e looks at you.",
		"You sigh at yourself.",
		"$n sighs at $mself."
	},


	{
		"slap",
		"Slap whom?",
		 NULL,
		"You slap $N on the face.",
		"$n slaps $N on the face.",
		"$n slaps you on your face.",
		"You slap yourself HARD!",
		"$n slaps $mself."
	},

	{
		"smack",
		"Smack whom?",
		 NULL,
		"You smack $N upside the head.",
		"$n smacks $N upside the head.",
		"$n smacks you upside the head.",
		"You smack yourself HARD!",
		"$n smacks $mself upside the head."
	},

	{
		"smile",
		"You smile happily.",
		"$n smiles happily.",
		"You smile at $N.",
		"$n beams a smile at $N.",
		"$n smiles at you.",
		"You smile at yourself.",
		"$n smiles at $mself."
	},

	{
		"smirk",
		"You smirk.",
		"$n smirks.",
		"You smirk at $N.",
		"$n smirks at $N.",
		"$n smirks at you.",
		"You smirk to yourself.",
		"$n smirks to $mself."
	},

	{
		"snap",
		"SNAP! You snap your fingers.",
		"$n snaps $s fingers.",
		"You snap your fingers at $N.",
		"$n snaps $s fingers at $N.",
		"$n snaps $s fingers at you.",
		"You snap yourself to attention.",
		"$n snaps $mself to attention."
	},

	{
		"snarl",
		"You grizzle your teeth and look mean.",
		"$n snarls angrily.",
		"You snarl at $N.",
		"$n snarls at $N.",
		"$n snarls at you.",
		"You snarl at yourself.",
		"$n snarls at $mself."
	},

	{
		"sneeze",
		"You sneeze!",
		"$n sneezes!",
		"You sneeze in $N's face!",
		"$n sneezes in $N's face!",
		"$n sneezes in your face!",
		"You sneeze all over yourself!",
		"$n sneezes all over $mself!",
	},

	{
		"snicker",
		"You snicker softly.",
		"$n snickers softly.",
		"You snicker at $N.",
		"$n snickers at $N.",
		"$n snickers at you.",
		"You snicker to yourself.",
		"$n snickers to $mself."
	},

	{
		"sniff",
		"You sniff sadly. *SNIFF*",
		"$n sniffs sadly.",
		"You sniff sadly at $N.",
		"$n sniffs sadly at $N.",
		"$n sniffs sadly at you.",
		"You sniff sadly at yourself.",
		"$n sniffs sadly at $mself."
	},

	{
		"snore",
		"Zzzzzzzzzzzzzzzzz.",
		"$n snores loudly.",
		 NULL,
		 NULL,
  	 NULL,
		 NULL,
		 NULL
	},

	{
		"snuggle",
		"Snuggle who?",
		 NULL,
		"You snuggle up to $N affectionately.",
		"$n snuggles up to $N affectionately.",
		"$n snuggles up to you affectionately.",
		"You snuggle up, getting ready to sleep.",
		"$n snuggles up, getting ready to sleep."
	},

	{
		"spit",
		"You spit.",
		"$n spits.",
		"You spit on $N.",
		"$n spits on $N.",
		"$n spits on you.",
		"You spit on yourself. Always knew you were a drooler.",
		"$n spits on $mself."
	},


	{
		"squeeze",
		"Who to give a squeeze now?",
		 NULL,
		"You squeeze $N fondly.",
		"$n squeezes $N fondly.",
		"$n squeezes you fondly.",
		"You squeeze yourself - try to relax a little!",
		"$n squeezes $mself."
	},

	{
		"stare",
		"You stare at the sky.",
		"$n stares at the sky.",
		"You stare blankly at $N.",
		"$n stares blankly at $N.",
		"$n stares blankly at you.",
		"You stare dreamily at yourself - enough narcissism for now.",
		"$n stares dreamily at $mself."
	},

	{
 		"stroke",
   	"You stroke the air vaguely.",
 		"$n makes vague stroking motions.",
   	"You bring a hand to stroke $N's hair.",
 		"$n brings a hand to stroke $N's hair.",
   	"$n brings a hand to stroke your hair.",
   	"You stroke your fingers through your hair.",
		"$n strokes $s fingers through $s hair."
	},

	{
		"strut",
		"Strut your stuff.",
		"$n struts proudly.",
		 NULL,
		 NULL,
		 NULL,
		 NULL,
		 NULL
	},

	{
		"sulk",
		"You sulk.",
		"$n sulks.",
		 NULL,
		 NULL,
		 NULL,
		 NULL,
		 NULL
	},

	{
    "sweep",
	  "Who do you wish to sweep into your arms?",
    NULL,
	  "You sweep $N into your arms.",
    "$n sweeps $N into $s arms.",
	  "$n sweeps you into $s arms.",
    "You look at your empty arms and sigh.",
	  "$n looks at $s empty arms, and sighs."
	},

	{
		"tackle",
		"Whom do you want to tackle?",
		 NULL,
		"You run up to $N to takle $M.",
		"$n runs up to $N to tackle $M.",
		"$n runs up to try and tackle you.",
		"You take yourself down to the ground and roll about",
		"$n takes himself down on the ground and rolls about."
	},

	{
		"tap",
		"You tap your foot impatiently.",
		"$n taps $s foot impatiently.",
		"You tap your foot, looking at $N.",
		"$n taps $s foot, looking at $N.",
		"$n taps $s foot, looking at you.",
		"You tap yourself on the head.",
		"$n taps $mself on the head."
	},

	{
		"tender",
		"You pout your lips, trying to lure someone into a kiss.",
		"$n is pouting $s lips, trying to lure someone into a kiss.",
		"You give $N a soft, tender kiss.",
		"$n gives $N a soft, tender kiss.",
		"$n gives you a soft, tender kiss.",
		"You'd better not, people may start to talk!",
		 NULL
	},

	{
		"thank",
		"Thank you too.",
		 NULL,
		"You thank $N heartily.",
		"$n thanks $N heartily.",
		"$n thanks you heartily.",
		"You thank yourself since nobody else wants to!",
		"$n thanks $mself since noone else will."
	},

	{
		"thwap",
		"Thwap whom?",
		NULL,
		"You THWAP $M on the head for being a moron.",
		"$n THWAPS $N on the head for being a moron.",
		"$n THWAPS you on the head for being a moron.",
		"You THWAP yourself on the head, fool that you are!",
		"$n THWAPS $mself for being a moron."
	},

	{
		"tickle",
		"Whom do you want to tickle?",
		 NULL,
		"You tickle $N.",
		"$n tickles $N.",
		"$n tickles you.",
		"You tickle yourself, how funny!",
		"$n tickles $mself."
	},

	{
		"tip",
		"You tip your hat with a gallant flourish.",
		"$n tips $s hat with a gallant flourish.",
		"You tip your hat to $N gallantly.",
		"$n tips $s hat gallantly to $N.",
		"$n tips $s hat to you gallantly.",
		"You tip the brim of your hat.",
		"$n tips the brim of $s hat."
	},

	{
    "tongue",
	  "You stick out your tongue.",
    "$n sticks out $s tongue",
	  "You stick your tongue out at $N.",
    "$n sticks $s tongue out at $N's.",
	  "$n sticks $s tongue out at you.",
    NULL,
	  NULL
	},

	{
		"tummy",
		"You rub your tummy as it growls.",
		"$n rubs $s tummy as it growls.",
		"You rub your tummy, looking expectantly to $N.",
		"$n rubs $s tummy, looking expectantly to $N..",
		"$n rubs $s tummy, looking expectantly to You.",
		"You rub your tummy and mutter to yourself.",
		"$n rubs $s tummy and mutters to $mself."
	},

	{
		"twiddle",
		"You patiently twiddle your thumbs.",
		"$n patiently twiddles $s thumbs.",
		"You look at $N and twiddle your thumbs.",
		"$n looks at $N and twiddles $s thumbs.",
		"$n looks at you and twiddles $s thumbs.",
		"You twiddle your ears like Dumbo.",
		"$n twiddles $s own ears like Dumbo."
	},

	{
		"undress",
		"You start to undress in the shadows.",
		"$n begins to undress in the shadows... Wow!",
		"You undress $N with your eyes.",
		"$n undresses $N with $s eyes.",
		"You sense $n undressing you with $s eyes.",
		"A mirror would help better!",
		"You feel a raise in temerature as $n lusts on $mself."
	},

	{
		"wave",
		"You wave.",
		"$n waves happily.",
		"You wave to $N.",
		"$n waves to $N.",
		"$n waves to you.",
		"You wave to yourself?",
		"$n waves to $mself?"
	},

	{
		"whistle",
		"You whistle off-key.",
		"$n whistles off-key.",
		"You whistle at the sight of $N.",
		"$n whistles at the sight of $N.",
		"$n whistles at the sight of you.",
		"You whistle a little tune to yourself.",
		"$n whistles a little tune to $mself."
	},

	{
		"whew",
		"You wipe your brow and exclaim, 'Whew!'",
		"$n wipes $s brow and exclaims, 'Whew!'",
		 NULL,
		 NULL,
		 NULL,
		 NULL,
		 NULL
	},

	{
		"wiggle",
		"Your wiggle your eyebrows.",
		"$n wiggles $s eyebrows.",
		"You wiggle your eyebrows toward $M.",
		"$n wiggles $s eyebrows toward $N.",
		"$n wiggles $s eyebrows toward you.",
		"You wiggle about like a fish.",
		"$n wiggles about like a fish."
	},

	{
		"wince",
		"You wince.",
		"$n winces.",
		"You wince at $M.",
		"$n winces at $N.",
		"$n winces at you.",
		"You wince to yourself.",
		"$n winces to $mself."
	},

	{
		"wink",
		"You wink suggestively.",
		"$n winks suggestively.",
		"You wink suggestively at $N.",
		"$n winks suggestively at $N.",
		"$n winks suggestively at you.",
		"You wink at yourself?? - what are you up to?",
		"$n contorts $s face trying to wink at $mself..."
	},

	{
		"yawn",
		"You let out a tired yawn.",
		"$n lets out a tired yawn.",
		"You look at $N and yawn.",
		"$n looks at $N and yawns.",
		"$n looks at you and yawns.",
		"You cover your mouth as you yawn.",
		"$n covers $s mouth and yawns."
	},


	{
		"",
		 NULL,
		 NULL,
		 NULL,
		 NULL,
		 NULL,
		 NULL,
		 NULL
	}
};


lg_int get_game_usec( void )
{
	struct timeval last_time;

	push_call("get_game_usec()");

	gettimeofday(&last_time, NULL);

	pop_call();
	return((lg_int) last_time.tv_usec + 1000000LL * (lg_int) last_time.tv_sec);
}

/*
	The main entry point for executing commands.
	Can be recursively called from 'at', 'order', 'force'.
*/


void interpret( CHAR_DATA *ch, char *argue )
{
	char command[MAX_INPUT_LENGTH];
	char logline[MAX_INPUT_LENGTH];
	char pag_buf[MAX_STRING_LENGTH];
	char buf[MAX_STRING_LENGTH];
	char argument_buf[MAX_INPUT_LENGTH];
	char *argument;

	int cmd = -1;
	int leng;
	int trust;
	int sn;
	bool found = FALSE;
	lg_int last_time, delta;
	char *pt, *pti, *pto;
	bool auto_command;

	push_call_format("interpret(%s,%s)", ch->name, argue);

	last_time = get_game_usec();

	if (!IS_NPC(ch) && IS_SET(ch->pcdata->interp, INTERP_AUTO))
	{
		REMOVE_BIT(ch->pcdata->interp, INTERP_AUTO);
		auto_command = TRUE;
	}
	else
	{
		auto_command = FALSE;
	}

	strcpy(argument_buf, argue);

	/*
		Strip off non printables  - Chaos 5/13/96
	*/

	for (pt = argument_buf ; *pt != '\0' ; pt++)
	{
		if (*pt != '\r' && *pt != '\n' && (*pt < 32 || *pt > 126))
		{
			*pt = ' ';
		}
	}
	argument = argument_buf;

	/*
		OLC stuff
	*/

	if (!IS_NPC(ch) && (ch->pcdata->editmode == MODE_REPEATCMD || ch->pcdata->tempmode == MODE_REPEATCMD))
	{
		DO_FUN *fun;

		if ((fun = ch->pcdata->last_cmd) == NULL)
		{
			ch->pcdata->editmode = MODE_NONE;
			bug( "interpret: bad last_cmd mode");

			pop_call();
			return;
		}
		else
		{
			for (cmd = 0 ; *cmd_table[cmd].name != '\0' ; cmd++)
			{
				if (cmd_table[cmd].do_fun == fun)
				{
					found = TRUE;
					break;
				}
			}
			if (!found)
			{
				cmd = 0;
				bug( "interpret: invalid last_cmd");

				pop_call();
				return;
			}
			sprintf( logline, "(%s) %s", cmd_table[cmd].name, argument );
		}
	}

	if (cmd == -1)
	{
		if (ch->desc)
		{
			if (ch->desc->character == ch)
			{
				*ch->desc->incomm = '\0';
			}

			/*
				Let's not display commands in obj_progs, and doesn't hurt either
			*/
			if (IS_PLR(ch, PLR_REPEAT))
			{
				if (get_trust(ch) <= ch->level && !IS_SET(ch->pcdata->interp, INTERP_FORCE))
				{
					ch_printf_color(ch, "{078}[{178}%s{078}]\n\r", argument);
				}
			}

			if (!IS_NPC(ch) && IS_SET(ch->pcdata->interp, INTERP_DUMP) && auto_command == FALSE && !IS_SET(ch->pcdata->interp, INTERP_FORCE))
			{
				CHAR_DATA *fch;

				if (!strcasecmp(argument, "stop" ) )
				{
					send_to_char( "Dump stopped.\n\r", ch );
					REMOVE_BIT(ch->pcdata->interp, INTERP_DUMP);

					pop_call();
					return;
				}
				ch_printf_color(ch, "You say, %s\"%s\".\n\r", get_color_string(ch, COLOR_SPEECH, VT102_DIM), argument);
				for (fch = ch->in_room->first_person ; fch ; fch = fch->next_in_room)
				{
					if (ch == fch)
					{
						continue;
					}
					if (fch->position <= POS_SLEEPING)
					{
						continue;
					}
					if (blocking(fch, ch))
					{
						continue;
					}
					if (!can_understand(fch, ch, FALSE))
					{
						continue;
					}
					ch_printf_color(fch, "%s says, %s\"%s\".\n\r", PERS(ch, fch), get_color_string(ch, COLOR_SPEECH, VT102_DIM), argument);
				}
				pop_call();
				return;
			}
		}

		/*
			Strip leading/tailing spaces.
		*/

		while (isspace(*argument) && *argument != '\0')
		{
			argument++;
		}

		if (*argument != '\0')
		{
			for (pt = argument + strlen(argument) - 1 ; *pt == ' ' ; pt--)
			{
				*pt = '\0';
			}
		}

		/*
			Send the scroll prompter out only if no inputs  -  Chaos 8/22/97
		*/

		if (ch->desc && IS_SET(CH(ch->desc)->pcdata->interp, INTERP_PAGE) && CH(ch->desc)->pcdata->page_buf != NULL)
		{
			REMOVE_BIT(CH(ch->desc)->pcdata->interp, INTERP_PAGE);

			leng = str_cpy_max( pag_buf, ansi_translate_text( ch, "{300}" ), MAX_BUFFER_LENGTH );
			leng = str_apd_max( pag_buf, CH(ch->desc)->pcdata->page_buf, leng, MAX_BUFFER_LENGTH);

			STRFREE (CH(ch->desc)->pcdata->page_buf );
			if (*argument == '\0')
			{
				send_to_char(pag_buf, ch);
			}
			else
			{
				send_to_char((const char*)ansi_translate_text(ch, "{088}{200}-----------------------------[{078}Page Buffer Canceled{200}]-----------------------------\n\r"), ch);
			}
		}

		if (*argument == '\0')
		{
			pop_call();
			return;
		}

		/*
			Add links to hyper-text helps
		*/

		if (!IS_NPC(ch) && IS_SET(ch->pcdata->interp, INTERP_HELP))
		{
			REMOVE_BIT(ch->pcdata->interp, INTERP_HELP);

			if (argument[1] == '\0' && argument[0] != '\0')
			{
				HELP_MENU_DATA *menu;
				HELP_MENU_DATA *prev_menu=NULL;
				HELP_MENU_DATA *menu2;
				HELP_DATA      *help;
				bool   foundh, foundh2;
				char retbuf[MAX_INPUT_LENGTH];

				foundh	= FALSE;
				help		= ch->pcdata->last_help;
				for (menu = help->first_menu ; menu ; menu = menu->next)
				{
					if (menu->option == '-')
					{
						foundh = TRUE;
					}
					prev_menu = menu;
					if (prev_menu == NULL)
					{
						break;
					}
				}
				if (argument[0] == '-' && !foundh && ch->pcdata->prev_help != NULL)
				{
					format_help_to_char(ch, ch->pcdata->prev_help);
// 					send_to_char_color(ch->pcdata->prev_help->text, ch);
					ch->pcdata->last_help = ch->pcdata->prev_help;
					ch->pcdata->prev_help = NULL;
					SET_BIT(ch->pcdata->interp, INTERP_HELP);
					pop_call();
					return;
				}
				for (menu = help->first_menu ; menu ; menu = menu->next)
				{
					if (tolower(argument[0]) == menu->option)
					{
						format_help_to_char(ch, menu->help);
// 						send_to_char_color( menu->help->text, ch);
						foundh2	= FALSE;

						for (menu2 = menu->help->first_menu ; menu2 ; menu2 = menu2->next)
						{
							if (menu2->option == '-')
							{
								foundh2 = TRUE;
							}
						}
						if (!foundh2 && argument[0] != '-')
						{
							char colw[20], colW[20], colg[20];
							strcpy(colw, get_color_string(ch, COLOR_TEXT, VT102_DIM));
							strcpy(colW, get_color_string(ch, COLOR_TEXT, VT102_BOLD));
							strcpy(colg, get_color_string(ch, COLOR_ACCENT, VT102_DIM));
							
							sprintf(retbuf, "\n\r  %s[%s-%s] %sReturn to %s%s\n\r", colg, colw, colg, colW, ansi_translate(ansi_strip(help_title(ch->pcdata->last_help))), colw);
							if (ch->pcdata->page_buf == NULL)
							{
								send_to_char_color(retbuf, ch);
							}
							else
							{
								leng = str_cpy_max(pag_buf, ch->pcdata->page_buf, MAX_BUFFER_LENGTH);
								leng = str_apd_max(pag_buf, ansi_translate_text(ch, retbuf), leng, MAX_BUFFER_LENGTH);
								ch->pcdata->page_buf = STRALLOC(pag_buf);
							}
						}
						if (argument[0] == '-')
						{
							ch->pcdata->prev_help = NULL;
						}
						else
						{
							ch->pcdata->prev_help = ch->pcdata->last_help;
						}
						ch->pcdata->last_help = menu->help;
						SET_BIT(ch->pcdata->interp, INTERP_HELP);

						pop_call();
						return;
					}
				}
				/* assume a menu option not listed is normal command and continue */
			}
		}

		/*
			Last Command  - Chaos 5/6/99
		*/

		if (!IS_NPC(ch) && !IS_SET(ch->pcdata->interp, INTERP_FORCE) && auto_command == FALSE && ch->pcdata->last_command != NULL)
		{
			char jbuf[MAX_STRING_LENGTH];

			if (!strcasecmp(argument, "stop") || !strcasecmp(argument, "quit"))
			{
				send_to_char( "Command stopped.\n\r", ch );
				STRFREE( ch->pcdata->last_command );
				ch->pcdata->last_command = NULL;

				pop_call();
				return;
			}
			strcpy( jbuf, ch->pcdata->last_command);
			strcat( jbuf, argument );
			strcpy( argument, jbuf );
			STRFREE( ch->pcdata->last_command );
			ch->pcdata->last_command = NULL;
		}
 
		/*
			Any command starting with numbers is a repeat command
		*/

		if (*argument >= '0' && *argument <= '9')
		{
			do_repeat( ch, argument);

			pop_call();
			return;
		}

		/*
			Added the '&' to multi-line commands  Chaos 12/7/93
		*/
		pti = argument;
		pto = command;

		for (pti = argument, pto = command ; *pti != ' ' && *pti != '\0' ; pto++, pti++)
		{
			*pto = *pti;
		}
		*pto = '\0';

		if (ch->desc && ch->desc->intop < MAX_INPUT_LENGTH-2)
		{
			if (strchr(argument, '&') != NULL && strcasecmp(command, "alias"))
			{
				process_command(ch, argument);

				pop_call();
				return;
			}
		}

		/*
			Implement freeze command.
		*/

		if (!IS_NPC(ch) && IS_SET(pvnum_index[ch->pcdata->pvnum]->flags, PVNUM_FROZEN))
		{
			send_to_char("You're totally frozen!\n\r", ch);
			pop_call();
			return;
		}

		/*
			Grab the command word.
			Special parsing so ' can be a command,
			also no spaces needed after punctuation.
		*/

		strcpy(logline, argument );

		if (!isalpha(*argument) && !isdigit(*argument))
		{
			*command = *argument;
			*(command+1) = '\0';
			argument++;
			while (isspace(*argument))
			{
				argument++;
			}
		}
		else
		{
			argument = one_argument(argument, command);
		}

		/*
			Look for command in command table.
		*/

		found = FALSE;
		trust = get_trust( ch );

		/*
			Look for alias first - Chaos 10/11/93
		*/

		if (ch->desc && auto_command == FALSE)
		{
			if (!IS_SET(CH(ch->desc)->pcdata->interp, INTERP_ALIAS)
			&&  !IS_SET(CH(ch->desc)->pcdata->interp, INTERP_OPROG)
			&&  !IS_SET(CH(ch->desc)->pcdata->interp, INTERP_FORCE))
			{
				for (cmd = 0 ; cmd < MAX_ALIAS ; cmd++)
				{
					if (CH(ch->desc)->pcdata->alias[cmd] != NULL && CH(ch->desc)->pcdata->alias[cmd][0] != '\0')
					{
						if (!strcasecmp(CH(ch->desc)->pcdata->alias_c[cmd], command))
						{
							SET_BIT(CH(ch->desc)->pcdata->interp, INTERP_ALIAS);
							buf[0]	= '\0';
							pti		= CH(ch->desc)->pcdata->alias[cmd];

							for (pto = buf ; *pti != '\0' ; pti++)
							{
								if (*pti == '%')
								{
									pto = &buf[0] + str_cat_max(buf, argument, MAX_INPUT_LENGTH);
								}
								else
								{
									if ((pto-&buf[0]) < MAX_INPUT_LENGTH-1)
									{
										*pto = (char) (*pti);
										*(++pto)= '\0';
									}
								}
							}
							str_cat_max(buf, "\0", MAX_INPUT_LENGTH);

							if (ch->desc && ch->desc->character == ch)
							{
								if (ch->desc->back_buf != NULL)
								{
									char buf2[MAX_INPUT_LENGTH];

									str_cpy_max( buf2, ch->desc->back_buf, MAX_INPUT_LENGTH );
									STRFREE(ch->desc->back_buf );
									str_cat_max( buf2, ch->desc->inbuf, MAX_INPUT_LENGTH );
									ch->desc->back_buf = STRALLOC( buf2 );
								}
								else
								{
									ch->desc->back_buf = STRALLOC(ch->desc->inbuf);
								}
								ch->desc->intop = 0;
								*ch->desc->inbuf = '\0';
							}
							preprocess_command(ch, buf);

							pop_call();
							return;
						}
					}
				}
			}
		}

		if ((cmd = find_command(command, trust)) != -1)
		{
			found = TRUE;
		}

		/* 
		 * support account function flags in builder commands - Kregor
		 */
		
		if (!IS_GOD(ch))
		{
			if (IS_SET(cmd_table[cmd].flags, CMD_TESTER))
			{
				if (!PLR_FUNCTION(ch, FUNCTION_BETA_TESTER|FUNCTION_BUILDER))
				{
					found = FALSE;
					cmd = -1;
				}
			}
			else if (IS_SET(cmd_table[cmd].flags, CMD_BUILDER) && !PLR_FUNCTION(ch, FUNCTION_BUILDER))
			{
				found = FALSE;
				cmd = -1;
			}
			if (IS_SET(cmd_table[cmd].flags, CMD_HELPER))
			{
				if (!PLR_FUNCTION(ch, FUNCTION_HELPER|FUNCTION_ENFORCER))
				{
					found = FALSE;
					cmd = -1;
				}
			}
			else if (IS_SET(cmd_table[cmd].flags, CMD_ENFORCER) && !PLR_FUNCTION(ch, FUNCTION_ENFORCER))
			{
				found = FALSE;
				cmd = -1;
			}
		}

		/*
		 * hard code command to support PC generation rooms - Kregor 5/22/12
		 */
		if (!IS_NPC(ch) && !strcasecmp(command, "done"))
		{
			if (ch->in_room->vnum == ROOM_VNUM_SKILLS)
			{
				if (ch->pcdata->practice)
				{
					send_to_char_color("You still have skill points to spend.\n\r", ch);
					pop_call();
					return;
				}
				char_from_room(ch);
				char_to_room(ch, ROOM_VNUM_FEATS, TRUE);
				do_refresh(ch, "");
				do_look(ch, "");
				pop_call();
				return;
			}
			else if (ch->in_room->vnum == ROOM_VNUM_FEATS)
			{
				if (ch->pcdata->feat_pts || ch->pcdata->bonus_feat[ch->class])
				{
					send_to_char_color("You still have feats to select.\n\r", ch);
					pop_call();
					return;
				}
				if (ch->class == CLASS_CLERIC)
				{
					char_from_room(ch);
					char_to_room(ch, ROOM_VNUM_DOMAINS, TRUE);
					do_refresh(ch, "");
					do_look(ch, "");
					pop_call();
					return;
				}
				else
				{
					char_from_room(ch);
					char_to_room(ch, ROOM_VNUM_SCHOOL, TRUE);
					do_refresh(ch, "");
					do_look(ch, "");
					pop_call();
					return;
				}
			}
			else if (ch->in_room->vnum == ROOM_VNUM_DOMAINS)
			{
				int cnt, count;
				
				for (cnt = count = 0 ; cnt < MAX_DOMAIN ; cnt++)
				{
					if (ch->pcdata->domain[cnt])
					{
						count++;
					}
				}
				if (!count)
				{
					send_to_char_color("You need to select your domain.\n\r", ch);
					pop_call();
					return;
				}
				char_to_room(ch, ROOM_VNUM_SCHOOL, TRUE);
				do_refresh(ch, "");
				do_look(ch, "");
				pop_call();
				return;
			}
		}

		if (IS_PLR(ch, PLR_AFK))
		{
			REMOVE_BIT(ch->act, PLR_AFK);
			act( "You are no longer afk.", ch, NULL, NULL, TO_CHAR );
			act( "$n is no longer afk.", ch, NULL, NULL, TO_ROOM );
		}

		/* dead people can't do anything that isn't flagged for them */
		if (IS_PLR(ch, PLR_DEAD) && !IS_IMMORTAL(ch))
		{
			if (found && cmd_table[cmd].position >= POS_STUNNED && !IS_SET(cmd_table[cmd].flags, CMD_DEAD))
			{
				send_to_char("You're can't do that, you're dead!\n\r", ch);
				pop_call();
				return;
			}
		}

		/*
			Assassination attempts are spoiled without concentration.
		*/
		if (ch->asn_count > 32)
		{
			if (found && cmd_table[cmd].position >= POS_SITTING)
			{
				if (!concentration_check(ch, NULL, concentration_roll(ch), 20))
				{
					send_to_char( "You loose concentration on your assassination target.\n\r", ch );
					ch->assassinate = NULL;
					ch->asn_count = 0;
				}
			}
		}
	
		/*
			Doing a concentration task prevents others.
		*/
		if (ch->concentrating)
		{
			if (!strcasecmp(command, "stop"))
			{
				free_skill(ch);
				act( "You stop your task.", ch, NULL, NULL, TO_CHAR);
				pop_call();
				return;
			}
			else if (found && cmd_table[cmd].position >= POS_RESTING)
			{
				free_skill(ch);
				act( "You interrupt your concentration.", ch, NULL, NULL, TO_CHAR);
				pop_call();
				return;
			}
		}
	
		/*
			Casting characters cannot do anything else until casting is finished.
		*/
		if (ch->casting)
		{
			if (strcasecmp(command, "stop"))
			{
				if (found && cmd_table[cmd].position >= POS_STUNNED)
				{
					send_to_char( "You are busy casting a spell. Type STOP to interrupt.\n\r", ch );
					pop_call();
					return;
				}
			}
			else
			{
				free_cast(ch);
				act( "You stop casting your spell.", ch, NULL, NULL, TO_CHAR);
				pop_call();
				return;
			}
		}
	
		/*
		 * Check for condition AFF_ affects
		 */
		if (cmd_table[cmd].position >= POS_SITTING && IS_AFFECTED(ch, AFF2_STUNNED))
		{
			send_to_char( "You are too stunned to do that.\n\r", ch );
			pop_call();
			return;
		}	
		if (cmd_table[cmd].position == POS_FIGHTING && IS_AFFECTED(ch, AFF2_NAUSEATED))
		{
			send_to_char( "You are too sickened to do that.\n\r", ch );
			pop_call();
			return;
		}	
		if (cmd_table[cmd].position > POS_MORTAL && IS_AFFECTED(ch, AFF2_PETRIFICATION))
		{
			send_to_char( "You are frozen like stone!\n\r", ch );
			pop_call();
			return;
		}	
		if (cmd_table[cmd].position > POS_RESTING && IS_AFFECTED(ch, AFF2_DAZED))
		{
			send_to_char( "You are too dazed for that!\n\r", ch );
			pop_call();
			return;
		}	
		if (cmd_table[cmd].position > POS_SLEEPING)
		{
			if (is_affected(ch, gsn_time_stop))
			{
				send_to_char( "You are frozen in time!\n\r", ch );
				pop_call();
				return;
			}	
			if (IS_AFFECTED(ch, AFF2_PARALYSIS) && !IS_AFFECTED(ch, AFF_FREEDOM) && str_prefix(cmd_table[cmd].name, "look"))
			{
				send_to_char( "You are totally paralyzed!\n\r", ch );
				pop_call();
				return;
			}	
			if (cmd_table[cmd].position > POS_SLEEPING && is_affected(ch, gsn_irresistible_dance) && str_prefix(cmd_table[cmd].name, "look"))
			{
				send_to_char( "You are too busy dancing!\n\r", ch );
				pop_call();
				return;
			}
		}
	
		/*
			Berserk players can only do combat commands
		*/
		if (IS_AFFECTED(ch, AFF2_BERSERK))
		{
			if (!found || !IS_SET(cmd_table[cmd].flags, CMD_BERSERK|CMD_ATTACK))
			{
				send_to_char("You're to driven with rage to do that.\n\r", ch);
				pop_call();
				return;
			}
		}

		if (is_affected(ch, gsn_transformation))
		{
			if (!IS_SET(cmd_table[cmd].flags, CMD_NO_MAGIC))
			{
				send_to_char("You're too thrilled with battle to use magic right now!\n\r", ch);
				pop_call();
				return;
			}
		}

		/*
			NO_MAGIC rooms prevent magical commands
		*/
		if (ch->in_room && IS_SET(ch->in_room->room_flags, ROOM_NO_MAGIC) && !IS_PLR(ch, PLR_HOLYLIGHT))
		{
			if (IS_SET(cmd_table[cmd].flags, CMD_NO_MAGIC))
			{
				send_to_char("You cannot summon the magical energies here to do that!\n\r", ch);
				pop_call();
				return;
			}
		}

		/*
		 * safe rooms disallow aggressive commands
		 */
		if (IS_SET(cmd_table[cmd].flags, CMD_ATTACK) && !IS_IMMORTAL(ch))
		{
			if (!is_safe(ch, NULL))
			{
				pop_call();
				return;
			}
			if (ch->fear_level >= 3)
			{
				send_to_char("You are too paralyzed with fear to attack anyone!\n\r", ch);
				pop_call();
				return;
			}
		}
	}

	/*
		Log and snoop.
	*/

	if (cmd_table[cmd].log == LOG_NEVER)
	{
		strcpy(logline, cmd_table[cmd].name);
	}

	sprintf(mud->last_player_cmd, "%s: %s", ch->name, logline);

	if ((!IS_NPC(ch) && IS_SET(pvnum_index[ch->pcdata->pvnum]->flags, PVNUM_LOGGED)) || IS_SET(mud->flags, MUD_LOGALL) || cmd_table[cmd].log == LOG_ALWAYS)
	{
		log_printf("Log %s: %s", IS_NPC(ch) ? ch->short_descr : ch->name, logline);
	}

	if (!found)
	{
		/* Check for intercept progs for unknown commands */
		if (!IS_NPC(ch) && ch->desc && !IS_SET(ch->pcdata->interp, INTERP_OPROG)
		&& !IS_SET(ch->pcdata->interp, INTERP_MPROG))
		{
			CHAR_DATA *rch;

			for (rch = ch->in_room->first_person ; rch ; rch = rch->next_in_room)
			{
				if (!IS_NPC(rch) || rch == ch)
					continue;
				if (can_see(rch, ch) && mprog_intercept_trigger(command, rch, ch, argument))
				{
					pop_call();
					return;
				}
			}
			if (oprog_intercept_trigger(command, ch, argument))
			{
				pop_call();
				return;
			}
			if (rprog_intercept_trigger(command, ch, argument))
			{
				pop_call();
				return;
			}
		}

		if (!check_social(ch, command, argument) && strcasecmp(command, "!") && strcasecmp( command, "."))
		{
			ch_printf_color(ch, "Huh?  '%s' is not a command.\n\r", command);

			/*
				Pets limitations - Scandum
			*/

			if (IS_NPC(ch) && IS_AFFECTED(ch, AFF_DOMINATE) && ch->master)
			{
				send_to_char( "Your slave can't do that.\n\r", ch->master);
				pop_call();
				return;
			}
			if (IS_ACT(ch, ACT_PET|ACT_FAMILIAR|ACT_COMPANION) && ch->master)
			{
				send_to_char( "Your pet can't do that.\n\r", ch->master);
				pop_call();
				return;
			}
		}
		pop_call();
		return;
	}

// 	/*
// 		Check for invalid combat
// 	*/
// 
// 	if (ch->last_attacked != NULL)
// 	{
// 		if (ch->last_attacked->in_room != ch->in_room)
// 		{
// 			stop_fighting(ch,FALSE);
// 			update_pos(ch,-1);
// 		}
// 	}

	/*
	 *	Character not in position for command?
	 */
	if (ch->position < cmd_table[cmd].position)
	{
		switch( ch->position )
		{
			case POS_DEAD:
				send_to_char( "Lie still; you are DEAD.\n\r", ch );
				break;

			case POS_MORTAL:
				send_to_char( "You are hurt far too bad for that.\n\r", ch );
				break;

			case POS_INCAP:
				send_to_char( "You are incapacitated.\n\r", ch );
				break;

			case POS_STUNNED:
				send_to_char( "You can't do that, you're out cold!\n\r", ch );
				break;

			case POS_SLEEPING:
				send_to_char( "In your dreams, or what?\n\r", ch );
				break;

			case POS_RESTING:
				send_to_char( "You can't do that while resting.\n\r", ch);
				break;

			case POS_SITTING:
				send_to_char( "You can't do that while sitting down.\n\r", ch);
				break;

			case POS_KNEELING:
				send_to_char( "You can't do that while kneeling.\n\r", ch);
				break;

			case POS_CROUCHING:
				send_to_char( "You can't do that from a crouching position.\n\r", ch);
				break;

			case POS_FIGHTING:
				send_to_char( "No way! You are still fighting!\n\r", ch);
				break;
		}
		pop_call();
		return;
	}
	
	if (in_combat(ch))
	{
		if (!is_active(ch) && cmd_table[cmd].action > ACTION_SWIFT)
		{
			send_to_char( "Just wait your turn!\n\r", ch );
			pop_call();
			return;
		}
		if (IS_SET(cmd_table[cmd].flags, CMD_NOFIGHT))
		{
			send_to_char( "You cannot do that in combat!\n\r", ch );
			pop_call();
			return;
		}
	}
	
	if (cmd_table[cmd].action == ACTION_MOVE)
	{
		if (IS_SET(ch->action, ACTION_STANDARD) && IS_SET(ch->action, ACTION_MOVE))
		{
			send_to_char( "You cannot make another move action this round.\n\r", ch );
			pop_call();
			return;
		}
	}
	if (cmd_table[cmd].action == ACTION_STANDARD)
	{
		if (IS_SET(ch->action, ACTION_STANDARD))
		{
			send_to_char( "You have already made a standard action this round.\n\r", ch );
			pop_call();
			return;
		}
	}
	if (cmd_table[cmd].action == ACTION_SWIFT)
	{
		if (IS_SET(ch->action, ACTION_SWIFT))
		{
			send_to_char( "You can only make ONE swift action per round.\n\r", ch );
			pop_call();
			return;
		}
	}
	if (IS_SET(cmd_table[cmd].action, ACTION_MOVE)
	&& IS_SET(cmd_table[cmd].action, ACTION_STANDARD))
	{
		if (IS_SET(ch->action, ACTION_STANDARD) || IS_SET(ch->action, ACTION_MOVE))
		{
			send_to_char( "You cannot make a full round action this round.\n\r", ch );
			pop_call();
			return;
		}
	}

	/*
	 * rest and long term care get spoiled for strenuous or intensive activity
	 */
	if (cmd_table[cmd].position > POS_RESTING)
	{
		if (ch->rest > 0)
		{
			send_to_char("Your rest was interrupted.\n\r", ch);
			ch->rest = 0;
		}
		// strenuous activity takes extra air underwater - Kregor
		if (ch->in_room && ch->in_room->sector_type == SECT_UNDER_WATER && !CAN_BREATH_WATER(ch) && must_breathe(ch))
		{
			gain_condition(ch, COND_AIR, -1);
		}
	}
	if (IS_AFFECTED(ch, AFF2_LONGTERM_CARE) && cmd_table[cmd].position > POS_RESTING)
	{
		send_to_char("Your long-term care was spoiled.\n\r", ch);
		REMOVE_AFFECT(ch, AFF2_LONGTERM_CARE);
	}
	
	/*
	 * Damaging actions for disabled PCs - Kregor
	 * Need the check here, in case performing action results in damage
	 * to character, thus could trigger this check. Pass result to after
	 * the action, because the damage happens after action is complete
	 */
	
	CHAR_DATA *attacker = NULL;

	if (IS_AWAKE(ch) && ch->hit < 0)
	{
		if (IS_SET(cmd_table[cmd].action, ACTION_STANDARD) || IS_SET(cmd_table[cmd].flags, CMD_ATTACK))
		{
			if ((attacker = get_char_pvnum(ch->critical_hit_by)) == NULL)
			{
				attacker = ch;
			}
			if (get_apply(ch, APPLY_REGENERATION) > 0)
			{
				attacker = NULL;
			}
		}
	}
	
	/* Check for intercept programs for known commands */

	if (!IS_NPC(ch) && ch->desc && !IS_SET(ch->pcdata->interp, INTERP_OPROG)
	&& !IS_SET(ch->pcdata->interp, INTERP_MPROG)/* && !IS_SET(ch->pcdata->interp, INTERP_FORCE)*/)
	{
		CHAR_DATA *rch;
		
		if (oprog_intercept_trigger(cmd_table[cmd].name, ch, argument))
		{
			pop_call();
			return;
		}
		for (rch = ch->in_room->first_person ; rch ; rch = rch->next_in_room)
		{
			if (!IS_NPC(rch) || rch == ch)
				continue;
			if (can_see(rch, ch) && mprog_intercept_trigger(cmd_table[cmd].name, rch, ch, argument))
			{
				pop_call();
				return;
			}
		}
		if (rprog_intercept_trigger(cmd_table[cmd].name, ch, argument))
		{
			pop_call();
			return;
		}
	}

	if (!IS_NPC(ch))
	{
		ch->pcdata->last_cmd = *cmd_table[cmd].do_fun;

		if (IS_SET(cmd_table[cmd].flags, CMD_IDLE))
		{
			ch->pcdata->idle = 0;
		}

		if (ch->pcdata->editmode == MODE_RESTRICTED && IS_SET(cmd_table[cmd].flags, CMD_QUIT))
		{
			ch_printf_color(ch, "You cannot use quit commands while editing.\n\r");
			pop_call();
			return;
		}
	}

	/*
		Decrement move points for exertion cmds - interrupt if no move points left.
	*/
	if ((sn = skill_lookup(cmd_table[cmd].name)) != -1 && skill_table[sn].mana_move)
	{
		if (!move_loss(ch, NULL, skill_table[sn].mana_move))
		{
			pop_call();
			return;
		}
	}

	(*cmd_table[cmd].do_fun) ( ch, argument );
	
	if (attacker != NULL)
	{
		damage(attacker, ch, 1, TYPE_NOFIGHT, NULL);
	}

	if (!IS_SET(cmd_table[cmd].flags, CMD_QUIT) && ch != NULL && !IS_NPC(ch))
	{
		if (IS_SET(ch->act, PLR_WIZTIME))
		{
			delta = get_game_usec() - last_time;
			ch_printf_color(ch, "{058}(%lld usec to execute command)\n\r", delta);
		}
	}
	pop_call();
	return;
}


bool check_social( CHAR_DATA *ch, char *command, char *argument )
{
	int cmd;
	bool retval;

	push_call("check_social(%p,%p,%p)",ch,command,argument);

	if ((cmd = find_social(command)) == -1)
	{
		pop_call();
		return FALSE;
	}
	retval = check_social_fast(ch, cmd, argument);
	pop_call();
	return( retval );
}

bool check_social_fast( CHAR_DATA *ch, int cmd, char *argument )
{
	char arg[MAX_INPUT_LENGTH];
	CHAR_DATA *victim;

	push_call("check_social_fast(%p,%p,%p)",ch,cmd,argument);

	switch ( ch->position )
	{
		case POS_DEAD:
			send_to_char( "Lie still; you are DEAD.\n\r", ch );
			pop_call();
			return TRUE;

		case POS_INCAP:
		case POS_MORTAL:
			send_to_char( "You are hurt far too badly for that.\n\r", ch );
			pop_call();
			return TRUE;

		case POS_STUNNED:
			send_to_char( "You are too stunned to do that.\n\r", ch );
			pop_call();
			return TRUE;

		case POS_SLEEPING:
			send_to_char( "In your dreams, or what?\n\r", ch );
			pop_call();
			return TRUE;
	}

	if ( argument == NULL)
	{
		act( social_table[cmd].others_no_arg, ch, NULL, NULL, TO_ROOM    );
		act( social_table[cmd].char_no_arg,   ch, NULL, NULL, TO_CHAR    );

		pop_call();
		return TRUE;
	}

	one_argument( argument, arg );
	victim = NULL;

	if (!is_string(arg))
	{
		act( social_table[cmd].others_no_arg, ch, NULL, victim, TO_ROOM    );
		act( social_table[cmd].char_no_arg,   ch, NULL, victim, TO_CHAR    );

		pop_call();
		return TRUE;
	}
	else if ((victim = get_char_room(ch, arg)) == NULL)
	{
		send_to_char( "They aren't here.\n\r", ch );
	}
	else if (victim == ch)
	{
		act( social_table[cmd].others_auto,   ch, NULL, victim, TO_ROOM    );
		act( social_table[cmd].char_auto,     ch, NULL, victim, TO_CHAR    );
	}
	else
	{
		act( social_table[cmd].char_found,    ch, NULL, victim, TO_CHAR    );
		if (!blocking(victim, ch))
		{
			act( social_table[cmd].others_found,  ch, NULL, victim, TO_NOTVICT );
			act( social_table[cmd].vict_found,    ch, NULL, victim, TO_VICT    );
		}

		if (!mprog_social_trigger(social_table[cmd].name, victim, ch))
		{
			if (!MP_VALID_MOB(ch) && MP_VALID_MOB(victim) && CAN_TALK(victim))
			{
				switch (number_bits(2))
				{
					case 0:
						if (strcasecmp(social_table[cmd].name, "hand"))
							check_social_fast(victim, cmd, ch->name);
						break;
					case 1:
						if (!strcasecmp(social_table[cmd].name, "kiss")
						|| !strcasecmp(social_table[cmd].name, "sweep")
						|| !strcasecmp(social_table[cmd].name, "bkiss")
						|| !strcasecmp(social_table[cmd].name, "cheek")
						|| !strcasecmp(social_table[cmd].name, "peck")
						|| !strcasecmp(social_table[cmd].name, "dance")
						|| !strcasecmp(social_table[cmd].name, "hand"))
							check_social(victim, "slap", ch->name);
						break;
					case 2:
						check_social(victim, "ponder", ch->name);
						break;
					case 3:
						if ((!strcasecmp(social_table[cmd].name, "kiss")
						|| !strcasecmp(social_table[cmd].name, "bkiss")
						|| !strcasecmp(social_table[cmd].name, "cheek")
						|| !strcasecmp(social_table[cmd].name, "peck")
						|| !strcasecmp(social_table[cmd].name, "hand"))
						&& ((ch->sex == SEX_MALE && victim->sex == SEX_FEMALE)
						|| (ch->sex == SEX_FEMALE && victim->sex == SEX_MALE)))
							check_social(victim, "blush", ch->name);
						else
							check_social(victim, "ponder", ch->name);
						break;
				}
			}
		}
	}
	pop_call();
	return TRUE;
}

void process_command( CHAR_DATA *ch, char *argument)
{
	char buf2[MAX_INPUT_LENGTH], buf3[MAX_INPUT_LENGTH];
	char *pti, *pto;
	bool found;

	push_call("process_command(%p,%p)",ch,argument);

	found = FALSE;

	for (pti = argument, pto = buf3 ; *pti != '\0' ; pti++, pto++)
	{
		if (*pti == '&')
		{
			if (!found)
			{
				*pto = '\0';
				pto = buf2-1;   /* Switch recording medium */
				found = TRUE;
			}
			else
			{
				*pto = '\r';
			}
		}
		else
		{
			*pto = *pti;
		}
	}

	if (found)
	{
		*pto = '\r';
		pto++;
	}
	*pto = '\0';

	if (found)
	{
		/* Add buf2 to the inbuf */

		if (*ch->desc->inbuf == '\0')
		{
			ch->desc->intop = str_cpy_max( ch->desc->inbuf, buf2, MAX_INPUT_LENGTH);
		}
		else
		{
			if (ch->desc->inbuf[ch->desc->intop-1] != '\r'
			&&  ch->desc->inbuf[ch->desc->intop-1] != '\n')
			{
				ch->desc->intop = str_apd_max(ch->desc->inbuf, "\r", ch->desc->intop, MAX_INPUT_LENGTH);
				ch->desc->intop = str_apd_max(ch->desc->inbuf, buf2, ch->desc->intop, MAX_INPUT_LENGTH);
			}
			else
			{
				ch->desc->intop = str_apd_max(ch->desc->inbuf, buf2, ch->desc->intop,	MAX_INPUT_LENGTH);
			}
		}
	}
	interpret(ch, buf3);

	pop_call();
	return;
}

void preprocess_command( CHAR_DATA *ch, char *argument)
{
	char buf2[MAX_INPUT_LENGTH], buf3[MAX_INPUT_LENGTH];
	char buf1[MAX_INPUT_LENGTH];
	char *pti, *pto;
	bool found;

	push_call("preprocess_command(%p,%p)",ch,argument);

	found = FALSE;

	for (pti = argument, pto = buf3 ; *pti != '\0' ; pti++, pto++)
	{
		if (*pti == '&')
		{
			if (!found)
			{
				*pto = '\0';
				pto = buf2-1;   /* Switch recording medium */
				found = TRUE;
			}
			else
			{
				*pto = '\r';
			}
		}
		else
		{
			*pto = *pti;
		}
	}
	if (found)
	{
		*pto = '\r';
		pto++;
	}
	*pto = '\0';

	if (found)
	{
		if (*ch->desc->inbuf == '\0')
		{
			ch->desc->intop = str_cpy_max( ch->desc->inbuf, buf2, MAX_INPUT_LENGTH);
		}
		else
		{
			strcpy( buf1, ch->desc->inbuf);
			ch->desc->intop = str_cpy_max( ch->desc->inbuf, buf2, MAX_INPUT_LENGTH);
			ch->desc->intop = str_apd_max(ch->desc->inbuf, "\r", ch->desc->intop, MAX_INPUT_LENGTH);
			ch->desc->intop = str_apd_max(ch->desc->inbuf, buf1, ch->desc->intop, MAX_INPUT_LENGTH);
		}
	}
	interpret(ch, buf3);

	pop_call();
	return;
}

void do_a( CHAR_DATA *ch, char *argument )
{
	push_call("do_a(%p,%p)",ch,argument);

	send_to_char( "Ah, what?\n\r", ch );

	pop_call();
	return;
}