btmux/autom4te.cache/
btmux/doc/.svn/
btmux/event/.svn/
btmux/game/.svn/
btmux/game/bin/.svn/
btmux/game/data/.svn/
btmux/game/logs/.svn/
btmux/game/maps/
btmux/game/maps/.svn/
btmux/game/maps/.svn/prop-base/
btmux/game/maps/.svn/props/
btmux/game/maps/.svn/text-base/
btmux/game/maps/.svn/wcprops/
btmux/game/mechs/
btmux/game/mechs/.svn/
btmux/game/mechs/.svn/prop-base/
btmux/game/mechs/.svn/props/
btmux/game/mechs/.svn/text-base/
btmux/game/mechs/.svn/wcprops/
btmux/game/text/.svn/
btmux/include/.svn/
btmux/misc/
btmux/misc/.svn/
btmux/misc/.svn/prop-base/
btmux/misc/.svn/props/
btmux/misc/.svn/text-base/
btmux/misc/.svn/wcprops/
btmux/python/
btmux/python/.svn/
btmux/python/.svn/prop-base/
btmux/python/.svn/props/
btmux/python/.svn/text-base/
btmux/python/.svn/wcprops/
btmux/src/.svn/prop-base/
btmux/src/.svn/props/
btmux/src/.svn/text-base/
btmux/src/.svn/wcprops/
btmux/src/hcode/.svn/
btmux/src/hcode/btech/
btmux/src/hcode/btech/.svn/
btmux/src/hcode/btech/.svn/prop-base/
btmux/src/hcode/btech/.svn/props/
btmux/src/hcode/btech/.svn/text-base/
btmux/src/hcode/btech/.svn/wcprops/
btmux/src/hcode/include/.svn/
                               CONTENTS
                               ========

I. Introduction
===============
a. The HUDINFO Protocol
b. About this document
c. The HUDINFO command
d. The HUDINFO Response Format
e. HUDINFO Errors

II. The special-case HUDINFO commands
=====================================
a. The argument-less 'hudinfo' command
b. The session-key setting 'hudinfo key' command.


III. Internal Data
==================
a. General Status
b. Weapon Status
c. Weapon List
d. Limb Status
e. Ammo Status
f. Static General Info
g. Original Armor Status
h. Armor Status

IV. External Data
=================
a. Contacts
b. Armor Scan
c. Weapon Scan
d. Tactical
e. Conditions
f. Building Contacts

V. Data Type Definitions
========================
a. Sizes
b. Type list
  advtech
  ammo type
  arc
  armor scan status
  building status string
  coordinate
  damage type
  degree
  fuel
  heatmeasure
  map condition flags
  mechid
  offset
  range
  section
  speed
  tactical string
  unit status string
  unit type character
  weapon fire mode
  weapon quality
  weapon scan status
  weapon status
  weapon type




                            I. Introduction
                            ===============


a.  The HUDINFO Protocol
------------------------

 The HUDINFO protocol is designed to allow easy communication between the
MUX server and any automated or semi-automated Battletech client. It
provides all info players can get through the conventional commands, but
drops issues such as readability and hysterical raisins in favour of
flexible and efficient communication.


b.  About this document
-----------------------

 This document describes version 0.7 of the HUDINFO specification. It is not
finished, should be considered a work in progress and should only be used as
a rough guideline in the development of a HUD client. Discussion about this
document, the standard described herein or other aspects of HUD clients can
be held at the mailinglist btech-discussions@lists.sourceforge.net, or the
HUD channel on 3030MUX.

 File: $Id: hudinfo.spec,v 1.1 2005/06/13 20:50:45 murrayma Exp $
 Last-Modified: $Date: 2005/06/13 20:50:45 $
 Last-Modified-By: $Author: murrayma $

 History: $Log: hudinfo.spec,v $
 History: Revision 1.1  2005/06/13 20:50:45  murrayma
 History: Fix a bad initial import.
 History:
 History: Revision 1.1.1.1  2005/06/13 20:18:06  murrayma
 History: Initial import from stable.
 History:
 History: Revision 1.1.1.1  2005/01/11 21:17:31  kstevens
 History: Initial import.
 History:
 History: Revision 1.9  2002/12/07 22:05:25  twouters
 History: Explicitly outlaw empty strings from all responses, and amend type
 History: specifications to do the same. This had been the intent all along, just lost
 History: track of it.
 History:
 History: Revision 1.8  2002/12/07 21:56:25  twouters
 History: Add jumptarget X/Y to the 'gs' command (sneak it into version 0.7)
 History:
 History: Revision 1.7  2002/12/06 23:03:28  twouters
 History: Added building contacts, map identifiers, names and version numbers, and
 History: weapon heat, all based on input on the discussion list.
 History:
 History: Revision 1.6  2002/02/26 12:48:46  twouters
 History: Fix example of 'T' and correct calculation in description.
 History:
 History: Revision 1.5  2002/02/06 22:32:16  twouters
 History: More reality seeping in: get rid of seperate 'side' and 'arm'
 History: arcs, and clarify 'sensors' string.
 History:
 History: Revision 1.4  2002/01/28 19:52:18  twouters
 History: HUDINFO spec meets reality, film at 11. Rework the 'weapon status' to be
 History: more consistent, some minor other changes.
 History:
 History: Revision 1.3  2002/01/22 22:41:57  twouters
 History: Re-work of multi-line responses, include a 'response type', clarification
 History: of error responses, some general typo fixes and clarifications.
 History:
 History: Revision 1.2  2002/01/22 17:15:04  twouters
 History: Lots of whitespace cleanup, some restructuring. Clarify 'light type'.
 History: Provide examples for all commands.
 History:
 History: Revision 1.1  2002/01/22 15:24:23  twouters
 History: The first public draft of the HUDINFO specification.


