##############################################################################
# Commands
##############################################################################
# Command structure explanation
#
# Values in [] are optional
# Values in () are choices of fixed values; value in all caps is default
# Special (Iourta) == (IN|on|under|over|through|at) Note that some of the 
#     values can be missing to indicate limited options.  Capital value is the
#     default.
# Values in <> refer to objects or people
# | == or
# / == synonym
#
# Generally a command will follow one of the following formats:
#   verb
#   verb <target>
#   verb modifier <target>
#   verb <subject> modifier <target>
#
# Commands can be chained on one input by putting either '.' or ' THEN ' in
# between the commands.
# Examples: > x door.x room
#           > x door then x room
#
# TODO: Leaving out the subject or target will cause the parser to attempt to 
#       use the current object of attention.  
#       This goes along with pronoun processing.
#
# TODO: Implement ',' , "AND", "ALL", "ALL <type>" as multi-object linkers.
#
# TODO: Implement "keyring" concept for locking/unlocking things.
##############################################################################
##############################################################################
###
# Investigating the world and yourself
###
search <target>
look [(AROUND|AT|behind|under|through) (<target>|me/self/myself)] 
examine <target>
inventory
listen [[to] <target>]
smell [<target>]
taste <target>
z					# stand still and let time pass
stand
sit [on] [<target>] # defaults to ground


###
# Manipulating things
###
take/carry <target>/put <target> in inventory
drop <target>/put <target> down
put <subject> (Iourt) <target>
throw <subject> [(iourtA) <target>]
hit/attack <target> [with <subject>]
kick <target>
eat/drink/swallow <target>
empty <target>
fill <target> [with <subject>]
push <target>
pull <target> [with <subject>]
pry <target> with <subject>
ride/drive <target>
lock <target> [with <subject>]
unlock <target> [with <subject>]
open/unwrap <target>
close/shut <target>
cut <target> [with <subject>]
raise <target> [ with <subject>]
lower <target>
touch <target> [with <subject>]
turn/crank/rotate <target>
fix <target> [with <subject>]
break <target> [with <subject>]

###
# Interacting with people (or other conversational-type things)
###
tell <target> about <subject>
ask <target> about <subject>
<target>, "arbitrary command"
hug <target>
kiss <target>
think [[about] <subject>]

###
# Moving around
###
go <direction>/<direction> # where <direction> is one of: N,S,E,W,NE,NW,SE,SW,U,D
climb [(iOurt)] <target>
jump [(iOurt) <target>]
crawl [<direction>|(ioUrt) <target>]
swim [<direction>|in <target>]
fly [<direction>|(uRt) <target>]

###
# Meta-commands
###
help		# display basic commands, description of game, etc.
credits		# display credit file
quit		# quit the whole program
save		# prompts for a save-file name and location
restore		# prompts for a save-file to restore
restart		# restart the current game
hint[s] [about <subject>]	# access hint file, if provided
toggle "arbitrary string"		# allows for arbitrary modes to be implemented

# Modes
verbose		# verbose descriptions of rooms and objects every time
short		# verbose desc. first time, abbrev. thereafter
status		# status bar present
showroom	# current room is shown in status bar
turns		# elapsed turns are shown in status bar
debug		# debug info is written to stdout
debugingame # debug info is written directly to the game output

##############################################################################
# Regex 
##############################################################################
# General interpretation is:
#	Group 1: verb
#	Group 2: long subject
#	Group 3: adjective | subject (if 4 == null)
#	Group 4: subject
#	Group 5: modifier
#	Group 6: long target
#	Group 7: adjective | target (if 8 == null)
#	Group 8: target
#
# Short commands in the form of <verb> [modifier] <target> are interpreted:
#	Group 1: verb
#	Group 2:  
#	Group 3: modifier 
#	Group 4: 
#	Group 5: 
#	Group 6: long target
#	Group 7: adjective | target (if 8 == null)
#	Group 8: target
##############################################################################
(<verblist>|.*? )(?:the |a |an )?((.*? )?(<objectlist>|.*? )?)(?: )?(at |in |over |into |behind |under |through |with |over |about )?(?:the |a |an )?((.*? )?(<objectlist>|.*)?)
