UI Image Set XML
The interface does not use one file per icon. It uses a few big textures and cuts boxes out of them. xml/uiimageset.xml lists the textures (image sets) and the named boxes (images) on each. Every window, button and icon in the client refers to a box by name.
This page follows the client loader (ioUIImageSetManager in io3DEngine) and the web tools. Anything marked not confirmed yet was not verified.
Where the client loads it
Section titled “Where the client loads it”ioSP2GUIManager::InitManager loads two files when the GUI starts, in this order:
XML/UIImageSet.xml(the image sets, this page)XML/DefaultUIFrame.xml(frame templates that windows use)
The file is read through the pack lookup, so it comes from rs.iop first (see IOP Pack Format). Names in the pack are not case-sensitive, so uiimageset.xml and UIImageSet.xml are the same file.
File layout
Section titled “File layout”<?xml version="1.0" encoding="euc-kr" ?><ImagesetLayout> <Imageset Name="BaseImage001" File="ui_base001.dds"> <Image Name="strip_black" X="0" Y="0" Width="64" Height="32" /> <Image Name="icon_a" X="64" Y="0" Width="32" Height="32" OffsetX="2" OffsetY="1" /> </Imageset></ImagesetLayout>The example values are made up to show the shape. The file is ASCII text with the euc-kr declaration. Keep names to plain ASCII.
Imageset attributes
Section titled “Imageset attributes”| Attribute | Required | Meaning |
|---|---|---|
Name |
yes | Name of the set, used in set#image names |
File |
yes | Texture file name, a bare name such as ui_base001.dds. The client looks it up as a texture (normally in resource/texture) |
Erase |
no | When the texture may be freed: Automatic (default), Manual or NoErase. Any other text is read as Automatic |
NowLoad |
no | true loads the texture right at start. Otherwise it loads the first time an image of the set is drawn |
A set is skipped if Name or File is empty. If two sets share a name, the client logs “Set Already Exist”, keeps the first set (and its texture) and adds the images of the second block to it. An image with a name that the set already has is ignored: the client logs “Image Already Define” and keeps the first box (ioUIImageSet::DefineImage, same in all three sources). To change a box, edit it; a second copy further down has no effect.
Image attributes
Section titled “Image attributes”| Attribute | Required | Meaning |
|---|---|---|
Name |
yes | Name of the box inside the set |
X, Y |
yes | Top left corner on the texture, in pixels |
Width, Height |
yes | Size of the box in pixels |
OffsetX, OffsetY |
no | Shift applied when the image is drawn. Missing means 0; the client writes these only when not 0 |
The loader does not check the box against the texture size. A box outside the picture draws garbage or nothing.
How other files refer to an image
Section titled “How other files refer to an image”A window or code asks for an image by its full name, set#image, for example BaseImage001#strip_black. The client splits it at the #:
- two parts: set name and image name (
CreateImageByFullName) - anything else: the whole text is taken as a texture file name and a single-image set is made on the fly. The client logs “Not Vaild” for this case
Window XML files can also give the set and the image as separate attributes (Imageset="..." Image="..."). See Window XML.
Because the name is the only link, renaming or deleting a box breaks every window and code line that uses it. Add new boxes instead of changing old names.
Differences between the sources
Section titled “Differences between the sources”ioUIImageSetManager.cpp is identical in the 2014, 2019 and 2021 sources, and all three load XML/UIImageSet.xml the same way. The content differs by client: each has its own sets and boxes. The 2014 test client has 503 sets and 14 780 images (counted with the web tools).
| Tool | Use |
|---|---|
| UI Image Sets | Shows the boxes on the texture. Add, move, resize, duplicate, delete. Lines you did not touch are written back byte for byte, including the file’s mixed line breaks |
| UI Windows | Reads the file to draw the images of a window |
| Textures | Opens the .dds files the sets point at |
| IOP Manager | Puts the edited XML into a pack |
Not confirmed yet
Section titled “Not confirmed yet”- Whether the client also reads sets from other XML files besides
XML/UIImageSet.xmlin the 2021 build. - How big a texture may be before an older graphics card refuses it.