c.  The HUDINFO command
-----------------------

 The crux of the HUDINFO protcol is the 'hudinfo' command. Almost all of the
data is retrieved using the hudinfo command. All hudinfo responses meant to
be parsed by the software at the client-side are prefixed by (at least)
"#HUD". For everything but the argument-less 'hudinfo' command, the complete
prefix is built up as follows:

   #HUD:<key>:<class>:<type># 

where '<key>' is a session key, '<class>' is the identifier for the
subcommand the response comes from, and '<type>' is one of 'R' (single-line
response), 'L' (multi-line response list), 'S' (start of response list), 'D'
(end of response list) or 'E' (error response). Each 'class' of message has
a distinct response format for each 'type' of response, and all responses
come in that format. For future compatibility, extra fields at the end of
the format should be accepted but ignored.

 The session key is included for spoof protection. It has to be set before
issueing any hudinfo command that returns data (any hudinfo command except
the argument-less form or the 'hudinfo key' command), and for simplicity
must consist of alphanumerical characters alone, of no more than 20
characters. A simple 3-character key is deemed sufficient for common use.


d.  HUDINFO response format
---------------------------

 The actual message that follows the HUDINFO prefix in each message, is
presented as comma-seperated values, where the values can be of various
types. Values will never contain a comma, but extra trailing fields are
possible and should be ignored; they are a result of a new minor version or
experimental features.

 The actual values can be of different types types, where the type is
defined in this specification (and not, like XML, given in the response.)
The values are all the ASCII representations of the values, not their actual
byte value; so, the value 0 is represented as the string '0', not as the NUL
character, and the value 65 is '65', not 'A'. The complete list of types as
well as their definition and meaning can be found in section V, Data Type
Definitions.

 It should be noted that the intent of the specification is that there never
be empty items in responses; in other words, the sequence ',,' should never
occur in raw HUDINFO output. All strings should be at least one character
long, possibly supplying '-' as its only character. This is done to
facilitate easy parsing.


e.  HUDINFO Errors
------------------

 When the 'hudinfo' command needs to report an error, be it because an
operation cannot be performed, an unknown or illegal subcommand is issued or
because of internal problems, a response is generated of type 'E'. In the
case of an unknown or illegal subcommand, the 'class' of such a response is
set to '???'.

 Some error messages are common to all or almost all hudinfo commands; these
are listed here. Some error messages apply only to specific commands, and
are listed in those commands.

   "<subcommand>: subcommand not found":
	The subcommand given does not exist.

   "Not in a BattleTech unit":
	The command was issued outside of a BattleTech unit.

   "You are destroyed!":
	The command was issued in a destroyed BattleTech unit.

   "Reactor not online":
	The command was issued from a shutdown BattleTech unit, but
	requirs an operating one.

   "Unexpected internal error!":
	An internal error occured, report +bug.

   "No such target":
	When referencing a (currently) unknown mechid.

   "Out of range":
	The target or location is out of range.


                 II.  The special-case HUDINFO commands
                 ======================================

 The following special-cased hudinfo commands are special for two reasons:
they can (and should) be issued before a session key is set, and they can be
issued outside of a BattleTech unit. In addition, the response generated by
'hudinfo' is of a different format.

