Dragon's Eye Productions, Inc. reserves the right to change any practices, protocols, or formats described in this document without prior notice.


Update 027 Avatar Movement

Status of this Document

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.

Introduction

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.

Spawn Avatar

'<' + 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

NameTypeSize (bytes)Description
Command IdCHAR1Always '<' (0x3c)
User IDBASE220 INT4Unique User ID
XBASE220 INT2Map position X
YBASE220 INT2Map position Y
Shape NumberBASE220 INT2Avatar shape number
NameBASE220 STRING2+Character name
Color CodeCOLORCODE11-30Avatar color code (short form)
FlagBASE220 INT1Zero, or any combination of the following flags:
CHAR_FLAG_HAS_PROFILE = 1
CHAR_FLAG_SET_VISIBLE = 2
CHAR_FLAG_NEW_AVATAR = 4
AFK GreynessBASE220 INT4AFK time in seconds
ScaleBASE220 INT1Display 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.

Animated Move

'/' + 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.

NameTypeSize (bytes)Description
Command IdCHAR1Always '/' (0x2f)
User IDBASE220 INT4Unique User ID
XBASE220 INT2Map position X to move to
YBASE220 INT2Map position Y to move to
Shape NumberBASE220 INT2Avatar target shape number

Move Avatar

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

NameTypeSize (bytes)Description
Command IdCHAR1Always '/' (0x2f)
User IDBASE220 INT4Unique User ID
XBASE220 INT2New map position X
YBASE220 INT2New map position Y
Shape NumberBASE220 INT2Avatar target shape number

Update Color Code

'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.

NameTypeSize (bytes)Description
Command IdCHAR1Always 'B' (0x42)
User IDBASE220 INT4Unique User ID
Shape NumberBASE220 INT2Avatar shape number
Color CodeCOLORCODE11-30Avatar 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.

Hide Avatar

'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.

NameTypeSize (bytes)Description
Command IdCHAR1Always 'C' (0x43)
User IDBASE220 INT4Unique User ID
XBASE220 INT2New map position X
YBASE220 INT2New map position Y

Remove Avatar

')' + user id + linefeed

This command is used to let the client know that the avatar has disconnected, gone to another dream, etc. .

NameTypeSize (bytes)Description
Command IdCHAR1Always ')' (0x29)
User IDBASE220 INT4Unique 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.