Working on defining the network packet formats

Kayne Ruse
2015-03-11 19:49:06 +11:00
parent 4d6ee70794
commit 58c42607ca
2 changed files with 158 additions and 2 deletions
+6 -2
@@ -2,7 +2,9 @@
# Elevator Pitch
Tortuga is a 2D multiplayer JRPG featuring permadeath, with an emphasis on multiplayer cooperation, exploration and customization. The game runs on customizable public and private servers.
Tortuga is a 2D multiplayer JRPG featuring permadeath, with an emphasis on
multiplayer cooperation, exploration and customization. The game runs on
customizable public and private servers.
# Required Upkeep
@@ -14,4 +16,6 @@ Tortuga is a 2D multiplayer JRPG featuring permadeath, with an emphasis on multi
# Contact
You can contact me at kayneruse@gmail.com, or follow me at http://kr-studios.tumblr.com/
You can contact me at kayneruse@gmail.com, or follow me @KRGameStudios.
You can also follow development or donate at krgamestudios.com
+152
@@ -0,0 +1,152 @@
This page is supposed to define the members of SerialPacketType, as of network
version 20150304, last written on 11/3/2015.
There are currently 6 packet formats used by the server and client. These
formats are:
* ServerPacket
* ClientPacket
* RegionPacket
* CharacterPacket
* MonsterPacket
* TextPacket
Each of these packet formats inherit from SerialPacketBase, which is detailed
below. Each packet comes with a pair of functions used to serialize and
deserialize that specific format from the network buffer, regardless of what is
actually contained within. In certain cases, some members of the packets don't
need to be filled out for the programs to execute correctly; the purpose of
this document is to define what members are required by what message type.
There are also a number of internal-use only systems, such as the union
MaxPacket, the FORMAT_* tags, etc. These will be referenced as needed.
## SerialPacketType
This is a large enumeration of integers containing all "message types" used by
Tortuga's networking systems. The purpose of the packet as a whole is defined
by the element selected; all programs designed to connect to Tortuga's network
must use these values for the protocols.
There are also a few internal-use only elements such as:
* NONE
* LAST
* FORMAT_*
* FORMAT_END_*
### SerialPacketType::NONE
NONE has zero as a default value, and is used to signal when something has gone
wrong internally. It is not currently in use, but it is always the element with
the lowest bound.
### SerialPacketType::LAST
LAST, as it's name implies, is designated as the last element of the
enumeration's range. It's value will vary from version to version, but it's
position relative to the other tags is guaranteed.
### FORMAT_* and FORMAT_END_*
This is a relatively new addition, and is used to divide the tags by their
intended format; each tag name ends according to said format. FORMAT_* is the
lower bound, while FORMAT_END_* is the upper bound. No two format bounds
overlap. These are not internal-only, but they are not currently used outside
of the networking system's internals.
## SerialPacketBase
This structure is the base class of all packet structures used by the programs.
It has two members:
* SerialPacketType type
* IPaddress srcAddress
type is defined as the first four bytes of any message. srcAddress is set by
the networking system, to signal where the message came from. All other packets
have these members as standard. For general use, this structure is typedef'd as
"SerialPacket".
### PACKET_STRING_SIZE
For compatability, the constant integer PACKET_STRING_SIZE is defined as 100.
This is used to define a buffer for all strings sent over the network.
## ServerPacket
This structure is used for identifying game servers. In addition to it's
inherited members, it has:
* name
* playerCount
* version
name is a string, PACKET_STRING_SIZE characters long, and is the public name of
the server. playerCount is simply the number of players on said server, and
version is the network version being used by that server. If the network
version of a server doesn't match a client, then the two programs will refuse
to connect to each other.
## ClientPacket
This structure is used for identifying game clients. In addition to it's
inherited members, it has:
* clientIndex
* accountIndex
* username
clientIndex and accountIndex are integers, defining the server's internal index
for the player's client and account respectfully. username is a string holding
the player's username. Please note that the username and character handles are
two destinct things.
## RegionPacket
This structure is used for asking for and sending map data. In addition to it's
inherited members, it has:
* roomIndex
* x
* y
* region data
roomIndex, x and y are integers representing the location of the map data being
sent. Region data varies by context, but in the network, it is the region's
tile data followed by the solid (collision) data. In the programs proper, it is
simply a pointer to a stored Region object; as it is simply easier to serialize
these directly.
In addition to these members, some constants are defined:
* REGION_TILE_FOOTPRINT
* REGION_SOLID_FOOTPRINT
* REGION_METADATA_FOOTPRINT
The first, REGION_TILE_FOOTPRINT, defines the amount of space needed in the
network buffer to send all tile data in a single region. REGION_SOLID_FOOTPRINT
represents how much space is needed for conveying the collision data in that
same region; it should be noted that the collision data is represented
internally as a bit field, therefore is considerablly smaller than the tiles.
Finally, REGION_METADATA_FOOTPRINT simply represents how much space is needed
to store the region's metadata. As RegionPacket is currently the largest format
in use, PACKET_BUFFER_SIZE is defined as the sum of these three values, plus
the size of SerialPacketType.
## CharacterPacket
This structure is used for identifying and manipulating the player characters
over the game's network. In addition to it's inherited members, it has:
* characterIndex
* handle
* avatar
* accountIndex
* roomIndex
* origin
* motion
* bounds
***WIP***