a. The argument-less 'hudinfo' command

   command:
	hudinfo
   response:
   Exactly one:
	#HUD hudinfo version 1.0 [options: <option flags>]
   Or exactly one:
        Huh?  (Type "help" for help.)

   Purpose: Identification

 The argument-less 'hudinfo' command is a special case of the 'hudinfo'
command, the only form that does not returns a response with a session key.
Instead, it returns a version identifier and a list of supported uptions, so
clients can autodetect whether a MUX supports hudinfo and if so, which
version.

 The version number is built up from 'major' and 'minor' version, both
integers, separated by a dot. The version number is not a floating point
number; 1.9 is smaller than 1.10, and not the same as 1.90. The major
version differs only between versions of the protocol that are wholly
incompatible; a HUD client that discovers a major mode it does not know
should not try to use hudinfo. The minor version is increased when new
standard features are added in a backwards-compatible manner; clients should
not break or refuse to work if the minor version is higher than expected,
though they may do so if the minor version is lower than required.

 The optional 'options' section, if present, should contain a list of option
flags for non-standard new features, which are used to add non-standard or
experimental features without creating conflicts on the version number. Such
options and their option flags should preferably be registered by mailing to
the contacts in section Ib, "About this Document", both for inclusion in the
next version of the protocol, and to avoid collisions with other options.

   Example:
    > hudinfo
    < #HUD hudinfo version 1.0


b. The session-key setting 'hudinfo key' command.

   command:
	hudinfo key=<key>
   response:
	#HUD:<key>:KEY:R# Key set

  This command is used to set the sesion key. It should be issued before any
hudinfo command other than the argument-less hudinfo, in order to set the
session key. The session key is a short (1-20 character) preferably
non-deterministic string of alphanumeric characters that serves as spoof
protection. The string is case-sensitive.

   Example:
    > hudinfo key=C58x2
    < #HUD:C58x2:KEY:R# Key set

   Error messages:

    "Invalid key":
	Invalid characters used in key, or key too long.


                            I. Internal Data
                            ================

a. General Status

   command:
	hudinfo gs

   response:
   Exactly once:
	#HUD:<key>:GS:R# ID,X,Y,Z,CH,DH,CS,DS,CH,HD,CF,CV,DV,RC,BC,TU,FL,JX,JY

   ID: mechid, own mech ID
   X, Y, Z : coordinates, current location
   CH: degree, current heading
   DH: degree, desired heading
   CS: speed, current speed
   DS: speed, desired speed
   CH: heatmeasure, current heat
   HD: heatmeasure, current heat dissipation
   CF: fuel or '-', current fuel or '-' if not applicable)
   CV: speed, current vertical speed
   DV: speed, desired vertical speed
   RC: range, range to center of current hex
   BC: degree, bearing of center of current hex
   TU: offset or '-', torso/turret facing offset (or '-' if not applicable)
   FL: Unit status flags
   JX, JY: jump X/Y targets (or - if not jumping)

   Example:
    > hudinfo gs
    < #HUD:C58x2:GS:R# QQ,5,5,0,0,0,32.25,43.0,10,120,-,0,0,0.2,179,0,L,-,-


b. Weapon Status

   command:
	hudinfo we

   response:
   Zero or more:
	#HUD:<key>:WE:L# WN,WT,WQ,LC,ST,FM,AT
   Exactly once:
	#HUD:<key>:WE:D# Done

   WN: integer, weapon number
   WT: weapon type number
   WQ: weapon quality
   LC: section, location of weapon
   ST: weapon status
   FM: weapon fire mode
   AT: ammo type, the type of ammo selected

   Purpose:
 	To retrieve detailed information about the status of a units
	weapons. One response is generated for each weapon on the unit,
	functional or not, and a single "Done" message signals the end of
	the list. Weapons are returned in unspecified order.

   Example:
    > hudinfo we
    < #HUD:C58x2:WE:L# 0,1,3,RA,-,h,-
    < #HUD:C58x2:WE:L# 1,2,4,LL,29,H,A
    < #HUD:C58x2:WE:L# 5,2,1,CT,D,H,-
    < #HUD:C58x2:WE:D# Done


