Furcadia/Specifications/Main
From FurcadiaWiki
Contents |
Thanks to...
- Morpius -- most of everything
- Klass -- ]t and onln
- Cluracan -- chaos tables
- Dia Sapphire -- chdesc
- Hollyberry -- portrait, ]&, staffdream, jg, parental and ]!
- Copper Dragon -- animations and DS additions
- Kunnis -- rch file format
- Xee123 -- A,B,C,D additions Aug 2008
This text has been transcribed from furcadianprotocol.txt. Respective texts copyright © 2002 Morpius, Klass, Dia Sapphire, Hollyberry, Copper Dragon.
Introduction
All numbers are in the 2-byte Furcadian number format. Code for number conversion is at the end of the document under the GPL license. All X coordinates are half what is seen in Furcadia's dream editor and DragonSpeak.
- <foo> is a Furcadian Number
- [foo] is a string
- {foo} is a stringed number
Server to Client
The following lines can be potentially sent from the server to the client.
- Nope. -- Connection invalid.
- Invalid Name or password. -- Login invalid.
- Name already taken. Choose another. -- Name taken when registering.
- &&&&&&&&&&&&& -- Login successful.
- Dragonroar -- Play "brrrrwelcome."
- V[xxxx] -- Version of the protocol, where xxxx is a 4 digit number (including decimal).
- END -- End of welcome message, ready to log in.
- ]cc[background.pcx] -- Load background.pcx as the background of the client.
- ([Text] -- Display text in the text output window.
- ]#[ID] {type} [message] -- Pop up a messagebox of a specific type with specific message. ID is returned to the server with repq when confirmed.
Types: OK: 0 = Warning, 1 = Info, 2 = Error Ok/Cancel: 3 = Warning, 4 = Info, 5 = Error, 6 = Question Retry/Cancel: 7 = Warning, 8 = Info, 9 = Error Yes/No: 10 = Warning, 11 = Info, 12 = Error, 13 = Question Yes/No/Cancel: 14 = Warning, 15 = Info, 16 = Error, 17 = Question 18+ are assumed as ID 1 (Info with an "Ok" button)
- ]-#A[Specitag] -- Display a specitag. This is always sent before speech, actions, whispers, and shouts unless the user has a Beekin badge (see below).
- ]-#B[Badge] -- Same as above, but displays a beekin badge instead of the specitag. Badge is a one character Furcadian number, completing the 2 behind (i.e: #BK is a blue striped Mason badge)). Valid characters from A to n (33 to 78 in Furcadian number format).
- [[Text] -- Causes the client to quit with message popup "Text." (The client doesn't really disconnect.)
- ;[map.map] -- Load map.map.
- ]q {DreamID} {DreamID} -- Request for client to download dream from file server.
- ]r default -- Display the default patch.
- ]f[ColorCode][Gender][Species][Marking][Name] -- Display a portrait with the specified colors and name. ColorCode consists of ten single character Furcadian numbers. Gender/Species/Marking are each a single character Furcadian number.
- ]&{PortraitNumber} pp{PortraitNumber} -- Display an official portrait. Colors are remapped based upon "]f" string sent beforehand. First number is what the client records the port as in the cache, and the second number is which portrait to download from the fileserver (pp{PortraitNumber}).
- ]$[URL] -- Makes the client start a specific URL as if it were clicked.
- ]s<x><y>1 [Foo] [Bar] -- Displays text Foo at Furcadian numbers (x,y) with Bar in blue font below it. Used for displayed dream names.
- ]t<x><y> -- Clear dream text created by above.
- ]! -- Request to display warning of possible adult content.
- ]va<x><y><direction> -- Show dragon breath at (x,y) in specified direction.
- ]vb<x><y><direction> -- Show phoenix flames at (x,y) in specified direction.
- ~ -- Client will supress all output.
- = -- Client will refresh and draw all output after this. (These two commands are useful to stop flickering with lag.)
- ><x><y><ObjectNumber> -- Set ObjectNumber at (x,y). Use Furcadian number 0 (a space) to clear an object.
- 1<x><y><FloorNumber> -- Set FloorNumber at (x,y).
- 2<x><y><WallNumber> -- Set Wakk Number at (x,y).
- 0<startvar#><var[n].x><var[n].y><var[n+1].x>...!mL<emptyvars> -- Synchronize the DS variables to the client. (startvar# is probably a var that isn't 0 (2 digits), var[n] are values of variable numbers, offset by startvar# (3 digits each). emptyvars is an amount of unused variables left(??)).
- %<Object> -- Set Object at the figurine's feet.
- ^<Object> -- Set Object in the figurine's paws
- !<SoundNumber> -- Play SoundNumber.
- ]j<MusicNumber> -- Play MusicNumber.
- ]J{mapname} -- Name of the web-map for the current dream (Tab B, MAP button).
- <[ColorCode][x][y][Frame] -- Place furre at (x,y) with specified frame number.
Changed in 023:
SpawnAvatar = "prefix:const(<),userid:i220[4],x:i220[2],y:i220[2],frame:i220[2],name:s220,color,biology"
where: const(value) is the constant string value,
i220[length] is a length bytes long base 220 encoded integer,
s220 is a base 220 encoded string,
color is a color value, and
biology is gender, species and special.
see http://dev.furcadia.com/docs/ for more info
LlubNek 20:53, 16 August 2007 (MST)
- /[ColorCode][x][y][Frame]<x2><y2> -- Like above, except furre is animatedly moved from (x2,y2) to (x,y).
Changed in 023:
AnimatedMove = "prefix:const(/),userid:i220[4],x:i220[2],y:i220[2],frame:i220[2]"
SpawnAvatar must be sent before this command to set the furre's initial position.
The client should respond with ResendSpawnAvatar = "prefix:const(rev ),userid:i220[4]" if it hasn't received a SpawnAvatar for this user yet.
The furre is moved from their current position to (x, y) given by this command.
LlubNek 20:53, 16 August 2007 (MST)
- )<x><y> -- Removes furre at position.
Changed in 023: RemoveAvatar = "prefix:const(\)),userid:i220[4]" SpawnAvatar must be sent before this command. Removes the furre with the specified userid.
Added in 023: MoveAvatar = "prefix:const(A),userid:i220[4],x:i220[2],y:i220[2],frame:i220[2]" SpawnAvatar must be sent before this command. Moves the furre to location (x,y) and sets the furre's frame number to frame (without animation).
Added in 023: UpdateColorCode = "prefix:const(B),userid:i220[4],frame:i220[2],color,biology" SpawnAvatar must be sent before this command. Updates the furre's frame number and color
Also, all color codes have been changed to use the "t" type color encoding described at http://dev.furcadia.com/docs/new_color_code_format.pdf LlubNek 20:53, 16 August 2007 (MST)
- @<x><y> -- Centers screen on position.
- @<x><y><x2><y2> -- Moves screen from (x2,y2) to (x,y).
- ]marco {number} -- General purpose ping handshake.
- polon {number} -- General purpose pong handshake.
- ]g{cmd} -- Make the client execute a specific command.
- ]h{cmd} -- Make the client execute a specific command and shut down.
- ]w -- Furcadia version request.
- ]u -- Request rgate data code.
- ]a -- Request gate data code.
- ]x -- Make the client download and execute the Furcadia update.
- 6<x><y><x2><y2><lots of triplets> -- triplets being: <trigno><x><y> -- Execute a DS trigger that you caused. (x,y) is the "from" position and (x2,y2) is the "to" position of the triggering furre, and in the triplets (x,y) is the trigger location and trigno is the actual trigger in the DS file - if this was five, it'd be the fifth DS line down (not counting whitespace).
- 7<x><y><x2><y2><lots of triplets> -- DS someone else caused, same as above.
- 8<rndseed><argument> -- Addon for each 6/7 instruction. Consists of a 5-digit base95 random seed and 3-digit base95 argument for DS lines requiring it (5:314 for instance).
- ]%0[Name] -- Name is offline (response to user online request). -- This will return the username in the formatting the client supplied with the `onln command.
- ]%1[Name] -- Name is online (response to user online request). -- This will return the username the furre is actually registered as (i.e. capitalization correct).
- ]|[switch] -- Make the client flip the screen. Switch can be 0 or 1, representing off and on respectively.
- NEW CODES? Auguest 2008
- A[player_id 4][x 2][y 2][shape 2] Set player with player_id @ x,y to shape (All numbers in base220)
- B[player_id 4][x 2][y 2][colorcodes] Player with player_id arrived on map @ x,y (All numbers in base220, except color codes)
- C[player_id 4][x 2][y 2] Remove player with player_id @ x,y (All numbers in base220)
- D[player_id 4][x 2][y 2]..... Appears dragon speak related?
Client to Server, pre-login
The following lines are sent to the server by the client before it has successfully authenticated with the server.
- iamhere -- Tell the server to keep connection alive whilst colors are selected.
- create [Name] [Pass] :[E-mail] N [Y/N] - Create a character. No spaces allowed, so use a pipe for names with spaces. Choose Y or N for the last character. The client normally sends Y if your CreatedAlts registry key is less than four, placing you in the welcome map upon creation.
- connect [Name] [Pass] [Machine ID] -- Connect to server. You must login with a valid machine id once after creation and before a character may be used. The machine ID is a concatenation of the computer's IP address (IP=); calculations on each fixed volume's (Windows-assigned, arbitrary) serial number (H=, as many as the number of fixed volumes in the computer) converted to hexadecimal; the Microsoft CRT implementation of rand() seeded with _time64() encoded into a decimal string (R=); the sum of a calculation on each fixed volume's disk space encoded as a decimal string, concatenated with the number of fixed volumes at the end (D=); a calculation on a registry string created by the installer encoded as a decimal string (U=); another calculation/manipulation on a registry string created by the installer (T=, optional); the screen resolution (M=); the client version (V=); and the checksum of all previous fields (S=). This string is then scrambled using the standard scrambling algorithm.
- onlnprx -- Connect strictly for online checks (all commands except for `onln are ignored).
- desc [Hey] -- Set your description to [Hey]. Works both before and after login for all players.
- color [Colorcode][Gender][Species][Marking] -- Set your colors on login. Colorcode consists of ten single character Furcadian numbers. Gender/Species/Marking are each a single character Furcadian number. Any invalid characters supplied to the server become spaces (0 or null in Furcadian number format).
Client to Server, post-login (normal users)
The following lines are sent to the server by the client after it has successfully authenticated with the server, by normal users.
- "[Hey] -- Say [Hey].
- -[Hey] -- Shout [Hey].
- wh [Name] [Hey] -- Whisper [Hey] to [Name].
- :[Hey] -- Emote [Hey].
- wings -- Toggle through wings.
- dragon -- Toggle dragon.
- breath -- Dragon breath.
- phoenix -- Toggle phoenix.
- flame -- Phoenix flame.
- portrait -- Turn portrait off.
- portrait {slot} -- Activates a specific portrait slot.
- who -- Who's in the current dream.
- use -- Use object.
- get -- Get/drop object.
- lie -- Toggle between lying/sitting/standing.
- liedown -- Lie down.
- sit -- Sit.
- stand -- Stand.
- gostart -- Go to The Vinca.
- goback -- Go to your previous map (Vinca if none).
- goalleg -- Go to Allegria Island.
- gomap {MapID} -- Go to map, where MapID is a single base95 digit representing the tribble ID.
- gift-[item] [name] [amount GD/SD/CD|color]] %[message] -- Transfers a digo item to a specific name as a gift. The amount (optional) is used when giving dragonscales and color when you're giving a rose. % is optional and makes the gift anonymous. Message is also optional.
- give-[item] -- (See above).
- [item]gift -- (See above).
Items: classic-wings (classicwings for 3rd command!) butterfly-wings (butterflywings for 3rd command!) batwings triwings dragon gryffe phoenix rose (color = yellow red purple black white) scales (Syntax: gift-scales [name] [amount] GD|SD|CD %[message] - amount/%/message are optional) portrait Reference: http://furcadia.com/gifts/
- vascodagama -- Tell the server you're done downloading a dream/patch.
- < -- Rotate counterclockwise.
- > -- Rotate clockwise.
- onln [Name] -- User is online request, responses in above section.
- onlnprx -- Ignore every client command except for `onln (reconnect to reset).
- l <x><y> -- Look at a furre at (x,y) (each coordinate is a two character Furcadian number).
- m 1/3/7/9 -- Move in direction (ONE digit only).
- color [Colorcode][Gender][Species][Marking] -- Set your colors on login. Colorcode consists of ten single character Furcadian numbers. Gender/Species/Marking are each a single character Furcadian number. Any invalid characters supplied to the server become spaces (0 or null in Furcadian number format).
- chcol [Colorcode][Gender][Species][Marking] -- Silver Sponsor in-game color change.
- chdesc [Desc] -- Silver Sponsor in-game description change.
- desc [Hey] -- Sets your description to [Hey].
- Winver {Version} -- Windows version. 4.0 = Win95/NT 4.0 SP5, 4.10 = Win98/ME, 5.0 = Win2k, 5.1 = WinXP.
- version {ClientVersion} -- Client version number.
- marco {Number} -- Generic ping handshake.
- polon {Number} -- Generic pong handshake.
- rgate -- Request to upload a dream.
- tdgate {DreamID} -- Register a dream portral.
- parental -- Dream owner command used to enable warning of possible adult material on dream entry.
- wmap -- Go to the welcome dream
- quit -- Quit.
Client to Server (staff users)
Beekins, etc.
- bb -- Join a channel ("Beekin Badge" - old command)
- jg [Channel] -- Join the default or a specific channel
- boot [Name] [Reason] -- Boot a furre
- booty [Name] [Reason] -- Boot a furre(?)
- block [Name] {Hours To Block} [Reason] -- Block (ban) a furre
- isbeek [Name] -- Check Beekin status
- leave -- Go off duty
- report [Name] [Reason] -- Report on a furre
- rap [Name] -- View Rapsheet, wahtever that is
- onduty -- Check number of commands on duty
- unload [Dream Name] -- Unload dream specified
- (said command) url [Name] -- Send either the Guardian or Beekin URL to a furre
- c [Name] -- Claim a help request
- clear [Name] -- Clear help request from queue
- (said command) chat [Message] -- Talk in the current channel
- (said command) sendh [Name] [Reason] -- Send to help channel
- (said command) sendd [Name] [Reason] -- Send to mason channel
- (said command) sendg [Name] [Reason] -- Send to guardian channel
- (said command) sendw [Name] [Reason] -- Send to welcomer channel
- (said command) sendb [Name] [Reason] -- Send to the bugge hunter channel
- (said command) transh [Name] -- Transfer to help channel
- (said command) transd [Name] -- Transfer to dream channel
- (said command) transw [Name] -- Transfer to welcomer channel
- (said command) transg [Name] -- Transfer to guardian channel
- (said command) transb [Name] -- Transfer to the bugge hunter channel
- (said command) que -- Displays the request que (with names of furres requesting assistance)
- (said command) list -- List available commands
- (said command) listf -- Count of furres requesting assistance, names of people listening to the channel and the news
- (said command) url [Name] -- Send the URL of the Beekins page to furre.
Self-explanitory spoken commands:
- eject [Name]
- share [Name]
- emit [Message]
- emitloud [Message]
- entrytext [Message]
- entrymusic [Number]
- help [Problem]
Commands Redefined during the Update
Information found here.
To Be Investigated and Documented
I've gotten a report that this is a new behavior. I'd like someone to confirm it, then please adjust the documentation.
Re: ><x><y><objno> -- set (x,y) to objno - use 0 to clear a space 1<x><y><floorno> -- ditto floors
For both, <x> % 150 is the actual x value. (int)(<x> / 150) is the number of times more than once that the tile should be drawn, descending down that column. Primitive compression. :) Let's say the value of <x> is 155 and the value of <y> is 10. That means to draw the tile at (5,10) and (5,11). If it's 305, draw it at (5,10), (5,11), and (5,12).
-Artex >> Notes-
# > and 1 can accept more than one object/floor - wouldn't it be worthy of mentioning? # The (5,10), (5,11) and (5,12) thing would make sense in a 2D field, but how would you draw it like this on an isometric field?.. Gonna look into this... [UPDATE - 18.Aug] # I've tried injecting this into the client, it actually does work, but I have yet to study properly how before I write anything about this. Consider the behavior confirmed =)
-LlubNek
I'm pretty sure I saw what Artex describes before the last clump of updates (October/November 2004). It shows up during area commands and when entering the dream.
-TsJoePie
I had a look at the item/floor/walls spawning code. First of all, all the numbers are now in 2 byte base 220 (see http://dev.furcadia.com/docs), and the number of times it is to be repeated is (int)(<y> / 1000) + 48*((int)(<x>/1000)). Coordinates are <x> % 1000 and <y> % 1000. For items and floors the x coordinate is the one used in the editor, divided by 2, like usual; but for walls it is NOT divided by 2, as the odd values are used for NE walls. Even values are NW walls. (The y coordinate is always the same as in the editor.) The reason they would've used this approach, in my opinion, is that it's easy to implement by the way the changed items/floors/... are iterated. If it lists them in the order (0,0), (0,1), ..., (1, 0), ... it's very easy to count how many consecutive changes there are.
Zarutians raw notes
Feel free to incorperate them into the page at correct places
transfer new placement overides x, y, o in base 95 (no, 220 now --Artex) >xxyyoo... objects x half of what shown in dream editor 1xxyyoo... floors x half of what shown in dream editor 2xxyyoo... walls
0xxaaabbbcccdddeeefffggg!mlxxx for variables (much better desc above)
8 rrrrrxxxdeeeoooff??uuuu parameter passing (precides 6 and 7) all in base 95 r - random seed x - number a furre just said d - direction facing e - entry code o - object in paws f - number of furres in dream u - uid ? unknown

