summaryrefslogtreecommitdiff
path: root/docs/items.txt
diff options
context:
space:
mode:
Diffstat (limited to 'docs/items.txt')
-rw-r--r--docs/items.txt139
1 files changed, 121 insertions, 18 deletions
diff --git a/docs/items.txt b/docs/items.txt
index beaa2ab1..e31f4904 100644
--- a/docs/items.txt
+++ b/docs/items.txt
@@ -4,34 +4,137 @@ THE MANA WORLD INVENTORY SYSTEM
1. INTRODUCTION
2. DATABASE
-3. EQUIPMENT
+3. INVENTORY
+4. EQUIPMENT
+5. IMPLEMENTATION
+6. SPECIAL ITEMS
+7. PROTOCOL
+An item will have the following properties:
+
+C means info is used only by the client
+S means info is used only by the server
+C&S means info is used by both
-1. INTRODUCTION
+- id (C&S) -> unsigned int
+
+ a positive integer uniquely identifying an item.
-The inventory system will be based client side on a database realized by an XML
-document. The database will contain a list of all the items available ingame.
+- image (C) -> unsigned int
+
+ used if same images are used for different items.
+ Maybe we need more image ids to tell which image (bigger one) to show in
+ equipment window or when equipping items in weapon slot.
+- name (C) -> char[30]
-2. DATABASE
+ to be shown in inventory.
+
+- description (C) -> char[100]
+
+ a brief description shown in shops, or in the inventory
+
+- type (S) -> unsigned char
+
+ server uses it to check if is an item or an equipment and send the
+ appropriate packet.
+
+ * USABLE_ITEM (food, potions, ...)
+ * EQUIPMENT_ITEM (weapons, armors, ...)
+ * SLOT_ITEM (cards, materias, summoned beings, ...)
+ * SLOTTED_ITEM (bags, small chests, ...)
+
+- identify (S) -> unsigned char
+
+ the server will check this flag if the items can be identified by the
+ player.
+
+ * IDENTIFIED no need to identify the item
+ * IDENTIFY_ITEM you can identify it by using a special item
+ * IDENTIFY_MAGIC you can identify it by using a particular spell
+ * BLACKSMITH needs a blacksmith to be identified
+ * WIZARD needs a wizard to be identified (enchanted items)
+ * ANCIENT_BLACKSMITH
+ * ANCIENT_WIZARD
+ * NOT_IDENTIFIABLE reserved for future use
+
+- weigth (S) -> unsigned short
+
+ used by server to calculate if the being can carry more items.
+
+- # of slots (C&S) -> unsigned char
+
+ if this field is greater than 0 it means this one is a slotted item.
+ (Probably we can remove SLOTTED_ITEM from the type enumeration)
+ For example a bag will have 4 slots, while a chest about 10.
+
+- script (S) -> probably a file name to reference the script file
+
+ script to be executed when item is used/equipped.
+
-The XML document (name to be defined, suggested items.xml) will contain a list
-of items. An item can have the following properties:
+3. INVENTORY
-- id (a positive integer uniquely identifying an item)
-- image (used if same images are used for different items)
-- name
-- description (a brief description shown in shops, or in the inventory)
-- type (weapon, food, armor, stone, and so on...)
-- properties (probably a series of flags)
+Inventory will contain any kind of weapons including non equipped items and
+slotted items. Every being will have a variable number of slots to store items.
+For example a maggot won't have any slot, while players could have a number of
+slots depending on his strength. A pet could have one slot used to add a bag and
+help the player carrying items.
-3. EQUIPMENT
+4. EQUIPMENT
Every being will have a variable number of slots to equip items. For a player
we will have 6 slots: head, upper body, lower body, feet, left hand, right
-hand.
+hand. We can also add slots to equip rings, whistlet and elbowpad.
+
+
+5. IMPLEMENTATION
+
+Since both client and server will only need to store item ids, inventory and
+equipment can be easily coded as unsigned int arrays. The only problem is
+about slotted items. They for sure can't store another slotted item, but it's
+hard to represent them as an int. Probably a more complex structure is needed.
+
+struct ITEM_HOLDER {
+ int id;
+ int quantity;
+ ITEM_HOLDER *item;
+}
+
+ITEM_HOLDER inventory[number_of_slots];
+ITEM_HOLDER equipment[number_of_slots];
+
+If item is not NULL it will reference an array of items stored in the slotted
+item.
+
+How to limit the quantity of items? We could have a fixed number of slots in the
+inventory. In one slot you can store only items with the same id (except slotted
+items which need separate slots). When you pick up/receive a new item, total
+weigth you can carry is checked if the item can be stored.
+
+6. SPECIAL ITEMS
+
+A special case is represented by arrows holder. Three solutions will apply:
+
+ - equipment will have a special slot where you can equip only arrows
+ (or stones)
+
+ - item with one slot
+
+ - arrows can be simply stored in inventory
+
+Weapons can store a limited number of items in their slots. In this kind of
+slots you can store materia, demons or arrows. Some examples:
+
+ * arrows holder = max 100 arrows (1 slot)
+
+ * sword = max 1 materia + 1 demon (2 slot)
+
+ * magic sword = max 2 materias (1 slot)
+
+ * sword of cahos = max 1 materia + 2 demons (2 slot)
+
+7. PROTOCOL
-To equip an item you should go to the inventory, select the desired item and
-push the "Equip" button. To unequip, push the "Unequip" button in the equipment
-window. Unequipped items should automatically go back in the inventory.
+To be defined. \ No newline at end of file