c. Weapon List

   command:
	hudinfo wl

   repsonse:
   Zero or more:
	#HUD:<key>:WL:L# WN,NM,NR,SR,MR,LR,NS,SS,MS,LS,CR,WT,DM,RT,FM,AT,DT
   Exactly one:
	#HUD:<key>:WL:D# Done

   WN: integer, weapon number
   NM: string, weapon name
   NR: range, minimum range
   SR: range, short range
   MR: range, medium range
   LR: range, long range
   NS: range, minimum range in water
   SS: range, short range in water
   MS: range, medium range in water
   LS: range, long range in water
   CR: integer, size in critslots
   WT: integer, weight in 1/100 tons
   DM: integer, maximum damage
   RT: integer, recycle time in ticks
   FM: weapon fire mode, possible fire modes
   AT: ammo type, possible ammo types
   DT: damage type
   HT: heat measure, weapon heat per salvo

   Example:
    > hudinfo wl
    < #HUD:C58x2:WL:L# 0,Odd Laser,0,2,4,6,0,1,2,3,1,100,6,30,-,E,30
    < #HUD:C58x2:WL:L# 1,Heavy Odd Pulse Flamer-Laser,0,4,6,8,0,1,2,3,2,500,12,30,h,Eph,100
    < #HUD:C58x2:WL:L# 2,LRM-6,6,14,18,24,-,-,-,-,4,700,6,30,H,1ACNMSs,Mg,50
    < #HUD:C58x2:WL:D# Done

d. Limb Status

   command:
	hudinfo li
 
   response:
   Zero or more:
	#HUD:<key>:LI:L# SC,ST
   Exactly once:
	#HUD:<key>:LI:D# Done

   SC: section, only applicable sections are Arms/Legs and Suit1.
   ST: weapon status, status for this section.

   Example:
    > hudinfo li
    < #HUD:C58x2:WL:L# LA,D
    < #HUD:C58x2:WL:L# RA,22
    < #HUD:C58x2:WL:L# LL,-
    < #HUD:C58x2:WL:L# RL,-
    < #HUD:C58x2:WL:D# Done

e. Ammo status

   command:
	hudinfo am

   response:
   Zero or more:
	#HUD:<key>:AM:L# AN,WT,AM,AR,FR
   Exactly once:
	#HUD:<key>:AM:D# Done

   AN: integer, ammo bin number
   WT: weapon type, what the ammo is for
   AM: ammo mode
   AR: integer, rounds remaining
   FR: integer, full capacity

   Example:
    > hudinfo am
    < #HUD:C58x2:AM:L# 0,2,A,20,24
    < #HUD:C58x2:AM:L# 1,2,C,12,12
    < #HUD:C58x2:AM:L# 2,2,-,48,48
    < #HUD:C58x2:AM:D# Done


f. Static General info

   command:
	hudinfo sgi

   response:
   Exactly once:
	#HUD:<key>:SGI:R# TC,RF,NM,WS,RS,BS,VS,TF,HS,AT

   TC: unit type character
   RF: string, unit referece
   NM: string, unit name
   WS: speed, unit max walking/cruise speed
   RS: speed, unit max running/flank speed
   BS: speed, unit max reverse speed
   VS: speed, unit max vertical speed
   TF: fuel, or '-' for n/a
   HS: integer, number of templated (single) heatsinks
   AT: advtech, advanced technology available or '-' if n/a

   Example:
     > hudinfo sgi
     < #HUD:C58x2:SGI:R# B,MAD-1W,Mawauder,43,64,43,0,-,12,S


g. Original Armor Status
   
   command:
   	hudinfo oas

   response:
   Zero or more:
   	#HUD:<key>:OAS:L# SC,AF,AR,IS
   Exactly once:
   	#HUD:<key>:OAS:D# Done
   	
   SC: section
   AF: integer, original front armor or '-' if n/a
   AR: integer, original rear armor or '-' if n/a
   IS: integer, original internal structure or '-' if n/a

   Example:
    > hudinfo oas
    < #HUD:C58x2:OAS:L# LA,22,-,12
    < #HUD:C58x2:OAS:L# RA,22,-,12
    < #HUD:C58x2:OAS:L# LT,17,8,16
    < #HUD:C58x2:OAS:L# RT,17,8,16
    < #HUD:C58x2:OAS:L# CT,35,10,23
    < #HUD:C58x2:OAS:L# LL,18,-,16
    < #HUD:C58x2:OAS:L# RL,18,-,16
    < #HUD:C58x2:OAS:L# H,9,-,3
    < #HUD:C58x2:OAS:D# Done

h. Armor Status

   command:
   	hudinfo as
   response:
   Zero or more:
   	#HUD:<key>:AS:L# SC,AF,AR,IS
   Exactly once:
   	#HUD:<key>:AS:D# Done
   	
   SC: section
   AF: integer, front armor or '-' if n/a
   AR: integer, rear armor or '-' if n/a
   IS: integer, internal structure or '-' if n/a, 0 if destroyed

   Example:
    > hudinfo as
    < #HUD:C58x2:AS:L# LA,0,-,0
    < #HUD:C58x2:AS:L# RA,22,-,12
    < #HUD:C58x2:AS:L# LT,9,5,16
    < #HUD:C58x2:AS:L# RT,4,1,16
    < #HUD:C58x2:AS:L# CT,0,10,5
    < #HUD:C58x2:AS:L# LL,0,-,16
    < #HUD:C58x2:AS:L# RL,18,-,16
    < #HUD:C58x2:AS:L# H,9,-,3
    < #HUD:C58x2:AS:D# Done


                           II. External Data
                           =================
                  
