Appearance
Build a genre HUD with public tools
These APIs are part of the active UE5.8.3 rebuild. Follow current status for verification boundaries. Examples are saved Designer trees under /Game/ForgeExamples/UI; their encounter rules live in ForgeExamples, outside the plugin.
For the revised army roster, per-entry command context, selection overlay, mixed HUD input, automatic-height composition and smooth progress updates, follow army and RPG HUD authoring.
Screen, data and commands
Create a Widget Blueprint with parent IFScreen. Use Get Local Player Subsystem (IFLocalPlayerSubsystem) → Create Root → Push Screen. Choose HUD, Menu or Modal and supply your data-source object. Implement IFDataSource on that object: Get UI Model returns a stable observable object; Request UI Action validates and performs the game's requested action.
Add IFCommandButton in the Designer, set Action Name, and optionally Model Name. The containing screen routes the command and observes availability. Use Model Label controls whether the button takes its label from the model. The model's Unavailable Reason explains disabled actions. A command button owns no gameplay rules.
Set a screen's Initial Focus Name to a Designer name or nested path such as HUDLayout/AbilityEntry2/EntryCommand. Fallback Focus Name is used when the preferred control is unavailable. Back Action Name optionally routes Back to the adapter (for example Pause or Resume). Leaving it empty uses normal CommonUI behavior. A command button's Request Screen Back invokes that handler directly without adding a Back action to your gameplay source. Menus remain activatable screens; passive HUD regions remain ordinary widgets.
Optional screen Shortcuts associate Mapping Name with Action Name. They read applied Enhanced Input keys and keep a HUD action such as Tab targeting from being swallowed by widget navigation after a click. They run only on the active top screen outside stack transitions. Editable-text/key-selector focus is excluded. Disable Shortcuts Enabled while a custom editor/chat control owns input, or put that control on another screen. Gameplay still validates the requested action.
For a Game And UI HUD with focused buttons, set Gameplay Analog Keys to axes reserved for gameplay, such as Gamepad Left X/Y. The existing input observer passes these explicit axes to the owning Player Controller before Slate turns them into navigation. D-pad navigation remains available. Leave this array empty on menus, sliders, chat screens, or screens that need the stick for UI controls. Only the top screen outside transitions can forward axes. Opening another screen, deactivation, destruction, or leaving controller presentation releases forwarded values; movement must not remain held behind a dialog. This opt-in does not create gameplay mappings or movement logic.
Named layout regions
Create a Data Asset of class IFHUDLayoutProfile. Add Regions with Name, Anchor, Alignment, Offset, Size and Z Order. Values are Slate units; engine DPI and the player's UI scale apply outside the profile. Compact Below Width and Compact Scale provide a smaller layout at narrow logical widths. Hide When Compact is for optional decoration, not essential controls.
Create a Widget Blueprint with parent IFHUDLayout, put a Canvas Panel at its root, and name its direct children to match the regions. Assign Profile on the actual Designer instance inside your HUD screen. Use one Safe Zone in the root composition; the shipped root already supplies it. A class default alone does not replace an instance's explicit None value.
Public nodes:
- Set Region Widget replaces a named region with any developer-created widget.
- Set Layout Profile changes composition without replacing the widget tree.
- Override Region changes an individual region for the current session.
- Reset Region Overrides restores the profile.
- On Layout Applied lets Blueprint respond to compact mode.
Expected result: moving the Actions region in the data asset moves the entire action group. Replacing its widget does not change command routing or input presentation. Invalid names/sizes are rejected rather than silently creating broken geometry.
Readout or custom entry
Use IFReadoutEntry as an optional parent, or implement IFEntry on your own Widget Blueprint. The entry contract is Initialize Entry → Refresh Entry / Set Entry Selected → Release Entry. Release subscriptions and transient state when recycled; the same widget can display a different object later.
IFReadoutEntry recognizes optional children named TitleText, DetailText, ValueText, IconImage, FractionBar, CooldownTint, EntryCommand, ActionPrompt and SecondaryEntry. Use any subset and build the rest of the Designer tree yourself. Set Model Name for automatic screen binding, or call Initialize Entry yourself. Bindings reattach when a screen is reused and release when it deactivates.
SecondaryEntry is another IFReadoutEntry. Set the parent's Secondary Model Name to bind a related model; None hides the secondary row. The sample WBP_IFUnitFrame uses it to combine player health and Resolve in one compact frame while the same Blueprint displays targets and party members without a resource row. The portrait is a static sample texture, not a per-widget scene capture. Replace IconImage or the whole entry in Blueprint.
Set Mapping Name to an existing player-mappable Enhanced Input row for the optional ActionPrompt. Icon UV Min/Max select an atlas rectangle; default 0..1 uses the entire texture. Override Fraction Colors gives health, resources and hostile targets distinct colors without duplicating the entry Blueprint. Call Refresh Screen Binding after changing binding options at runtime. The adapter owns soft-icon residency; a UI update never synchronously loads it.
For a custom command-button tree, add an optional ActionPrompt child and set the button's Prompt Mapping Name. Prompts use CommonInput glyphs where configured. Theme Compact Key Labels supplies readable fallbacks for keys such as shoulder/trigger buttons; changing the mapping selects the fallback for the new applied key.
Set Tooltip Model Name when a command needs richer information than its compact readout. The sample ability models supply description, cost, range and the current unavailable reason through a separate presentation model; no ability backend belongs to the UI plugin. Hide When Unavailable is useful for a contextual defeat panel or an active-status readout. Its subscription remains attached while hidden, so a later model update can show it again.
The MMO ability entry layers are:
text
IFReadoutEntry
Canvas
EntryCommand — actual CommonUI interaction
IconImage — atlas rectangle, ignores hit tests
CooldownTint — center-origin opening, ignores hit tests
DetailText — countdown, visible while fraction > 0
ActionPrompt — current applied key or configured controller glyph
TitleText — short action nameSet the remaining fraction from your source; this widget does not start an ability or an authoritative timer. See material parameters and the inspected behavior.
The sample WBP_IFAbilityButton is a Blueprint child of IFCommandButton. Its Designer root is an IFTooltipAnchor named TooltipAnchor containing a surface named FocusBorder. Pointer Placement and Navigation Placement are both Centered Above Anchor. This is how the example keeps descriptions above the action bar without a special native ability-button class. The RTS world entry WBP_IFRTSWorldLabel contains only FractionBar; the MMO variant adds TitleText. Both receive the same IFEntry initialization/update/cleanup contract.
Minimap
Add InterfaceForge Map, set Model Name, and optionally Location Action. Supply an IFMapData with normalized marker positions; batch changes then call Notify Data Changed once. Set Background to your baked map image. The map draws at most 2,048 markers and performs no world scans or scene captures.
On Location Pressed returns a normalized coordinate. A configured Location Action routes the same data object, whose Requested Location is updated. Your adapter converts coordinates to its own world bounds and validates the order. Mouse/touch select directly; keyboard/controller navigation can adjust the map cursor and confirm. Terrain baking is example editor tooling, not a runtime dependency.
Controls screen
Create a Widget Blueprint with parent IFBindingEntry. Add optional LabelText, KeySelector (InterfaceForge Key Selector) and StatusText. Set Mapping Name, Label and Family on each instance. Refresh Binding shows the registered preview key; selecting a key calls the public remapping subsystem's validation and staging workflow. It does not invent a second key-binding file.
The current four-tab menu embeds those entries under IFSettingsMenu, sharing its preference/input draft and Apply/Cancel. Follow settings composition. For a dedicated controls-only flow, IFRemappingScreen remains an optional parent: Designer buttons ApplyChoice, CancelChoice, DefaultsChoice and text RemapStatus attach automatically. That standalone screen owns its own transaction; do not nest it under the shared-menu session. Apply Bindings, Cancel Bindings and Restore Binding Defaults are callable from custom Blueprint events too.
Register your gameplay Input Mapping Context with Enhanced Input User Settings and add it to the local player's Enhanced Input subsystem. The example does this for /Game/ForgeExamples/Input/IMC_IFEncounter. Actual gameplay reads these actions, and IFActionPrompt reads the applied engine mapping. Staging changes does not change gameplay until Apply. Physical controller behavior remains unverified until hardware is available.
Themes and ownership
Emberfall and Ironfront use saved IFTheme assets. Change typography, surface/text/accent/outline colors, spacing, button padding, sounds and transition duration in these assets. Widgets can select their own theme overrides. Use Set Theme for a whole-player change. Respect the existing Reduce Motion and UI/text scale preferences when adding Blueprint animations.
The current atlas uses original SVG polygons/lines/circles, with editable vectors and code/provenance in ContentSource/UI. The previous image-generated atlas and its original provenance are preserved privately and excluded from current release media. Imported castle/knight assets are AshenForge-owned and reference-remapped under /Game/ForgeArt. Game Master's exclusive design is not distributed. Core requires neither MassForge nor any inventory plugin.
The new WBP_IFJournal and WBP_IFJournalEntry use BP_WatchpostSource, an existing Blueprint implementation of IFDataSource. Its Record model and Record action drive the custom entry without game C++ changes. The Return button uses Request Screen Back. This is a practical source/widget replacement example within the current RPG flow; the practice counter is not serialized by the encounter save.