GUI Format (Panel Layout)
A .gui file describes one screen of the game’s interface: a panel rectangle
and a flat list of controls with their tags, positions, borders, text and
colours. The in-game HUD, the equipment screen, the main menu and the message
boxes each have one.
GUI is built on GFF (Generic File Format), the engine’s labelled key/value tree. If you have not read the GFF page, start there.
This page documents what the shared panel loader reads, why the rest of the file reaches the engine only by name, and what a corpus census of every shipped
.guishows about which paths are structural. Evidence is drawn from Ghidra decompilation ofswkotor.exe(K1 GOG build), cross-checked against every.guiin a full install.
At a Glance
| Property | Value |
|---|---|
| Extension(s) | .gui |
| Magic Signature | GUI / V3.2 |
| Type | Interface panel layout |
| Rust Reference | No typed view. Read as a generic GFF tree via rakata_formats::Gff |
Population. The files live in data/gui.bif, indexed by chitin.key, plus
a handful in patch.erf. Most of the patch copies shadow resrefs that also
exist in gui.bif (abilities, character, equip, inventory,
mainmenu), and two appear nowhere else (mipc212x10, tooltip12x10). The
type occurs in no module RIM, no lips archive and no texture pack.
Every count on this page is measured over that population, and the census at the end gives it as a denominator, so the numbers there are the finding rather than decoration.
A .gui restyles a panel the binary already knows about
It cannot describe a new one. This is the fact the rest of the page depends on, and the format’s name works against it. There is no generic GUI loader that reads a control list and builds an interface from it.
What the shared panel loader does is narrow. It reads the panel’s extent,
colour, border and alpha, stores the CONTROLS list unparsed, and
instantiates nothing from it. Every actual screen in the game is a hand-written
C++ class with its controls declared as typed members at compile time. Each of
those classes asks for the controls it wants one at a time, by literal tag
string, and the lookup scans the stored list for an element whose TAG
matches, then hands that element to the member’s own loader.
So the file supplies values to a structure the executable already fixed:
- Add a control with a new tag and nothing will ask for it. Nothing in the executable is waiting for that name, and nothing walks the list looking for work. Your control is read into memory, never matched, and never drawn.
- Rename a control and the panel loses it. The screen still asks for the old name, finds nothing, and carries on without it.
- You cannot change what kind of control something is. The kind was decided when the game was built. The file does not get a vote.
- What you can change is real and substantial. Move and resize controls, restyle borders and fills, swap fonts, colours, text and alignment, repoint images. That is exactly what interface mods do, and it works because none of it touches the structure.
Important
No two
.guifiles have the same read set, so counting how often a label appears tells you nothing about whether it is used Which labels get read depends entirely on which screen opened the file, and each screen asks only for the controls it knows by name. A label sitting in a file that its screen never asks for is untouched in that file, while the same label is load-bearing in another file opened by another screen.So the census at the end of this page describes what artists wrote, not what the engine reads. The one table you can read as “the engine uses these” is the panel-level one below, because the shared loader takes those from every
.guiwhatever screen it belongs to.
Field Schema
| Family | Covers | Representative paths |
|---|---|---|
| Panel frame | The rectangle, fill and border the shared loader reads from every file | EXTENT, COLOR, BORDER, ALPHA |
| Control list | The flat list every screen looks into by tag | CONTROLS, CONTROLS[]/TAG, CONTROLS[]/ID |
| Per-control styling | Borders, highlight and selection states, text and font | BORDER, HILIGHT, SELECTED, TEXT |
| Image styling | How an image is drawn, flipped and rotated | IMAGE, ROTATE, FLIPSTYLE, DRAWSTYLE |
| Composite slots | Named sub-controls a listbox or scrollbar owns | PROTOITEM, SCROLLBAR, THUMB, PROGRESS |
Every label path any shipped file carries is tabulated at the end of this page. There is no schema to generate it from, so that table is a corpus census rather than a declaration.
Engine Audits & Decompilation
Read from CSWGuiPanel::StartLoadFromLayout at 0x0040a680, with the control
lookup and the listbox dispatch traced separately.
(Provenance: traced, except ALIGNMENT’s bitfield split, which is marked
inferred below. Corpus figures are measured over the population named
above.)
| Pipeline event | Engine behaviour |
|---|---|
| Panel load | Reads extent, colour, border or background, and alpha, then stores the CONTROLS list without walking it. |
| Control lookup | CSWGuiControl::Load (0x00418840) scans the stored list for an element whose TAG matches a requested string and hands it to the caller’s own loader. The requested string is a literal in the panel class. |
| Per-panel classes | Every screen class in the client reaches the control initialiser, each with its own hardcoded set of tags and its own pre-typed members. This is why there is no shared read set. |
| Listbox item template | CSWGuiListBox::LoadProtoItem (0x0041d3e0) is the sole CONTROLTYPE dispatch, with the default case creating nothing. |
| Scrollbar | CSWGuiListBox::Load (0x0041d5b0) loads the scrollbar into an already-typed member, so no dispatch occurs on that path. |
| Extent | CSWGuiExtent::Load (0x00409dc0) stores four plain integers. |
| Image fields | CSWGuiImage::Load (0x00416196) is where DRAWSTYLE, FLIPSTYLE, ROTATESTYLE and the ROTATE precedence live. |
What the shared panel loader reads
These are read for every file, before any panel class gets involved.
| Label | GFF type | Behaviour |
|---|---|---|
EXTENT | Struct | The panel rectangle |
EXTENT/LEFT, TOP, WIDTH, HEIGHT | INT | Default 0 each, kept exactly as written. Plain pixel counts rather than fractions, and nothing scales them on the way in. |
COLOR | Vector3 | |
BORDER | Struct | Falls back to BACKGROUND when absent. No shipped file carries a BACKGROUND; see below. |
ALPHA | FLOAT | 1.0 wherever it appears, which is every file but one. Not a default; see below. |
CONTROLS | List | Kept as-is for the tag lookups that come later. Nothing is built from it here. |
A small set of paths is carried by every file in the population: BORDER with
its CORNER, EDGE, FILL, DIMENSION and FILLSTYLE; CONTROLS;
CONTROLTYPE; EXTENT with its four members; Obj_Locked; and TAG.
Two rows above are observations rather than rules, where every other row gives a value a reader can rely on.
ALPHA has no established default. It holds 1.0 in every file that
carries it, and debug in data/gui.bif is the one file that omits it. So a
single shipped file exercises the case the table cannot answer, and 1.0 is
what the files show rather than what an absent field resolves to.
BACKGROUND is a real label, and it is a flat resref rather than a struct.
Where the panel’s BORDER sub-struct is absent, the loader reads BACKGROUND
as a CResRef defaulting to the empty string and passes it straight in as the
border’s fill image. Where BORDER is present it is never read at all, so this
is strictly the fallback rather than a field consulted alongside a full border
definition.
No shipped file takes that path. BACKGROUND appears nowhere in the census
further down, which covers every .gui in the install. The branch is real and
the data never reaches it, which is a different thing from a label that does not
exist.
CONTROLTYPE decides nothing except in a listbox item template
After all that, the field has one job and it is a narrow one. The only place the
value chooses anything is PROTOITEM, the template a listbox stamps out for
each of its rows. Here the file really does pick the kind of control, because a
listbox has any number of rows and the game cannot have named them all in
advance.
| Value | Produces |
|---|---|
4 | Label |
5 | Label with highlight |
6 | Button |
7 | Toggle button |
8 | Slider |
Anything else silently produces nothing. 0 through 3, and 9 upward,
make no control and no complaint. The template is left as it was, so a listbox
with an unrecognised PROTOITEM type comes out empty rather than broken, and
nothing tells you which of the two you are looking at.
Everywhere else the value does nothing. A SCROLLBAR goes into a slot whose
kind was already decided, so there is nothing for the value to choose. The files
agree: 9 shows up at CONTROLS[]/SCROLLBAR/CONTROLTYPE and nowhere else.
Across the corpus the attested values are 2 at the panel root, 4 through
8, 10 and 11 in the control list, 4 through 7 on PROTOITEM, and 9
on SCROLLBAR. 0, 1 and 3 occur nowhere.
Field results
ALIGNMENT
It packs two axes into one number rather than listing combinations. Every
value in the files, 9, 10, 12, 17, 18, 20 and 34, splits into
exactly one horizontal bit out of {1, 2, 4} plus exactly one vertical bit out
of {8, 16, 32}, and the engine has separate horizontal-only and vertical-only
setters beside the combined one.
The loader passes the whole number along untouched, so (provenance:
inferred) the split comes from the shape of the values and those setters.
Defaults vary by control: 0x12 on images, 9 on text.
TEXT/STRREF and TEXT/TEXT
They are alternatives, and no shipped control uses both. Both labels are
populated across the install, which makes it look as though a writer must know
which wins. Per control rather than per file: some TEXT structs carry a live
STRREF, some a non-empty TEXT string, most neither, and none carries
both. The precedence question is not merely undocumented, it is unexercised.
Populate one. A localized string goes in STRREF, a literal in TEXT.
Setting both puts the file outside anything the game’s own data does.
ROTATE and ROTATESTYLE
ROTATE wins outright where it is present, and ROTATESTYLE is then never
read at all. Where ROTATESTYLE is read, 0, 1, 2 and 3 mean 0, 90, 180
and 270 degrees, and anything else leaves the rotation wherever ROTATE
defaulted. Every shipped file holds 0, so this comes from the code rather than
the data.
ROTATE is in degrees, and the pairing is what proves it. The float is
stored into the image’s angle with no unit conversion anywhere on the path, and
ROTATESTYLE writes the same field using the literals 0.0, 90.0,
180.0 and 270.0. Those are unambiguously degrees and nothing scales between
the two paths, so the shared destination settles the unit by construction rather
than by the usual assumption about angles in a file format.
FLIPSTYLE and DRAWSTYLE
FLIPSTYLE is treated as bits whatever you write in it. The loader masks it
into a four-bit slot of the image’s flag word, which is true of the code rather
than of the values that ship. Shipped files hold 0.
DRAWSTYLE is read and passed along whole, with nothing masking or
splitting it, and is 0 in every file.
Obj_ParentID, and the three labels beside it
Obj_ParentID really does wire controls together. The shared control loader
reads it as an INT defaulting to -1, and where it is anything else it looks
up another control in the same panel by numeric ID and attaches the two as
parent and child. The -1 is an ordinary
equality sentinel, compared as signed. Most files carry it.
Important
No reader can exist for
Obj_Locked,Obj_ParentorObj_LayerSearch the whole executable and you findObj_ParentIDand not one of the other three. The engine’s GFF readers take a field name as a literal string, so a label appearing nowhere in the executable can never be asked for on any path. That is the strong form set out under the standard of evidence.
Obj_Lockedis in every single file, and a field that universal looks important. It is what the toolset writes every time and what the engine has no name for.
What the files look like
The census at the end sounds sprawling and is not. The shape repeats, and most of its length is the same handful of sub-structs recurring under different slots.
Controls nest by named slot, never by list. A panel holds one flat
CONTROLS list and no control holds a nested one. Two of the named slots are
themselves control-shaped, carrying their own CONTROLTYPE, EXTENT, BORDER
and TAG: PROTOITEM and SCROLLBAR. The rest, TEXT, HILIGHT, MOVETO,
PROGRESS, THUMB, and PROTOITEM’s own SELECTED and HILIGHTSELECTED,
carry no CONTROLTYPE and so are never a control in their own right.
Every CONTROLS element in every file has GFF struct_id 0, so the struct
id carries no type information here. Contrast GIT, where it
discriminates object kinds.
Value sets small enough to be enumerations rather than ranges:
| Path | Attested values |
|---|---|
FILLSTYLE | 0, 1, 2 |
BORDER/DIMENSION | 0, 1, 2, 4, 6, 16, 32 |
PULSING | 0, 1, 2 |
Obj_Locked | 0 or 1 |
TEXT/FONT | dialogfont10x10, dialogfont16x16, fnt_console, fnt_d16x16 |
Panel-level COLOR takes (-1, -1, -1) in some files, which has the shape of a
sentinel and is recorded here as a value.
One file carries an empty CONTROLS list, which is why every CONTROLS[]/...
path in the census sits one below the population total or lower.
Open questions
- Which of
TEXT/STRREFandTEXT/TEXTwins when both are set. No shipped control populates both, so the precedence is unexercised by the corpus as well as untraced. On the reverse-engineering queue. - Whether
DRAWSTYLEis an enumeration or a bitfield. It is read and passed along whole with nothing masking or splitting it, and holds0in every file, so neither the code nor the data distinguishes the two readings. - Whether
EXTENTvalues are rescaled downstream.CSWGuiExtent::Loadstores four plain integers and the stored value is a literal pixel count. What a later render stage does with them for the active resolution was not traced. ALIGNMENT’s bitfield split is inferred, from the shape of the attested values and the existence of separate per-axis setters, rather than traced through the loader.
Implemented Linter Rules (Rakata-Lint)
None yet. No rule currently reads this format.
Every label path
The complete set, so a reader does not have to infer it from the examples above.
Measured across every .gui in data/gui.bif and in patch.erf, which is the
population named at the top of this page.
The Files column is how many of those carry the path. One that appears in all of them is structural; one that appears in a single file is that screen’s own peculiarity. Telling those apart is most of what you need before writing a reader, and it is exactly what a list of examples cannot give you.
| Path | Type | Files |
|---|---|---|
ALPHA | FLOAT | 90 |
BORDER | Struct | 91 |
BORDER/COLOR | Vector3 | 85 |
BORDER/CORNER | CResRef | 91 |
BORDER/DIMENSION | INT | 91 |
BORDER/EDGE | CResRef | 91 |
BORDER/FILL | CResRef | 91 |
BORDER/FILLSTYLE | INT | 91 |
BORDER/INNEROFFSET | INT | 86 |
BORDER/PULSING | BYTE | 86 |
COLOR | Vector3 | 90 |
CONTROLS | List | 91 |
CONTROLS[]/BORDER | Struct | 90 |
CONTROLS[]/BORDER/COLOR | Vector3 | 85 |
CONTROLS[]/BORDER/CORNER | CResRef | 90 |
CONTROLS[]/BORDER/DIMENSION | INT | 90 |
CONTROLS[]/BORDER/EDGE | CResRef | 90 |
CONTROLS[]/BORDER/FILL | CResRef | 90 |
CONTROLS[]/BORDER/FILLSTYLE | INT | 90 |
CONTROLS[]/BORDER/INNEROFFSET | INT | 86 |
CONTROLS[]/BORDER/PULSING | BYTE | 86 |
CONTROLS[]/COLOR | Vector3 | 49 |
CONTROLS[]/CONTROLTYPE | INT | 90 |
CONTROLS[]/CURVALUE | INT | 17 |
CONTROLS[]/EXTENT | Struct | 90 |
CONTROLS[]/EXTENT/HEIGHT | INT | 90 |
CONTROLS[]/EXTENT/LEFT | INT | 90 |
CONTROLS[]/EXTENT/TOP | INT | 90 |
CONTROLS[]/EXTENT/WIDTH | INT | 90 |
CONTROLS[]/HILIGHT | Struct | 72 |
CONTROLS[]/HILIGHT/COLOR | Vector3 | 71 |
CONTROLS[]/HILIGHT/CORNER | CResRef | 72 |
CONTROLS[]/HILIGHT/DIMENSION | INT | 72 |
CONTROLS[]/HILIGHT/EDGE | CResRef | 72 |
CONTROLS[]/HILIGHT/FILL | CResRef | 72 |
CONTROLS[]/HILIGHT/FILLSTYLE | INT | 72 |
CONTROLS[]/HILIGHT/INNEROFFSET | INT | 72 |
CONTROLS[]/HILIGHT/PULSING | BYTE | 72 |
CONTROLS[]/HILIGHTSELECTED | Struct | 16 |
CONTROLS[]/HILIGHTSELECTED/COLOR | Vector3 | 16 |
CONTROLS[]/HILIGHTSELECTED/CORNER | CResRef | 16 |
CONTROLS[]/HILIGHTSELECTED/DIMENSION | INT | 16 |
CONTROLS[]/HILIGHTSELECTED/EDGE | CResRef | 16 |
CONTROLS[]/HILIGHTSELECTED/FILL | CResRef | 16 |
CONTROLS[]/HILIGHTSELECTED/FILLSTYLE | INT | 16 |
CONTROLS[]/HILIGHTSELECTED/INNEROFFSET | INT | 16 |
CONTROLS[]/HILIGHTSELECTED/PULSING | BYTE | 16 |
CONTROLS[]/ID | INT | 90 |
CONTROLS[]/ISSELECTED | BYTE | 16 |
CONTROLS[]/LEFTSCROLLBAR | BYTE | 49 |
CONTROLS[]/LOOPING | BYTE | 49 |
CONTROLS[]/MAXVALUE | INT | 17 |
CONTROLS[]/MOVETO | Struct | 70 |
CONTROLS[]/MOVETO/DOWN | INT | 70 |
CONTROLS[]/MOVETO/LEFT | INT | 70 |
CONTROLS[]/MOVETO/RIGHT | INT | 70 |
CONTROLS[]/MOVETO/UP | INT | 70 |
CONTROLS[]/Obj_Layer | INT | 1 |
CONTROLS[]/Obj_Locked | BYTE | 90 |
CONTROLS[]/Obj_Parent | CExoString | 90 |
CONTROLS[]/Obj_ParentID | INT | 83 |
CONTROLS[]/PADDING | INT | 49 |
CONTROLS[]/PARENTID | INT | 1 |
CONTROLS[]/PROGRESS | Struct | 12 |
CONTROLS[]/PROGRESS/COLOR | Vector3 | 12 |
CONTROLS[]/PROGRESS/CORNER | CResRef | 12 |
CONTROLS[]/PROGRESS/DIMENSION | INT | 12 |
CONTROLS[]/PROGRESS/EDGE | CResRef | 12 |
CONTROLS[]/PROGRESS/FILL | CResRef | 12 |
CONTROLS[]/PROGRESS/FILLSTYLE | INT | 12 |
CONTROLS[]/PROGRESS/INNEROFFSET | INT | 12 |
CONTROLS[]/PROGRESS/PULSING | BYTE | 12 |
CONTROLS[]/PROTOITEM | Struct | 49 |
CONTROLS[]/PROTOITEM/BORDER | Struct | 49 |
CONTROLS[]/PROTOITEM/BORDER/COLOR | Vector3 | 47 |
CONTROLS[]/PROTOITEM/BORDER/CORNER | CResRef | 49 |
CONTROLS[]/PROTOITEM/BORDER/DIMENSION | INT | 49 |
CONTROLS[]/PROTOITEM/BORDER/EDGE | CResRef | 49 |
CONTROLS[]/PROTOITEM/BORDER/FILL | CResRef | 49 |
CONTROLS[]/PROTOITEM/BORDER/FILLSTYLE | INT | 49 |
CONTROLS[]/PROTOITEM/BORDER/INNEROFFSET | INT | 47 |
CONTROLS[]/PROTOITEM/BORDER/PULSING | BYTE | 47 |
CONTROLS[]/PROTOITEM/CONTROLTYPE | INT | 49 |
CONTROLS[]/PROTOITEM/EXTENT | Struct | 49 |
CONTROLS[]/PROTOITEM/EXTENT/HEIGHT | INT | 49 |
CONTROLS[]/PROTOITEM/EXTENT/LEFT | INT | 49 |
CONTROLS[]/PROTOITEM/EXTENT/TOP | INT | 49 |
CONTROLS[]/PROTOITEM/EXTENT/WIDTH | INT | 49 |
CONTROLS[]/PROTOITEM/HILIGHT | Struct | 33 |
CONTROLS[]/PROTOITEM/HILIGHT/COLOR | Vector3 | 32 |
CONTROLS[]/PROTOITEM/HILIGHT/CORNER | CResRef | 33 |
CONTROLS[]/PROTOITEM/HILIGHT/DIMENSION | INT | 33 |
CONTROLS[]/PROTOITEM/HILIGHT/EDGE | CResRef | 33 |
CONTROLS[]/PROTOITEM/HILIGHT/FILL | CResRef | 33 |
CONTROLS[]/PROTOITEM/HILIGHT/FILLSTYLE | INT | 33 |
CONTROLS[]/PROTOITEM/HILIGHT/INNEROFFSET | INT | 32 |
CONTROLS[]/PROTOITEM/HILIGHT/PULSING | BYTE | 32 |
CONTROLS[]/PROTOITEM/HILIGHTSELECTED | Struct | 6 |
CONTROLS[]/PROTOITEM/HILIGHTSELECTED/COLOR | Vector3 | 6 |
CONTROLS[]/PROTOITEM/HILIGHTSELECTED/CORNER | CResRef | 6 |
CONTROLS[]/PROTOITEM/HILIGHTSELECTED/DIMENSION | INT | 6 |
CONTROLS[]/PROTOITEM/HILIGHTSELECTED/EDGE | CResRef | 6 |
CONTROLS[]/PROTOITEM/HILIGHTSELECTED/FILL | CResRef | 6 |
CONTROLS[]/PROTOITEM/HILIGHTSELECTED/FILLSTYLE | INT | 6 |
CONTROLS[]/PROTOITEM/HILIGHTSELECTED/INNEROFFSET | INT | 6 |
CONTROLS[]/PROTOITEM/HILIGHTSELECTED/PULSING | BYTE | 6 |
CONTROLS[]/PROTOITEM/ISSELECTED | BYTE | 6 |
CONTROLS[]/PROTOITEM/Obj_Parent | CExoString | 49 |
CONTROLS[]/PROTOITEM/Obj_ParentID | INT | 47 |
CONTROLS[]/PROTOITEM/SELECTED | Struct | 6 |
CONTROLS[]/PROTOITEM/SELECTED/COLOR | Vector3 | 6 |
CONTROLS[]/PROTOITEM/SELECTED/CORNER | CResRef | 6 |
CONTROLS[]/PROTOITEM/SELECTED/DIMENSION | INT | 6 |
CONTROLS[]/PROTOITEM/SELECTED/EDGE | CResRef | 6 |
CONTROLS[]/PROTOITEM/SELECTED/FILL | CResRef | 6 |
CONTROLS[]/PROTOITEM/SELECTED/FILLSTYLE | INT | 6 |
CONTROLS[]/PROTOITEM/SELECTED/INNEROFFSET | INT | 6 |
CONTROLS[]/PROTOITEM/SELECTED/PULSING | BYTE | 6 |
CONTROLS[]/PROTOITEM/TAG | CExoString | 49 |
CONTROLS[]/PROTOITEM/TEXT | Struct | 49 |
CONTROLS[]/PROTOITEM/TEXT/ALIGNMENT | INT | 49 |
CONTROLS[]/PROTOITEM/TEXT/COLOR | Vector3 | 49 |
CONTROLS[]/PROTOITEM/TEXT/FONT | CResRef | 49 |
CONTROLS[]/PROTOITEM/TEXT/PULSING | BYTE | 47 |
CONTROLS[]/PROTOITEM/TEXT/STRREF | DWORD | 49 |
CONTROLS[]/PROTOITEM/TEXT/TEXT | CExoString | 49 |
CONTROLS[]/SCROLLBAR | Struct | 49 |
CONTROLS[]/SCROLLBAR/BORDER | Struct | 49 |
CONTROLS[]/SCROLLBAR/BORDER/COLOR | Vector3 | 47 |
CONTROLS[]/SCROLLBAR/BORDER/CORNER | CResRef | 49 |
CONTROLS[]/SCROLLBAR/BORDER/DIMENSION | INT | 49 |
CONTROLS[]/SCROLLBAR/BORDER/EDGE | CResRef | 49 |
CONTROLS[]/SCROLLBAR/BORDER/FILL | CResRef | 49 |
CONTROLS[]/SCROLLBAR/BORDER/FILLSTYLE | INT | 49 |
CONTROLS[]/SCROLLBAR/BORDER/INNEROFFSET | INT | 47 |
CONTROLS[]/SCROLLBAR/BORDER/PULSING | BYTE | 47 |
CONTROLS[]/SCROLLBAR/CONTROLTYPE | INT | 49 |
CONTROLS[]/SCROLLBAR/CURVALUE | INT | 49 |
CONTROLS[]/SCROLLBAR/DIR | Struct | 49 |
CONTROLS[]/SCROLLBAR/DIR/ALIGNMENT | INT | 49 |
CONTROLS[]/SCROLLBAR/DIR/DRAWSTYLE | INT | 49 |
CONTROLS[]/SCROLLBAR/DIR/FLIPSTYLE | INT | 49 |
CONTROLS[]/SCROLLBAR/DIR/IMAGE | CResRef | 49 |
CONTROLS[]/SCROLLBAR/DIR/ROTATE | FLOAT | 48 |
CONTROLS[]/SCROLLBAR/DIR/ROTATESTYLE | INT | 1 |
CONTROLS[]/SCROLLBAR/DRAWMODE | BYTE | 48 |
CONTROLS[]/SCROLLBAR/EXTENT | Struct | 49 |
CONTROLS[]/SCROLLBAR/EXTENT/HEIGHT | INT | 49 |
CONTROLS[]/SCROLLBAR/EXTENT/LEFT | INT | 49 |
CONTROLS[]/SCROLLBAR/EXTENT/TOP | INT | 49 |
CONTROLS[]/SCROLLBAR/EXTENT/WIDTH | INT | 49 |
CONTROLS[]/SCROLLBAR/MAXVALUE | INT | 49 |
CONTROLS[]/SCROLLBAR/Obj_Parent | CExoString | 49 |
CONTROLS[]/SCROLLBAR/Obj_ParentID | INT | 47 |
CONTROLS[]/SCROLLBAR/TAG | CExoString | 49 |
CONTROLS[]/SCROLLBAR/THUMB | Struct | 49 |
CONTROLS[]/SCROLLBAR/THUMB/ALIGNMENT | INT | 49 |
CONTROLS[]/SCROLLBAR/THUMB/DRAWSTYLE | INT | 49 |
CONTROLS[]/SCROLLBAR/THUMB/FLIPSTYLE | INT | 49 |
CONTROLS[]/SCROLLBAR/THUMB/IMAGE | CResRef | 49 |
CONTROLS[]/SCROLLBAR/THUMB/ROTATE | FLOAT | 48 |
CONTROLS[]/SCROLLBAR/THUMB/ROTATESTYLE | INT | 1 |
CONTROLS[]/SCROLLBAR/VISIBLEVALUE | INT | 49 |
CONTROLS[]/SELECTED | Struct | 16 |
CONTROLS[]/SELECTED/COLOR | Vector3 | 16 |
CONTROLS[]/SELECTED/CORNER | CResRef | 16 |
CONTROLS[]/SELECTED/DIMENSION | INT | 16 |
CONTROLS[]/SELECTED/EDGE | CResRef | 16 |
CONTROLS[]/SELECTED/FILL | CResRef | 16 |
CONTROLS[]/SELECTED/FILLSTYLE | INT | 16 |
CONTROLS[]/SELECTED/INNEROFFSET | INT | 16 |
CONTROLS[]/SELECTED/PULSING | BYTE | 16 |
CONTROLS[]/STARTFROMLEFT | BYTE | 12 |
CONTROLS[]/TAG | CExoString | 90 |
CONTROLS[]/TEXT | Struct | 89 |
CONTROLS[]/TEXT/ALIGNMENT | INT | 89 |
CONTROLS[]/TEXT/COLOR | Vector3 | 88 |
CONTROLS[]/TEXT/FONT | CResRef | 89 |
CONTROLS[]/TEXT/PULSING | BYTE | 86 |
CONTROLS[]/TEXT/STRREF | DWORD | 89 |
CONTROLS[]/TEXT/TEXT | CExoString | 64 |
CONTROLS[]/THUMB | Struct | 5 |
CONTROLS[]/THUMB/ALIGNMENT | INT | 5 |
CONTROLS[]/THUMB/DRAWSTYLE | INT | 5 |
CONTROLS[]/THUMB/FLIPSTYLE | INT | 5 |
CONTROLS[]/THUMB/IMAGE | CResRef | 5 |
CONTROLS[]/THUMB/ROTATE | FLOAT | 5 |
CONTROLTYPE | INT | 91 |
EXTENT | Struct | 91 |
EXTENT/HEIGHT | INT | 91 |
EXTENT/LEFT | INT | 91 |
EXTENT/TOP | INT | 91 |
EXTENT/WIDTH | INT | 91 |
Obj_Layer | INT | 1 |
Obj_Locked | BYTE | 91 |
Obj_ParentID | INT | 83 |
TAG | CExoString | 91 |