Client Development RmlUi vs. Legacy TOP UI — Is Migration Worth It?

Mothanna

Very Active Pirate
Veteran
Developer
Server Owner
Registered
LV
4
 
Joined
Dec 29, 2025
Messages
93
Reaction score
65
Points
33
Website
satisfy.live

After working on the migration, I can now give a more practical comparison between RmlUi and TOP’s legacy UI system.

The video may be a little long, and I probably didn’t cover every part of the skin. Creating the UI shown in the video took around 7–9 full working days. However, the visual skin was only one part of the work.
Note from here and below ai generated based on my .md too lazy to write them :devilish: so u can skip all and jump Final Verdict and the video

-----------------------------------------------------------

A complete migration also required changes in MindPower and the client for:
  1. Mouse press, release, hover, and capture states​
  2. Preventing UI clicks from moving the character​
  3. Tooltips and item comparisons​
  4. Drag-and-drop between different forms​
  5. Keyboard shortcuts and text input​
  6. Window resizing and viewport clamping​
  7. 3D character, creature, boat, and item previews​
  8. Loading, shutdown, relog, and device-reset behavior​
Therefore, RmlUi should not be considered a simple replacement skin system. It is closer to a new presentation layer for the client.

Quick Comparison​


Area​
RmlUi​
Legacy TOP UI​
Simple fixed form​
More setup​
Usually faster​
Large UI project​
Easier to maintain​
Becomes repetitive​
Form layout​
RML/HTML structure​
Lua and native widgets​
Styling​
Shared RCSS/CSS​
Mostly images and per-control setup​
Button states​
CSS hover, active, focus, disabled​
Usually sprite frames or separate images​
Image requirements​
Fewer images​
Often needs images per button, page, and form​
Dynamic sizing​
Naturally supported​
Requires client/MindPower changes​
Scrolling​
Built-in behavior​
Usually requires dedicated controls and code​
Live editing​
RML, RCSS, and palette can reload​
Requires a custom client implementation​
Runtime themes​
Easy after the theme system exists​
Requires more form-specific work​
Dragging forms​
One reusable controller​
Commonly implemented per form​
Text counters​
One reusable behavior​
Usually implemented separately per input​
Tooltips​
One shared presentation layer​
Often connected directly to native widgets​
Input ownership​
Can be centralized​
Distributed across forms and managers​
Localization​
Better Unicode and font support​
Limited by old text paths​
3D previews​
Still requires native integration​
Already integrated with native widgets​
Gameplay logic​
Existing managers remain authoritative​
Existing managers and forms are coupled​
Future renderer changes​
UI documents can remain unchanged​
UI rendering is tied more closely to DX9​
Learning curve​
Requires CSS, RML/HTML, and C++​
Easier for existing TOP developers​
Testing requirements​
Large input and lifecycle matrix​
Existing behavior is already known​

Advantages of RmlUi​

1. Far fewer image assets​

With the legacy system, a developer often needs separate image states for each button, form, tab, background, and page.

With RmlUi, CSS can provide:
  • Background colors​
  • Borders​
  • Hover states​
  • Pressed states​
  • Disabled states​
  • Selection states​
  • Spacing and alignment​
Images are still useful for item icons, skill icons, portraits, and decorative artwork, but they are no longer required for every basic control.
In this migration, the asset cleanup removed more than 1,300 unused or duplicated legacy UI images. The remaining assets were organized by purpose and converted to PNG.​

2. One style can update many forms​

The migrated UI uses a shared semantic theme. Colors such as panel backgrounds, buttons, borders, text, selections, scrollbars, and modal backdrops are defined centrally.

Changing one theme value can update the complete UI instead of editing every form individually.

The current implementation supports:
  • Satisfy​
  • Ice Blue​
  • Midnight Cyan​
  • Royal Blue​
  • Custom RGBA colors​
  • Live theme preview​
  • Saved user themes​
  • Reset to the default theme​
It is important to clarify that theme switching is not completely free. The theme system and selector must be implemented once. After that, new skins generally do not require form-by-form C++ changes.

3. Live UI editing​

RML, RCSS, and theme files can be reloaded while the client is running.

This makes it much faster to adjust:
  • Form dimensions​
  • Positions​
  • Colors​
  • Padding and spacing​
  • Font sizes​
  • Scrollable areas​
  • Button states​
  • Compact and wide layouts​
C++ changes, new fonts, and native rendering changes still require a rebuild or restart.

4. Better reusable UI behavior​

Instead of implementing the same behavior separately for every form, RmlUi allows shared systems for:
  • Panel dragging and viewport clamping​
  • Character counters​
  • UI hotkeys​
  • Confirmation and quantity dialogs​
  • Item tooltips​
  • Input focus​
  • World-click blocking​
  • Context menus​
  • Theme colors​
This requires more architecture at the beginning, but reduces repeated code as the migration grows.

5. Better separation between UI and gameplay​

In the migrated client, RmlUi owns presentation and interaction, while the existing native systems remain authoritative for:
  • Packets​
  • Inventory rules​
  • Item validation​
  • Equipment​
  • Storage​
  • Guild permissions​
  • Quest data​
  • NPC trading​
  • Stalls​
  • Skills​
  • Character models​
  • Maps and navigation​
