From dayz-scope
DayZ UI development — `.layout` / `.styles` / `.imageset` files, widget scripting, menus, HUD. Critical rules: Unlink, AddActiveInputExcludes pairing, CALL_CATEGORY_GUI, FindAnyWidget+Cast, scriptclass typos, CfgMods registration. Applies to both writing and reviewing UI code.
How this skill is triggered — by the user, by Claude, or both
Slash command
/dayz-scope:dayz-uiWhen to use
Activate when writing or modifying UI code — `.layout`, `.styles`, `.imageset` files, or `.c` files with widget logic (UIScriptedMenu, ScriptedWidgetEventHandler, HUD). Also on requests like "make a UI", "create a menu", "add a HUD", "add a window", "draw a UI", "make a screen", "wire a script to a widget", "handle a button click".
opus**/*.layout**/*.styles**/*.imagesetThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill covers DayZ UI formats (`.layout`, `.styles`, `.imageset`, `.edds`), the widget scripting layer, events, menus, and HUD. Applies both when writing and when reviewing UI code.
This skill covers DayZ UI formats (.layout, .styles, .imageset, .edds), the widget scripting layer, events, menus, and HUD. Applies both when writing and when reviewing UI code.
Must-fix at review. Rationale and bad/good examples — reference/ui-pitfalls.md.
AddActiveInputExcludes / RemoveActiveInputExcludes must be paired (OnShow/OnHide or constructor/destructor).Widget.Unlink() before nulling m_Root — never just m_Root = null.CALL_CATEGORY_GUI. SYSTEM is server-aware non-UI; GAMEPLAY pauses with menus.FindAnyWidget() for type-specific methods. No cast available for Frame/Content/Panel/SmartPanel/Embeded/ThreeStateCheckbox/Window — no script class exists.ShowCursor(true) / ShowCursor(false) must be paired.Pause() / Continue() (on Mission) must be paired..styles and .imageset in CfgMods under class defs { class widgetStyles / class imageSets }. Layouts don't need registration.scriptclass must reference an existing class — typos fail silently at runtime.Full reference — reference/layout-fundamentals.md and reference/widget-scripting.md.
Widget names in layouts are PascalCase. If a layout has a scriptclass, widget names can match field names in the script class for automatic binding via reflection (auto-bind). Mechanism details — reference/widget-scripting.md.
File locations:
| Type | Path |
|---|---|
| Layout | gui/layouts/ |
| Styles | gui/looknfeel/ |
| Imageset | gui/imagesets/ |
| Fonts | gui/fonts/ |
| Textures (.edds) | gui/textures/ |
Full reference — reference/widget-scripting.md.
g_Game.GetWorkspace().CreateWidgets("path/to/file.layout").root.FindAnyWidget("WidgetName") plus a mandatory cast (see above).widget.SetHandler(handlerInstance). Alternative — scriptclass in the layout.m_Root.Unlink() in the destructor or OnHide.Show(bool), Enable(bool).Full reference — reference/widget-scripting.md.
true means "event handled, do not propagate". false lets the event bubble up to the parent.true without actually handling the event breaks parent containers' logic (drag&drop, focus navigation). Return true only when the event is actually handled.UIScriptedMenu, widget events arrive directly in the menu's methods — SetHandler is not needed. The menu does not extend ScriptedWidgetEventHandler; instead it declares its own copy of the same event method set, and the engine routes layout events into them.Full reference — reference/widget-scripting.md.
UIScriptedMenu — for interaction with pause / cursor / input blocking. Registered in MissionBase.CreateScriptedMenu, opened via g_Game.GetUIManager().EnterScriptedMenu(MENU_ID, null).OnMissionStart, updated in OnUpdate or via g_Game.GetCallQueue(CALL_CATEGORY_GUI).CallLater(...).Full reference — reference/style-system.md, reference/imageset-format.md, reference/edds-format.md.
.styles define the visual appearance of widgets via Item-slots and states. Applied to a widget through the style property..imageset — texture atlases that define named regions inside a .edds file. Used in layouts (image0 "set:name image:icon") and in styles..edds — the engine's primary texture format. Created from PNG/TGA via Workbench import. Receive a GUID on import: {D2377E3C2ECB1102}path.edds.| File | Contents |
|---|---|
reference/layout-fundamentals.md | .layout syntax, property-group inheritance, common Widget properties, positioning |
reference/widget-catalog.md | All widgets — type-specific properties, key notes |
reference/style-system.md | .styles format, Item-slot and state concepts, registration via CfgMods |
reference/imageset-format.md | .imageset format, ImageSetClass/TextureClass/DefClass, .edds references via GUID, registration via CfgMods |
reference/edds-format.md | .edds format, use in imagesets and directly in widgets |
reference/widget-scripting.md | UI scripting — base API, events, UIScriptedMenu, HUD elements |
reference/ui-pitfalls.md | Catalog of UI mistakes and their consequences |
.layout file → reference/layout-fundamentals.md.reference/widget-catalog.md..styles, or "why does my widget look default" → reference/style-system.md.image0 or imageTexture properties → reference/imageset-format.md and reference/edds-format.md.reference/widget-scripting.md.reference/ui-pitfalls.md.Provides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub tomatolabz/dayzscope --plugin dayz-scope