Main Page


My Games

My Projects

My Music

My Art

My Literature
- Technical Articles
- Poems
- Definitions
- Quotes
- Language Problems
- Stories
- Documentation
- | - Furcadia Server Protocol
- | - | - Game Server
- | - | - File Server

Links

-About This Document-


(NOTE: 2007 april - connect, movement and color codes here are out of date due to the new protocol. Hopefully I'll have time to update this page soon, for the new protocol.)

This page is intended to be a referance of all known server commands (both those sent to the server, and those recieved by the server). Most of this information is already out there, but it seems to be spread randomly in tiny pieces. This is an attempt to consolidate as much as possible into one spot. This is primarily being done to aid in my work on a second attempt at a 3d furcadia client: Furc3D2. This is written with C/C++ in mind for the windows platform, but most of it should be applicable to any programming or scripting language.

I won't make any guarentees about the accuracy of this information; most of it is from stuff I learned years ago when I ran the mail bot Mailbox, or from things I've parsed and figured out recently. I plan to regularly update this as I have time to and as I figure out new commands. If you find something wrong, I can be contacted via AIM at TrekGate.

Last Updated: 2005 June 9




-General Information-


Server Communication

The furcadia server communacates completely through text. There are no binary data transfers involved. The server expects all commands sent to it to end in a line break (numeric value 10, or '\n' on win32). Similarly, every command the server sends will end in a line break. One thing to watch out for is sometimes you will recieve more than 1 command (each ending in a line break) in a single socket read.

Most commands received from the server begin with a single character that tells what type of command it is, followed by the rest of the data associated with the command. Commands sent to the server vary in their format.

Logging into furcadia is done with a succession of 3 commands: connect, desc, and color. They should be performed in that order first thing after connecting to the server.

Special Text Encoding

The primary furcadia client performs some filtering on the text that it displays. All '|' characters (shift + \) are interpreted a space; all spaces inside a player's name are '|' characters. There are also a set of special emoticon characters the primary furcadia client uses; these are represented as a 3-character piece of data beginning with a '#' 'S' and followed by a character between 'A' and 'P'. For example, the simley face one is #SA. I'll leave it up to you to see which letter maps to which emoticon; you can just type #SA in the primary furcadia client and it should appear in your typing.

Numeric Data Encoding

Much of the data used by the server/client are "encoded" into ascii values. This is done by taking whatever number needs communicated and adding 32 to it, which effectively puts all the values into the range of typable characters. So for example if the server needed to communicate the number 0, it would send ascii value 32+0=32 which is a space. If it needed to communicate the number 1, it would send ascii value 32+1=33 which is the '!' character. Values up to 94 can be sent in this way. A few pieces of data occupy 2 bytes; for these, the first byte's non-encoded value (ei. if byte is '!' value is 1) is multiplied by 95 and added the the non-encoded value of the second byte. For example, the 2 byte data string !# would represent the value 98.




-TO server commands-


connect
This command is used to login to the furcadia server, it should be the first thing sent to the server after connecting.
use: connect Name Password
where Name is the character name to login with, and Password is the character's password. You cannot use this command to create a new character.
Note: This is optionally followed by some sort of code that the server interprets and sends back. I believe this is used to prevent the normal client from running on any other server.

quit
Tells server to disconnect.

desc
This command is used to set your characters description. It can be used at any time.
use: desc My Description Goes here.
< br> color
This command sets the color, species, and gender for your character. The change may not take effect until you change maps.
use: color Data
where Data is an ascii encoded 13 byte string as follows (going left to right):
(see "color" in the "constant values" section of this document)
byte 0: fur color
byte 1: markings color
byte 2: hair color
byte 3: eye color
byte 4: badge color
byte 5: vest color
byte 6: bracer color
byte 7: cape color
byte 8: boot color
byte 9: pants color
byte 10: gender
byte 11: species
byte 12: (unused, old furc marking style?)

m (move)
This moves or rotates your character.
use: m X
where X is one of the following:
9: move north (up-right)
7: move west (up-left)
3: move east (down-right)
1: move south (down-left)
<: rotate counterclockwise
>: rotate clockwise

get
Picks up or sets down an item.

use
Uses your current item.

sit, stand, liedown
Makes your character sit down, stand up, or lay down.

lie
Cycles your character between laying down, sitting, and standing up

wings
Toggles your characters wings on or off (if you have them).

l (look)
Gets the desctription of a furre at a specific location (anywhere on the map).
use: l XXYY
Where XX and YY are 2 bytes each, representing the x and y location of the tile to look at.

vascodagama
This is sent to inform the server that the client is ready to enter a map. It is sent everytime the player changes maps, but the server seems to completely ignore it on the main maps. It's only use appears to be in dreams. After entering a dream, the server will place the character into a sort of "suspended" state. The client would then download the dream, and send this command when it was finished. This command causes the server to "unsuspend" the character and to place them at the starting location in the dream.




-FROM server commands-


Message 8: '('
Any line beginning with the character '(' indicates text that thats intended to be displayed to the user. All the data following the '(' is a plain text message. Format:
(Trek waves.
is intended to be displayed to the user as:
Trek waves.

Message 15: '/'
This indicates that a furre has moved. Note that it is also possible to move without changing position by moving into a solid object. It is followed by 20 bytes of data in the following format:
/CCCCCCCCCCHHIIFFJJKK
where CCCCCCCCCC is the color of the furre:
(see "color" in the "constant values" section of this document)
byte 0: fur color
byte 1: markings color
byte 2: hair color
byte 3: eye color
byte 4: badge color
byte 5: vest color
byte 6: bracer color
byte 7: cape color
byte 8: boot color
byte 9: pants color
where HH,II is the new position and JJ,KK is the old position:
(see section "Numeric Data Encoding" on 2 byte values)
where FF is the index of the animation frame to display, encoded as:
(see "animation offets" in the "constant values" section of this document)
index = SPECIAL + SPECIES + POSITION + DIRECTION


Message 17: '1'
Tells the client that a floor has been changed on the map. Format:
>XXYYOO
XX,YY is the map position of the floor, OO is the new floor number

Message 22,23,24: '6', '7', '8'
These are somehow related to scripts running on the map... not tried to figure these out yet though.

Message 28: '<'
This indicates that either a furre should be displayed for the first time or that an existing furre has changed their direction, sitting state, or avatar state (such as wings). It is followed by 16 bytes of data in the following format:
<CCCCCCCCCCHHIIFF
where CCCCCCCCCC is the color of the furre:
(see Message 15 for 10 byte CCCCCCCCCC meaning)
where HH,II is the x,y position of the furre:
(see section "Numeric Data Encoding" on 2 byte values)
where FF is the animation frame, gender, and species encoded as follows:
If frame value is 0, furre should dissapear.
(see Message 15 for FF meaning)

Message 29: ';'
Tells the client to load a specific map. Format:
;meovanni.map

Message 30: '>'
Tells the client that an item has been placed at a specific location. Format:
>XXYYOO
XX,YY is the map position of the item, OO is the item number
Also, there may be many sets of XXYYOO one right after another, in a single > command.

Message 32: '@'
This usually appears as a response to the current player moving. It tells where the client's view should be centered. There are 2 variations of it:
Format 0:
@XXYY
Format 1:
@XXYYAABB
where AA,BB is the old position and XX,YY is the new position.

Message 61: ']'
I'm not sure what this is for in many cases, but it mostly related to the client's graphical interface. It is followed by a "type" parameter, which is then followed by other data thats specific to that type. It's as follows:
]TX
Where T is 1 byte for the type of control message.
X is present only for some types, and it's length depends on it's type.

Known values of T:

67 ('c'): Controls which graphics file is displayed for a certain part of the UI.
It is followed by 1 byte, which might specify which portion of the UI is changed, but I'm not sure. After that byte, the rest of the data is a string for the filename to use (from the patches directory).

41 ('s'): Add a dream portal. Format for the data of this message is:
XXYY??I D
Where XX,YY is the position to place the dream. ?? is some sort of id or sub-type. After that is 2 strings seperated by a space, I is a string for the title of the dream, D is a string for a short description of the dream.

42 ('t'): Remove a dream portal. Format of data is: XXYY
Where XX,YY is the position of the dream to remove.
Something else I noticed, is this is usually followed by a (set item at XX,YY to 0) command, which leads me to believe that furc's normal client treats dreams on the map as items.

81 ('q'): This is related to entering a dream.
It tells the client the ID of the dream to download from the file server. It's followed by a space, then an 11 byte piece of data, then a space, and a 9 byte piece of data. The 9 byte string appears to be identical to the 11 byte string only without the leading td
For Example:
]q td2316690942 2316690942

