summaryrefslogtreecommitdiffstats
path: root/docs/server.txt
diff options
context:
space:
mode:
authorBjørn Lindeijer <bjorn@lindeijer.nl>2005-03-06 22:06:58 +0000
committerBjørn Lindeijer <bjorn@lindeijer.nl>2005-03-06 22:06:58 +0000
commit6c0ca5518a0c52ef058a3c7a40fd843fc803853b (patch)
tree5c8bac69dd001e9583064e89500ac8a8433b7c13 /docs/server.txt
downloadmanaserv-6c0ca5518a0c52ef058a3c7a40fd843fc803853b.tar.gz
manaserv-6c0ca5518a0c52ef058a3c7a40fd843fc803853b.tar.xz
manaserv-6c0ca5518a0c52ef058a3c7a40fd843fc803853b.zip
Adding documentation related to server project here.
Diffstat (limited to 'docs/server.txt')
-rw-r--r--docs/server.txt172
1 files changed, 172 insertions, 0 deletions
diff --git a/docs/server.txt b/docs/server.txt
new file mode 100644
index 0000000..e2d506a
--- /dev/null
+++ b/docs/server.txt
@@ -0,0 +1,172 @@
+-----------------------------
+THE MANA WORLD SERVER PROJECT
+-----------------------------
+
+1. INTRODUCTION
+2. MAP
+3. OBJECT
+4. BEING
+5. ITEM
+6. CHAT
+7. AUTHENTICATION
+
+
+1. INTRODUCTION
+
+First let me show you a screen shot of TMW. From left to right it shows a
+player, an enemy, a tree and an apple. In this document the player and enemy
+will go as beings, and the tree and apple will go as objects. Finally, the
+thing they're on is a map.
+
+ o O
+ O : A Player <> : A monster | : A tree o : An Apple.
+
+ ----------------- Fig. 1) screen shot of TMW showing three kind of objects
+ | |
+ | o O | MAP
+ | O <> |o | OBJECT
+ | | BEING
+ -----------------
+
+Each of these types has its own set of properties and things it can do in the
+game. A number of messages in the protocol can be grouped on these types. We'll
+go through each of them separately. Objects can be picked up and change into
+items, we'll mention those too.
+
+The effects of using objects or items, talking to beings and attacking enemies
+are all calculated server side. It is interesting to think about approaches
+that allow a scripting language to be used in these areas.
+
+In the messages described the following data types are being used:
+
+ A - char array (null terminated)
+ C - char (1 byte)
+ S - short (2 bytes)
+ L - long (4 bytes)
+
+
+2. MAP
+
+- Stored as XML file (.tmx)
+- Refers to tile set images and potentially to music file(s) and objects
+- Beings can change from one map to another (probably using warp and spawn
+ points)
+
+
+3. OBJECT
+
+- Most properties specified in XML file
+- Mostly static (at least doesn't move, but can change)
+- Has collision properties, which can change
+- Can be an item (allowing picking it up)
+- Can be animated and change animation (max 256 animations)
+- Can potentially be activated/used (door, chest, portal)
+
+ Server to client:
+
+ MSG_NEW_OBJECT { L objectTypeId, L objectId, L x, L y }
+ MSG_REMOVE_OBJECT { L objectId }
+ MSG_CHANGE_OBJECT { L objectId, L x, L y, C currAnim, S flags }
+
+ Client to server:
+
+ MSG_PICKUP { L beingId, L objectId }
+ MSG_USE_OBJECT { L beingId, L objectId }
+
+
+4. BEING
+
+- Most properties specified in XML file.
+- Dynamic (can walk around)
+- Character animation, but could still show arbitrary animations.
+- Can equip stuff, which could change appearance (max 256 equipment slots)
+- Has inventory
+- Connects to questing system
+- Can fight other beings
+- Dispositions: friendly, neutral, enemy
+- Can be shop
+- Can be talked to, potentially to gain quests
+- Controlled either by player or AI, AI could be either server or client side.
+- Carries money
+- Can be associated with a client
+
+ Server to client:
+
+ MSG_NEW_BEING { L beingTypeId, L beingId, L clientId, L x, L y }
+ MSG_REMOVE_BEING { L beingId }
+ MSG_INVENTORY_UPD { L beingId, L itemTypeId, L amount }
+ MSG_EQUIPMENT_UPD { L beingId, L itemTypeId, C slot }
+ MSG_ATTACK { L beingId, L targetId, L damage, C damType }
+ MSG_PATH { L beingId, A path }
+
+ Client to server:
+
+ MSG_TARGET { L beingId, L targetId }
+ MSG_WALK { L beingId, L x, L y }
+ MSG_START_TRADE { L beingId, L shopBeingId }
+ MSG_START_TALK { L beingId, L talkBeingId }
+ MSG_REQ_TRADE { L beingId, L playerBeingId }
+
+More messages are needed for the talking with NPCs and trading with shops and
+other players.
+
+
+5. ITEM
+
+- Properties specified in XML file
+- Beings can carry them around
+- Can be traded between beings
+- Can potentially be equipped (in a certain slot)
+- Can potentially be used
+
+ Client to server:
+
+ MSG_USE_ITEM { L beingId, L itemTypeId }
+ MSG_EQUIP { L beingId, L itemTypeId, C slot }
+
+
+6. CHAT
+
+There are several channels in the chat system:
+
+ Area - To players around you (default)
+ Region - To players on the same map (default)
+ Global - To all players in the game (default)
+ Team - To players in the same team (when in team)
+ Guild - To players in the same guild (when in guild)
+
+In addition to these there are also system messages, and announcements made
+by moderators / administrators.
+
+ Server to client:
+
+ MSG_CHAT { L beingId, A name, A message, S channel }
+ MSG_SYSTEM { A message }
+ MSG_ANNOUNCEMENT { A message }
+
+ Client to server:
+
+ MSG_SAY { L beingId, A message, S channel }
+ MSG_ANNOUNCE { A message }
+
+
+7. AUTHENTICATION
+
+Of course before the client can send/receive any of this, he needs to login to
+the server. The idea is that the client will send login info to the server,
+and that the server either denies the request (giving a reason) or sends the
+client a client id. The client later uses the client id to determine which
+being(s) are to be controlled.
+
+ Server to client:
+
+ MSG_ACCEPT_GAME { L clientId } // Accepted into the game
+ MSG_ACCEPT_CREATE { } // Accepted into character creation
+ MSG_DENY { A reason }
+
+ Client to server:
+
+ MSG_LOGIN { A name, A password }
+ MSG_CHAR_CREATE { ... }
+
+The character creation process will need to be thought out.