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.