msw-ui-system

Designs, builds, and wires MapleStory Worlds .ui files via a CJS builder with component APIs and runtime mlua patterns.

Updated Sep 11, 2026
One-click install
npx skills add https://github.com/yoongang02/MapleFist --skill msw-ui-system-yoongang02
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: msw-ui-system
Source: https://github.com/yoongang02/MapleFist/tree/main/.agents/skills/msw-ui-system
Command: npx skills add https://github.com/yoongang02/MapleFist --skill msw-ui-system-yoongang02

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes scripts (resource) and references (resource) components.

What problem does it solve? Building UI in MapleStory Worlds requires hand-editing fragile .ui JSON where UUID, ValueType, and @components inconsistencies cause silent failures, and component field names cannot be inferred from Unity or other UI frameworks. This Skill provides a single entry point covering design guidance, the full component API, a guarded builder, and runtime .mlua patterns. ## Core Features & Use Cases - UIBuilder (msw_ui_builder.cjs): Create and patch .ui files with all node types (panel, text, sprite, button, slider, scrollLayout, textInput, group, mask, gridView, avatar, skeleton), 13 anchor presets plus stretch, component add/replace/patch/remove, and automatic .mlua UUID binding injection on write. - Design & API References: Anchor/pivot/RectTransform fundamentals, UIGroup/CanvasGroup hierarchy and z-order, component selection guides (Button vs UITouchReceive, ScrollLayoutGroup vs GridView), full property/method/event tables, and UI enums. - Layout Recipes & Runtime Patterns: Copy-ready recipes for HUD, modal popup, toast, tab menu, inventory grid, chat scroll, settings sliders, and clickable tiles, plus .mlua runtime patterns for popup open/close, HP bars, GridView OnRefresh, drag, and cooldowns. - Use Case: Build a modal confirmation popup with a dimmer, title, message, and OK/Cancel buttons, auto-inject the entity UUIDs into UIPopup.mlua property defaults, lint the result, and preview the layout before refreshing the engine. ## Quick Start Ask the AI to create a MapleStory Worlds HUD with a score display and HP bar using the msw-ui-system skill and wire the bindings into your .mlua script.

Frequently Asked Questions about msw-ui-system

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I create a .ui file in MapleStory Worlds?

Create .ui files through the UIBuilder class in msw_ui_builder.cjs using node methods like panel, text, sprite, button, and slider, then call b.write(path). Never hand-edit the .ui JSON, since manual edits break UUID and @components consistency and cause silent drops.

How do I connect a .ui file to .mlua code in MSW?

Pass a bind option to b.write(path, { bind: { mlua, props } }) or call b.injectBindings(mlua_path, props) to auto-inject entity UUIDs into .mlua property defaults. This replaces manual drag-binding in the editor.

Should I use ScrollLayoutGroup or GridView for a list in MSW?

Use ScrollLayoutGroup for static lists of roughly 10 or fewer items, and GridView for anything over 100 items or dynamically growing data like inventory, chat logs, and rankings. GridView virtualizes rendering and requires an OnRefresh callback.

Why is my MSW text stuck to the upper left instead of centered?

TextComponent.Alignment defaults to UpperLeft(0), so text that appears centered in design sticks to the upper-left at runtime. Always set Alignment explicitly, for example MiddleCenter(4) for titles or MiddleRight(5) for right-aligned numbers.

Can UI components be accessed from server-side mlua in MapleStory Worlds?

No. UI components are client-only; accessing them from server-side .mlua returns nil and there is no RPC for UI. Keep all UI field reads and writes in client scripts, as covered in the runtime patterns reference.

Why does my button not respond to clicks in MSW UI?

Check that the entity has ButtonComponent attached, the background SpriteGUIRenderer has RaycastTarget enabled, and no parent CanvasGroup has Interactable or BlocksRaycasts disabled. Also verify touch targets are at least 88x88 for mobile.