All in-game screens live under src/Game/UI/. The hotbar/shortcut system has its own dedicated page — see Shortcuts System — everything else is summarized here.

ScreenKey file(s)Purpose
ChatChat/chat.gdChat log + input. Mode switching via /s, /p, /g prefixes or a dropdown; command history (Up/Down); local-only /clear. Sends via ConnectionManager.send_chat(text, mode).
InventoryInventory/inventory.gd, InventoryItem/, DropAmountDialog/Live per-entity item list built from InventoryComponentSMSG, split into usable/equip grids. Supports drag-to-equip and drag-to-ground-drop (amount-confirm dialog for stacks > 1).
EquipmentEquipment/equipment.gd, EquipSlot/One EquipSlot per EquipmentSlot.Slot. Greys out slots the viewed entity’s species doesn’t have (Master = all slots, Bestia = BestiaDB.get_equip_slots, see Entity Sync). Equip/unequip round-trips through ConnectionManager.
HUD (Master Profile)MasterProfile/master_profile.gd, ProfileBar/, ProfilePortrait/Top HUD: name, level, position, HP/mana/stamina/exp bars, carry weight. Also hosts the toggle buttons for Inventory/Skills/Equipment/Status — polls Input.is_action_just_pressed rather than _unhandled_input, since sibling Windows can steal input focus.
SkillsSkills/skills.gd, SkillRow/Renders a SkillListSMSG as rows; buffers point spends locally per row until Confirm (ConnectionManager.invest_skill_points). Hides the point-spend UI when viewing a Bestia’s skill tree (server-authoritative, no client investment). Skill data itself comes from AttackDB (see Entity Sync).
Status PointsStatusPoints/status_points.gd, StatusRow/, status_attribute.gdSame buffered confirm/cancel pattern as Skills, for base attributes (STR/AGI/VIT/INT/DEX/WIL). Values are pushed proactively by dirtyable server components — no explicit refresh request needed.
Buff ListBuffList/buff_list.gd, BuffIcon/Top-right HUD row of buff/debuff icons for the owned Master only, rebuilt from BuffListSMSG.
Context MenuContextMenu/context_menu.gdMinimal right-click PopupMenu. Currently a stub with no actions wired up yet — a placeholder for future Attack/Trade/Inspect entries.
Ground Drop ZoneGroundDropZone/ground_drop_zone.gdFull-screen fallback drag-drop target: anything dropped off a real slot lands “on the ground” (ConnectionManager.drop_item).
Widget WindowWidgetWindow/widget_window.gdGeneric draggable/closable chrome (content: PackedScene) used to host Inventory, Skills, Equipment and Status Points as independent floating panels. Auto-sizes to its content and clamps its position to the viewport.
Options (ESC menu)Options/options.gdDespite the name, this is the in-game ESC/pause menu, not a settings screen — Continue / Master Select / Disconnect / Exit, all funneled through a cancellable, server-confirmed logout countdown (see Scenes & Menus).
ui.gd (root)Game/UI/ui.gdWires the WidgetWindows together at runtime (their content only exists after _ready()), toggles their visibility from MasterProfile’s buttons, and connects Inventory ↔ Equipment for drag-to-equip and worn-item filtering.

Related VFX

A few small, self-contained effects under src/Game/VFX/, driven directly by server messages rather than gameplay code:

  • HealthBar/health_bar.gd — a billboarded Sprite3D progress bar above an entity; update_health(HealthComponentSMSG) shows it and restarts a fade-out timer after a few seconds of no further damage.
  • CastBar/cast_bar.gd — shown while an entity channels a skill. CastingComponentSMSG carries total/remaining seconds; between server re-syncs the bar ticks down locally for smoothness. Removed = true on the same message type hides it (a normal cast completion looks identical to a cancelled one at this layer).
  • AOECastIndicator/aoe_cast_indicator.gd — a rotating ground decal resized to an attack’s aoe_radius while in skill-targeting mode (see Interaction).
  • EntitySnapIndicator/ — a scene-only marker shown over whichever entity a skill-target snap has currently picked.

The WidgetWindow pattern

Inventory, Equipment, Skills and Status Points are all plain scenes wrapped in the same WidgetWindow chrome rather than being bespoke floating panels each — one drag/close/resize implementation serves all four, and Game/UI/ui.gd just plugs a different content scene into each instance. If you’re adding a new floating panel, follow this shape instead of building window chrome from scratch.

Last updated 19 Sep 2026, 01:24 +0200 . history