<!--
   xatrix kingpin 1.21 network protocol packet DTD

   Namespace = http://jjaf.de/kingpin/protocol/1.21/dtd/

   For further information, see: http://jjaf.de/kingpin/protocol/1.21/

   Copyleft 2001 jjaf.de,
   All Rights Reserved. 

   This DTD module is identified by the PUBLIC and SYSTEM identifiers:

   PUBLIC "-//jjaf.de//DTD kppp 1.0//EN"
   SYSTEM "http://jjaf.de/kingpin/protocol/1.21/dtd/"

   $Revision: 1.0.0 $
   $Date: 2001/12/11 16:18:00 $

-->

<!--=================== Generic Attributes ===============================-->

<!ENTITY % INTERFACE "(Inbound|OUTbound)">
    <!-- client-to-server or server-to-client -->

<!ENTITY % ID "CDATA">
    <!-- FFFFFF means connectionless, 80____ means important -->

<!ENTITY % CLIENTID "CDATA">
    <!-- another Hex-String -->

<!ENTITY % BOOLEAN "(yes|no)">

<!ENTITY % ENTITY "CDATA">
    <!-- a Quake entity (2 octets) -->

<!--================ Document Structure ==================================-->

<!ELEMENT log (head, body)>
<!ELEMENT head (time, interface, interface)>
<!ELEMENT body (ConnectionLess | ClientToServer | ServerToClient)*>

<!--================ Document header =====================================-->

<!ELEMENT time (#PCDATA)>
<!ELEMENT interface EMPTY>
<!ATTLIST interface
  id            %INTERFACE;  #REQUIRED
  localhost     CDATA        #IMPLIED
  localip       CDATA        #REQUIRED
  localport     CDATA        #REQUIRED
  remotehost    CDATA        #IMPLIED
  remoteip      CDATA        #REQUIRED
  remoteport    CDATA        #REQUIRED
  >

<!--================ packet-types ========================================-->

<!--
  There a tree distinctive packet-types:
  1. connectionless (without acknoledge and sequence number set to FFFFFF)
  2. packets in a sequence (connection) either:
  2.1. client-to-server
  2.2. server-to-client
-->

<!--
  connectionless-packets can only contain console-commands.
-->
<!ENTITY % CONNECTIONLESS "(ConsoleCommand)+">
<!--
  packets in sequence (connection) can have these types regarless of interface.
-->
<!ENTITY % COMMON "BAD | NOP | UNKNOWN | ConsoleCommand">

<!--
  packets in sequence (connection) can have these types in respect to
  the interface.
-->
<!ENTITY % CLIENTTOSERVER "(%COMMON; | PlayerUpdate | UserInfo)*">
<!ENTITY % SERVERTOCLIENT "(%COMMON; | MuzzleFlash | MuzzleFlash2 | MuzzleFlash3 | TempEntity | Layout | Inventory | HUD | Disconnect | Reconnect | Sound | Print | ServerData | Configstring | SpawnBaseline | CenterPrint | Download | PlayerInfo | PacketEntities | DeltaPacketEntities | Frame | ConfigstringPointer | PushDownload)*">

<!ELEMENT ConnectionLess %CONNECTIONLESS;>
<!ATTLIST ConnectionLess
  interface     %INTERFACE;  #REQUIRED
  >

<!ELEMENT ClientToServer %CLIENTTOSERVER;>
<!ATTLIST ClientToServer
  id            %ID;         #REQUIRED
  idreliable    %BOOLEAN;    "no"
  ackid         %ID;         #REQUIRED
  ackidreliable %BOOLEAN;    "no"
  clientid      %CLIENTID;   #REQUIRED
  >

<!ELEMENT ServerToClient %SERVERTOCLIENT;>
<!ATTLIST ServerToClient
  id            %ID;         #REQUIRED
  idreliable    %BOOLEAN;    "no"
  ackid         %ID;         #REQUIRED
  ackidreliable %BOOLEAN;    "no"
  >

<!--================ packet-content ======================================-->

<!ELEMENT ConsoleCommand (#PCDATA)>
<!ELEMENT BAD EMPTY>
<!ELEMENT NOP EMPTY>

<!--
  unknown packet-content is dumped in this. 
-->
<!ELEMENT UNKNOWN (#PCDATA)>

<!ELEMENT PlayerUpdate (#PCDATA)>
<!ELEMENT UserInfo (#PCDATA)>

<!ELEMENT MuzzleFlash EMPTY>
<!ATTLIST MuzzleFlash
  entity        %ENTITY;     #REQUIRED
  value         CDATA        #REQUIRED
  >

<!ELEMENT MuzzleFlash2 (#PCDATA)>
<!ATTLIST MuzzleFlash2
  entity        %ENTITY;     #REQUIRED
  value         CDATA        #REQUIRED
  >
<!ELEMENT MuzzleFlash3 (#PCDATA)>
<!ATTLIST MuzzleFlash3
  entity        %ENTITY;     #REQUIRED
  value         CDATA        #REQUIRED
  >
<!ELEMENT TempEntity (#PCDATA)>
<!ELEMENT Layout (#PCDATA)>
<!ELEMENT Inventory (#PCDATA)>
<!ELEMENT HUD (#PCDATA)>
<!ELEMENT Disconnect (#PCDATA)>
<!ELEMENT Reconnect (#PCDATA)>
<!ELEMENT Sound (#PCDATA)>
<!ELEMENT Print (#PCDATA)>
<!ELEMENT ServerData (#PCDATA)>
<!ELEMENT Configstring (#PCDATA)>
<!ELEMENT SpawnBaseline (#PCDATA)>
<!ELEMENT CenterPrint (#PCDATA)>
<!ELEMENT Download (#PCDATA)>
<!ELEMENT PlayerInfo (#PCDATA)>
<!ELEMENT PacketEntities (#PCDATA)>
<!ELEMENT DeltaPacketEntities (#PCDATA)>
<!ELEMENT Frame (#PCDATA)>
<!ELEMENT ConfigstringPointer (#PCDATA)>
<!ELEMENT PushDownload (#PCDATA)>
