Artemis Protocols
Introduction
This is unoffical documentation of the network and file protocols used by Artemis Spaceship Bridge Simulator. No official documentation exists, so the information in this document has been obtained through community reverse-engineering efforts. There will be parts of the protocols that are not completely documented because their purpose has not been determined, and some parts may not be accurate. Contributions to this documentation are welcome.
Data Types
The Artemis protocols use the following data types:
- byte
- short (2 bytes)
- int (4 bytes)
- float (4 bytes)
- bit field (variable length)
- boolean (variable length)
- string (variable length)
These types can be combined in structs or arrays.
Endianness
All multi-byte data types are represented in
little-endian
order (least-significant byte first). Numeric literals in this documentation, in order
to follow the existing convention for many programming languages, are prefixed with
0x
and are written in big-endian order. For example, the four bytes that
begin every Artemis packet are ef be ad de
; represented as an int, this
is 0xdeadbeef
.
Numeric Format
Integral types (byte, short, int) use two's complement representation in binary. Floats use IEEE 754 binary32 format.
Bit Field Format
A bit field is one or more bytes that encodes a series of on/off switches. Each bit in the binary representation of each byte in the field represents a single switch. In this documentation, an individual bit in a bit field is represented with the notation “bit {byte}.{bit}”, where the byte and bit values are one-based, and the bits are counted in little-endian order (least-significant bits first).
The objects in an ObjectUpdatePacket use bit fields
declare which properties are defined in the object's struct. Each bit represents a
property, with 1
indicating that the property is defined, and
0
meaning it is undefined. When sending updates to clients, the Artemis
server typically omits properties which are unchanged since the last update; these
properties will be undefined when the updated struct is transmitted. Artemis bit
fields do not completely utilize the final byte; if the number of bits needed is
divisble by 8, an extra byte will be allocated. So a seven-bit field will be one byte
wide, but an eight-bit field will be two bytes wide, with the second byte always
0x00
.
Example
The table below shows a bit field value of 0x93
represented in
little-endian binary, with the bits labelled:
1.1 | 1.2 | 1.3 | 1.4 | 1.5 | 1.6 | 1.7 | 1.8 |
---|---|---|---|---|---|---|---|
1 | 1 | 0 | 0 | 1 | 0 | 0 | 1 |
Boolean Format
Boolean values are simply expressed as an integer value 0 (false
) or 1
(true
). (When coercing an integer to a boolean, any non-zero value is
interpreted as true
.) Although a byte is sufficient for this purpose, in
practice this value may be transmitted as a byte, short or int. In this
documentation, a field is considered to be a boolean if all the following conditions
are met:
- There are only two possible logical values.
- The values are exact opposites (true/false, on/off, etc.).
- Those values are represented numerically as zero and non-zero.
- It does not seem that other values could be added in the future. (If other values are deemed possible, the field's value is documented as an enumeration instead.)
String Format
Strings are represented by an int giving the length of the string in characters,
followed by the string itself encoded in
UTF-16LE.
Because UTF-16 encodes each character in two bytes, the number of bytes to read after
the length value is the number of characters times two. Strings are null-terminated
(0x0000
), and the length value includes the null. Under normal
circumstances, the null character would be the last two bytes read for the string; if
the null character occurs earlier, the remaining bytes are meaningless and should be
discarded. Zero-length strings are not allowed. For brevity's sake, all values denoted
as strings in this documentation are presumed to follow this format, and the string
length value will not be documented separately.
Example
To interpret the byte sequence 04 00 00 00 48 00 69 00 21 00 00 00
as a
string, you would first read an int (4 bytes) to learn the string's length:
04 00 00 00
, which is four characters. In UTF-16, this is eight bytes, so
you'd then read eight bytes from the stream: 48 00 69 00 21 00 00 00
.
Decoded, this is H
, i
, !
and null
,
which terminates the string. Thus, the byte sequence represents the string "Hi!"
Array Format
Arrays consist of an ordered list of values. These values can be primitive types, strings, structs or other arrays. There are two basic kinds of arrays: delimited and undelimited. Delimited arrays are typically used in circumstances where the exact number of elements in the array is not known in advance. Elements are transmitted one after the other until a particular byte is encountered instead of more data. With undelimited arrays, either the exact size or exact number of elements is known, so no delimiter is needed. Instead, parsing continues until the desired number of elements is read, or all the bytes that make up the array are consumed.
Structs
Structs are complex types composed of primitive types, strings, arrays or other
structs. These properties are always specified in a particular defined order, so that
it is unneccessary to declare each property's name when reading or writing a struct.
There are two type of structs: static structs and bit field structs. A static struct
always transmits all of its properties. A bit field struct has a bit field as its
first property. Each bit in the field corresponds to one of the remaining properties
in the struct. If a bit is 1
, that property is defined; if it's
0
, it is undefined and is omitted from the struct. When the Artemis
server sends game object updates, it will typically use bit field structs to only send
properties which have changed and leave the rest undefined; this reduces the payload
size for update packets.
Coordinates
Coordinates are expressed in three-dimensional Cartesian space as three float values (X, Y, Z). The simulation space is defined as a rectangular cuboid. The X- and Z-dimensions range from 0 to 100000, while the Y-dimension ranges from -100000 to 100000. In the standard siege game mode, the ship starts at (50000,0,50000). Another way of thinking of it is that the space is two cubes of size 100000 stacked on top of one another, with the ship starting out resting at the center of the plane that divides them.
From the point of view of the ship when oriented at a bearing of 0°, the X-axis increases toward starboard ("right"), the Y-axis increases toward the ventral side of the ship ("down"), and the Z-axis increases toward aft ("back", or toward the viewer). In the top-down view (as seen on most consoles), the X-axis increases toward the right (90° or "east"), the Y-axis increases "into" the screen (away from the viewer), and the Z-axis increase toward the bottom (180° or "south").
Enumerations
When Artemis needs to refer to an item from a static list (enumeration), it will use a predefined numeric value to represent it. This section documents these enumerations.
Alert Status
0x00 |
normal |
0x01 |
red alert |
Anomaly Type
New as of v2.1.5.
0x00 |
HiDens Power Cell | |
0x01 |
Vigoranium Nodule | |
0x02 |
Cetrocite Crystal | |
0x03 |
Lateral Array | |
0x04 |
Tauron Focusers | |
0x05 |
Infusion P-Coils | |
0x06 |
Carapaction Coils | |
0x07 |
Secret code case | |
0x08 |
Beacon | New as of v2.6.204 |
0x09 |
Space junk | New as of v2.6.204 |
Audio Command
0x00 |
play |
0x01 |
dismiss |
Audio Mode
0x00 |
unused |
0x01 |
playing |
0x02 |
incoming |
Beacon Mode
0x00 |
attract |
0x01 |
repel |
Beam Frequency
0x00 |
A |
0x01 |
B |
0x02 |
C |
0x03 |
D |
0x04 |
E |
COMM Filter
Note: COMM filter values can be ORed together. Thus,
0x54
means that the message is a status update from a
friendly space station.
0x01 |
alert |
---|---|
0x02 |
side |
0x04 |
status |
0x08 |
player |
0x10 |
station (base) |
0x20 |
enemy |
0x40 |
friend |
COMM Message
To players:
0x00 |
Yes. |
0x01 |
No. |
0x02 |
Help! |
0x03 |
Greetings. |
0x04 |
Die! |
0x05 |
We're leaving the sector. Bye. |
0x06 |
Ready to go. |
0x07 |
Please follow us. |
0x08 |
We'll follow you. |
0x09 |
We're badly damaged. |
0x0a |
We're headed back to the station. |
0x0b |
Sorry, please disregard. |
To enemy ships:
0x00 |
Will you surrender? |
0x01 |
Taunt #1 (varies by race) |
0x02 |
Taunt #2 (varies by race) |
0x03 |
Taunt #3 (varies by race) |
To stations:
0x00 |
(friendly) Stand by for docking. (enemy) Cease operation. |
0x01 |
Please report status. |
0x02 |
Build homing missiles |
0x03 |
Build nukes |
0x04 |
Build mines |
0x05 |
Build EMPs |
0x06 |
Build PShocks |
0x07 |
Build beacons (since v2.6.3) |
0x08 |
Build probes (since v2.6.3) |
0x09 |
Build tags (since v2.6.3) |
To other ships:
0x00 |
Report status |
0x01 |
Turn to heading 0 |
0x02 |
Turn to heading 90 |
0x03 |
Turn to heading 180 |
0x04 |
Turn to heading 270 |
0x05 |
Turn 10 degrees to port |
0x06 |
Turn 10 degrees to starboard |
0x07 |
Attack nearest enemy |
0x08 |
Proceed to your destination |
0x09 |
Go defend [target] |
0x0a |
unused |
0x0b |
unused |
0x0c |
unused |
0x0d |
unused |
0x0e |
unused |
0x0f |
Turn 25 degrees to port |
0x10 |
Turn 25 degrees to starboard |
COMM Target Type
0x00 |
player |
0x01 |
enemy ship |
0x02 |
station |
0x03 |
other |
Connection Type
0x00 |
unused |
0x01 |
server |
0x02 |
client |
Console Status
0x00 |
available |
0x01 |
yours |
0x02 |
unavailable |
Console Type
< v2.1 | ≥ v2.1, < v2.3 | ≥ v2.3 | |
---|---|---|---|
0x00 |
main screen | main screen | main screen |
0x01 |
helm | helm | helm |
0x02 |
weapons | weapons | weapons |
0x03 |
engineering | engineering | engineering |
0x04 |
science | science | science |
0x05 |
communications | communications | communications |
0x06 |
observer | data | single-seat craft |
0x07 |
captain's map | observer | data |
0x08 |
game master | captain's map | observer |
0x09 |
unused | game master | captain's map |
0x0a |
unused | unused | game master |
Creature Type
New as of v2.1.5. Note that before v2.7.0, the typhon didn't have an official name, and would just show as "ZZ" even when scanned.
<v2.7.0 | ≥v2.7.0 | Note | |
---|---|---|---|
0x00 |
typhon | typhon | a.k.a. classic space monster or crystalline entity |
0x01 |
whale | whale | |
0x02 |
shark | shark | |
0x03 |
dragon | dragon | |
0x04 |
piranha | piranha | |
0x05 |
charybdis | charybdis | |
0x06 |
insect | insect | |
0x07 |
wreck | jelly | |
0x08 |
unused | wreck | can't be beaconed |
Drive Type
0x00 |
warp |
0x01 |
jump |
Intel Type
0x00 |
race |
0x01 |
class |
0x02 |
level 1 scan description |
0x03 |
level 2 scan description |
Game Type
< v2.1 | ≥ v2.1, < v2.5.1 | ≥ v2.5.1 | |
---|---|---|---|
0x00 |
siege | siege | siege |
0x01 |
single front | single front | single front |
0x02 |
double front | double front | double front |
0x03 |
unused | deep strike | deep strike |
0x04 |
unused | peacetime | peacetime |
0x05 |
unused | border war | border war |
0x06 |
unused | unused | infestation |
Main Screen View
0x00 |
forward |
0x01 |
port |
0x02 |
starboard |
0x03 |
aft |
0x04 |
tactical |
0x05 |
long range |
0x06 |
status |
Object Type
< v2.1.5 | ≥ v2.1.5 | |
---|---|---|
0x00 |
end of ObjectUpdatePacket | end of ObjectUpdatePacket |
0x01 |
player ship | player ship |
0x02 |
weapons console | weapons console |
0x03 |
engineering console | engineering console |
0x04 |
NPC ship (enemy or civilian) | player ship upgrades |
0x05 |
base | NPC ship (enemy or civilian) |
0x06 |
mine | base |
0x07 |
anomaly | mine |
0x08 |
unused | anomaly |
0x09 |
nebula | unused |
0x0a |
torpedo | nebula |
0x0b |
black hole | torpedo |
0x0c |
asteroid | black hole |
0x0d |
generic mesh | asteroid |
0x0e |
creature | generic mesh |
0x0f |
whale | creature |
0x10 |
drone | drone |
Ordnance Type
0x00 |
homing missile |
0x01 |
nuke |
0x02 |
mine |
0x03 |
EMP |
0x04 |
plasma shock (since v2.1.5) |
0x05 |
beacon (since v2.6.3) |
0x06 |
probe (since v2.6.3) |
0x07 |
tag (since v2.6.3) |
Perspective
0x00 |
first person |
0x01 |
third person |
Ship System
0x00 |
beams |
0x01 |
torpedoes |
0x02 |
sensors |
0x03 |
maneuvering |
0x04 |
impulse |
0x05 |
warp/jump drive |
0x06 |
fore shields |
0x07 |
aft shields |
Special Ability
Note: Special abilities can stack, in which case the values are ORed together. For
example, cloak and warp would be 0x14
. A ship with no special abilities
would have a special ability value of 0x00
.
Special abilities used to be called elite
abilities in earlier versions of the game.
Flag | Internal name | Alt name | Description |
---|---|---|---|
0x0001 |
ELITE_INVIS_TO_MAIN_SCREEN | Stealth | Cannot be seen on main screen |
0x0002 |
ELITE_INVIS_TO_TACTICAL | LowVis | Cannot be seen on tactical map |
0x0004 |
ELITE_CLOAKING | Cloak | Can become completely invisible |
0x0008 |
ELITE_HET | HET | High energy turn, ship can turn rapidly |
0x0010 |
ELITE_WARP | Warp | Short bursts of warp speed |
0x0020 |
ELITE_TELEPORT | Teleport | Ship has a limited jump drive |
0x0040 |
ELITE_TRACTOR_BEAM | Tractor | Can lock player ships in, preventing them from escaping |
0x0080 |
ELITE_DRONE_LAUNCHER | Drones | Can launch drones |
0x0100 |
ELITE_ANTI_MINE_BEAMS | Anti-mines | Ship has a special beam to shoot mines |
0x0200 |
ELITE_ANTI_TORP_BEAMS | Anti-torp | Ship has a special beam to shoot torpedoes |
0x0400 |
ELITE_ANTI_SHIELD | Shield-drain | Can drain the energy of player ship shields |
0x0800 |
SPCL_VAMP_SHIELD | ShldVamp | Can steal energy from player ship shields (unconfirmed) |
0x1000 |
SPCL_TELEPORT_BACKWARDS | TeleBack | Can jump backwards |
0x2000 |
SPCL_SHLD_SCRAMBLE | ShldReset | Ship can scramble its own shield frequencies |
Targeting Mode
0x00 |
auto |
0x01 |
manual |
Tube Status
0x00 |
unloaded |
0x01 |
loaded |
0x02 |
loading |
0x03 |
unloading |
Upgrades
New as of v2.1.5. Upgrades marked with (*) can be activated by client consoles, meaning they can occur in the ActivateUpgrade packet.
Index | In-game name | Type | Description |
---|---|---|---|
0x00 * | Infusion P-Coils | Engine Boost | 5 Minute 10% Impulse and Warp Speed Boost |
0x01 * | Hydrogen Ram | Maneuver Boost | 5 Minute 10% Turn Speed Boost |
0x02 * | Tauron Focusers | Weapons Boost | 5 Minute 10% Beam and Reload Speed Boost |
0x03 * | Carapaction Coils | Shield Boost | 5 Minute 10% Shield Recharge Boost |
0x04 * | Polyphasic Capacitors | Energy Boost | 5 Minute 10% Energy Recharge Boost |
0x05 * | Coolant Reserves | Heat Reduction | 5 Minute 10% Faster Heat Reduction |
0x06 * | Lateral Array | Scanner Boost | 5 Minute Target Scan Triple Speed |
0x07 * | ECM Starpulse | Jammer Boost | 5 Minute Enemy Cannot Lock |
0x08 * | Double Agent | Auto-Surrender | Can force one ship to auto surrender |
0x09 | Wartime Production | Prod Boost | 10% (min +1) boost to all starting base munitions |
0x0a | Infusion P-Coils PERM | Engine Refit | Permanent 10% Impulse and Warp Speed Boost |
0x0b | Protonic Verniers | Maneuver Refit | Permanent 10% Turn Speed Boost |
0x0c | Tauron Focusers PERM | Weapons Refit | Permanent 10% Reload and Beam Speed |
0x0d | Regenerative Pau-Grids | Shield Refit | Permanent 10% Shield Recharge Speed |
0x0e | Veteran DamCon Teams | Faster DamCon | Damcon teams move/repair 10% faster |
0x0f | Cetrocite Heatsinks | Heatsink Refit | Heat builds 10% slower |
0x10 | Tachyon Scanners | Scanner Refit | Permanent 10% Scan Speed Boost |
0x11 | Gridscan Overload | Sensor Refit | Permanent 10% Range Booster |
0x12 | Override Authorization | Improved Prod | All bases produce 10% faster |
0x13 | Resupply Imperatives | Mission Enhance | 10% More missions |
0x14 | Patrol Group | Allied Combat | Additional TSN Escort Ship in-sector |
0x15 | Fast Supply | Allied Supply | Additional TSN Cargo Ship in-sector |
0x16 | Vanguard Refit | Improved Console | Perm 10% Boost to Impulse, Warp, and Turn Speed |
0x17 | Vanguard Refit | Improved Console | Perm 10% Boost to Beam, Shield and Reload Speeds |
0x18 | Vanguard Refit | Improved Console | Perm 10% Boost to Scan speed and Sensor Range |
0x19 | Vanguard Refit | Improved Console | Perm 10% Boost to Station production |
0x1a | Vanguard Refit | Improved Console | Perm 10% Boost to all Engineering Systems |
0x1b | Vanguard Refit | Systems Overhaul | Permanent 10% Boost to all Ship Systems |
Packet Structure
Artemis packets have two parts: the preamble and the payload.
Preamble
The preamble consists of metadata that describes what kind packet it is and how long it is. The information in the preamble is needed in order to interpret the payload. The preamble consists of the following parts:
Header (int)
The first four bytes constitute a header which identifies the packet as an Artemis
packet. This value should always be 0xdeadbeef
.
Packet length (int)
Gives the total length of the packet in bytes, including both the preamble and the payload.
Origin (int)
A connection type enumeration value indicating whether the packet originates from the server or the client.
Padding (int)
This value is always 0x00
.
Remaining bytes (int)
The number of bytes following this field in the packet. This is the length of the packet type field (4) plus the length of the payload, or the length of the entire packet minus 20.
Packet type (int)
This value identifies the type of this packet. Refer to the packet types table to find the values that correspond to the various packet types. Note that many packets also have a subtype value; for those packets, the subtype will be the first value transmitted in the payload. This value is a JamCRC hash of the internal name of the packet type. JamCRC is a bitwise not of a CRC32 hash.
Payload
The remaining bytes in the packet after the preamble constitute the payload. Its format will vary depending on the packet type. Refer to the next section to see what packet types exist and the formats of their payloads.
Packet Types
The table below lists the known packet types.
Name | Origin | Type | Internal Type Name | Subtype(s) |
---|
Hypothetical
0x0351a5ac
:0x03
0x0351a5ac
:0x03
[from client]This packet type has not been observed, but has been hypothesized to exist based on the numeric range of its subtype. Nothing concrete is known about this packet type at this point, or even if it exists.
0x4c821d3c
:0x16
0x4c821d3c
:0x16
[from client]This packet type has not been observed, but has been hypothesized to exist based on the numeric range of its subtype. Nothing concrete is known about this packet type at this point, or even if it exists.
0x69cc01d9
:0x01
0x69cc01d9
:0x01
[from client]This packet type has not been observed, but has been hypothesized to exist based on the numeric range of its subtype. Nothing concrete is known about this packet type at this point, or even if it exists.
0xf754c8fe
:0x02
0xf754c8fe
:0x02
[from server]This packet type has not been observed, but has been hypothesized to exist based on the numeric range of its subtype. Nothing concrete is known about this packet type at this point, or even if it exists.
0xf754c8fe
:0x16
0xf754c8fe
:0x16
[from server]This packet type has not been observed, but has been hypothesized to exist based on the numeric range of its subtype. Nothing concrete is known about this packet type at this point, or even if it exists.
Unknown
0xf754c8fe
:0x08
0xf754c8fe
:0x08
[from server]This packet type has been observed, and its payload structure is believed to be understood. However, its function is as of yet uncertain.
Has been hypothesized as having some relation to SoundEffectPacket.
Payload
- Subtype (int)
-
Always
0x08
. - Unknown (float)
- Values of 0.0, 50.0 and 100.0 has been observed. It is unclear if other values have been observed.
0xf754c8fe
:0x0e
0xf754c8fe
:0x0e
[from server]This packet type has been observed, and its payload structure is believed to be understood. However, its function is as of yet uncertain.
Payload
- Subtype (int)
-
Always
0x0e
. - Unknown (4 bytes)
-
Only
0x00000000
observed so far. - Unknown (float)
-
Observed values from 0.00475 to 0.8866.
0xf754c8fe
:0x19
0xf754c8fe
:0x19
[from server]This packet type has been observed, and its payload structure is believed to be understood. However, its function is as of yet uncertain.
Payload
- Subtype (int)
-
Always
0x08
. - Unknown (int)
- Values of 0, 2, 3, and 4 observed.
A
ActivateUpgradePacket
0x4c821d3c
:0x1c
[from client]This packet is sent whenever a client wishes to activate a ship upgrade from the "upgrades" menu.
Before v2.3.109, this was subtype 0x1b
.
Payload
- Subtype (int)
-
Always
0x1c
. - Upgrade (int)
-
The upgrades that can be activated seem to be the ones between
0x00
(InfusionPCoils) and0x08
(DoubleAgent / Secret Code Case), both inclusive.
AllShipSettingsPacket
0xf754c8fe
:0x0f
[from server]Provides the list of available player ships.
Payload
- Subtype (int)
-
Always
0x0f
for this packet type. - Ships (array)
-
A list of the eight available player ships. Each ship is a struct with the following properties:
- Drive type (int, enumeration)
-
Whether the ship has warp or jump drive
- Hull ID (int)
-
The
<vessel uniqueID>
for the ship as found invesselData.xml
, referred to as thehullID
in mission scripts. - Accent color (float) (v2.4 or later)
-
Ship accent color hue in the range 0.0 to 1.0. Multiply by 360 to get a Hue as described on Wikipedia. Default hue values for ships are:
- Artemis (
0
) - Intrepid (
0.125
) - Aegis (
0.25
) - Horatio (
0.375
) - Excalibur (
0.5
) - Hera (
0.625
) - Ceres (
0.75
) - Diana (
0.875
)
- Artemis (
- Has name (boolean, 4 bytes) (v2.0 or later)
-
Will be
true
if the name property is included. - Name (string)
-
The name of the ship. Omitted if the "has name" property is
false
.
AudioCommandPacket
0x6aadc57f
[from client]Instructs the server to play or dismiss an audio message.
Payload
- Audio ID (int)
-
The ID for the audio message. This is given by the IncomingAudioPacket.
- Audio command (int, enumeration)
- The desired action to perform.
B
BeamFiredPacket
0xb83fd2c4
[from server]Notifies the client that a beam weapon has been fired.
Payload
- ID (int)
-
A unique identifier for this beam. Each time a beam is fired, it gets its own ID.
- Struct type (int)
-
Before v2.3.0, observed values included 0, 1, 4, and 8. Starting with v2.3.0, the only observed value thus far is 9. The value of this property affects what other properties are present
- Struct type 0/1/4
-
- Damage? (int)
-
This is believed to be the amount of damage inflicted by the beam. Appears to always be a multiple of 100.
- Beam port index (int)
-
All ships that can fire beams have beam ports. These are
defined in
vesselData.xml
as<beam_port>
entries. This value gives the index of the beam port on the originating ship that fired the beam. This value is zero-based; thus, vessels that only have one beam port will always give 0 for this value. - Origin object type (int)
-
Indicates the type of object that fired the beam.
- Target object type (int)
-
Indicates the type of object that was struck by the beam.
- Unknown (int) (v2.3 or later)
-
This field is present in v2.3 and later. A value of 0 has been observed.
- Origin object ID (int)
-
The ID of the object that fired the beam.
- Target object ID (int)
-
The ID of the object that was struck by the beam.
- Target X coordinate (float)
-
The X coordinate (relative to the center of the target) of the impact point. This is used to determine the endpoint for drawing the beam. A negative value means an impact on the target's starboard (right) side; a positive value means an impact on the target's port (left) side.
- Target Y coordinate (float)
-
The Y coordinate (relative to the center of the target) of the impact point. This is used to determine the endpoint for drawing the beam. A negative value means an impact on the target's ventral (bottom) side; a positive value means an impact on the target's dorsal (top) side.
- Target Z coordinate (float)
-
The Z coordinate (relative to the center of the target) of the impact point. This is used to determine the endpoint for drawing the beam. A negative value means an impact on the target's aft (rear) side; a positive value means an impact on the target's forward (front) side.
- Targeting mode (int)
-
Indicates whether the beam was auto- or manually-fired. If the beam was auto-fired, the target X/Y/Z will be 0,0,0.
- Struct type 8
-
- Unknown (int)
- Unknown (short)
- Unknown (short)
- Unknown (short)
- Unknown (short)
- Unknown (short)
- Unknown (short)
- Unknown X coordinate (float)
-
Range indicates this is likely relative to the game world rather than the ship.
- Unknown Y coordinate (float)
-
Range indicates this is likely relative to the game world rather than the ship.
- Unknown Z coordinate (float)
-
Range indicates this is likely relative to the game world rather than the ship.
- Unknown (int)
- Struct type 9
-
- Subtype? (int)
- Beam port index? (int)
- Origin object type (int)
- Target object type (int)
- Unknown (int)
- Origin object ID (int)
-
The ID of the object that fired the beam.
- Target object ID (int)
-
The ID of the object that was struck by the beam.
- Target X coordinate (float)
-
If subtype? is any value other than 9, this is the X coordinate (relative to the center of the target) of the impact point. This is used to determine the endpoint for drawing the beam. A negative value means an impact on the target's starboard (right) side; a positive value means an impact on the target's port (left) side.
If subtype? is 9, it is an unknown world X coordinate instead.
- Target Y coordinate (float)
-
If subtype? is any value other than 9, this is the Y coordinate (relative to the center of the target) of the impact point. This is used to determine the endpoint for drawing the beam. A negative value means an impact on the target's ventral (bottom) side; a positive value means an impact on the target's dorsal (top) side.
If subtype? is 9, it is an unknown world Y coordinate instead.
- Target Z coordinate (float)
-
If subtype? is any value other than 9, this is the Z coordinate (relative to the center of the target) of the impact point. This is used to determine the endpoint for drawing the beam. A negative value means an impact on the target's aft (rear) side; a positive value means an impact on the target's forward (front) side.
If subtype? is 9, it is an unknown world Z coordinate instead.
- Targeting mode (int)
-
Indicates whether the beam was auto- or manually-fired. If the beam was auto-fired, the target X/Y/Z will be 0,0,0.
BeaconConfigPacket
0x4c821d3c
:0x22
[from client](new as of v2.6.204) Programs beacons prior to launch.
Payload
- Subtype (int)
-
Always
0x22
. - Unknown (int)
-
Appears to always be 12345.
- Creature type (byte)
-
The creature for which this beacon is programmed. Presumably
0x07
(wreck) is invalid. - Mode (byte)
- The effect this beacon will have on the indicated creature.
ClientHeartbeatPacket
0x4c821d3c
:0x24
[from client]This packet is transmitted regularly by the client (about every 3 seconds) to demonstrate that it's still alive. If the server does not receive a heartbeat packet in a while, it will forget the client and let a new client connect and control any stations the old client previously had control of.
Payload
- Subtype (int)
-
Always
0x24
.
C
CaptainSelectPacket
0x4c821d3c
:0x11
[from client]Notifies the server that a new target has been selected on the captain's map.
Payload
- Subtype (int)
-
Always
0x11
. - Target ID (int)
-
The object ID for the new target, or 1 if the target has been cleared.
ClimbDivePacket
0x4c821d3c
:0x1d
[from client]Causes the ship to climb or dive. This differs from HelmSetPitchPacket in that it indicates a direction in which to change the ship's current pitch, rather than setting a precise pitch value. The circumstances in which one type of packet might be sent versus the other are not fully understood at this time.
This subtype was 0x1b
before v2.2, 0x1c
starting with
v2.2 and before v2.3.109), and 0x1d
from v2.3.109 on.
Payload
- Subtype (int)
-
Always
0x1d
. - Direction (int)
-
Indicates the change in the ship's direction:
0x00000001
(1) for down,0xffffffff
(-1) for up. For example, if the ship is diving when the instruction to go up is received, the ship will level out. If a second up command is received, the ship will start climbing.
CloakDecloakPacket
0xf754c8fe
:0x07
[from server]Renders a green "poof" graphical effect. Artemis does this when a ship cloaks or decloaks.
Payload
- Subtype (int)
-
Always
0x07
. - X-coordinate (float)
- Y-coordinate (float)
- Z-coordinate (float)
CommsIncomingPacket
0xd672c35f
[from server]Contains a single incoming text message to display at the COMMS station.
Payload
- Filters (bit field, 2 bytes, since v2.6.0)
-
Indicates the channel(s) on which the message was received. The bits in the field correspond to filters on the comms console: a set bit means that the message matches the corresponding filter.
- Channel (int, before v2.6.0)
-
Values ranged from
0x00
to0x08
. In the stock client, this affected the message's background color; the lower the channel number, the more red the background color. While this would seem to indicate priority, in practice, the channel number didn't seem to correlate with message importance. Below is a list of message types received on each channel; note that this list may be incomplete and custom scenarios could send messages on any channel:0x00
Enemy taunts 0x01
? 0x02
? 0x03
Base destroyed 0x04
Base is under attack, docking complete, ship refuses orders 0x05
Base acknowledges build order or docking request 0x06
Ship accepts orders, base status response, ordnance built notice, GM message 0x07
Mission notification, mission transfer complete 0x08
Messages sent from player ships - Sender (string)
-
The name of the entity that sent the message. Note that this does not necessarily correspond to the exact name of that entity. This field appears to always at least start with the name of the originating ship or station in non-scripted missions, but may have additional text afterward (e.g. “DS3 TSN Base”). Custom missions could have any string in this field.
- Message (string)
-
The contents of the incoming message. The carat symbol (
^
) in the message indicates a line break.
CommsOutgoingPacket
0x574c4c4b
[from client]Sends a COMMs message to the server.
Payload
- COMM target type (int)
-
The type of target for the message.
- Recipient ID (int)
-
ID of the object that is to receive the message.
- Message (int)
-
A value that indicates what message is to be transmitted. The interpretation of the value depends on the COMM target type.
- Target object ID (int)
-
The ID of the object to be targeted by the message. Currently, the only message that accepts a target is “Other ship: Go defend [target].” This value will be ignored if the message cannot support a target, but must still be provided; the value
0x00730078
has been observed in this case, but it is unknown why. - Unknown (int)
-
Possibly reserved for a second message argument. It is always ignored but must still be provided. The value of
0x004f005e
has been observed for this field, but it is unknown why.
ConsoleStatusPacket
0x19c6e2d4
[from server]Indicates that a change has occurred in the availability status of one or more bridge consoles.
Payload
- Ship number (int)
-
The number of the ship whose consoles are being described. Before v2.3.0, this value was one-based, so by default the ship identified by
0x01
was Artemis. As of v2.3.0 it is now zero-based. - Console status (array)
-
This array contains one element for each possible console, with the availability status of each console represented with a single byte. The consoles are iterated in the order given by the console type enumeration. Note that the helm, weapons, engineering, and game master stations permit only one client to claim them. Once they've been claimed, their status will be reported as unavailable to other clients. All other stations will remain available to other clients when claimed.
ConvertTorpedoPacket
0x69cc01d9
:0x03
[from client]Converts a homing torpedo to energy or vice versa.
Payload
- Subtype (int)
-
Always
0x03
. - Direction (float)
-
Indicates whether we are converting a torpedo to energy (0.0,
0x00000000
) or energy to a torpedo (1.0,0x3f800000
). Why this is expressed as a float when a byte seems like it would be more appropriate is unknown. - Unknown (12 bytes)
D
DestroyObjectPacket
0xcc5a3e30
[from server]Notifies the client that an object has been removed from play. This does not imply any particular graphical or sound effect; that is handled by other packets. This packet just means that the client can discard the indicated object.
Payload
- Object type (byte)
-
Indicates the type of object being destroyed.
- Object ID (int)
-
The ID of the object being destroyed.
DetonationPacket
0xf754c8fe
:0x13
[from server]Indicates that a detonation effect for an exploding torpedo or mine should be displayed. Very similar to ExplosionPacket, which is for other types of objects.
Payload
- Subtype (int)
-
Always
0x13
. - Object type (int)
-
The type of object that is detonating. Can only be
0x07
(mine) or0x0b
(torpedo). - Object ID (int)
-
The ID of the object being detonated.
DmxMessagePacket
0xf754c8fe
:0x10
[from server]Sends DMX messages. This packet is only sent to main screen consoles for ships other than the first.
Payload
- Subtype (int)
-
Always
0x10
. - Name (string)
-
The DMX flag name.
- State (boolean, 4 bytes)
-
The DMX flag's current state.
DockedPacket
0xf754c8fe
:0x1a
[from server]Sent by the server when a player ship is fully docked at a base.
Payload
- Subtype (int)
-
Always
0x1a
. - Object ID (int)
-
The ID of the ship that has docked.
E
EmergencyJumpPacket
0x4c821d3c
:0x20
[from client](since v2.3.109) Sent by the helm console to request an emergency jump. Only usable by ships equipped with jump drive, obviously.
Payload
- Subtype (int)
-
Always
0x20
. - Direction (int)
-
Direction to jump: 0 means foward and 1 means backward.
EndGamePacket
0xf754c8fe
:0x06
[from server]Informs the client that the game is over. Distinct from GameOverPacket in that it is transmitted when the “End Game” button on the statistics page is clicked.
Payload
- Subtype (int)
-
Always
0x06
.
EngAutoDamconUpdatePacket
0xf754c8fe
:0x0b
[from server]Informs the client of changes to DAMCON team autonomy status. Triggered by the “Autonomous” button in the engineering console.
Payload
- Subtype (int)
-
Always
0x0b
. - DAMCON autonomy (boolean, 4 bytes)
-
Whether DAMCON teams are directed autonomously or not.
EngGridUpdatePacket
0x077e9f3c
[from server]Updates damage to the various system grids on the ship and DAMCON team locations and status.
Payload
- Full status (boolean, 1 byte)
-
Whether this packet contains a full update of all nodes and DAMCON teams (
true
) or just updates (false
). You can get a full update by sending a RequestEngGridUpdate packet. - System grid status (array)
-
This array contains a list of system nodes, terminated with
0xff
. Each system node contains the following fields:- X coordinate (byte)
-
The X coordinate of the node relative to the ship's center.
- Y coordinate (byte)
-
The Y coordinate of the node relative to the ship's center.
- Z coordinate (byte)
-
The Z coordinate of the node relative to the ship's center.
- Damage (float)
-
The current damage level for this node. An undamaged node has a value of 0.0; any higher value indicates damage. (Is there an upper limit to this value?)
- DAMCON team status (array)
-
This contains a list of DAMCON teams, terminated with
0xfe
. Each DAMCON team contains the following fields:- Team ID (byte)
-
An ID assigned to this team. For some reason known only to Thom, this value always has
0x0a
added to it. - Goal X coordinate (int)
-
The X coordinate of the node to which this team is currently moving. If the team does not want to move elsewhere, this will be the same as their current X coordinate.
- Current X coordinate (int)
-
The X coordinate of the team's current node. This value does not change while the team in in transit; it is only updated when they arrive at a new node.
- Goal Y coordinate (int)
-
The Y coordinate of the node to which this team is currently moving. If the team does not want to move elsewhere, this will be the same as their current Y coordinate.
- Current Y coordinate (int)
-
The Y coordinate of the team's current node. This value does not change while the team in in transit; it is only updated when they arrive at a new node.
- Goal Z coordinate (int)
-
The Z coordinate of the node to which this team is currently moving. If the team does not want to move elsewhere, this will be the same as their current Z coordinate.
- Current Z coordinate (int)
-
The Z coordinate of the team's current node. This value does not change while the team in in transit; it is only updated when they arrive at a new node.
- Progress (float)
-
A value between 0.0 and 1.0 that expresses how close the team is in their progress towards the goal node. The value starts at 1.0 as the team begins moving towards the goal node, and gradually decreases until it reaches 0.0 upon their arriving at the goal.
- Number of team members (int)
-
The number of people on this DAMCON team.
EngResetCoolantPacket
0x4c821d3c
:0x18
[from client]Resets the coolant levels to 0 on all systems. This is sent by the stock client in response to pressing double spacebar or enter on the engineering console.
Before v2.3.109, this was subtype 0x17
.
Payload
- Subtype (int)
-
Always
0x18
.
EngSendDamconPacket
0x69cc01d9
:0x04
[from client]Directs a DAMCON team to go to a particular grid location on the ship.
Payload
- Subtype (int)
-
Always
0x04
. - Team number (int)
-
The number assigned to the team (0 to 2 inclusive).
- X coordinate (int)
-
The X coordinate of the grid location that is the team's destination.
- Y coordinate (int)
-
The Y coordinate of the grid location that is the team's destination.
- Z coordinate (int)
-
The Z coordinate of the grid location that is the team's destination.
EngSetAutoDamconPacket
0x4c821d3c
:0x0c
[from client]Notifies the server that DAMCON team autonomy has been togged on/off.
Payload
- Subtype (int)
-
Always
0x0c
. - Autonomous (int, boolean)
-
Indicates whether DAMCON team autonomy is on or off.
EngSetCoolantPacket
0x69cc01d9
:0x00
[from client]Sets the amount of coolant to be allocated to a system.
Payload
- Subtype (int)
-
Always
0x00
. - Ship system (int, enumeration)
-
The system whose coolant level is being adjusted.
- Value (int)
-
The number of coolant units to allocate to the system (0 to 8 inclusive).
- Unknown (int)
-
Only observed value is 0.
- Unknown (int)
-
Only observed value is 0.
EngSetEnergyPacket
0x0351a5ac
:0x04
[from client]Sets the amount of energy to be allocated to a system.
Payload
- Subtype (int)
-
Always
0x04
. - Value (float)
-
The amount of energy to allocate to the system. This value can range from 0.0 to 1.0 inclusive, which in the stock UI corresponds to 0% to 300%. Therefore, the default energy allocation of 100% would be represented as 0.333....
- Ship system (int, enumeration)
-
The system whose coolant level is being adjusted.
ExplosionPacket
0xf754c8fe
:0x00
[from server]In earlier versions, sent when the simulation starts, but this appears to have been discontinued as of v2.1.1. Starting in v2.3, this packet indicates that an explosion effect should be rendered at the current location of an object. Very similar to DetonationPacket, which is for mines and torpedoes.
Payload
- Subtype (int)
-
Always
0x00
. - Object type (byte, enumeration)
-
The type of object that is exploding.
- Object ID (int)
-
The ID of the exploding object.
F
FighterBayStatusPacket
0x9ad1f23b
[from server]Updates the client of the current status of the single-seat craft bays.
Payload
The payload consists of an array of structs, each one describing a single bay, and
terminated with 0x00000000
. The struct's properties are as follows:
- Object ID (int)
- Bay number (int) (v2.6 or later)
- Fighter name (string)
- Fighter class name (string)
- Refit time (int)
-
Number of seconds of refit time remaining before fighter is ready to launch.
FighterDamagePacket
0xf754c8fe
:0x18
[from server]Causes the client for a single-seat craft to present an interface screw as a result of an impact. By default, this causes the screen to shake and break up.
Payload
- Subtype (int)
-
Always
0x18
. - Object ID (int)
-
The ID of the impacted single-seat craft.
- Duration (float)
-
Length of time (in seconds) that the damage visualization should last.
FighterLaunchedPacket
0xf754c8fe
:0x17
[from server]Notifies the client that a single-seat craft was just launched.
Payload
- Subtype (int)
-
Always
0x17
. - Object ID (int)
-
The ID of the single-seat craft, as shown in FighterBayStatusPacket.
FighterLaunchPacket
0x4c821d3c
:0x1e
[from client]Notifies the server that a single-seat craft is being launched. The server will send back a FighterLaunchedPacket in response.
Before v2.3.109, this was subtype 0x1d
.
Payload
- Subtype (int)
-
Always
0x1e
. - Object ID (int)
-
The ID of the single-seat craft, as shown in FighterBayStatusPacket.
FighterPilotPacket
0x0351a5ac
:0x07
[from client]Notifies the server of a single-seat craft's trajectory.
Payload
- Subtype (int)
-
Always
0x07
. - Rudder (float)
-
Any value between 0.0 and 1.0 inclusive, where 0.0 is hard to port (left), 0.5 is rudder amidships (straight), and 1.0 is a hard to starboard (right). Actual turn rate will depend on the ship's maximum turn rate.
- Object ID (int)
-
The ID of the single-seat craft, as shown in FighterBayStatusPacket.
- Unknown (float)
-
A value of 1.0 has been observed.
- X coordinate (float)
-
The ship's location on the X axis.
- Y coordinate (float)
-
The ship's location on the Y axis.
- Z coordinate (float)
-
The ship's location on the Z axis.
- Orientation x component(float)
-
The x component of the quaternion representing the ship's orientation.
- Orientation y component(float)
-
The y component of the quaternion representing the ship's orientation.
- Orientation z component(float)
-
The z component of the quaternion representing the ship's orientation.
- Orientation w component(float)
-
The w component of the quaternion representing the ship's orientation.
FighterShootPacket
0x4c821d3c
:0x1f
[from client]Indicates that a single-seat craft is shooting.
Before v2.3.109, this was subtype 0x1e
.
Payload
- Subtype (int)
-
Always
0x1f
. - Shooter object ID (int)
-
ID of the single-seat craft that is shooting.
- Target object ID (int)
-
ID of the object being shot.
FighterTextPacket
0xf754c8fe
:0x1c
[from server]Sent to single-seat craft when comms or the GM sends them a free-form text message.
Payload
- Subtype (int)
-
Always
0x1c
. - Object ID (int)
-
The ID of the craft receiving the message
- Message (string)
-
The content of the message.
FireBeamPacket
0xc2bee72e
[from client]Notifies the server that the weapons officer wants to manually fire beam weapons.
Payload
- Target object ID (int)
-
The ID of the ship or entity at which to fire.
- X coordinate (float)
-
The X coordinate at which to fire, relative to the center of the target ship.
- Y coordinate (float)
-
The Y coordinate at which to fire, relative to the center of the target ship.
- Z coordinate (float)
-
The Z coordinate at which to fire, relative to the center of the target ship.
FireTubePacket
0x4c821d3c
:0x08
[from client]Notifies the server that the weapons officer wants to fire whatever's loaded in a certain tube.
Payload
- Subtype (int)
-
Always
0x08
. - Tube index (index)
-
The index number of the tube to fire.
G
GameMasterInstructionsPacket
0x26faacb9
:0x63
[from server]Sent by the server to the game master console to provide instructions to be displayed on request.
Payload
- Subtype (byte)
-
Always
0x63
. - Title (string)
-
A title to display above the instructions.
- Content (string)
-
The body content for the help screen.
GameMasterMessagePacket
0x809305a7
[from client]A packet sent by the game master console to the server which causes a message to be displayed on a client.
Payload
- Recipients (since v2.4.0, array)
-
Since v2.6.0, this is an array of int values giving the object IDs of the recipient ships. The array is terminated with an ID of 0.
When initially introduced in v2.4.0, this was instead an array of eight 1-byte booleans, one for each player ship in order of their ship index.
- Presentation (int)
-
Dictates how the message is displayed:
- 0
- Shown to the communications officer as a normal COMM message.
- 3000
- (since v2.7.0) Displayed as a chat message on the ship selection screen before the game.
- (other)
- Shown as a popup message on a particular console. The console is identified by subtracting 1 from the value; the result then matches the values for the console type enumeration.
- Sender (string)
-
The name of the message's sender. This can be any arbitrary string; it doesn't have to match the name of an existing object.
- Message (string)
-
The message to send.
- Filter (2 bytes, since v2.7.0)
-
Only present if the presentation field is not 3000. This indicates which COMM filter the message will match. This is not a bit field because only one filter can be specified. If the value is 0, it will be a "general" message not matching any of the filters.
GameMasterSelectLocationPacket
0x0351a5ac
:0x06
[from client]Notifies the server that a new location has been selected on the game master's map.
Payload
- Subtype (int)
-
Always
0x06
. - Z-coordinate (float)
-
The coordinate of the selected location on the Z axis.
- Y-coordinate (float)
-
The coordinate of the selected location on the Y axis. Always
0
. - X-coordinate (float)
-
The coordinate of the selected location on the X axis.
GameMasterSelectObjectPacket
0x4c821d3c
:0x12
[from client]Notifies the server that a new target has been selected on the game master's map.
Payload
- Subtype (int)
-
Always
0x12
. - Target ID (int)
-
ID of the selected object.
GameMessagePacket
0xf754c8fe
:0x0a
[from server]Contains a message to be displayed on the screen. The stock client displays the message in a “popup” box in the lower-right corner.
Payload
- Subtype (int)
-
Always
0x0a
. - Message (string)
-
The message to display.
GameOverPacket
0xf754c8fe
:0x1e
[from server](since v2.6.3) Informs the client that the game is over. Distinct from EndGamePacket in that this is sent when the end game condition is met or "End Simulation" is clicked on the server, right before GameOverReasonPacket and GameOverStatsPacket are sent.
Payload
- Subtype (int)
-
Always
0x1e
.
GameOverReasonPacket
0xf754c8fe
:0x14
[from server]Provides the reason why the game ended.
Payload
- Subtype (int)
-
Always
0x14
. - Reason (string array)
-
Text describing why the game ended. Each string is one line.
GameOverStatsPacket
0xf754c8fe
:0x15
[from server]Provides endgame statistics.
Payload
- Subtype (int)
-
Always
0x15
. - Column index (byte)
-
Stats are presented in vertical columns; each packet contains one column of stats data. This fields is the index for this column of data. In practice, there are only two possible values: 0 and 1.
- Statistics (array)
-
The remaining bytes in the packet are an array, where each element constitutes a row in the stats column. Each element is prefaced with
0x00
, and the last element is followed by0xce
. Each element contains the following fields:- Value (int)
-
The numeric value for this statistic.
- Label (string)
-
The description for this statistic.
GameStartPacket
0x3de66711
[from server]Informs clients that the game has started. Clients that do not receive this packet will not render beam arcs on the helm and weapons consoles. This is probably because difficulty level affects beam range.
Payload
- Difficulty (int)
-
The difficulty level (a value from 1 to 11).
- Game type (int, enumeration)
-
A value indicating the type of game. This applies only to solo and co-op games; the field is present but its value is undefined for PvP and scripted games.
H
ServerHeartbeatPacket
0xf5821226
[from server]This packet is transmitted regularly by the server (about every 3 seconds) to demonstrate that it's still alive. If the stock client does not receive a heartbeat packet in a while, it will display a message at the top-right of the console selection screen saying "Server not running" but will otherwise still continue to act as though everything is fine.
Payload
This packet has no payload.
HelmJumpPacket
0x0351a5ac
:0x05
[from client]Initiates a jump. Note that the stock client “molly-guards” jumps, asking for confirmation from helm. This packet isn't sent until helm confirms the jump.
Payload
- Subtype (int)
-
Always
0x05
. - Bearing (float)
-
The direction to jump, expressed as a value between 0.0 and 1.0 inclusive. To compute this value, take the desired bearing in degrees and divide by 360.
- Distance (float)
-
The distance to jump, expressed as a value between 0.0 and 1.0 inclusive. To compute this value, take the desired distance in μls and divide by 50 (the maximum jump distance).
HelmRequestDockPacket
0x4c821d3c
:0x07
[from client]Request docking with the nearest station, or, in the case of a single-seat craft, with its mothership.
Payload
- Subtype (int)
-
Always
0x07
. - Single-seat craft ID (int)
-
The ID of the single-seat craft that is docking with its mothership, or
0x00
if helm is docking with a station.
HelmSetImpulsePacket
0x0351a5ac
:0x00
[from client]Sets the throttle for impulse engines.
Payload
- Subtype (int)
-
Always
0x00
. - Throttle (float)
-
Any value between 0.0 and 1.0 inclusive, where 0.0 is no throttle and 1.0 is full throttle. Actual velocity will depend on the ship's maximum velocity and the power allocated to impulse by engineering.
HelmSetPitchPacket
0x0351a5ac
:0x02
[from client]Sets the desired pitch for the player ship. This differs from ClimbDivePacket in that it sets a precise pitch value for the ship instead of just indicating a direction to change pitch. The circumstances in which one type of packet might be sent versus the other are not fully understood at this time.
Payload
- Subtype (int)
-
Always
0x02
. - Pitch (float)
-
Any value between -1.0 and 1.0 inclusive, where 0.0 is level, -1.0 is a hard climb, and 1.0 is a hard dive.
HelmSetSteeringPacket
0x0351a5ac
:0x01
[from client]Sets the position of the ship's “rudder”, controlling its turn rate.
Payload
- Subtype (int)
-
Always
0x01
. - Rudder (float)
-
Any value between 0.0 and 1.0 inclusive, where 0.0 is hard to port (left), 0.5 is rudder amidships (straight), and 1.0 is a hard to starboard (right). Actual turn rate will depend on the ship's maximum turn rate and the power allocated to maneuvering by engineering.
HelmSetWarpPacket
0x4c821d3c
:0x00
[from client]Sets the ship's warp factor. Actual velocity will depend on the power allocated to warp by engineering.
Payload
- Subtype (int)
-
Always
0x00
. - Warp factor (int)
-
The desired warp factor, from 0 to 4 inclusive. Warp 0 means to drop out of warp and move on impulse only.
HelmToggleReversePacket
0x4c821d3c
:0x19
[from client]Toggles the impulse engines between forward and reverse drive.
Before v2.3.109, this was subtype 0x18
.
Payload
- Subtype (int)
-
Always
0x19
. - Unused (int)
-
Always
0x00
.
I
IdleTextPacket
0xbe991309
[from server](since v2.7.0) Informs the client of an incoming text message displayed on the console choice screen (pre-game).
Payload
- Ship name (string)
-
The name of the ship sending the message.
- Message (string)
-
The message cotnent.
IncomingAudioPacket
0xae88e058
[from server]Informs the client of incoming audio messages (used in custom scenarios).
Payload
- Audio ID (int)
-
The ID for this audio message.
- Audio mode (int, enumeration)
-
“Incoming” means that the communications officer is to be notified that an audio message is available, and offered the option to play or dismiss it. “Playing” is given in response to the communications officer giving the instruction to play the message, and notifies them that the message is now being played by the main screen. In the stock client, this results in the “Play” button changing to “REPlay.” (sic)
- Title (string, incoming mode only)
-
Title of the incoming message. This should be displayed to the COMMs officer.
- File (string, incoming mode only)
-
The filename for the audio clip. The client doesn't need to do anything with this string; as the audio is played by the server.
IntelPacket
0xee665279
[from server]Transmits information about a ship which is displayed on the science console. Some information may not be revealed until after science scans the ship. Theoretically, the intel on any one ship should only need to be sent once, but the game re-transmits known intel periodically.
Payload
- Object ID (int)
-
The ID of the ship to which this intel pertains.
- Intel type (byte)
-
Indicates which piece of information is being received.
- Intel (string)
-
The actual information to be displayed to science.
J
JumpStatusBeginPacket
0xf754c8fe
:0x0c
[from server]Notifies the client that a jump has started.
Payload
- Subtype (int)
-
Always
0x0c
.
JumpStatusEndPacket
0xf754c8fe
:0x0d
[from server]Notifies the client that a jump has completed.
Payload
- Subtype (int)
-
Always
0x0d
.
K
KeyCaptureTogglePacket
0xf754c8fe
:0x11
[from server]Sent to all consoles when key capture is enabled or disabled for any console.
Payload
- Subtype (int)
-
Always
0x11
. - Capture (boolean, 1 byte)
-
Whether this console should capture keystrokes or not. Note that because this packet is sent to all consoles when the capture status of any console is changed, a console may get a KeyCaptureTogglePacket telling it to do what it's already doing; this is normal.
KeystrokePacket
0x4c821d3c
:0x14
[from client]Informs the server that the player at this console pressed a particular key. This is used for custom mission scripts to allow keystrokes to trigger events. This packet should only be sent when keystroke capture is enabled for the console in question. Keystroke capture is always enabled for the game master console; other consoles require the script to activate keystroke capture first.
Payload
- Subtype (byte)
-
Always
0x14
. - Key code (int)
-
The code identifying the key that was pressed. Microsoft has a good reference page that documents the key codes. Many languages have constants for these values. For example: in Java, they are defined in the KeyEvent class.
KlaxonPacket
0xf754c8fe
:0x01
[from server]Plays a klaxon sound. Artemis sends this packet when red alert is activated.
Payload
- Subtype (int)
-
Always
0x01
.
L
LoadTubePacket
0x69cc01d9
:0x02
[from client]Loads a tube with a particular type of ordnance.
Payload
- Subtype (int)
-
Always
0x02
. - Tube index (int)
-
Indicates which tube is to be loaded.
- Ordnance type (int, enumeration)
-
The type of ordnance to load into the tube.
- Unknown (int)
- Unknown (int)
O
ObjectUpdatePacket
0x80803df9
[from server]Updates the status of one or more objects in the game world. Each type of object update has its own encoding within this package, which makes this packet both the single most important server packet type, as well as the most complicated one to implement.
Payload
The payload consists of an array of object update entries,
terminated with 0x00000000
. Note that the array may
be empty. Each entry in the array is structured as follows:
- Object type (byte, enumeration)
-
The type of object represented by this entry. If you get
0x00
for this field, there are no more objects in the array.Official Artemis servers only send "homogenous"
ObjectUpdatePacket
s (packets containing only objects of the same type). However, there is nothing in the protocol to require this, and the stock clients handle heterogeneous update packets just fine.In earlier protocol versions, this property was transmitted as an int rather than a byte. At least v2.1.1 and onward use the single byte encoding, but it is not verified if v2.1.1 is the first version to do so.
- Object ID (int)
-
A unique identifier assigned to this object.
- Bit field (variable length)
-
In order to minimize the amount of data that has to be transmitted, the server typically only sends the properties that have changed instead of the entire object every time. This bit field indicates which properties are included in the update. Each bit represents a single property; if a bit is set to
1
, that property is included. The length of the bit field depends the number of properties the object has. - Properties (variable length)
-
The rest of the entry consists of the updated values for the properties indicated in the bit field.
For details about the properties of the various object types which may be included in the array entries, see the Object Properties section.
P
PausePacket
0xf754c8fe
:0x04
[from server]Sent by the server when the simulation is paused or resumed.
Payload
- Subtype (int)
-
Always
0x04
. - Paused (boolean, 4 bytes)
-
True if the simulation is paused; false otherwise.
PerspectivePacket
0xf754c8fe
:0x12
[from server]Sent by the server when the main viewscreen perspective has changed.
Payload
- Subtype (int)
-
Always
0x12
. - Perspective (int, enumeration, before v2.4.0)
-
The current main screen perspective. This property is omitted starting with v2.4.0, which simply toggles the perspective between first- and third-person instead of specifying the desired perspective.
PlayerShipDamagePacket
0xf754c8fe
:0x05
[from server]Causes the client to present an interface screw as a result of an impact on the ship. By default, this causes the screen to shake and break up.
Payload
- Subtype (int)
-
Always
0x05
. - Ship index (int)
-
The index of the impacted ship; valid values are 0 through 7 inclusive.
- Duration (float)
-
Length of time (in seconds) that the damage visualization should last.
R
ReadyPacket
0x4c821d3c
:0x0f
[from client]Sent by the client when they click the “Ready” button to indicate that it is ready to join the game. The client must select at least one station before sending this packet. When a game ends, the stock client typically sends this packet again immediately, on the assumption that they will play again with the same console(s). Note that the server treats a ReadyPacket as a request to send the complete simulation state to the client, so ReadyPacket can be sent again during a simulation if you want a full update.
Payload
- Subtype (int)
-
Always
0x0f
. - Unknown (int)
-
Always 0.
RequestEngGridUpdate
0x4c821d3c
:0x1a
[from client]Sent from the engineering station, to request a full update for all values. This causes the server to send a full update, instead of the normal update type where only changes are sent.
Before v2.3.109, this was subtype 0x19
.
Payload
- Subtype (int)
-
Always
0x1a
. - Unknown (int)
-
Always 0.
S
SciScanPacket
0x4c821d3c
:0x13
[from client]Starts a science scan.
Payload
- Subtype (int)
-
Always
0x13
. - Target ID (int)
-
The object ID for the target to be scanned.
SciSelectPacket
0x4c821d3c
:0x10
[from client]Notifies the server that a new target has been selected on the science map.
Payload
- Subtype (int)
-
Always
0x10
. - Target ID (int)
-
The object ID for the new target, or 1 if the target has been cleared.
SetBeamFreqPacket
0x4c821d3c
:0x0b
[from client]Sets the beam frequency.
Payload
- Subtype (int)
-
Always
0x0b
. - Beam frequency (int, enumeration)
-
The new beam frequency.
SetConsolePacket
0x4c821d3c
:0x0e
[from client]Sets whether or not this client will use a particular console. A single client may use multiple consoles, and some consoles allow multiple clients to use them. Clients should send SetShipPacket before sending this one.
Payload
- Subtype (int)
-
Always
0x0e
. - Console type (int, enumeration)
-
The console whose status is being updated.
- Selected (boolean, 4 bytes)
-
True if this client is using the indicated console, false otherwise.
SetFighterSettingsPacket
0x4c821d3c
:0x21
[from client](new as of v2.6.0) Sets the details of the single-seat craft on a ship. This is transmitted by the client when you click the "Back" button from the "Customize Ship" screen.
Payload
- Subtype (int)
-
Always
0x21
. - Unknown (int)
-
Always seems to be 0.
- Craft array
-
An array of single-seat craft, terminated by
0x00000000
. Each entry is a struct as follows:- Hull ID (int)
-
The
<vessel uniqueID>
for the single-seat craft as found invesselData.xml
, referred to as thehullID
in mission scripts. - Bay index (int)
-
The index of the bay where this craft is located, ranging from 0 to the ship's bay count - 1.
- Name (string)
-
The name of this craft.
- Hull race (string)
-
As specified in
vesselData.xml
: "TSN", "Ximni", "Pirate", etc. - Broad type (string)
-
As specified in
vesselData.xml
.
SetMainScreenPacket
0x4c821d3c
:0x01
[from client]Sets the view to display on the main screen.
Payload
- Subtype (int)
-
Always
0x01
. - Main screen view (int, enumeration)
-
The view to display on the main screen.
SetShipPacket
0x4c821d3c
:0x0d
[from client]Sets which ship the client will be on. This should be sent before SetConsolePacket.
Payload
- Subtype (int)
-
Always
0x0d
. - Ship index (int)
-
The index of the desired ship; valid values are 0 through 7 inclusive.
SetShipSettingsPacket
0x4c821d3c
:0x17
[from client]Sets the properties for the currently-selected ship.
Before v2.3.109, this was subtype 0x16
.
Payload
- Subtype (int)
-
Always
0x17
. - Ship (struct)
-
The updated ship properties. This is a struct as defined in AllShipSettingsPacket.
SetWeaponsTargetPacket
0x4c821d3c
:0x02
[from client]Notifies the server that a new target has been selected on the weapons console.
Payload
- Subtype (int)
-
Always
0x02
. - Target ID (int)
-
The object ID for the new target, or 1 if the target has been cleared.
ShieldsDownPacket
0x4c821d3c
:0x06
[from client]Lowers shields.
Payload
- Subtype (int)
-
Always
0x06
. - Unused (int)
-
Always 0.
ShieldsUpPacket
0x4c821d3c
:0x05
[from client]Raises shields.
Payload
- Subtype (int)
-
Always
0x05
. - Unused (int)
-
Always 0.
SkyboxPacket
0xf754c8fe
:0x09
[from server]
Sent to change the displayed skybox image on the client. The server will send this
packet at the start of a mission. The server will also send it any time a custom
script instructs it to do so, but instead of sending the skybox index specified by
the script, it will always send 0x0a
instead. This may be a bug in the
Artemis server.
Payload
- Subtype (int)
-
Always
0x09
. - Skybox ID (int)
-
The number of the skybox image to load on the client. Under the Artemis install directory is an "art" folder; this folder contains a bunch of subfolders whose names start with "sb" followed by a two-digit decimal value. This value is the skybox ID, and each folder contains image files for a single skybox. The stock install of Artemis has skybox images for IDs 00 through 05 and 10 through 29. It is presumed but not yet confirmed that other skybox IDs will work if a corresponding folder is created and contains the appropriate files.
SmokePacket
0xf754c8fe
:0x1b
[from server]Causes the client to render a puff of smoke as a result of damage.
Payload
- Subtype (int)
-
Always
0x1b
. - Object ID (int)
-
The ID of the object emitting the smoke.
- Priority (int)
-
The "priority" of the smoke. The game maintains a buffer of smoke objects; this buffer is an array of size 8, and smoke objects are inserted into the array at the index indicated by this value (between 0 and 7 inclusive), overwriting any previously-existing smoke object at that index. Smoke objects with a low index in the buffer, if they exist, will appear to emit more smoke than objects with a higher index.
- X-coordinate (float)
-
The X-coordinate relative to the ship's origin where the smoke is emitted. Some extreme values have been observed; maybe smoke left after a ship is destroyed?
- Y-coordinate (float)
-
The Y-coordinate relative to the ship's origin where the smoke is emitted. Some extreme values have been observed; maybe smoke left after a ship is destroyed?
- Z-coordinate (float)
-
The Z-coordinate relative to the ship's origin where the smoke is emitted. Some extreme values have been observed; maybe smoke left after a ship is destroyed?
SoundEffectPacket
0xf754c8fe
:0x03
[from server]Causes the client to play a sound effect file.
Payload
- Subtype (int)
-
Always
0x03
. - Filename (string)
-
Path to the file to play the sound effect from, e.g "dat/enemy-explode.wav".
T
TagPacket
0xf754c8fe
:0x1d
[from server]Sent by the server when a player ship has detected a tag. Introduced in v2.6.204.
Payload
- Subtype (int)
-
Always
0x1d
. - Object ID (int)
-
The ID of the tagged object.
- Unknown (int)
-
Values of 0 and occasionally 3 observed.
- Tagger (string)
-
The ship that launched the tag. This is not neccessarily the name of a ship that exists in the game.
- Date (string)
-
The date the tag was applied, in YYYY-M-D format. (Month and day do not have leading 0s.)
TitlePacket
0x902f0b1a
[from server]
Transmits a large title to display on the main screen. This occurs in response to
the <big_message>
tag in a scripted mission.
Payload
- Title (string)
-
The title text to display
- Subtitle 1 (string)
-
The first line of the subtitle
- Subtitle 2 (string)
-
The second line of the subtitle
ToggleAutoBeamsPacket
0x4c821d3c
:0x03
[from client]Informs the server that the auto beams setting has been toggled.
Payload
- Subtype (int)
-
Always
0x03
. - Unused (int)
-
Always 0.
TogglePerspectivePacket
0x4c821d3c
:0x1b
[from client]Toggles between first- and third-person perspective on the main screen.
Before v2.3.109, this was subtype 0x1a
.
Payload
- Subtype (int)
-
Always
0x1b
. - Unused (int)
-
Always 0.
ToggleRedAlertPacket
0x4c821d3c
:0x0a
[from client]Toggles the ship's red alert status.
Payload
- Subtype (int)
-
Always
0x0a
. - Unused (int)
-
Always 0.
ToggleShieldsPacket
0x4c821d3c
:0x04
[from client]Toggles the shields up or down.
Payload
- Subtype (int)
-
Always
0x04
. - Unused (int)
-
Always 0.
U
UnloadTubePacket
0x4c821d3c
:0x09
[from client]Removes whatever ordnance is loaded in a tube.
Payload
- Subtype (int)
-
Always
0x09
. - Tube index (int)
-
Index of the tube to unload.
V
VersionPacket
0xe548e74a
[from server]Gives the server version number. This packet is sent immediately after the WelcomePacket.
Payload
- Unknown (int)
-
The value of this field can vary, even when connecting to the same version of the server.
- Version (deprecated since v2.1) (float)
-
The version of Artemis running on the server. If the client doesn't support the given version, it should disconnect. This field is deprecated as of v2.1; it is still sent by the server, but client should ignore its value unless there are no more bytes after it in the packet.
- Version (since v2.1) (3 ints)
-
These three int values constitute the major, minor and patch version numbers. For
example, v2.1.1 will transmit
02000000 01000000 01000000
(interpreted 2 1 1) for this field. If the client doesn't support the given version, it should disconnect. The version specified in this field supersedes any specified in the legacy version field.
W
WelcomePacket
0x6d04b3da
[from server]Indicates a successful connection to the Artemis server. This is the first packet sent upon connection.
Payload
- Welcome message (string)
-
Unlike all other strings in Artemis packets, this one is encoded in plain ASCII, so each character is one byte, not two. Also, the given length for the string does not include a terminating null. Currently, it says, "You have connected to Thom Robertson's Artemis Bridge Simulator. Please connect with an authorized game client."
Object Properties
This section documents the bit fields and properties for each of the object types. See ObjectUpdatePacket for how these objects are updated by the Artemis server.
Anomaly
New as of v2.1.5. Previously, anomalies were handled by the “other” property structure.
- Bit field (2 bytes, 1 byte before v2.6.3)
- X coordinate (byte 1.1, float)
- Y coordinate (byte 1.2, float)
- Z coordinate (byte 1.3, float)
- Anomaly type (byte 1.4, enumeration, int)
- Scan (byte 1.5, int, new as of v2.3.0)
-
This is a bitmask indicating which sides have scanned this anomaly. To determine whether a particular side has scanned the anomaly, compute
(1 << sideIndex) && scanValue
. If the result is non-zero, the anomaly has been scanned by that side. Note that there is no side 0. - Unknown (byte 1.6, int, new as of v2.3.0)
-
So far only 0 has been observed.
- Beacon creature type (byte 1.7, byte, new as of 2.6.3)
-
If this anomaly represents a deployed beacon, this is the type of creature affected by it. Presumably
0x07
(wreck) is invalid. - Beacon mode (byte 1.8, byte, new as of 2.6.3)
-
If this anomaly represents a deployed beacon, this is the beacon's mode.
Base
- Bit field (2 bytes)
- Name (bit 1.1, string)
-
The name assigned to this base. In standard, non-custom scenarios, base names will be unique, but there is no guarantee that the same will be true in custom scenarios.
- Shields (bit 1.2, float)
-
The current strength of the base's shields.
- Max shields (bit 1.3, float)
-
The maximum strength of the base's shields - The length of the bar filled by the above.
- Unknown (bit 1.4, int)
-
Since v2.3.0, this property is unknown, and appears to always have a value of 6.
Before v2.3.0, this was the index of this base. Each base had a unique index from 0 to (number of bases-1). In a standard solo game, DS1 was 0, DS2 was 1, etc.
- Hull ID (bit 1.5, int)
-
The
<vessel uniqueID>
for the base as found invesselData.xml
, referred to as thehullID
in mission scripts. - X coordinate (bit 1.6, float)
-
The base's location along the X-axis.
- Y coordinate (bit 1.7, float)
-
The base's location along the Y-axis.
- Z coordinate (bit 1.8, float)
-
The base's location along the Z-axis.
- Unknown (bit 2.1, 4 bytes)
- Unknown (bit 2.2, 4 bytes)
- Unknown (bit 2.3, 4 bytes)
- Unknown (bit 2.4, 4 bytes)
- Unknown (bit 2.5, byte)
- Side (bit 2.6, byte)
-
The side index for this base. Ships / bases which have the same side index are friendly to one another. There is no side 0. The default friendly side is 2.
Creature
Note that wrecks are also considered creatures, for some reason. This structure is new as of v2.1.5. Previously, the only type of creature was the classic space monster, which was handled by the “other” property structure, and space whales had their own structure.
- Bit field (3 bytes)
-
Note: Before v2.3.0, the bit field was 2 bytes.
- X (bit 1.1, float)
-
The X coordinate of this creature.
- Y (bit 1.2, float)
-
The Y coordinate of this creature.
- Z (bit 1.3, float)
-
The Z coordinate of this creature.
- Name (bit 1.4, string)
-
The name of the creature.
- Heading (bit 1.5, float)
-
The creature's current heading.
- Pitch (bit 1.6, float)
-
The creature's current pitch.
- Roll (bit 1.7, float)
-
The creature's current roll.
- Creature type (bit 1.8, int, enumeration)
-
The type of creature.
- Scan? (bit 2.1, 4 bytes)
-
This appears to be a scanned bitmask, simiar to those found on player and NPC ships.
- Unknown (bit 2.2, 4 bytes)
-
Side?
- Unknown (bit 2.3, 4 bytes)
- Unknown (bit 2.4, 4 bytes)
- Unknown (bit 2.5, 4 bytes)
- Unknown (bit 2.6, 4 bytes)
- Health (bit 2.7, float, since 2.3.0)
-
The creature's current health.
- Max health (bit 2.8, float, since 2.3.0)
-
The creature's maximum health.
- Unknown (bit 3.1, byte, since v2.6.3)
-
Possibly related to tags, nebulae, or age?
- Unknown (bit 3.2, int, since v2.7.0)
-
Usually -1, but many other values observed, as well.
Drone
- Bit field (2 bytes)
- Unknown (bit 1.1, int)
- X coordinate (bit 1.2, float)
- Y coordinate (bit 1.3 float)
- Z coordinate (bit 1.4, float)
- Unknown (bit 1.5 float)
-
Perhaps related to pitch/yaw.
- Unknown (bit 1.6, float)
- Heading (bit 1.7, float)
- Side (bit 1.8, int)
- Unknown (bit 2.1, float?, v2.1.5+)
Engineering Console
- Bit fields (4 bytes)
-
Each byte of the field represents a category of values:
- Heat levels
- Energy allocations
- Coolant allocations
The bits in each byte represent the ship systems, in the order specified in the ship system enumeration. So for example, if the first bit field is
0x01
, it means that this packet will contain a single heat level value (beams). - Heat levels (bits 1.1-1.8, float array)
-
The heat level for each system, as a value between 0 (no heat) and 1 (maximum heat). Reaching maximum heat for a system will cause an explosion, which will damage a system node of that type and release some of the heat.
- Energy allocations (bits 2.1-2.8, float array)
-
The energy allocation for each system, as a value between 0 (no energy allocated) and 1 (maximum possible energy allocation). In the UI, this is expressed as a percentage between 0% and 300%, so the nominal allocation level (100%) is represented by a value of 0.3333....
- Coolant allocations (bits 3.1-3.8, byte array)
-
The units of coolant allocated to each system.
Generic Mesh
These are arbitrary 3D objects to display in the game world. Players and enemies don't interact with these objects; they are just decoration.
- Bit field (4 bytes)
- X coordinate (bit 1.1, float)
-
The object's location on the X axis.
- Y coordinate (bit 1.2, float)
-
The object's location on the Y axis.
- Z coordinate (bit 1.3, float)
-
The object's location on the Z axis.
- Unknown (bit 1.4, int)
- Unknown (bit 1.5, int)
- Unknown (bit 1.6, int)
- Roll (bit 1.7, float)
- Pitch (bit 1.8, float)
- Heading (bit 2.1, float)
- Roll delta (bit 2.2, float)
- Pitch delta (bit 2.3, float)
- Heading delta (bit 2.4, float)
- Name (bit 2.5, string)
-
The name of this object.
- Mesh file (bit 2.6, string)
-
The name of the file containing the 3D mesh data.
- Texture file (bit 2.7, string)
-
The name of the file containing the texture to apply to the mesh.
- Push radius (bit 2.8, float)
-
The distance to maintain from other objects.
- Block shots (bit 3.1, boolean, byte)
-
Whether this object blocks weapons fire.
- Scale (bit 3.2, float)
-
Scale factor of the model
- Red color channel (bit 3.3, float)
- Green color channel (bit 3.4, float)
- Blue color channel (bit 3.5, float)
- Fore shields (bit 3.6, float)
- Aft shields (bit 3.7, float)
- Unknown (bit 3.8, byte)
- Unknown (bit 4.1, string?)
- Unknown (bit 4.2, string?)
- Unknown (bit 4.3, int, since v2.7.0)
Nebula
- Bit field (1 byte)
- X coordinate (bit 1.1, float)
- Y coordinate (bit 1.2, float)
- Z coordinate (bit 1.3, float)
- Red color channel (bit 1.4, float)
-
This affects the color shown on a 3D view, not in a map view.
- Green color channel (bit 1.5, float)
-
This affects the color shown on a 3D view, not in a map view.
- Blue color channel (bit 1.6, float)
-
This affects the color shown on a 3D view, not in a map view.
- Type (bit 1.7, byte, since v2.7.0)
-
Valid values are 1, 2, or 3. All nebulae limit ships within them to warp 1, but other than the color used to render them on map views, they are indistinguishable in stock scenarios. Scripts can use them for unique effects, though.
NPC Ship
The "Tagged" property was added in v2.6.204, and the unknown byte after it was added in v2.6.3. The subsequent properties shifted accordingly.
- Bit field (7 bytes)
- Name (bit 1.1, string)
-
The ship's name.
- Throttle (bit 1.2, float)
-
Values range from 0.0 for all stop to 1.0 for full speed.
- Rudder (bit 1.3, float)
-
Values range from 0.0 for hard to port (left), to 1.0 for hard to starboard (right).
- Max impulse (bit 1.4, float)
-
The ship's maximum possible speed at impulse.
- Max turn rate (bit 1.5, float)
-
The ship's maximum possible turning speed.
- Enemy? (bit 1.6, boolean, 4 bytes)
-
In single-bridge games, as well as multi-bridge co-op games, this value will be true if the ship is hostile and false if it is friendly. In PvP and scripted games, this field is always true, regardless of whether the NPC is hostile or not.
- Hull ID (bit 1.7, int)
-
The
<vessel uniqueID>
for the ship as found invesselData.xml
, referred to as thehullID
in mission scripts. - X coordinate (bit 1.8, float)
- Y coordinate (bit 2.1, float)
- Z coordinate (bit 2.2, float)
- Pitch (bit 2.3, float)
- Roll (bit 2.4, float)
- Heading (bit 2.5, float)
- Velocity (bit 2.6, float)
- Surrendered (bit 2.7, boolean, 1 byte)
-
True if this ship has surrendered; false otherwise.
- Nebula type (bit 2.8, byte)
-
The type of nebula that the NPC ship is in, or 0 if the ship is not in a nebula. Nebulae types are typically 1, 2, and 3.
Before v2.7.0, this was two bytes long. Sample observed values:
0x0000
,0x0100
,0x01ff
,0x02ff
,0x03ff
,0x16ff
,0x2bff
,0x32ff
,0x43ff
,0x46ff
,0x47ff
,0x51ff
,0x57ff
,0xc6ff
. - Forward shields (bit 3.1, float)
- Forward shields max (bit 3.2, float)
- Aft shields (bit 3.3, float)
- Aft shields (bit 3.4, float)
- Unknown (bit 3.5, short)
-
0x0100
observed - Fleet number (bit 3.6, byte)
-
The number of the fleet to which this ship belongs. For custom missions, this is specified in the mission file.
- Special abilities (bit 3.7, bit field, 4 bytes)
-
The special abilites posessed by this ship. The value in this field is only meaningful if the ship's faction has the “special” attribute, as specified in
vesselData.xml
. Other ships should ignore this value even if it is present, as they cannot have special abilities. - Active special abilities (bit 3.8, bit field, 4 bytes)
-
The special abilites posessed by this ship that are currently in use. As with the previous field, this field should be ignored if the ship can't have special abilities, even if it is present.
- Single scan (bit 4.1, int)
-
This is a bitmask indicating which sides have scanned this ship at least once. To determine whether a particular side has scanned the ship, compute
(1 << sideIndex) && scanValue
. If the result is non-zero, the ship has been scanned once by that side. Note that there is no side 0. - Double scan (bit 4.2, int)
-
This is a bitmask indicating which sides have scanned this ship twice. It takes the same format at the single scan property.
- Map visibility (bit 4.3, int)
-
This is a bitmask indicating which sides are able to see this ship in their overhead map views (LRS, science, captain's map, etc.). It takes the same format as the previous two properties.
- Side (bit 4.4, byte)
-
The side index for this ship. Ships which have the same side index are friendly to one another and share scan data. There is no side 0.
- Unknown (bit 4.5, byte)
-
Observed values include
0x00
through0x02
and0xfa
through0xff
. - Unknown (bit 4.6, byte)
-
Observed values include
0x00
through0x05
,0xfa
, and0xfc
through0xff
. - Unknown (bit 4.7, byte)
-
0x01
observed - Target X (bit 4.8, float)
- Target Y (bit 5.1, float)
- Target Z (bit 5.2, float)
- Tagged (bit 5.3, byte, new as of v2.6.204)
- Unknown (bit 5.4, byte, new as of v2.6.3)
-
Only 0 observed so far.
- Ship system damage (bit 5.5 - 6.4, float array)
-
Damage to various ship systems, in the order specified in the enumeration. A system with a damage value of 0.0 is undamaged; a higher value (up to 1.0) means the system is damaged. In the stock client, damaged systems on NPC vessels can be seen via the science console. Barring further damage or actions by a custom script, damage values gradually decrease as the ship is repaired, until they return to 0.0.
- Beam frequency resistance (bit 6.5 - 7.1, float array)
-
The ship's resistance to the five beam frequencies. Higher values indicate greater resistance to beams tuned to the corresponding frequency.
Player Ship
- Bit field (6 bytes, 5 bytes before v2.3.0)
- Weapons target (bit 1.1, int)
-
The ID of the object selected by the weapons officer, or 0 if the selection was cleared.
- Impulse (bit 1.2, float)
-
Current impulse power for this ship. Values range from 0.0 (all stop) to 1.0 (full speed) inclusive.
- Rudder (bit 1.3, float)
-
Values range from 0.0 to 1.0 inclusive, with 0.0 meaning hard to port (left), 0.5 meaning rudder amidships (straight), and 1.0 meaning hard to starboard (right).
- Top speed (bit 1.4, float)
- Turn rate (bit 1.5, float)
- Auto beams (bit 1.6, boolean, 1 byte)
- Warp factor (bit 1.7, byte)
- Energy reserves (bit 1.8, float)
- Shields up/down (bit 2.1, boolean, 2 bytes)
- Unknown (bit 2.2, int)
-
Was ship number before v2.3.0.
- Hull ID (bit 2.3, int)
-
The
<vessel uniqueID>
for the ship as found invesselData.xml
, referred to as thehullID
in mission scripts. - X coordinate (bit 2.4, float)
-
The ship's location on the X axis.
- Y coordinate (bit 2.5, float)
-
The ship's location on the Y axis.
- Z coordinate (bit 2.6, float)
-
The ship's location on the Z axis.
- Pitch (bit 2.7, float)
-
(values still uncertain) Values range from -1.0 to 1.0 inclusive, where -1.0 means the port (left) side points straight “up” and 1.0 means it points straight “down.”
- Roll (bit 2.8, float)
-
(values still uncertain) Values range from -1.0 to 1.0 inclusive, where -1.0 means straight “up” and 1.0 means straight “down.”
- Heading (bit 3.1, float)
-
A value from pi to negative pi. A value of pi corresponds to a heading of 0° (or “north”). The ship turns to port (left) as the value decreases. A value of 0.0 corresponds to a heading of 180° (or “south”).
- Velocity (bit 3.2, float)
-
A value from pi to negative pi. A value of pi corresponds to a heading of 0° (or “north”). The ship turns to port (left) as the value decreases. A value of 0.0 corresponds to a heading of 180° (or “south”).
- Nebula type (bit 3.3, byte)
-
The type of nebula that the player's ship is in, or 0 if the ship is not in a nebula. Nebulae types are 1, 2, and 3; but other values for this property have been observed, such as 38 and -127. It is unknown what these other values mean. Player ships in nebulae cannot go faster than warp 1.
Before v2.7.0, this was two bytes, and nebula types did not exist. The value was then treated as a boolean, where any non-zero value meant "in a nebula."
- Ship name (bit 3.4, string)
- Forward shields (bit 3.5, float)
-
Current strength of forward shield. A value greater than 0.0 indicates that this shield is up, while a value of 0.0 or less means it's down. If enemy fire penetrates the shield, this value can go negative; it will climb back towards 0.0 as the shield recovers.
- Forward shields max (bit 3.6, float)
-
The maximum strength of the forward shield.
- Aft shields (bit 3.7, float)
-
Current strength of aft shield. A value greater than 0.0 indicates that this shield is up, while a value of 0.0 or less means it's down. If enemy fire penetrates the shield, this value can go negative; it will climb back towards 0.0 as the shield recovers.
- Aft shields max (bit 3.8, float)
-
The maximum strength of the aft shield.
- Last docked base (bit 4.1, int)
-
The ID of the base that most recently initiated docking with the ship. This field updates when a base's tractor beam latches onto the ship. Undocking does not change this field; to detect undocking, watch for the ship's impulse (bit 1.2) or warp factor (bit 1.7) fields to go above zero.
- Alert status (bit 4.2, byte, enumeration)
- Unknown (bit 4.3, float)
-
Value of 200000 observed
- Main screen view (bit 4.4, byte, enumeration)
-
The view currently displayed on the ship's main screen.
- Beam frequency (bit 4.5, byte, enumeration)
-
The frequency to which the beams are currently tuned.
- Available coolant or missiles (bit 4.6, byte)
-
The total amount of coolant if a capital ship, or the number of missiles if a single-seat craft.
- Science target (bit 4.7, int)
-
The ID of the object selected by the science officer, or 0 if the selection was cleared.
- Captain target (bit 4.8, int)
-
The ID of the object selected by the captain, or 1 if the selection was cleared.
- Drive type (bit 5.1, byte, enumeration)
-
The type of drive system the ship has.
- Scanning ID (bit 5.2, int)
-
The ID of the object currently being scanned by the science officer.
- Scanning progress (bit 5.3, float)
-
A value from 0.0 to 1.0 inclusive indicating the current progress of the active science scan.
- Reverse (bit 5.4, boolean, 1 byte)
-
True if the impulse drive is in reverse; false otherwise.
- Climb/dive (bit 5.5, float)
-
Whether the ship is climbing (-1), diving (1), or leveling out (0).
- Side (bit 5.6, byte)
-
What side this ship is on. Ships with the same side value are allies and share scan data.
- Map visibility (bit 5.7, int)
-
This is a bitmask indicating which sides are able to see this ship in their overhead map views (LRS, science, captain's map, etc.). It takes the same format as the NPC Map visibility / Single scan / Double scan bitmasks
- Ship index (bit 5.8, byte, new as of v2.3.0)
-
The index of the player ship (0=Artemis, etc.). If this ship is a single-seater, this value is
0xff
. - Capital ship object ID (bit 6.1, int, new as of v2.3.0)
-
The object ID of the associated capital ship, if this ship is a single-seater.
- Accent color (bit 6.2, float, new as of v2.4.0)
-
Ship accent color hue in the range 0.0 to 1.0. Multiply by 360 to get a Hue as described on Wikipedia.
- Emergency jump cooldown (bit 6.3, float, new as of v2.4.0)
-
When the ship is ready for an emergency jump, this value will be 0.0. After a jump, it will go to 1.0, then gradually decrease back down to 0.0.
- Beacon creature type (bit 6.4, byte, new as of v2.6.3)
-
The weapons console's setting for the type of creature that will be attracted/repelled by a launched beacon.
- Beacon mode (bit 6.5, byte, new as of v2.6.3)
-
The weapons console's setting for what a launched beacon will do to the configured type of creature.
Player Ship Upgrades
New as of v2.1.5. Indicates how many of each upgrade the player ship has on board, which ones are active, and how many seconds are left of each type of activation.
- Bit field (11 bytes)
-
There are 28 upgrade types available, each of which are described in this packet type. First, every upgrade is described with an 8-bit boolean value. If this value is true, the upgrade is currently activated. Secondly, every upgrade is described with a i8 (signed 8-bit integer), that determines how many of that type of upgrade the ship has available. Finally, every upgrade is described with a u16, that detmines how many more seconds the upgrade is active for.
- Activation flags (bits 1.1-4.4, bool8)
- (bit 1.1) active_infusion_p_coils
- (bit 1.2) active_hydrogen_ram
- (bit 1.3) active_tauron_focusers
- (bit 1.4) active_carapaction_coils
- (bit 1.5) active_polyphasic_capacitors
- (bit 1.6) active_cetrocite_crystals
- (bit 1.7) active_lateral_array
- (bit 1.8) active_ecm_starpulse
- (bit 2.1) active_double_agent
- (bit 2.2) active_wartime_production
- (bit 2.3) active_infusion_p_coils_perm
- (bit 2.4) active_protonic_verniers
- (bit 2.5) active_tauron_focusers_perm
- (bit 2.6) active_regenerative_pau_grids
- (bit 2.7) active_veteran_damcon_teams
- (bit 2.8) active_cetrocite_heatsinks
- (bit 3.1) active_tachyon_scanners
- (bit 3.2) active_gridscan_overload
- (bit 3.3) active_override_authorization
- (bit 3.4) active_resupply_imperatives
- (bit 3.5) active_patrol_group
- (bit 3.6) active_fast_supply
- (bit 3.7) active_vanguard_refit_helm
- (bit 3.8) active_vanguard_refit_weap
- (bit 4.1) active_vanguard_refit_comm
- (bit 4.2) active_vanguard_refit_station
- (bit 4.3) active_vanguard_refit_eng
- (bit 4.4) active_vanguard_refit_systems
- Available upgrades (bits 4.5-7.8, i8)
- (bit 4.5) count_infusion_p_coils
- (bit 4.6) count_hydrogen_ram
- (bit 4.7) count_tauron_focusers
- (bit 4.8) count_carapaction_coils
- (bit 5.1) count_polyphasic_capacitors
- (bit 5.2) count_cetrocite_crystals
- (bit 5.3) count_lateral_array
- (bit 5.4) count_ecm_starpulse
- (bit 5.5) count_double_agent
- (bit 5.6) count_wartime_production
- (bit 5.7) count_infusion_p_coils_perm
- (bit 5.8) count_protonic_verniers
- (bit 6.1) count_tauron_focusers_perm
- (bit 6.2) count_regenerative_pau_grids
- (bit 6.3) count_veteran_damcon_teams
- (bit 6.4) count_cetrocite_heatsinks
- (bit 6.5) count_tachyon_scanners
- (bit 6.6) count_gridscan_overload
- (bit 6.7) count_override_authorization
- (bit 6.8) count_resupply_imperatives
- (bit 7.1) count_patrol_group
- (bit 7.2) count_fast_supply
- (bit 7.3) count_vanguard_refit_helm
- (bit 7.4) count_vanguard_refit_weap
- (bit 7.5) count_vanguard_refit_comm
- (bit 7.6) count_vanguard_refit_station
- (bit 7.7) count_vanguard_refit_eng
- (bit 7.8) count_vanguard_refit_systems
- Activation time (bits 8.1-11.4, u16)
- (bit 8.1) time_infusion_p_coils
- (bit 8.2) time_hydrogen_ram
- (bit 8.3) time_tauron_focusers
- (bit 8.4) time_carapaction_coils
- (bit 8.5) time_polyphasic_capacitors
- (bit 8.6) time_cetrocite_crystals
- (bit 8.7) time_lateral_array
- (bit 8.8) time_ecm_starpulse
- (bit 9.1) time_double_agent
- (bit 9.2) time_wartime_production
- (bit 9.3) time_infusion_p_coils_perm
- (bit 9.4) time_protonic_verniers
- (bit 9.5) time_tauron_focusers_perm
- (bit 9.6) time_regenerative_pau_grids
- (bit 9.7) time_veteran_damcon_teams
- (bit 9.8) time_cetrocite_heatsinks
- (bit 10.1) time_tachyon_scanners
- (bit 10.2) time_gridscan_overload
- (bit 10.3) time_override_authorization
- (bit 10.4) time_resupply_imperatives
- (bit 10.5) time_patrol_group
- (bit 10.6) time_fast_supply
- (bit 10.7) time_vanguard_refit_helm
- (bit 10.8) time_vanguard_refit_weap
- (bit 11.1) time_vanguard_refit_comm
- (bit 11.2) time_vanguard_refit_station
- (bit 11.3) time_vanguard_refit_eng
- (bit 11.4) time_vanguard_refit_systems
Torpedo
- Bit field (2 bytes)
- X coordinate (bit 1.1, float)
-
The torpedo's location on the X axis.
- Y coordinate (bit 1.2, float)
-
The torpedo's location on the Y axis.
- Z coordinate (bit 1.3, float)
-
The torpedo's location on the Z axis.
- Delta X (bit 1.4, float)
-
Ranges from -1.0 to 1.0 (though the client handles values outside this range fine).
- Delta Y (bit 1.5, float)
-
Ranges from -1.0 to 1.0 (though the client handles values outside this range fine).
- Delta Z (bit 1.6, float)
-
Ranges from -1.0 to 1.0 (though the client handles values outside this range fine).
- Unknown (bit 1.7, int)
-
Seems to always be 0x0b, which is the object ID for a torpedo, although this seems redundant.
- Ordnance type (bit 1.8, int)
-
The ordnance type of this torpedo.
Weapons Console
Version notes:
- There used to be an unknown byte between the ordnance counts array and the tube (un)load times array. Before v2.1.5, it was located at bit 1.5. Starting with v2.1.5 it moved to bit 1.6 as a result of the introduction of the plasma shock torpedo. It was removed starting at v2.6.0.
- The plasma shock torpedo type was added in v2.1.5. It was inserted at bit 1.5, and all subsequent bits were shifted by one bit. Before this addition, the bit field was only three bytes long instead of four.
- Beacons, probes, and tags were introduced in v2.6.0. These were inserted at bits 1.6, 1.7, and 1.8 (with the unknown byte removed), and the remaining properties were shifted accordingly.
- Bit field (4 bytes)
- Ordnance counts (bits 1.1-1.8, byte array)
-
Each element of this array indicates how many of a particular ordinance type are stored on the ship, in the order given in the ordnance type enumeration.
- Tube (un)load times (bits 2.1-2.6, float array)
-
Each element of this array gives the (un)load time (in seconds) for the corresponding tube. This field should be ignored (even when present) if the tube's status is not loading or unloading.
- Tube status (bits 2.7-3.4, byte array)
-
Each element of this array indicates the occupation status of each tube.
- Ordnance type (bits 3.5-4.2, byte array)
-
Each element of this array indicates the type of ordnance in each tube. If the tube's status is unloaded, the tube is empty, and this field should be ignored even when present.
Whale
This type became obsolete starting v2.1.5, when whales were folded into the new creature object type.
- Bit field (2 bytes)
- Name (bit 1.1, string)
-
Always “WHALE” in non-custom missions.
- Unknown (bit 1.2, int)
- Unknown (bit 1.3, int)
- X coordinate (bit 1.4, float)
- Y coordinate (bit 1.5, float)
- Z coordinate (bit 1.6, float)
- Pitch (bit 1.7, float)
- Roll (bit 1.8, float)
- Heading (bit 2.1, float)
- Unknown (bit 2.2, float)
- Unknown (bit 2.3, float)
-
Values range from 0.0 to 1.0.
- Unknown (bit 2.4, float)
-
Values range up to 1.0. Lowest value seen so far is approximately 0.855, minimum might be 0.0.
- Unknown (bit 2.5, float)
-
Observed ranges have been from about 0.5 to 1.36.
Other Objects
The remaining object types (asteroids, black holes and mines) all use the same properties. Prior to v2.1.5, anomalies and space monsters also used this structure.
- Bit field (1 byte)
-
The object's location on the X axis.
- X coordinate (bit 1.1, float)
-
The object's location on the X axis.
- Y coordinate (bit 1.2, float)
-
The object's location on the Y axis.
- Z coordinate (bit 1.3, float)
-
The object's location on the Z axis.
UDP Server Discovery
Starting in v2.7.0, the game supports auto-discovery of servers on the LAN.
Request
A client requests that servers announce themselves by broadcasting
from an ephermal UDP port to 255.255.255.255:3100, sending a
single byte: 0x05
(ENQ).
It should then listen for responses from servers.
Response
A server that receives an ENQ on UDP port 3100 responds with the following:
A string is transmitted by first sending the length of the string in bytes as a 16-bit integer, followed by the ASCII-encoded string itself. The string is not null-terminated.
The IP address of the host does not include the port
number. If the server and client do not have the same port number
configured in artemis.ini
, the client will discover
the server but fail to connect to it.
This has been reported as a bug in the Artemis forums.
Game Events
Certain in-game events cause the transmission specific patterns of packets. This section documents some of these observed patterns:
Connected to server, no simulation running
Simulation starts while client is connected
- SkyboxPacket
- Unknown packet: type=
0xf754c8fe
subtype=0x08
- GameStartPacket
- AllShipSettingsPacket
Client clicks "Ready" while simulation is already running
Single-seat carft is launched
- FighterLaunchPacket
- FighterLaunchedPacket
- FighterBayStatusPacket (informing that the craft is no longer in the bay)
- ObjectUpdatePacket (single-seat craft are now updated as separate ship objects)
Single-seat craft is docked
- HelmRequestDockPacket (sent by the single-seat craft)
- DestroyObjectPacket (destroys the single-seat craft object)
- FighterBayStatusPacket (informing that the single-seat craft is now in the bay)
- ObjectUpdatePacket (the docked single-seat craft is no longer a separate ship object)
Vessel Data
Information about vessels are stored in dat/vesselData.xml
. This section provides
documentation for the tags used in this file.
art
parent: <vessel>, count: 1-n
Provides paths to files used to create the 3D models seen in the game.
Attributes
- diffuseFile (string)
-
The base texture file.
- glowFile (string)
-
Replaces the base texture in shadowed areas of the vessel.
- meshFile (string)
-
The actual 3D model, must be a .dxs file.
- pushRadius (float)
-
The collision distance for the vessel. Other vessel models will be kept out of this range.
- scale (float)
-
Scales the 3D model.
- specularFile (string)
-
Defines how shiny surfaces are.
beam_port
parent: <vessel>, count: 0-n
Represents a beam port on the vessel.
Attributes
- arcwidth (float)
-
The (in radians) width of the beam arc.
- cycletime (integer, 0-n)
-
The time (in seconds) this port requires to cool down between shots.
- damage (integer, 0-n)
-
How much damage is inflicted per shot by this beam port.
- range (integer, 0-n)
-
The maximum distance this beam can fire.
- x, y, z
-
Coordinates for the beam port's location on the 3D model. The position of this point relative to the origin determines the center of this port's beam arc.
carrierload
parent: <vessel>, count: 0-1
Information about the single-seat craft carried by this vessel. Only permitted for
vessels with both the player
and carrier
broadTypes.
Attributes
- bomber (integer, 0-n)
-
The number of bombers carried by this vessel.
- fighter (integer, 0-n)
-
The number of fighters carried by this vessel.
drone_port
parent: <vessel>, count: 0-n
Represents a drone port on the vessel. Not supported for vessels with the
player
broadType.
Attributes
- cycletime (integer, 0-n)
-
The time (in seconds) this port requires to cool down between shots.
- damage (integer, 0-n)
-
How much damage is inflicted per shot by this drone port.
- range (integer, 0-n)
-
The distance to the enemy at which this port will start firing drones.
- x, y, z (float)
-
Coordinates for the drone port's location on the 3D model.
engine_port
parent: <vessel>, count: 0-n
Represents a engine port on the vessel. This is where the glowing engine trails are emitted.
Attributes
- x, y, z (float)
-
Coordinates for the engine port's location on the 3D model.
fleet_ai
parent: <vessel>, count: 0-1
Not supported for vessels with the player
broadType.
Attributes
- commonality (integer)
hullRace
parent: <vessel_data>, count: 2-n
Represents a single game faction.
Attributes
- ID (integer)
- name (string)
-
Display name for this faction.
- keys (string)
-
A space-delimited list of attributes for this faction. There are three categories of keys:
-
Stance
enemy
: Enemies use these vesselsfriendly
: Allies use these vesselsplayer
: Can be controlled by player
-
Fleet organization (
enemy
only)loner
: Flies alone outside of a fleetstandard
: Form the core of fleetssupport
: Accompaniesstandard
enemies
-
Behavior
biomech
: Has hive mind, eats asteroidshasspecials
: Will have special abilitiesjumpmaster
: (player
only) Has reduced jump cooldown and the combat jumpwhalehater
: Gets distracted with hunting whaleswhalelover
: Will attack anyone who shoots whales
Some additional notes:
- Every faction must have at least one stance key, and every
enemy
must have exactly one fleet organization key. - There must be at least one faction with the
player
stance and at least one with theenemy
stance. - The
whalehater
andwhalelover
keys are mutually exclusive. - At least one faction must have the
biomech
key, and at least one must have thehasspecials
key.
-
Stance
impulse_point
parent: <vessel>, count: 0-n
Represents an impulse point on the vessel. Only applicable to vessels from
enemy
factions.
Attributes
- x, y, z (float)
-
Coordinates for the impulse point's location on the 3D model.
internal_data
parent: <vessel>, count: 0-1
References an .snt file for ship internals. Only applicable for ships with the
player
broadType. See the Ship Internals
section for details about the .snt format.
Attributes
- file (string)
-
Path to the .snt file.
long_desc
parent: <vessel>, count: 1
An on-screen description of the vessel. Carats (^
) are converted to
newlines.
Attributes
- text (string)
-
The description to display.
maneuver_point
parent: <vessel>, count: 0-n
Represents an maneuver point on the vessel. Only applicable to vessels from
enemy
factions.
Attributes
- x, y, z (float)
-
Coordinates for the maneuver point's location on the 3D model.
performance
parent: <vessel>, count: 0-1
The vessel's performance specs. Not applicable to vessels with the base
broadType.
Attributes
- jumpefficiency (float, 0-n)
-
A multiplier on the jump drive's energy usage: less than 1.0 decreases energy usage, greater than 1.0 increases it.
- shipefficiency (float, 0-n)
-
A multiplier on the vessel's energy usage: less than 1.0 decreases energy usage, greater than 1.0 increases it.
- topspeed (float, 0-n)
-
The maximum speed of this ship.
- turnrate (float, 0-n)
-
How fast the ship turns. This number is in degrees per second divided by 2500.
- warpefficiency (float, 0-n)
-
A multiplier on the warp drive's energy usage: less than 1.0 decreases energy usage, greater than 1.0 increases it.
production
parent: <vessel>, count: 0-1
Only applicable to vessels with the base
broadType. Controls how quickly the
base produces weapons.
Attributes
- coeff (float, 0-n)
-
The base's production speed; higher numbers mean faster production. Artemis spawns bases until the side has a total production of 4.0, so if you make a base with more than 4.0 production, it will never spawn.
shields
parent: <vessel>, count: 1
Declares shield strength for the vessel.
Attributes
- back (integer, 0-n)
-
The maximum strength of the back shield. Bases always have
0
for this attribute, since they only have one shield. - front (integer, 0-n)
-
The maximum strength of the front shield.
- player (integer, 0-n)
-
Only applicable to vessels with the
fighter
broadType. This is the shield strength used when the single-seat craft is flown by a player (as opposed to an NPC).
taunt
parent: <hullRace>, count: 1-n
Declares a single taunt for a faction.
Attributes
- immunity (string)
-
The captain trait that makes them immune to this taunt.
- text (string)
-
The taunt itself.
torpedo_station_port
parent: <vessel>, count: 0-n
Torpedo ports for friendly bases. Only applicable for vessels with the base
broadType belonging to a faction with the friendly
key.
Attributes
- cycletime (integer, 0-n)
-
The time (in seconds) this port requires to cool down between shots.
- damage (integer, 0-n)
-
How much damage is inflicted per shot by this port.
- range (integer, 0-n)
-
The distance to the enemy at which this port will start firing torpedoes.
- x, y, z (float)
-
Coordinates for the drone port's location on the 3D model.
torpedo_storage
parent: <vessel>, count: 0,5
How many of each torpedo type can be stored. Only applicable to vessels with the
player
broadType.
Attributes
- amount (integer, 0-n)
-
The maximum number of torpedoes of this type that the vessel can store.
- type (Ordnance type)
-
What type of ordnance is being declared.
torpedo_tube
parent: <vessel>, count: 0-6
Declares the locations of torpedo tubes. Only applicable for vessels with the player
broadType.
Attributes
- cycletime (integer, 0-n)
-
The time (in seconds) this port requires to cool down between shots.
- range (integer, 0-n)
-
The maximum range of torpedoes fired by this port.
- x, y, z (float)
-
Coordinates for the drone port's location on the 3D model.
vessel
parent: <vessel_data>, count: 0-n
The parent tag for each vessel.
Attributes
- broadType (string)
-
A space-delimite list of attributes for this vessel. There are three categories of broadTypes:
-
Vessel class
base
: Immovable vessels that can resupply other vesselscarrier
: Can launch single-seat craftfighter
: Single-seat craft launched from carrierslarge
: Large non-player vesselsmedium
: Medium non-player vesselsplayer
: Vessels which players can controlsmall
: Small non-player vessels
-
Friendly type
cargo
: Has no weaponsluxury
: Has no weaponsscience
: Has no weaponstransport
: Has no weaponswarship
: Has weapons and can assist players in combat
-
Biomech traits
anomalyeater
: Eats anomaliesasteroideater
: Eats asteroidssentient
: Can respond to hails and calm the tribe
Additional notes:
- Some broadTypes are mutually exclusive:
base
and all other broadTypes exceptcarrier
;carrier
andfighter
;small
,medium
,large
, andfighter
. - The friendly type broadTypes can only be used by vessels belonging to
factions with the
friendly
key. - The
anomalyeater
,asteroideater
andsentient
broadTypes are only applicable to vessels belonging to a faction with thebiomech
key.
-
Vessel class
- classname (string)
-
The name of the vessel type, as it appears in science scans.
- side (integer, 0-n)
-
The faction to which the ship belongs, corresponding to the
<hullRace ID>
attribute. - uniqueID (integer, 0-n)
-
An ID assigned to this vessel, referred to as the
hullID
in mission scripts. Player ships must start at 0 and increase sequentially, others can use whatever ID they like.
vessel_data
parent: none, count: 1
The root tag for the vesselData.xml
file.
Attributes
- version (string)
-
The version of the
vesselData.xml
schema used.
Ship Internals
The layout of system nodes in a vessel is stored in an .snt file referenced by the vessel's entry in vesselData.xml. This section documents the file format used by these files.
A vessel's internal system grid is laid out in a 5 × 5 × 10 matrix: X (port to starboard), Y (dorsal to ventral), then Z (fore to aft). An .snt file contains 250 blocks of data, with each block representing one node in the system grid. The nodes are iterated first in the X axis, then Y, then Z. So the first ten nodes are (0,0,0) through (0,0,9), followed by (0,1,0) through (0,1,9), etc.
Each block is 32 bytes long. The first 12 bytes contain the node's position in the vessel's 3D coordinate system. (This is separate from its system grid coordinates.) The coordinates are stored as three floats: X, Y, then Z.
Next is an int value which describes what kind of node it is. A value from 0 to 7 indicates that the node contains vital equipment for one of the ship systems; you can tell which system by looking up the corresponding value in the ship system enumeration. A value of -1 indicates a hallway; it contains no ship systems but is still accessible to DAMCON teams. A value of -2 indicates an empty node; it contains no ship systems and is not accessible to DAMCON teams. This is typically for nodes that would fall outside the vessel's hull.
The remaining 16 bytes in the block appear to be reserved for future use.
Known Implementations
The following table provides links to known implementations of the protocols described in this document (other than the official Artemis software). These implementations are in various states of completion and may or may not be suitable for your purposes. See their corresponding sites for information about each project's current status.
Name | Language | License | GitHub status | |
---|---|---|---|---|
Artemis Bridge Tools | C++ | closed source | n/a | |
node-asbs-lib | JavaScript | "Beer-ware" | ||
huin/artemis | Go | BSD 2-Clause "Simplified" | ||
IAN | Java | MIT | ||
libdiana | Python | MIT | ||
parser.pl | Perl | none | n/a |