File Formats
|
FSH
FS2
FBJ
MAP
DSB
RCH
|
Protocol Specifications
|
Main Server
File Server
|
|
Subsections
The Isometric Field
The field where we are located is not a usual 2D matrix, as you might have already noticed. It's a 2D matrix,
rotated by 45 degrees, making our coordinate grid a little bit different. Here is a typical movement chart of
Furcadia:
As you can see - our X axis has changed a little bit, the map starts at 0,-1 and so on. Big mess, but you can
get used to it, if you see such a chart in front of you whenever you deal with it. If you still look at a row
in a straight way, you can notice that it actually goes properly (0, 2, 4,...), but there are places in between
of these elements.
The walkable area itself of the map begins at coordinates 8,9 because the Furcadia character is
meant to be in the center at all times. Since there's nothing beyond the map boundaries, it wouldn't be as
nice to show you black space around the place as you come to the edge. What actually happens when you're
stepping on that unwalkable area is that your character moves off the center - the map won't move beyond it's
minimum/maximum even if you try to force this.
To summarize this, let's say that in a map of 24x24 (576 tiles) there will only be 14 walkable tiles in the
center of the map...
Changes in Coordinates for Each Step
Since our field is not a typical 2D matrix, the movement there won't be as simple as X+1 or Y-1
for each step, we've got to check if Y is even or odd and then take necessary action, depending on where do
you move to. Here is a list of X/Y changes for each case we meet (keeping an eye on the graphical field above
might help you understand more):
|
Y is odd |
Y is even |
Direction |
X/Y Modification |
X/Y Modification |
North-West | X-2 / Y-1 | Y-1 |
North-East | Y-1 | X+2 / Y-1 |
South-East | Y+1 | X+2 / Y+1 |
South-West | X-2 / Y+1 | Y+1 |
Finding Direction with Two Pairs of Coordinates
When we move from one point to another, the server gives us two pairs of coordinates - the source and the
destination. Personally, I'd prefer the source and a direction - would save 3 bytes, but the guys up there
probably did it for a reason, right? Perhaps they plan to compress the movement at some point and specify a
far destination point, where the client will already calculate the movement... Probably a valid idea, but I
doubt that Furcadia will come up to something like this in the near future. Anyway, back to the subject!
Since the server gives us two points when somebody walks, we can determine the direction the character walks
in rather easily - especially since we always walk one step at a time. Here is a list of directions and the
if() strings for each direction that can suite many programming/scripting languages
(Note: oddY = srcY % 2):
Direction |
Direction # |
if() String |
North-West | 7 | (srcY > dstY) && ((oddY && (srcX > dstX)) || (!oddY && (srcX == dstX))) |
North-East | 9 | (srcY > dstY) && ((oddY && (srcX == dstX)) || (!oddY && (srcX < dstX))) |
South-East | 3 | (srcY < dstY) && ((oddY && (srcX == dstX)) || (!oddY && (srcX < dstX))) |
South-West | 1 | (srcY < dstY) && ((oddY && (srcX > dstX)) || (!oddY && (srcX == dstX))) |
In case and the source point equals the destination point, it means that the character tried to walk
somewhere, but got blocked. In this case, we can only determine the direction by the character's frame
number because he didn't really move anywhere - just walked in one place.
The Range of Sight
The range of sight in Furcadia is approximately 15 tiles wide and 17 tiles high (X: 0 - 14[oddY] / Y: -1 - 15).
Beyond this range, the server should, theoretically, prevent you from seeing movement or text. There have been
cases where a character was found slightly beyond one's range of sight, but still could communicate with the
person, so I believe the range is a little bit more extended than that.
|