From 58c42607cab9097861ac7c678d555089a27d7b7f Mon Sep 17 00:00:00 2001 From: Kayne Ruse Date: Wed, 11 Mar 2015 19:49:06 +1100 Subject: [PATCH] Working on defining the network packet formats --- Home.md | 8 ++- networking-formats.md | 152 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 158 insertions(+), 2 deletions(-) create mode 100644 networking-formats.md diff --git a/Home.md b/Home.md index 084bb30..ca5fee0 100644 --- a/Home.md +++ b/Home.md @@ -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 \ No newline at end of file diff --git a/networking-formats.md b/networking-formats.md new file mode 100644 index 0000000..bf41dde --- /dev/null +++ b/networking-formats.md @@ -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*** \ No newline at end of file