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 |
!note>
-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) |