a. Contacts

   command:
  	hudinfo c

   response:
   Zero or more:
  	#HUD:<key>:C:L# ID,AC,SE,UT,MN,X,Y,Z,RN,BR,SP,VS,HD,JH,RTC,BTC,TN,HT,FL
   Exactly once:
  	#HUD:<key>:C:D# Done

   ID: mechid, ID of the unit
   AC: arc, weapon arc the unit is in
   SE: sensors, sensors that see the unit
   UT: unit type character
   MN: string, mechname of unit, or '-' if unknown
   X, Y, Z: coordinates of unit
   RN: range, range to unit
   BR: degree, bearing to unit
   SP: speed, speed of unit
   VS: speed, vertical speed of unit
   HD: degree, heading of unit
   JH: degree, jump heading, or '-' if not jumping
   RTC: range, range from unit to X,Y center
   BTC: degree, bearing from unit to X,Y center
   TN: integer, unit weight in tons
   HT: heatmeasure, unit's apparent heat (overheat)
   FL: unit status string

   Example:
    > hudinfo c
    < #HUD:C58x2:C:L# DV,r*,PS,B,Pheonix-Hawg,5,3,1,1.6,2,0.0,0.0,180,-,0.2,0,45,0,BSl
    < #HUD:C58x2:C:D# Done

b. Armor Scan

  command:
	hudinfo asc <mechid>

  response:
  Zero or more:
	#HUD:<key>:ASC:L# SC,AF,AR,IS
  Exactly once:
	#HUD:<key>:ASC:D# Done

  SC: section
  AF: section scan status, front armor
  AR: section scan status, rear armor
  IS: section scan status, internal structure, '*' for destroyed

  This command generates a 'You are being scanned by XX' message in the
  scanned unit.

   Example:
    > hudinfo asc DV
    < #HUD:C58x2:ASC:L# LA,O,-,O
    < #HUD:C58x2:ASC:L# RA,O,-,O
    < #HUD:C58x2:ASC:L# LT,o,O,O
    < #HUD:C58x2:ASC:L# RT,x,O,O
    < #HUD:C58x2:ASC:L# CT,*,O,o
    < #HUD:C58x2:ASC:L# LL,O,-,O
    < #HUD:C58x2:ASC:L# RL,O,-,O
    < #HUD:C58x2:ASC:L# H,*,-,*
    < #HUD:C58x2:ASC:D# Done


c. Weapon Scan

   command:
	hudinfo wsc <mechid>

   response:
   Zero or more:
	#HUD:<key>:WSC:L# WI,SC,ST
   Exactly once:
	#HUD:<key>:WSC:D# Done

   WN: integer, weapon number on this scan[*]
   WI: weapon index, type of the weapon
   SC: section
   ST: weapon scan status, apparent state of the weapon.

   [*] weapon numbers are not persistent across scans.

   This command generates a 'You are being scanned by XX' message in the
   scanned unit.

   Example:
    > hudinfo wsc DV
    < #HUD:C58x2:WSC# 0,1,LA,R
    < #HUD:C58x2:WSC# 1,2,LA,-
    < #HUD:C58x2:WSC# 2,0,LA,*
    < #HUD:C58x2:WSC# 3,1,LA,*
    < #HUD:C58x2:WSC# 4,1,RA,-
    < #HUD:C58x2:WSC# 5,2,RA,R
    < #HUD:C58x2:WSC# 6,0,RA,R
    < #HUD:C58x2:WSC# 7,1,RA,-
    < #HUD:C58x2:WSC# 8,0,CTr,R
    < #HUD:C58x2:WSC# 9,0,RTr,R
    < #HUD:C58x2:WSC# 10,0,LTr,R
    < #HID:C58x2:WSC# Done


