Equipment was a pain. The inventory was already a complex piece of state, and equipment just added more stuff to keep track of. I also had to rework the UI on the client to accomodate this. Now there's a little tabbed menu, with 3 pages: Character, Gear, and Settings. I haven't gotten to make many new models or textures for the equipment yet.
Item Types & Attributes
Item resources now support an an item type, and slot (if the item is equippable). You can also specify a simple attributes table, which allows items to have configurable attributes such as damage, armor, and a healing amount (for consumables). Here's what the item file for the rusty axe looks like:
rusty-axe.toml id = 8 [item] name = "Rusty Axe" description = "Dull, but will chop stuff." type = "weapon" slot = "mainhand" model_id = 0 is_stackable = false [attributes] damage = 1
Most of the code was tiny refactors and packet additions, so here's a changelist to sum it up quickly.
- Server: Updated item database schema
- Server: Added weapon and armor item types
- Server: Added 'slot' field to item definitions (for weapons and armor)
- Server: Added item attribute table to item definitions
- Server: Added EntityState::Inventory
- Server: Updated combat to take equipment damage and armor into account
- Server: Updated block mechanic to only work if you have a shield equipped
- Client: Added button to equip items in inventory
- Client: Added tab menu UI, with character, gear, and settings tab
- Common: Added a few new items including a shield
- Common: Updated InventoryPacket to include equipment stats
- Common: Added InventoryUseRequestPacket, InventoryEquipPacket, InventoryUnequipRequestPacket, InventoryUnequipPacket
Client - 0x19 (25) - Inventory Use Request bag_slot: u8 (1 byte)
Server - 0x19 (25) - Inventory Equip bag_slot: u8 (1 byte) dest_equipment_slot: u8 (1 byte) new_damage: u32 (4 bytes) new_armor: u32 (4 bytes)
Client - 0x1A (26) - Inventory Unequip Request equipment_slot: u8 (1 byte)
Server - 0x1A (26) - Inventory Unequip equipment_slot: u8 (1 byte) dest_bag_slot: u8 (1 byte) new_damage: u32 (4 bytes) new_armor: u32 (4 bytes)
Having a full gear set makes it pretty easy to take on the King Chonkrat, the main threat in this test world. Although, I did hack in a better weapon for extra damage. I need to add some more NPCs that drop loot.
Was having fun with the world editor and made this little island. I want to get back to the terrain code soon and start making the world much larger.