Dragon's Eye Productions, Inc. reserves the right to change any practices, protocols, or formats described in this document without prior notice.
This document specifies the current Avatar Movement protocol on Furcadia, as at Update 027. This document updates and supersedes the file "023_new_movement.pdf". Distribution of this document is unlimited.
Update 023 introduced a new movement scheme, but since then, additional fields have been added to the movement-related commands, which need to be documented.
The movement commands are used both for the player and all other avatars they see on the screen. The client is responsible for tracking (if it needs to) which of the avatars is the player.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC2119.
'<' + user id + x + y + shape number + name + color code + flag + linefeed
The Spawn Avatar command is used to send all necessary metadata about an Avatar, which the client can then use to display that Avatar when subsequent movement commands are received. The command is sent when an avatar first appears in the dream, and then periodically thereafter. On entry to a dream, this command is sent to the player once for each Avatar in the dream, including themselves.
The Spawn Avatar command SHOULD always sent to the client before any other packets related to movement, for that User ID.
If a Spawn Avatar command has not been received for a User ID referred to by another command, the client MAY query for a resend of the packet by sending the following command to the server:
rev
Name | Type | Size (bytes) | Description |
---|---|---|---|
Command Id | CHAR | 1 | Always '<' (0x3c) |
User ID | BASE220 INT | 4 | Unique User ID |
X | BASE220 INT | 2 | Map position X |
Y | BASE220 INT | 2 | Map position Y |
Shape Number | BASE220 INT | 2 | Avatar shape number |
Name | BASE220 STRING | 2+ | Character name |
Color Code | COLORCODE | 11-30 | Avatar color code (short form) |
Flag | BASE220 INT | 1 | Zero, or any combination of the following flags: CHAR_FLAG_HAS_PROFILE = 1 CHAR_FLAG_SET_VISIBLE = 2 CHAR_FLAG_NEW_AVATAR = 4 |
AFK Greyness | BASE220 INT | 4 | AFK time in seconds |
Scale | BASE220 INT | 1 | Display scale of the avatar, as a percentage |
Clients MUST handle arbitrary-length character names, from 1 to 220 characters.
Clients SHOULD handle name lengths between 2 and 64 characters without modification.
Clients MAY locally truncate and/or pad names outside that range.
Clients MAY handle zero and negative (-1 to -35) lengths.
Clients SHOULD NOT truncate within multi-byte characters.
Clients MUST NOT use truncated/padded names in any communication with the server.
Clients MAY use this command to maintain a locally cached version of the Ctrl-W "Who: list.
The color code is currently always an old-style ('t') colorcode, in short form, eleven bytes long, lacking the extra bytes for gender, species, and special information. This information has been superseded by the Shape Number.
Clients SHOULD also implement parsing of the proposed new colorcode format.
Clients MUST gracefully handle Spawn Avatar commands sent with the new colorcode format, even if they cannot parse the colors.
AFK Greyness is new since 023 and has caused some confusion. To prevent this:
The AFK Greyness MUST NOT be assumed to represent seconds; it is just an approximate tick counter, which can jump up or down unexpectedly.
The AFK Greyness SHOULD NOT be displayed to the user in numeric form, as it can cause some unpleasant social problems. This is a technical-requirements SHOULD NOT, but it is best for distributed third party apps to consider it a ToS-requirements MUST NOT thing. As with all good things, abuse of this field may result in it being disabled.
This field SHOULD be displayed to the user as an incremental greying out of the Avatar.
Scale is new in 027.
The client MUST handle scale percentages from 10 to 200.
The client SHOULD handle scale percentages from 1 to 220.
The client MAY handle scale percentages of 0, and negative values down to -35, displaying these however they wish. It's RECOMMENDED in this case to display them flipped, and scaled by 5 times the negative amount (so -20 would be flipped at normal scale), but there is currently no official standard for this.
The scale SHOULD be displayed to the user as a change in size of the Avatar.
CHAR_FLAG_HAS_PROFILE is not currently implemented serverside. Once character profiles are implemented, this flag can tell the context menu whether to show a "view profile" item.
CHAR_FLAG_NEW_AVATAR states that the server believes this player has just (re)connected. While currently implemented by the server, this is not used by the the windows client. This flag may not necessarily be set in the very first Spawn Avatar command for that Avatar, and may be sent more than once - it is typically set in response to the 'khan' command, but may also be set by use of the 'color' command.
CHAR_FLAG_SET_VISIBLE is used to indicate that the character should be set invisible. This supersedes the old method, which used a negative Shape Number. Both methods are currently implemented in the Windows client, but not used by the server.
Clients SHOULD implement the flag.
Clients MAY implement the old form in addition.
'/' + user id + x + y + shape + linefeed
This command performs an animated move from the current position of the Avatar (as the client displays it) to the target location, in a straight line. The duration of the move is not specified by this protocol, but should be reasonably fast, but non-zero. The Windows client takes as long as a normal step from one square to another, whatever the distance.
Animation SHOULD include both the walk animation, and any fox file animation using kitterspeak.
Name | Type | Size (bytes) | Description |
---|---|---|---|
Command Id | CHAR | 1 | Always '/' (0x2f) |
User ID | BASE220 INT | 4 | Unique User ID |
X | BASE220 INT | 2 | Map position X to move to |
Y | BASE220 INT | 2 | Map position Y to move to |
Shape Number | BASE220 INT | 2 | Avatar target shape number |
This command performs an instantaneous move from the current position of the Avatar (as the client displays it) to the target location.
'A' + user id + x + y + shape + linefeed
Name | Type | Size (bytes) | Description |
---|---|---|---|
Command Id | CHAR | 1 | Always '/' (0x2f) |
User ID | BASE220 INT | 4 | Unique User ID |
X | BASE220 INT | 2 | New map position X |
Y | BASE220 INT | 2 | New map position Y |
Shape Number | BASE220 INT | 2 | Avatar target shape number |
'B' + user id + shape + color code + linefeed
This command is sent if an avatar's colors change. It can also be sent in situations where the colors have not changed, to the client MUST handle 'changing' to the same color.
Name | Type | Size (bytes) | Description |
---|---|---|---|
Command Id | CHAR | 1 | Always 'B' (0x42) |
User ID | BASE220 INT | 4 | Unique User ID |
Shape Number | BASE220 INT | 2 | Avatar shape number |
Color Code | COLORCODE | 11-30 | Avatar color code |
The color code is currently always an old-style ('t') colorcode, in short form, eleven bytes long, lacking the extra bytes for gender, species, and special information. This information has been superseded by the Shape Number.
Clients SHOULD also implement parsing of the proposed new colorcode format.
Clients MUST gracefully handle Spawn Avatar commands sent with the new colorcode format, even if they cannot parse the colors.
'C' + user id + x + y + linefeed
This command is used to enforce visibility outside the viewable screen area. This helps to prevent ghosting. If an Avatar moves out of visible range, and the client no longer receives immediate updates on its location, then if the player moved to follow that Avatar, they would see a 'ghost' of it displayed in the last location that they had received an update for, even if they had since moved on. Hence, this command makes ghosts invisible when they walk off the screen.
This command is possibly also used to handle visibility within regions.
Name | Type | Size (bytes) | Description |
---|---|---|---|
Command Id | CHAR | 1 | Always 'C' (0x43) |
User ID | BASE220 INT | 4 | Unique User ID |
X | BASE220 INT | 2 | New map position X |
Y | BASE220 INT | 2 | New map position Y |
')' + user id + linefeed
This command is used to let the client know that the avatar has disconnected, gone to another dream, etc. .
Name | Type | Size (bytes) | Description |
---|---|---|---|
Command Id | CHAR | 1 | Always ')' (0x29) |
User ID | BASE220 INT | 4 | Unique User ID |
Clients MAY use this command to remove the named entry from a cached version of the Ctrl-W "Who" list.
© Dragon's Eye Productions, Inc. 2012.