d. Tactical

   command:
	hudinfo t [ <height> [ <range> <bearing> [ l ] ] ]

   response:
   Exactly once:
	#HUD:<key>:T:S# SX,SY,EX,EY,MI,MN,MV
   Once or more:
	#HUD:<key>:T:L# Y,TS
   Exactly once:
	#HUD:<key>:T:D# Done

   SX: coordinate, Start X
   SY: coordinate, Start Y
   EX: coordinate, End X
   EY: coordinate, End Y
   MI: map identifier
   MN: map name
   MV: map version number

   Y: coordinate, Y coordinate for line
   TS: tactical string, of length (EX-SX + 1)*2

   The terrain string (TS) is a special type of string. It is built up out of
   pairs of characters for terrain elevation and terrain type. One pair (two
   characters) per X-coordinate of the tactical string. Water hexes have
   depth instead of height (their top level is always 0).

   The MI, MN and MV items are not mandatory, and should be -1 when not
   supported or disabled by the game administrator(s).

   If the fourth argument is passed in and is 'l', a line-of-sight tactical
   (if available) will be returned, where all unknown terrain and/or height
   is '?'.

   Example:
    > hudinfo t 5
    < #HUD:C58x2:T:S# 11,10,29,14,-1,-1,-1
    < #HUD:C58x2:T:L# 10,#0"0"0"0"0"0"0"0'0~1.0.0.0.0'0'0'0'0'0
    < #HUD:C58x2:T:L# 11,"0#0"0"0"0"0"0'0'0~1'0.0.0.0.0.0.0.0.0
    < #HUD:C58x2:T:L# 12,^9#0#0"0"0"0"0'0~1'0'0'0.0.0.0.0.0.0.0
    < #HUD:C58x2:T:L# 13,^9#1^9#0"0"0'0~1'0.0'0.0.0.0.0.0.0.0.0
    < #HUD:C58x2:T:L# 14,^9#2^9^9#0'0'0'0~1'0.0.0.0.0.0.0.0.0.0
    < #HUD:C58x2:T:D# Done

e. Conditions

   command:
	hudinfo co

   response:
   Exactly once:
	#HUD:<key>:CO:R# LT,VR,GR,TP,FL

   LT: light type
   VR: range, visibility range
   GR: integer, gravity in 100th G's
   TP: heatmeasure, ambient temperature
   FL: map condition flags

   Example:
    > hudinfo co
    < #HUD:C58x2:CO:R# D,60,100,21,UD

f. Building Contacts

   command:
	hudinfo cb

   response:
   Zero or more:
	#HUD:<key>:CB:L# AC,BN,X,Y,Z,RN,BR,CF,MCF,BS
   Exactly once:
	#HUD:<KEY>:CB:D# Done

   AC: arc, weapon arc the building is in
   BN: string, name of the building, or '-' if unknown
   X, Y, Z: coordinates of building
   RN: range, range to building
   BR: degree, bearing to building
   CF: integer, current construction factor of building
   MCF: integer, maximum construction factor of building
   BS: building status string

   Example:
    > hudinfo cb
    < #HUD:C58x2:CB:L# *,Underground Hangar,55,66,7,25.1,180,1875,2000,X
    < #HUD:C58x2:CB:D# Done


                        V. Data Type Definitions
                        ========================

a. Sizes

 All integers are at most 32 bit signed ints. All floats are at most C
doubles. All strings are variable-length with a maximum length of 8192
characters, ASCII encoded.

