How to create custom login and character selection screens in MU Online
Learn how to fully customize the login and character selection screens of the MU Online client by editing .ozj/.ozt textures, interface layouts, and the Main.exe itself.
The login screen and the character selection screen are the player's first visual contact with your server. A generic login gives off the impression of "just another pirate server"; a well-made login, with its own logo, coherent art, and well-placed fields, conveys professionalism before the player
The login screen and the character selection screen are the player's first visual contact with your server. A generic login gives off the impression of "just another pirate server"; a well-made login, with its own logo, coherent art, and well-placed fields, conveys professionalism before the player even types their password. This tutorial covers the full customization flow: identifying the right files, converting and editing textures in the MU format, adjusting the layout controlled by Main.exe, handling transparency, and packaging everything for distribution. It is an advanced guide because it involves manipulating proprietary formats (.ozj/.ozt) and, in some cases, editing bytes of the executable.
Prerequisites
Before you start, have these on hand and installed:
- A complete client for your server with the IP already configured. If you have not set up the server yet, start with the guide on how to create a MU Online server and come back here afterward.
- An image editor with layer support: GIMP (free) or Photoshop.
- A MU texture converter (MU Image Converter, OZJ/OZT Converter, or the equivalent for your season). Each distribution has its preferred version — confirm which one matches your client.
- HxD (a free hex editor) to edit Main.exe when needed.
- Resource Hacker for embedded resources (icon, texts, version).
- A complete backup of the
Interface/folder andMain.exe.
How the login screen works under the hood
The login screen is not a single image — it is assembled in layers by the game engine. Understanding this split saves hours of trial and error:
| Layer | Where it lives | What it controls |
|---|---|---|
| Background | .ozj texture in the Interface/ folder | The fullscreen art behind everything |
| Field panel/frame | .ozt texture (with alpha) | The "little window" that holds the username and password |
| Buttons (Login, Exit, Create) | .ozt textures + coordinates in Main | The look and position of the buttons |
| Text and fonts | Rendered by Main.exe | Labels, version, error messages |
| Positioning (x,y) | Main.exe code | Where each element appears on the screen |
The critical point: swapping the art is easy, moving things around is hard. As long as you keep the dimensions and only repaint the textures, the engine puts everything where it already expected it. The moment you want to change coordinates (e.g., raise the fields 40 pixels), you have to touch Main.exe.
Interface/ folder of YOUR client to find the real names before you start editing.Locate the login and selection files
Explore the client folder. The typical structure (example, varies by season/client):
MU Online/
├── Interface/
│ ├── login.ozj ← login screen background (example)
│ ├── login_ok.ozt ← Login button (with alpha)
│ ├── login_exit.ozt ← Exit button
│ ├── newchar.ozj ← character creation background
│ └── character.ozj ← character selection background (example)
├── Data/
│ └── Local/ ← in some versions, localized texts
└── Main.exe
To figure out which file is which without guessing:
- Batch-convert all the
.ozj/.oztfiles in theInterface/folder to.jpg/.png; - Open the converted folder in Explorer in thumbnail mode;
- Visually identify the login background, the buttons, and the selection panel;
- Note the exact names and dimensions of each one (width x height).
MU texture formats and when to use each one
| Extension | Base | Transparency | Use on the login screen |
|---|---|---|---|
.ozj | JPEG | No | Fullscreen background, no transparency |
.ozt | TGA | Yes (alpha) | Buttons, frames, overlaid logos |
.ozb | BMP | No | Simple textures, small elements |
The golden rule: if the element needs to "bleed through" to show the background behind it (a button with rounded corners, a cut-out logo), it must be .ozt. If you save a cut-out logo as .ozj, the transparent corners turn into a black or white rectangle.
Edit the login screen background (step by step)
- Back it up:
copy Interface\login.ozj Interface\login.ozj.bak; - Convert the original to edit it:
login.ozj→login.jpgin the converter; - Open
login.jpgin GIMP/Photoshop and note the exact dimensions (e.g., 1024x768 — varies by season/client); - Build your art on a new layer on top, keeping the size identical:
- The server logo clearly visible (top or center);
- Slogan and website address;
- A "clean" space in the area where the login fields will appear, so it does not compete with the text;
- Export it back as
.jpgat 90% quality (heavily compressed JPEG creates ugly artifacts); - Convert
login.jpg→login.ozjin the converter; - Replace the file in the
Interface/folder; - Open Main and check the result.
Customize the buttons (with transparency)
The buttons (Login, Exit, Create Character) usually have two states drawn on the same texture or on separate textures: normal and "hover/pressed". To edit them:
- Convert the button's
.oztto.png(preserving the alpha channel); - In the editor, keep the transparency — do not flatten the image onto a solid background;
- Redraw the button while respecting the original clickable area (the engine uses the old coordinates);
- Export as
.pngwith the alpha preserved; - Convert back to
.ozt; - Replace it and test by hovering the mouse over the button.
Customize the character selection screen
The selection screen is assembled in a similar way, but it has one important detail: the 3D characters are rendered on top of the background, at fixed positions. That means your background art has to leave the "slots" where the characters appear clear.
Step by step:
- Identify and convert the selection background (e.g.,
character.ozj); - In the editor, mark the areas where the character models stand (usually three to five aligned positions);
- Place decorations and the logo only along the edges and at the top, avoiding those areas;
- Keep the resolution identical to the original;
- Reconvert to
.ozjand replace it; - Log in with an account that has created characters to validate that nothing covers the models.
Adjust the layout in Main.exe
When swapping the art is not enough and you need to move fields, buttons, or text, editing Main.exe comes into play. Without the client source code, this is done by locating and changing values in the executable.
To change fixed texts (labels, window title):
- Open
Main.exein HxD; Ctrl+F→ search for the current text (e.g.,Log In);- Replace it with the new characters — respecting the same number of bytes (if the new text is shorter, pad it with spaces);
- Save.
Length rule in hex editing:
Original text: "Log In" = 4C 6F 67 20 49 6E (6 bytes)
New text: "Sign In" = 53 69 67 6E 20 49 6E (7 bytes) DOES NOT FIT
New text: "Enter " = 45 6E 74 65 72 20 (6 bytes) OK
To move coordinates (the x,y position of a button) without the source, the process is far more delicate and specific to each build — you usually need a Main editing tool for your season or the client source itself. I do not recommend editing coordinates blindly in hex on production.
Test at different resolutions
Your art has to work not just on your screen. Test at least two or three of the resolutions the client supports:
- Set the resolution in
Setup.ini(or the client's equivalent config); - Open the login at each resolution;
- Check that the background does not stretch badly and that the fields stay readable;
- On widescreen displays, confirm that the art is not "cropped" at the sides.
Common errors and fixes
| Error | Likely cause | Fix |
|---|---|---|
| Client crashes when opening the login | Texture with dimensions different from the original | Recreate the art with the exact dimensions of the original file |
| Button turns into a black square | Transparency lost (saved as .ozj) | Re-export as PNG with alpha and convert to .ozt |
| Stretched/distorted background | Image aspect ratio changed | Keep the same width x height ratio as the original |
| Login text unreadable | Art too busy behind the fields | Leave a clean area where the fields appear |
| Main.exe will not open after a hex edit | Byte length changed | Restore the backup and re-edit keeping the same number of bytes |
| Texture does not update in the game | Client reading from another folder/package | Confirm whether the textures are loose or inside a data package |
| Characters covered in the selection screen | Art occupying the 3D model slots | Leave the character areas clear in the art |
Package and distribute
Once everything is tested, prepare the files for players to download:
# Compress only the changed files as a patch (PowerShell + 7-Zip)
& "C:\Program Files\7-Zip\7z.exe" a -t7z -mx=9 patch-login.7z Interface\ Main.exe
# Generate a hash for the player to verify integrity
Get-FileHash patch-login.7z -Algorithm SHA256 | Select-Object Hash
Publish the SHA256 hash alongside the download link. If you use a launcher/updater, add the changed files to the update list so players receive the new login automatically.
Launch checklist
- Backup of the
Interface/folder andMain.exestored in_original/ - Real names and dimensions of the login files confirmed in your client
- Login background recreated at the exact dimensions of the original
- Login field area kept clean and readable
- Buttons edited in
.oztwith transparency preserved - Selection screen with the 3D character slots left clear
- Main.exe texts translated without changing the number of bytes
- Login tested at least at two resolutions
- Client opened from scratch all the way to selection with no crashes
- Patch compressed and SHA256 hash published
- Files added to the launcher/updater list (if any)
Frequently asked questions
Is the login screen an image or is it embedded in the executable?
It depends on the season and the distribution. In many Season 6 clients the background is a .ozj texture in the Interface folder, but the positioning of the fields and buttons is controlled by Main.exe. In newer clients part of the layout lives in external UI files.
Do I need to recompile Main.exe to move the fields?
Not always. Swapping the art does not require recompiling, but moving field and button coordinates usually requires editing Main via hex or having the client source. Without the source, you are limited to replacing textures at the same dimensions.
What is the correct resolution for the login images?
It varies by season and client. A common reference value is 1024x768 for classic clients, but always keep the exact dimensions of the original file to avoid distortion. Check the size of the file you are going to replace before creating the art.
Can I use transparency in the login art?
Yes, for overlaid elements use .ozt (a TGA base with an alpha channel). The main background is normally .ozj (a JPEG base, no alpha). Choosing the wrong format makes the transparency vanish or turns into a black background.
How do I back up before editing?
Copy the entire Interface folder and Main.exe to an _original folder before any change. That way, if a texture or byte edit breaks the client, you restore it in seconds without downloading everything again.