Skip to main content

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 IDIconPanel
Internal_206Face iconStatus panel — health, concentration, and special bars; character name; skills grid
Internal_207Armor iconEquipment panel — all equipment slots with icon and slot name
Internal_208Weapon iconInventory panel — all inventory slots with icon, name, and stack count
Internal_209Sparkle iconSpells 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:
FieldDisplay
health_current / health_maxHP bar with current/max label
concentration_current / concentration_maxConcentration bar with current/max label
special_current / special_maxSpecial bar with current/max label
character_nameName 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:
FieldDescription
skill_idIdentifier used to load <skill_id>_skill.png from res://assets/ui/icons/
display_nameShown in the hover tooltip
base_valueBase skill level
equipment_modifierBonus from equipped items
temporary_modifierTemporary bonus; defaults to 0 in the current prototype
effective_valueDisplayed 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 labelWebSocket message
Equip / Eat / Usesend_inventory_item_use_request with the matching use_action string
Dropsend_inventory_item_drop_request

Equipment panel (EquipmentPanelController)

EquipmentPanelController renders slots from world_snapshot.player.equipment.slots. Each slot entry contains:
FieldUsed for
slot_idSent in equipment_item_unequip_request
display_nameSlot label rendered on the left side of the slot
item_idNon-empty indicates an occupied slot
item_nameShown in the hover tooltip when occupied
icon_texture_pathItem icon rendered on the right side of the slot
Left-clicking an occupied slot emits equipment_slot_left_clicked(slot), which routes through HudControllerPlayerInteractionControllerGameScreen._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.

Context menu (ContextMenuController)

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.

Build docs developers (and LLMs) love