For example, RmlUi displays item tooltips, but CItemCommand::AddHint still creates the actual tooltip information. This avoids rewriting or accidentally changing game rules inside RML or CSS.

6. Better input handling​

The migration introduced centralized input ownership:
  1. RmlUi receives the event first.​
  2. Remaining legacy interfaces receive it when appropriate.​
  3. The world receives it only if no UI consumed it.​
This solves common problems such as:
  • Clicking a button and walking at the same time​
  • Losing a mouse release after dragging​
  • Hotkeys activating while typing​
  • Clicking through a modal​
  • A form underneath another form receiving input​
The legacy UI can also be fixed to handle these cases, but the work is usually spread across more individual forms and managers.

7. Better text and localization support​

The RmlUi path supports FreeType fonts, UTF-8 text, clipboard input, IME handling, font fallbacks, and the current project’s Arabic shaping and bidirectional text bridge.

The legacy client can be modified to support these features, but its original text path was more limited and closely connected to the old font renderer.

Disadvantages of RmlUi​

1. The initial integration is significantly harder​

A proper implementation needs more than RML and CSS. The current client required:
  • A custom Direct3D 9 RmlUi renderer​
  • Texture and geometry support​
  • Scissor handling​
  • Render-state restoration​
  • Mouse and keyboard routing​
  • Unicode and IME handling​
  • Resize handling​
  • Device loss and reset handling​
  • Correct initialization and shutdown order​
For a small number of ordinary forms, this initial investment may not be justified.

2. Each form can involve three layers​

A migrated form usually contains:
  • RML for its structure​
  • RCSS for its appearance​
  • C++ for data, events, and native game integration​
This is cleaner for large systems, but it can feel slower than creating one fixed legacy form—especially for developers already familiar with the old Lua form system.

3. CSS and layout knowledge are required​

A developer needs to understand:
  • Element flow​
  • Flex layouts​
  • Padding and margins​
  • Relative and absolute positioning​
  • Overflow and scrolling​
  • Hover, focus, and disabled states​
  • Viewport behavior​
CSS can save a lot of time, but only after the learning curve.

4. Complex game UI is still complex​

RmlUi does not automatically solve:
  • Inventory transaction rules​
  • Cross-form item dragging​
  • 3D character previews​
  • Minimap and world-map rendering​
  • Creature and boat previews​
  • Native item and skill overlays​
  • Server confirmations​
  • Equipment attachment effects​
In this project, these systems still use native game managers and renderers behind RmlUi-owned viewports.

5. The current DX9 adapter has visual limits​

The temporary Direct3D 9 renderer supports the basic features needed by the current UI. Advanced effects such as filters, complex masks, layers, shaders, and certain transforms are intentionally avoided.

These features should wait until the future bgfx renderer supports and validates them.

6. Migration requires extensive testing​

A form is not complete just because it looks correct. It must also be tested for:
  • Windowed and fullscreen modes​
  • Compact and wide resolutions​
  • Resize and viewport clamping​
  • Mouse capture and drag release​
  • Keyboard and text focus​
  • Escape and Enter behavior​
  • Relog and map switching​
  • Repeated opening and closing​
  • Device loss and reset​
  • Missing or long localized text​
  • Clean client shutdown​
  • Server failure and confirmation states​
The visual work may be fast, but achieving full behavioral parity takes considerably longer.​

Final Verdict

RmlUi is probably not worth the migration if:
  • You only need a few simple fixed forms.
  • You are satisfied with the existing appearance.
  • You do not need runtime themes or live editing.
  • Your developers already work much faster with the legacy system.
  • You do not plan to modernize the client further.
RmlUi is probably worth it if:
  • You want to create or maintain a complete modern skin.
  • You need dynamic and responsive layouts.
  • You want fewer form-specific images.
  • You want scrolling and reusable controls by default.
  • You want live RML/RCSS editing.
  • You want multiple runtime themes.
  • You need improved Unicode and localization.
  • You want clearer separation between presentation and gameplay.
  • You plan to move the renderer to bgfx, DX11, or Vulkan later.
For a simple form, the legacy system remains faster. For a large, evolving UI, RmlUi requires more effort at the beginning but offers much better flexibility and long-term maintainability.

My conclusion is that RmlUi is worth using for a serious client modernization project, but it is not a shortcut. The visual skin can be completed relatively quickly; the real work is achieving full gameplay parity, stable input handling, correct native integration, and reliable behavior across the entire client.


 
Agreed, and worth the time & effort imo. It will take time, and if you suck its going to take a lot more time xD

Nice post is nice
 
Agreed, and worth the time & effort imo. It will take time, and if you suck its going to take a lot more time xD

Nice post is nice
tbh ye it worth it if you're willing to rework all old system but if you just aim new look stick with legacy forms
example the rework of forge and craft system , which auto place your items in process area much easier to be done with this migration , and same for stall setup, stall events , what i like mostly the supported chat arabic,chinese etc
and most important part ! as its ai era , with this migration u can just tell ai do x do x and done as its same as doing website css parts

p.s if anyone want handoff chat migration md i can pass that but its too long