Documentation Index
Fetch the complete documentation index at: https://mintlify.com/TaylorZaneKirk/MMO-Project/llms.txt
Use this file to discover all available pages before exploring further.
The right-side HUD in GameScreen is a four-tab panel driven by three controllers: HudController, InventoryPanelController, and EquipmentPanelController. Every value displayed in the HUD comes from the authoritative world_snapshot or a character_state_updated delta message delivered by the server — the client never predicts or computes HUD state locally. HudController owns the tab-switching buttons and is the parent controller that instantiates InventoryPanelController and EquipmentPanelController as child nodes during configure().
HUD tab mapping
The four tab buttons follow the original asset icon order:
| Asset ID | Icon | Panel |
|---|
Internal_206 | Face icon | Status panel — health, concentration, and special bars; character name; skills grid |
Internal_207 | Armor icon | Equipment panel — all equipment slots with icon and slot name |
Internal_208 | Weapon icon | Inventory panel — all inventory slots with icon, name, and stack count |
Internal_209 | Sparkle icon | Spells panel — reserved, not yet implemented |
HudController.select_tab(tab_index) switches the visible tab and updates button modulation (full brightness = selected, 82% = inactive).
Status panel
The status panel is driven by world_snapshot.player.status and updated on character_state_updated.changes.status. The following fields are read directly:
| Field | Display |
|---|
health_current / health_max | HP bar with current/max label |
concentration_current / concentration_max | Concentration bar with current/max label |
special_current / special_max | Special bar with current/max label |
character_name | Name label above the skill grid |
Each bar animates with a 0.15-second tween when its value changes. The skill grid below the bars is populated from world_snapshot.player.skills.items. Each skill entry exposes:
| Field | Description |
|---|
skill_id | Identifier used to load <skill_id>_skill.png from res://assets/ui/icons/ |
display_name | Shown in the hover tooltip |
base_value | Base skill level |
equipment_modifier | Bonus from equipped items |
temporary_modifier | Temporary bonus; defaults to 0 in the current prototype |
effective_value | Displayed in the grid cell; colored green if the sum of modifiers is positive, red if negative |
Inventory panel (InventoryPanelController)
InventoryPanelController renders slots from world_snapshot.player.inventory. It reads:
inventory.slot_count — total number of slots
inventory.columns — grid column count
inventory.items — array of occupied slot entries
Each occupied slot shows:
- Item icon loaded from
icon_texture_path
- Stack count label (hidden when
stack_count is 1)
- Hover tooltip with item name, description,
skill_requirements, and skill_modifiers
Right-clicking an occupied inventory slot emits inventory_slot_right_clicked, which GameScreen forwards to PlayerInteractionController. PlayerInteractionController builds a context menu from the item’s context_actions array and shows it at the cursor position via ContextMenuController.
Context menu actions for inventory items:
| Action label | WebSocket message |
|---|
Equip / Eat / Use | send_inventory_item_use_request with the matching use_action string |
Drop | send_inventory_item_drop_request |
Equipment panel (EquipmentPanelController)
EquipmentPanelController renders slots from world_snapshot.player.equipment.slots. Each slot entry contains:
| Field | Used for |
|---|
slot_id | Sent in equipment_item_unequip_request |
display_name | Slot label rendered on the left side of the slot |
item_id | Non-empty indicates an occupied slot |
item_name | Shown in the hover tooltip when occupied |
icon_texture_path | Item icon rendered on the right side of the slot |
Left-clicking an occupied slot emits equipment_slot_left_clicked(slot), which routes through HudController → PlayerInteractionController → GameScreen._request_equipment_item_unequip(slot) → send_equipment_item_unequip_request. The server returns equipment_item_unequip_response with unequip_status; "inventory_full" is displayed as a chat message if the player’s inventory has no room.
ContextMenuController extends CanvasLayer at layer 100 so it renders above all world content. It exposes:
show_context_menu(screen_position, actions) — builds button-per-action and makes the panel visible
hide_context_menu() — removes all buttons and hides the panel
action_selected signal — emitted when the player clicks a menu entry
The server provides context_actions on every inventory item in the snapshot. The client renders exactly what the server describes and never hardcodes action-to-behavior mappings. World tile right-clicks produce a Move Here action; tiles with visible ground items additionally include a Pickup [item_name] action.
Hover tooltips on inventory and equipment slots include skill_requirements
and skill_modifiers sourced directly from the authoritative snapshot. The
client does not need to know item rules locally — all tooltip data comes from
the server.