TERA protocol data. Reference parser can be found at tera-data-parser.
map
protocol.<shareRevision>.map
- Maps packet names to numerical opcodes (randomized by BHS each patch).sysmsg.<majorPatchVersion>.map
- Maps system messages to IDs.
protocol
<packetName>.<version>.def
- Defines a packet structure.
A simple enum format. Each line may contain a single key-value pair seperated by space(s), tab(s) and/or =
. Additionally supports comments preceded by #
.
# This is a comment
ONE = 1
TWO = 2
THREE = 3 # This is another comment
Each line may contain the following, in order:
- A series of
-
specifying nested property depth. - A data type (listed below), with optional
<subType>
and/or[arrayLength]
.subType
defaults toobject
if nested fields are specified. - A field name.
^addedVersion[-removedVersion]
specifying which game versions this field exists in.
A #
and anything after it on the line are treated as comments and should be ignored when parsing.
array someArray # Has nested fields, making this equivalent to array<object>
- int32 value1
- int32 value2
- array nestedArray
- - int32 value1
- - int32 value2
array<int32> int32Array # Sub-types
array<array<int32[2]>> exampleArray # Nested sub-types
uint64 gameId # Your character
byte[5] unk # 5 bytes of unknown data
bool oldBool ^0-80 # Removed in patch 80
bool newBool ^76-78 # Added in patch 76, removed in patch 78
bool newBool ^80 # Added again in patch 80
bool
- 1-byte boolean (0 = false, 1 = true).byte
- Unsigned 1-byte integer.*int16
- 2-byte signed integer. Common uses: Player statsuint16
- 2-byte unsigned integer.int32
- 4-byte signed integer.uint32
- 4-byte unsigned integer. Common uses: UniqueIDint64
- 8-byte signed integer. Common uses: Money, Dateuint64
- 8-byte unsigned integer. Common uses: GameIDfloat
- 4-byte floating point. Common uses: Scale, Speeddouble
- 8-byte floating point.*angle
- 2-byte rotation (usually represented as radians). Common uses: Directionvec3
- 12-byte vector of 3float
s. Common uses: Positionvec3fa
- 12-byte vector of 3angle
s inefficiently stored as integerfloat
s. Common uses: Cosmetic rotationskillid
- 8-byte (patch >=74) or 4-byte (patch <74) skill ID.customize
- 8-byte array of character customization fields.
* Rarely used.
string
- Unicode string.array
- A forward-linked list.bytes
- An array of bytes.
object
- Lets you group other data in its own namespace.
- All data types are little-endian.
- All packets start with
uint16 size
,uint16 packetID
. string
:uint16 offset
directly after header, which points to a 0-terminated UCS2 string.bytes
:uint16 offset
,uint16 count
directly after header, which points to an array of bytes.array
:uint16 count
,uint16 offset
directly after the header, which points to the first<node>
.-
<node>
:uint16 offset
,uint16 nextOffset
, followed by data.
When submitting changes, contributors must leave older versions untouched unless they are trivially backwards compatible. Instead, submit the changed definition as a new file with the version number incremented.