b. Type list

  advtech: '-', or at least one of the following:
    'A': Angel ECM
    'B': Beagle Active Probe
    'C': C3I suite
    'E': Guardian ECM
    'I': Infiltrator-II Stealth
    'J': Jettisonable Backpack
    'K': Kage Stealth
    'L': AntiLeg Attack
    'M': MASC
    'N': Null Signal System
    'P': Personal ECM
    'R': Radar
    'S': Searchlight
    'T': TAG
    'W': Swarm Attack
    'a': Achileus Stealth
    'b': Bloodhound Active Probe
    'c': C3 Slave
    'f': Mount Friends
    'i': Infiltrator Stealth
    'j': Must jettison backpack before swarm/antileg attacks
    'm': C3 Master
    'p': Purifier Stealth
    's': Stealth Armor
    't': Triple Strength Myomer

  ammo type: '-', or at least one of the following characters:
    '1': Swarm1 mode
    'A': Artemis mode
    'C': Cluster mode
    'E': iNARC ECM pods
    'F': Flechette mode
    'H': iNARC Haywire mode
    'I': Inferno mode
    'L': LBX mode
    'M': Mine mode
    'N': NARC-guided mode
    'P': Precision mode
    'S': Swarm mode
    'a': Armor Piercing mode
    'e': iNARC Explode mode
    'i': Incendiary mode
    's': Smoke mode
      
  arc: One or more of the following:
    '*': Forward arc
    'r': Right side arc
    'l': Left side arc 
    'v': Rear arc
    't': Turret arc
    '-': No arc

  armor scan status: One of the following:
    'O': 90% or more intact
    'o': 70% to 90% intact
    'x': 45% to 70% intact
    'X': 1% to 45% intact
    '*': completely gone
    '-': not applicable
    '?': under repair

  building status string: '-', or at least one of the following characters:
    'C': Combat safe
    'E': Hostile
    'F': Friendly
    'H': Hidden
    'X': Unbreakably locked 
    'x': Breakably locked

  coordinate: integer used for X, Y and Z coordinates, where the Z axis is
	      scaled down by a factor of five. (one X is 5 Z's)

  damage type: Exactly one of the following type chars:
    'A': Artillery
    'B': Ballistic
    'E': Energy
    'F': Flamer
    'G': Gauss
    'M': Missile
               Followed by zero of more of the following modifiers:
    'C': Caseless
    'D': Dead-Fire Missile
    'H': Heavy Gauss
    'P': Player Character weapon
    'Y': Hyper
    'a': A-Pod
    'd': Defensive only (cannot fire)
    'e': ELRM
    'g': Grouping damage (clusters of 5)
    'h': Heavy Laser
    'm': MRM
    'p': Pulse
      
  degree: integer, ranging from 0 to 359, where 0 is directly north

  fuel: integer, measure of fuel (not percentage.)

  heatmeasure: integer, degrees celcius (1 heatpoint is 10 degrees celcius)

  map condition flags: '-', or at least one of the following:
    'V': Map is Vacuum
    'U': Map is Underground (no jumping, VTOLs)
    'D': Map is Dark (no tactical beyond sensors)

  map identifier: string or -1. Non-mandatory unique identifier for an
                  instance of a map (such as its dbref.) The special value
                  -1 indicates it is not supported (or disabled.)

  map name: string or -1. Non-mandatory name of the map. No guarantees
            are made about the equivalence of two maps with the same name.
            The special value -1 indicates it is not supported (or
            disabled.)

  map version identifier: string or -1. Non-mandatory version number of the
                          map. When supported, it should be changed whenever
                          the map is modified. The special value -1
                          indicates it is not supported (or disabled.)

  mechid: string, uniquely identifies unit on current map.

  light type: One of the following:
    'D': Daylight
    'T': Twilight
    'N': Night

  offset: integer, ranging from -180 to 179, relative to unit facing

  range: float, distance measured in hexes, with two decimal places.

  section: Exactly one of the following strings:
    '-': No particular section
    'A': Aft (Aerodyne Dropship and Spheroid Dropship)
    'AS': Aft Side (Vehicle)
    'C': Cockpit (AeroFighter and Aerodyne Dropship)
    'CT': Center Torso (Quad and 'Mech)
    'CTr': Center Torso (Rear) (Quad and 'Mech)
    'E': Engine (AeroFighter)
    'F': Fuselage (AeroFighter)
    'FLLr': Front Left Leg (Rear) (Quad)
    'FLS': Front Left Side (Spheroid Dropship)
    'FRLr': Fron Right Leg (Rear) (Quad)
    'FRS': Front Right Side (Spheroid Dropship)
    'FS': Front Side (Vehicle)
    'H': Head ('Mech)
    'Hr': Head (Rear) ('Mech)
    'LA': Left Arm ('Mech)
    'LAr': Left Arm (Rear) ('Mech)
    'LL': Left Leg ('Mech)
    'LLr': Left Leg (Rear) ('Mech)
    'LRW': Left Rear Wing (Aerodyne Dropship)
    'LS': Left Side (Vehicle)
    'LT': Left Torso (Quad, 'Mech)
    'LTr': Left Torso (Rear) (Quad, 'Mech)
    'LW': Left Wing (AeroFighter and Aerodyne Dropship)
    'N': Nose (AeroFighter, Aerodyne Dropship and Spheroid Dropship)
    'R': Rotor (VTOL)
    'RA': Right Arm ('Mech)
    'RAr': Right Arm (Rear) ('Mech)
    'RL': Right Leg ('Mech)
    'RLr': Right Leg (Rear) ('Mech)
    'RLS': Rear Left Side (Spheroid Dropship)
    'RRS': Rear Right Side (Spheroid Dropship)
    'RRW': Right Rear Wing (Aerodyne Dropship)
    'RS': Right Side (Vehicle)
    'RT': Right Torso (Quad, 'Mech)
    'RTr': Right Torso (Rear) (Quad, 'Mech)
    'RW': Right Wing (AeroFighter and Aerodyne Dropship)
    'S1': Suit 1 (BattleSuit)
    'S2': Suit 2 (BattleSuit)
    'S3': Suit 3 (BattleSuit)
    'S4': Suit 4 (BattleSuit)
    'S5': Suit 5 (BattleSuit)
    'S6': Suit 6 (BattleSuit)
    'S7': Suit 7 (BattleSuit)
    'S8': Suit 8 (BattleSuit)
    'T': Turret (turreted Vehicle)
      Strings not in this list should be considered '-', for forward
      compatibility.

  sensors: '-' or at least one of the following characters:
    'P': Primary sensor
    'S': Secondary sensor

  speed: float, in kph, with two decimal places.

  tactical string: One or more times each of the following two:
                   One Type char:
    '"': Heavy woods
    '#': Road
    '%': Rough
    '&': Fire
    '+': Snow
    '-': Ice
    '.': Plains
    '/': Bridge
    ':': Smoke
    '=': Pavement/Wall
    '?': Unknown terrain
    '@': Building
    '^': Mountain
    '`': Light woods
    '~': Water
                   One Elevation char:
    '0' through '9': Terrain height
    '?': Unknown height

  unit status string: '-', or at least one of the following characters:
    'B': Burning
    'C': Carrying a club
    'd': Dug in
    'D': Destroyed
    'e': Affected by ECM
    'E': Emitting ECM bubble
    'f': In the process of standing up
    'F': Fallen
    'h': In the process of going hull-down
    'H': Hull-down
    'I': Jellied by Inferno
    'J': Jumping
    'l': Illuminated
    'L': Illuminating
    'n': Enemy NARC attached (to friendly unit)
    'N': Friendly NARC attached (to enemy unit)
    '+': Overheating
    'O': Orbital-Dropping
    'p': Protected by ECCM
    'P': Emitting ECCM bubble
    's': Starting up
    'S': Shutdown
    't': Being towed
    'T': Towing
    'W': Swarming (bsuit)
    'X': Spinning (Aero)
      Position in the string is not significant and should not be relied
      upon. Any characters not in this list should be ignored, for forward
      compatibility.

  unit type character: Exactly one of the following strings:
    'B': Bipedal BattleMech ('Mech)
    'Q': Quad BattleMech (Quad)
    'H': Hover Vehicle (Vehicle)
    'T': Tracked Vehicle (Vehicle)
    'W': Wheeled Vehicle (Vehicle)
    'N': Naval Surface Displacement Vehicle (Vehicle)
    'Y': Naval Hydrofoil Vehicle (Vehicle)
    'U': Naval Submarine Vehicle (Vehicle)
    'V': VTOL
    'F': AeroFighter
    'A': Aerodyne Dropship
    'D': Spheroid Dropship
    'S': BattleSuit
    'I': Infantry
    'i': Installation (non moving unit)
    '-': Unknown
      Any other characters should be considered '-', for forward
      compatibility.

  weapon fire mode: '-', or at least one of the following characters:
    '2': RAC 2-shot mode
    '4': RAC 4-shot mode
    '6': RAC 6-shot mode
    'A': AMS (on)
    'B': Backpack mounted
    'C': Damaged: Crystal damaged
    'F': Damaged: Focus misaligned
    'G': Gattling MG mode
    'H': Hotloaded
    'I': iNARC Beacon launcher
    'L': Laser AMS (on)
    'M': Modular: part of Omni pod
    'N': NARC Beacon launcher
    'O': One-shot (unused)
    'R': RapidFire mode
    'S': Streak mode (usually not toggleable)
    'T': Linked to Targetting Computer
    'U': Ultra mode
    'a': AMS (off)
    'f': Damaged: Ammo feed damaged
    'b': Damaged: Barrel damaged
    'd': Damaged: Moderate damage
    'h': Heat mode
    'i': IDF capable
    'l': Laser AMS (off)
    'm': Modular: hand-held
    'o': One-shot (used)
    'r': Damaged: Ranging system hit

  weapon quality: integer, from 1 to 5, where 1 means low and 5 means
                  excellent.

  weapon scan status: One of the following:
    '-': Recycling/unusable
    '*': Destroyed/unusable
    'R': Ready

  weapon status: Either a non-zero integer for recycle time left, or one of
                 the following characters:
    '*': Destroyed
    'A': Ammo jammed
    'D': Disabled
    'E': Empty
    'J': Jammed
    'R': Weapon is ready
    'S': Shorted
    'a': Ammo crit-jammed
    'd': Dud
    'j': Jettisoned
      Characters not in this list should be considered 'D', for forward
      compatibility.

  weapon type: integer, identifier for type of weapon; index in the list of
               weapons retrievable by the 'wl' subcommand.