This page is incomplete! You can contribute information using GitHub issues or pull requests.

...

Size on screen

The game uses a 640x480 UI space stretched to the player's resolution. The size of widgets within this space is usually 1:1 with their bitmap's size, making it hard to scale them down while retaining detail. You can work around it somewhat by using negative bounds values, but this doesn't help with some existing widget bitmaps that are heavily cropped by bounds already (like map previews, which use the same bitmaps from Xbox but are cropped for PC).

Structure and fields

FieldTypeComments
widget typeenum
OptionValueComments
container0x0
text box0x1
spinner list0x2
column list0x3
game model not implemented0x4
movie not implemented0x5
custom not implemented0x6
controller indexenum
OptionValueComments
player 10x0
player 20x1
player 30x2
player 40x3
any player0x4
nameTagString
boundsRectangle2D
FieldTypeComments
topint16
leftint16
bottomint16
rightint16
flagsbitfield
FlagMaskComments
pass unhandled events to focused child0x1
pause game time0x2
flash background bitmap0x4
dpad up down tabs thru children0x8
dpad left right tabs thru children0x10
dpad up down tabs thru list items0x20
dpad left right tabs thru list items0x40
dont focus a specific child widget0x80
pass unhandled events to all children0x100
render regardless of controller index0x200
pass handled events to all children0x400
return to main menu if no history0x800
always use tag controller index0x1000
always use nifty render fx0x2000
don't push history0x4000
force handle mouse0x8000
milliseconds to auto closeuint32
milliseconds auto close fade timeuint32
background bitmapTagDependency: bitmap
game data inputsBlock
  • HEK max count: 64
FieldTypeComments
functionenum
OptionValueComments
null0x0
player settings menu update desc0x1
unused0x2
playlist settings menu update desc0x3
gametype select menu update desc0x4
multiplayer type menu update desc0x5
solo level select update0x6
difficulty menu update desc0x7
build number textbox only0x8
server list update0x9
network pregame status update0xA
splitscreen pregame status update0xB
net splitscreen prejoin players0xC
mp profile list update0xD
3wide player profile list update0xE
plyr prof edit select menu upd80xF
player profile small menu update0x10
game settings lists text update0x11
solo game objective text0x12
color picker update0x13
game settings lists pic update0x14
main menu fake animate0x15
mp level select update0x16
get active plyr profile name0x17
get edit plyr profile name0x18
get edit game settings name0x19
get active plyr profile color0x1A
mp set textbox map name0x1B
mp set textbox game ruleset0x1C
mp set textbox teams noteams0x1D
mp set textbox score limit0x1E
mp set textbox score limit type0x1F
mp set bitmap for map0x20
mp set bitmap for ruleset0x21
mp set textbox0x22
mp edit profile set rule text0x23
system link status check0x24
mp game directions0x25
teams no teams bitmap update0x26
warn if diff will nuke saved game0x27
dim if no net cable0x28
pause game set textbox inverted0x29
dim unless two controllers0x2A
controls update menu0x2B
video menu update0x2C
gamespy screen update0x2D
common button bar update0x2E
gamepad update menu0x2F
server settings update0x30
audio menu update0x31
mp prof vehicles update0x32
solo map list update0x33
mp map list update0x34
gt select list update0x35
gt edit list update0x36
load game list update0x37
checking for updates0x38
direct ip connect update0x39
network settings update0x3A
event handlersBlock
  • HEK max count: 32
