Protocol (version #2)
=====================

AI -> Tetrinet client manager (tcm)

Commands (int):

_TC_CONNECT
_TC_START
_TC_COMMAND_MOVE
_TC_COMMAND_USE_SPECIAL
_TC_COMMAND_DISCARD_SPECIAL
_TC_COMMAND_GET_FIELD
_TC_COMMAND_GET_CURRENT_BLOCK
_TC_COMMAND_GET_NEXT_BLOCK
_TC_COMMAND_GET_SPECIALS
_TC_COMMAND_GET_MESSAGE
_TC_COMMAND_SEND_MESSAGE


Strings are null terminated when transmitted

+-------------------------------+
| _TC_COMMAND_* | Variable Data |
+-------------------------------+

0. _TC_CONNECT

Variable Data:

	VersionNumber (int)			 
  UsernameLength (int)
  Username (char[UsernameLength])
	TeamnameLength (int)
	Teamname (char[TeamnameLength])
  ChannelLength (int)
  Channel (char[ChannelLength])

Return Data:

  Status (int)
    0 - ok
    1 - error

  If error
    ErrorLength (int)
    Error (char[ErrorLength])

1. _TC_START

Variable Data:

  None

Return Data:

  Status (int)
    0 - ok
    1 - error

  if ok
    PlayerArraySize (int)
    PlayerNumber (int)
	  MaxSpecials (int)
    [
      PlayerNumber (int) 
			PlayerNameLength (int)
			PlayerName (char[PlayerNameLength])
			TeamNameLength (int)
			TeamName (char[TeamNameLength])
    ]

  if error
    ErrorLength (int)
    Error (char[ErrorLength])


2. _TC_COMMAND_MOVE

Variable Data:

	#define TC_MOVE_LEFT 1
	#define TC_MOVE_RIGHT 2
	#define TC_ROTATE_CLOCKWISE 3
	#define TC_ROTATE_ANTICLOCKWISE 4
	#define TC_MOVE_DOWN 5
	#define TC_MOVE_DROP 6

Return Data:

  Result (int) - 0 if ok, 1 if illegal, 2 if dead, 3 if win


3. _TC_COMMAND_USE_SPECIAL

Variable Data:

  PlayerNumber (int)

Return Data:

  Result (int) - 0 if ok, 1 if illegal (eg target player no longer playing),
	               2 if dead
								 3 if win

4. _TC_COMMAND_DISCARD_SPECIAL

Variable Data:

  None.

No data returned


5. _TC_COMMAND_GET_FIELD

Variable Data:

  PlayerNumber (int)

Return Data:

  Result (int) - 0 if ok
	             - 1 if player dead
  Field (char[FIELD_SIZE])


6. _TC_COMMAND_GET_CURRENT_BLOCK

Variable Data:
  
  None

Return Data:

  BlockType (char)
  XPosition (int)
  YPosition (int)

6. _TC_COMMAND_GET_NEXT_BLOCK

Variable Data:
  
  None

Return Data:

  BlockType (char)


7. _TC_COMMAND_GET_SPECIALS

Variable Data:

  None.

Return Data:

  Length (int) 
	  - should correspond to MaxSpecials for game
  Specials (char[Length])


8. _TC_COMMAND_GET_MESSAGE

Variable Data:

  None

Return Data:
  
  Length (int)
  Message (char[Length])


9. _TC_COMMAND_SEND_MESSAGE

Variable Data:

  Length(int)
  Message (char[Length])


Return Data:

None
