diff options
Diffstat (limited to 'docs/items.txt')
-rw-r--r-- | docs/items.txt | 198 |
1 files changed, 0 insertions, 198 deletions
diff --git a/docs/items.txt b/docs/items.txt deleted file mode 100644 index 19c6b10cc..000000000 --- a/docs/items.txt +++ /dev/null @@ -1,198 +0,0 @@ -------------------------------- -THE MANA WORLD INVENTORY SYSTEM -------------------------------- - -1. INTRODUCTION -2. DATABASE -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 - -- id (C&S) -> unsigned int - - a positive integer uniquely identifying an item. - -- 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] - - 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 - -- weight (C&S) -> unsigned short - - Used by server to calculate if the being can carry more items. The client - uses it to display the information to the player. - -- # 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 - or class or name of class object - - Script to be executed when item is used/equipped. Events include: - - onPickup(Being b) The item is picked up by being b - onDrop(Being b) The item is dropped by being b - onUse(Being b) The item is used by being b - onUseWith(Being b, Object o) The item is used with object o by being b - onEquip(Being b) The item is equipped by being b - - -3. INVENTORY - -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. - -Hammerbear says: I think here we should go all the way with weight approach and -not have a slot limit. The same could be used for container items, that simply -have a contents that can hold a certain total weight. Places where slots are -then used is for equipment, where each slot maps onto a certain body part, and -possibly certain slotted items that have slots that can only hold a certain -type of item. - - -4. EQUIPMENT - -Every being will have a variable number of slots to equip items. For a human -player we will have the following slots: - -* 0 body -* 1 hair - 2 head (hat, helmet, etc.) - 3 neck (necklace) - 4 torso (body armour) - 5 right hand (weapons) - 6 left hand (shield, only available with no or one-handed weapon) - (ammunition, only available with certain weapons) - 7 left ring finger - 8 right ring finger - 9 legs (pants) - 10 feet (shoes) - -These slots will composite to form the character graphic. The order of the -composition is not the same in each direction and some slots do not contribute -to the final graphic. Draw order for each direction: - - left 0, 1, 2, 10, 9, 5, 4, 6 - right 0, 1, 2, 10, 9, 6, 4, 5 - up 0, 1, 2, 10, 9, 5, 6, 4 - down 0, 1, 2, 10, 9, 4, 6, 5 - -*) These slots are not under player control, but are merely used by the engine -so be able to change this as part of the same system. - - -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 arrow holder. Possible solutions: - - - 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 - - - Arrow holder has special slot for items of type "arrow" that can hold up - to a certain maximum number of arrows. - -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, with XML test -cases based on 4th solution above. - - * Arrow holder = max 100 arrows (1 slot) - - <item name="Medium quiver" ...> - <slot type="arrow" max="100"/> - </item> - - * Sword of chaos = max 1 materia + 2 demons (2 slot) - - <item name="Sword of chaos" ...> - <slot type="materia" max="1"/> - <slot type="demon" max="2"/> - </item> - - * Bag that can hold 5 kg of arbitrary stuff (container). - - <item name="Leather bag" weight="1" ... capacity="5"/> - - The rationale of being able to carry 5 kg of stuff at the cost of only - 1 kg is that the bag helps you carry the stuff by providing a convenient - way to hold it. - - -7. PROTOCOL - -To be defined. |