FieldTypeComments
flagsbitfield
FlagMaskComments
close current widget0x1
close other widget0x2
close all widgets0x4
open widget0x8
reload self0x10
reload other widget0x20
give focus to widget0x40
run function0x80
replace self w widget0x100
go back to previous widget0x200
run scenario script0x400
try to branch on failure0x800
event typeenum
OptionValueComments
a button0x0
b button0x1
x button0x2
y button0x3
black button0x4
white button0x5
left trigger0x6
right trigger0x7
dpad up0x8
dpad down0x9
dpad left0xA
dpad right0xB
start button0xC
back button0xD
left thumb0xE
right thumb0xF
left analog stick up0x10
left analog stick down0x11
left analog stick left0x12
left analog stick right0x13
left analog stick up 10x14
right analog stick down0x15
right analog stick left0x16
right analog stick right0x17
created0x18
deleted0x19
get focus0x1A
lose focus0x1B
left mouse0x1C
middle mouse0x1D
right mouse0x1E
double click0x1F
custom activation0x20
post render0x21
functionenum
OptionValueComments
null0x0
list goto next item0x1
list goto previous item0x2
unused0x3
unused10x4
initialize sp level list solo0x5
initialize sp level list coop0x6
dispose sp level list0x7
solo level set map0x8
set difficulty0x9
start new game0xA
pause game restart at checkpoint0xB
pause game restart level0xC
pause game return to main menu0xD
clear multiplayer player joins0xE
join controller to mp game0xF
initialize net game server list0x10
start network game server0x11
dispose net game server list0x12
shutdown network game0x13
net game join from server list0x14
split screen game initialize0x15
coop game initialize0x16
main menu intialize0x17
mp type menu initialize0x18
pick play stage for quick start0x19
mp level list initialize0x1A
mp level list dispose0x1B
mp level select0x1C
mp profiles list initialize0x1D
mp profiles list dispose0x1E
mp profile set for game0x1F
swap player team0x20
net game join player0x21
player profile list initialize0x22
player profile list dispose0x23
3wide plyr prof set for game0x24
1wide plyr prof set for game0x25
mp profile begin editing0x26
mp profile end editing0x27
mp profile set game engine0x28
mp profile change name0x29
mp profile set ctf rules0x2A
mp profile set koth rules0x2B
mp profile set slayer rules0x2C
mp profile set oddball rules0x2D
mp profile set racing rules0x2E
mp profile set player options0x2F
mp profile set item options0x30
mp profile set indicator opts0x31
mp profile init game engine0x32
mp profile init name0x33
mp profile init ctf rules0x34
mp profile init koth rules0x35
mp profile init slayer rules0x36
mp profile init oddball rules0x37
mp profile init racing rules0x38
mp profile init player opts0x39
mp profile init item options0x3A
mp profile init indicator opts0x3B
mp profile save changes0x3C
color picker menu initialize0x3D
color picker menu dispose0x3E
color picker select color0x3F
player profile begin editing0x40
player profile end editing0x41
player profile change name0x42
player profile save changes0x43
plyr prf init cntl settings0x44
plyr prf init adv cntl set0x45
plyr prf save cntl settings0x46
plyr prf save adv cntl set0x47
mp game player quit0x48
main menu switch to solo game0x49
request del player profile0x4A
request del playlist profile0x4B
final del player profile0x4C
final del playlist profile0x4D
cancel profile delete0x4E
create edit playlist profile0x4F
create edit player profile0x50
net game speed start0x51
net game delay start0x52
net server accept conx0x53
net server defer start0x54
net server allow start0x55
disable if no xdemos0x56
run xdemos0x57
sp reset controller choices0x58
sp set p1 controller choice0x59
sp set p2 controller choice0x5A
error if no network connection0x5B
start server if none advertised0x5C
net game unjoin player0x5D
close if not editing profile0x5E
exit to xbox dashboard0x5F
new campaign chosen0x60
new campaign decision0x61
pop history stack once0x62
difficulty menu init0x63
begin music fade out0x64
new game if no plyr profiles0x65
exit gracefully to xbox dashboard0x66
pause game invert pitch0x67
start new coop game0x68
pause game invert spinner get0x69
pause game invert spinner set0x6A
main menu quit game0x6B
mouse emit accept event0x6C
mouse emit back event0x6D
mouse emit dpad left event0x6E
mouse emit dpad right event0x6F
mouse spinner 3wide click0x70
controls screen init0x71
video screen init0x72
controls begin binding0x73
gamespy screen init0x74
gamespy screen dispose0x75
gamespy select header0x76
gamespy select item0x77
gamespy select button0x78
plr prof init mouse set0x79
plr prof change mouse set0x7A
plr prof init audio set0x7B
plr prof change audio set0x7C
plr prof change video set0x7D
controls screen dispose0x7E
controls screen change set0x7F
mouse emit x event0x80
gamepad screen init0x81
gamepad screen dispose0x82
gamepad screen change gamepads0x83
gamepad screen select item0x84
mouse screen defaults0x85
audio screen defaults0x86
video screen defaults0x87
controls screen defaults0x88
profile set edit begin0x89
profile manager delete0x8A
profile manager select0x8B
gamespy dismiss error0x8C
server settings init0x8D
ss edit server name0x8E
ss edit server password0x8F
ss start game0x90
video test dialog init0x91
video test dialog dispose0x92
video test dialog accept0x93
gamespy dismiss filters0x94
gamespy update filter settings0x95
gamespy back handler0x96
mouse spinner 1wide click0x97
controls back handler0x98
controls advanced launch0x99
controls advanced ok0x9A
mp pause menu open0x9B
mp game options open0x9C
mp choose team0x9D
mp prof init vehicle options0x9E
mp prof save vehicle options0x9F
single prev cl item activated0xA0
mp prof init teamplay options0xA1
mp prof save teamplay options0xA2
mp game options choose0xA3
emit custom activation event0xA4
plr prof cancel audio set0xA5
plr prof init network options0xA6
plr prof save network options0xA7
credits post render0xA8
difficulty item select0xA9
credits initialize0xAA
credits dispose0xAB
gamespy get patch0xAC
video screen dispose0xAD
campaign menu init0xAE
campaign menu continue0xAF
load game menu init0xB0
load game menu dispose0xB1
load game menu activated0xB2
solo menu save checkpoint0xB3
mp type set mode0xB4
checking for updates ok0xB5
checking for updates dismiss0xB6
direct ip connect init0xB7
direct ip connect go0xB8
direct ip edit field0xB9
network settings edit a port0xBA
network settings defaults0xBB
load game menu delete request0xBC
load game menu delete finish0xBD
widget tagTagDependency: ui_widget_definition
sound effectTagDependency: sound
scriptTagString
search and replace functionsBlock
  • HEK max count: 32