92 ('|'): I believe this tells the client to stop displaying the previous map, and possibly to display a loading screen. Not certain on this though.




-Constant Values-


color:
These values are encoded into ascii (see section "Numeric Data Encoding")
badge:
0=Blood Red, 1=Courage Red, 2=Merry Red, 3=Ember Orange, 4=Hearty Brown,
5=Burnt Orange, 6=Busy Orange, 7=August Orange, 8=Noble Brown, 9=Mahogany,
10=Clever Maize, 11=Pure Gold, 12=Moon Yellow, 13=Sun Yellow, 14=Tan,
15=Woodland Green, 16=Friendly Green, 17=Lucky Green, 18=Travelers Green, 19=Aquacyan,
20=Deepsea Blue, 21=Proud Blue, 22=Lightsky Blue, 23=Syndira Blue, 24=Straight Blue,
25=Royal Purple, 26=Lonely Orchid, 27=Spiritual Purple, 28=Mad Green, 29=Royal Blue,
30=Passion, 31=Bliss Red, 32=Blush Pink, 33=Twilight Sigh, 34=Dreamer Blue,
35=Shadow Gray, 36=Neutral Gray, 37=Tragic Gray, 38=Winter Gray, 39=Indigo
bracer/boots/cape/pants/vest:
0=Red, 1=Horse Brown, 2=Gray Brown, 3=Fox Orange, 4=Cream Brown,
5=Yellow, 6=Pea Green, 7=Grass Green, 8=Avocado, 9=Sea Blue,
10=Blue Gray, 11=Wolf Gray, 12=Arctic, 13=Violet Blue, 14=Spring Green,
15=Burgundy, 16=Green Yellow, 17=Light Chocolate, 18=Dark Chocolate, 19=Light Navy,
20=Dark Navy, 21=Light Dust, 22=Dark Dust, 23=Gray, 24=Black,
25=Light Mule, 26=Dark Mule, 27=Violet, 28=Royal Blue, 29=White
eyes:
0=Mahogany, 1=Tiger Orange, 2=Moon Yellow, 3=Warm Gold, 4=Pond Green,
5=Light Blue, 6=Sea Blue, 7=Storm Gray, 8=Dust, 9=China Blue,
10=Medium Blue, 11=Dark Blue, 12=Hazel, 13=Blue Green, 14=Royal Blue,
15=Light Brown, 16=Medium Brown, 17=Dark brown, 18=Black, 19=Albino Pink,
20=Mink Mauve, 21=Chocolate, 22=Silver, 23=Amethyst, 24=Ember Orange,
25=Sunshine, 26=Mad Green, 27=Gloomy Gray, 28=Minty Green, 29=Navy Blue
fur/markings:
0=Cat Gray, 1=Arctic, 2=Black, 3=Mule Tan, 4=Dust,
5=Chocolate, 6=Lavendar, 7=Wolf Gray, 8=Fox Orange, 9=Horse Brown,
10=Tawny, 11=Mocha, 12=Ruddy, 13=Cream, 14=Yellow,
15=Grass Green, 16=Burgundy, 17=Pinewood, 18=Sea Blue, 19=Violet,
20=Red, 21=White, 22=Navy, 23=Cloudy Gray, 24=Royal Blue
hair
(same as badge + more)
40=Black, 41=Cloudy Gray, 42=White, 43=Pinewood, 44=Green Yellow
species (color command only)
0=Rodent, 1=Equine, 2=Feline, 3=Canine, 4=Musteline, 5=Lapine
gender (color command only)
0=Female, 1=Male, 2=Unspecified

animation frame:
special:
0=normal
125??(need better sample data)=old-wings
500=tri-wings
250??(need better sample data)=pheonix
250??(need better sample data)=dragon
species
0=rodent
20=equine
40=feline
60=canine
80=mustaline
100=lapine
position
1=sitting
2=stepping right paw forward
3=standing
4=stepping left paw forward
17=laying down
direction (for all positions except laying down)
south=0
east=4
west=8
north=12
direction (for laying down)
south=0
east=1
north=2
west=3



(written by Trek)


(c)2012 Luke Lenhart   -  97238 total visitors