FieldTypeComments
search stringTagString
replace functionenum
OptionValueComments
null0x0
widget s controller0x1
build number0x2
pid0x3
text label unicode strings listTagDependency: unicode_string_list
text fontTagDependency: font
text colorColorARGB
FieldTypeComments
alphafloat
redfloat
greenfloat
bluefloat
justificationenum
OptionValueComments
left justify0x0
right justify0x1
center justify0x2
flags 1bitfield
FlagMaskComments
editable0x1
password0x2
flashing0x4
don't do that weird focus test0x8
string list indexuint16
horiz offsetint16
vert offsetint16
flags 2bitfield
FlagMaskComments
list items generated in code0x1
list items from string list tag0x2
list items only one tooltip0x4
list single preview no scroll0x8
list header bitmapTagDependency: bitmap
list footer bitmapTagDependency: bitmap
header boundsRectangle2D?
footer boundsRectangle2D?
extended description widgetTagDependency: ui_widget_definition
conditional widgetsBlock
  • HEK max count: 32
FieldTypeComments
widget tagTagDependency: ui_widget_definition
nameTagString
flagsbitfield
FlagMaskComments
load if event handler function fails0x1
custom controller indexuint16
child widgetsBlock
  • HEK max count: 32
FieldTypeComments
widget tagTagDependency: ui_widget_definition
nameTagString
flagsbitfield
FlagMaskComments
use custom controller index0x1
custom controller indexuint16
vertical offsetint16
horizontal offsetint16

Acknowledgements

Thanks to the following individuals for their research or contributions to this topic:

  • Jakey (Bounds scaling workaround)
  • Kavawuvi (Invader tag definitions)
  • MosesOfEgypt (Tag structure research)