

//Not complete..
//Not 100% sure on the names
//most names are by NTA
//PC and XBOX may be slightly different
//Shaders may be different sizes as well as sounds
//This was structured by PS3 Menufiles
//rect
typedef struct rectDef_t
{
float x;
float y;
float w;
float h;
int8 h_align;
int8 v_align;
byte[0x2] nullBytes = ReadBytes(0x2);
};
/* For h_align, use...
#define HORIZONTAL_ALIGN_SUBLEFT 0 // left edge of a 4:3 screen (safe area not included)
#define HORIZONTAL_ALIGN_LEFT 1 // left viewable (safe area) edge
#define HORIZONTAL_ALIGN_CENTER 2 // center of the screen (reticle)
#define HORIZONTAL_ALIGN_RIGHT 3 // right viewable (safe area) edge
#define HORIZONTAL_ALIGN_FULLSCREEN 4 // disregards safe area
#define HORIZONTAL_ALIGN_NOSCALE 5 // uses exact parameters - neither adjusts for safe area nor scales for screen size
#define HORIZONTAL_ALIGN_TO640 6 // scales a real-screen resolution x down into the 0 - 640 range
#define HORIZONTAL_ALIGN_CENTER_SAFEAREA 7 // center of the safearea
#define HORIZONTAL_ALIGN_MAX HORIZONTAL_ALIGN_CENTER_SAFEAREA
#define HORIZONTAL_ALIGN_DEFAULT HORIZONTAL_ALIGN_SUBLEFT
and then for v_align, use...
#define VERTICAL_ALIGN_SUBTOP 0 // top edge of the 4:3 screen (safe area not included)
#define VERTICAL_ALIGN_TOP 1 // top viewable (safe area) edge
#define VERTICAL_ALIGN_CENTER 2 // center of the screen (reticle)
#define VERTICAL_ALIGN_BOTTOM 3 // bottom viewable (safe area) edge
#define VERTICAL_ALIGN_FULLSCREEN 4 // disregards safe area
#define VERTICAL_ALIGN_NOSCALE 5 // uses exact parameters - neither adjusts for safe area nor scales for screen size
#define VERTICAL_ALIGN_TO480 6 // scales a real-screen resolution y down into the 0 - 480 range
#define VERTICAL_ALIGN_CENTER_SAFEAREA 7 // center of the save area
#define VERTICAL_ALIGN_MAX VERTICAL_ALIGN_CENTER_SAFEAREA
#define VERTICAL_ALIGN_DEFAULT VERTICAL_ALIGN_SUBTOP*/
//color
typedef struct vec4_t
{
float red;
float green;
float blue;
float alpha;
};
//flags2
typedef struct flags2_t
{
int16 visible;
int16 hasForeColor;
};
//menuDef
typedef struct menuDef_t
{
int32 namePointer;
rectDef_t rect1; //not sure why theres two
rectDef_t rect2; //quake engine says first is for client and second is for screen?
int32 unknown1;
int32 style;
int32 border;
int32 ownerDraw;
int32 ownerDrawFlags;
float borderSize;
int32 flags1;
flags2_t flags2; //not sure why theres four
flags2_t flags2; //PC has one flags2
flags2_t flags2;
flags2_t flags2;
vec4_t foreColor;
vec4_t backColor;
vec4_t borderColor;
vec4_t outlineColor;
vec4_t disableColor;
int32 backgroundPointer;
int32 fullscreen;
int32 numItems;
int32 unknown2;
int32 unknownPointer1;
int32 unknownPointer2;
int32 unknownPointer3;
int32 unknownPointer4;
int32 fadeCycle;
float fadeClamp;
float fadeAmount;
float fadeInAmount;
int32 blurWorld;
int32 onOpenPointer;
int32 onRequestClosePointer;
int32 onClosePointer;
int32 onEscPointer;
int32 execKeysPointer;
int32 visibleWhenPointer;
int32 allowedBindingPointer
int32 soundLoopPointer;
int32 unknown3;
vec4_t focusColor;
int32 unknown4;
int32 unknownPointer;
int32 unknown6;
int32 unknown7;
int32 itemsPointer;
bytes[0x1C0] unknownNullBytes = ReadBytes(0x1C0);
//not sure if needed for menu to run
//if it is then we got more work to do xD
int32 parentMenuPointer;
wtfisthisshit loadSomeStuffFromHere;
if( namePointer == -1 )
string name = ReadNullTerminatedString();
//shader
if(backgroundPointer == -1)
{
unknownPointer = ReadInt32();
bytes[0xA4] unknownNullBytes = ReadBytes(0xA4);
string background = ReadNullTerminatedString();
}
if( onOpenPointer == -1 )
menuScript_t onOpen;
if( onClosePointer == -1 )
menuScript_t onClose;
if( onEscPointer == -1 )
menuScript_t onEsc;
//sound
if( soundLoopPointer == -1 )
{
bytes[0x1C] nullBytes = ReadBytes(0x1C);
string soundLoop = ReadNullTerminatedString();
}
if( itemsPointer == -1 )
{
for( int32 i = 0; i < numItems ; i++ )
itemDefPointer.Add(ReadInt32());
for( int32 i = 0; i < numItems ; i++ )
{
if(itemDefPointer[i] == -1)
{
itemDef itemDef = new itemDef();
itemDef.Read();
itemDefs.Add(itemDef);
}
}
}
};
//itemDef
typedef struct itemDef_t
{
int32 namePointer;
rectdef_t rect1;
rectdef_t rect2;
int32 groupPointer;
int32 style;
int32 border;
int32 ownerDraw;
int32 ownerDrawFlags;
float borderSize;
int32 flags1;
flags2_t flags2; //not sure why theres four
flags2_t flags2; //PC has one flags2
flags2_t flags2;
flags2_t flags2;
int32 unknown1;
vec4_t foreColor;
vec4_t backColor;
vec4_t borderColor;
vec4_t outlineColor;
vec4_t disableColor;
int32 backgroundPointer;
//either padding or same as menudef just unused
//have yet to find data in these 0x50 bytes
bytes[0x50] unknownNullBytes = ReadBytes(0x50);
int32 type1;
int32 type2;
int32 align;
int32 textFont;
int32 textAlign;
float textAlignX;
float textAlignY;
float textScale;
int32 textStyle;
int32 gameMsgWindowIndex;
int32 gameMsgWindowMode;
int32 textPointer;
int32 unknown3;
int32 unknown4;
int32 mouseEnterText;
int32 mouseExitText;
int32 mouseEnter;
int32 mouseExit;
int32 actionPointer;
int32 acceptPointer;
int32 onFocusPointer;
int32 leaveFocusPointer;
int32 dvarPointer;
int32 dvarTestPointer;
int32 xDvarPointer;
int32 localVarPointer;
int32 xDvarType;
int32 focusSoundPointer;
float feeder;
int32 unknown8;
int32 unknown9;
int32 unknown10;
int32 unknown11;
int32 typeDataPointer;
int32 unknown13;
int32 unknown14;
int32 unknownPointer;
int32 visibleExpPointer;
int32 disabledExp;
int32 textExpPointer;
int32 unknownPointer;
byte[0x28] unknownBytes = ReadBytes(0x2
;
if(namePointer == -1)
string name = ReadNullTerminatedString();
if(groupPointer == -1)
string group = ReadNullTerminatedString();
//shader
if(backgroundPointer == -1)
{
unknownPointer = ReadInt32();
bytes[0xA4] unknownNullBytes = ReadBytes(0xA4);
string background = ReadNullTerminatedString();
}
if(textPointer == -1)
string text = ReadNullTerminatedString();
//menuScript_t not finished
if(actionPointer == -1)
menuScript_t action;
if(acceptPointer == -1)
menuScript_t accept;
if(onFocusPointer == -1)
menuScript_t onFocus;
if(leaveFocusPointer == -1)
menuScript_t leaveFocus;
if(dvarPointer == -1)
string dvar = readNullTerminatedString();
if(dvarTestPointer == -1)
string dvarTest = readNullTerminatedString();
//need to map out execKey_t
if(execKeysPointer == -1)
execKey_t execKeys;
if(localVarPointer == -1)
string localVar = ReadNullTerminatedString();
};
kay:
//Not complete..
//Not 100% sure on the names
//most names are by NTA
//PC and XBOX may be slightly different
//Shaders may be different sizes as well as sounds
//This was structured by PS3 Menufiles
//rect
typedef struct rectDef_t
{
float x;
float y;
float w;
float h;
int8 h_align;
int8 v_align;
byte[0x2] nullBytes = ReadBytes(0x2);
};
/* For h_align, use...
#define HORIZONTAL_ALIGN_SUBLEFT 0 // left edge of a 4:3 screen (safe area not included)
#define HORIZONTAL_ALIGN_LEFT 1 // left viewable (safe area) edge
#define HORIZONTAL_ALIGN_CENTER 2 // center of the screen (reticle)
#define HORIZONTAL_ALIGN_RIGHT 3 // right viewable (safe area) edge
#define HORIZONTAL_ALIGN_FULLSCREEN 4 // disregards safe area
#define HORIZONTAL_ALIGN_NOSCALE 5 // uses exact parameters - neither adjusts for safe area nor scales for screen size
#define HORIZONTAL_ALIGN_TO640 6 // scales a real-screen resolution x down into the 0 - 640 range
#define HORIZONTAL_ALIGN_CENTER_SAFEAREA 7 // center of the safearea
#define HORIZONTAL_ALIGN_MAX HORIZONTAL_ALIGN_CENTER_SAFEAREA
#define HORIZONTAL_ALIGN_DEFAULT HORIZONTAL_ALIGN_SUBLEFT
and then for v_align, use...
#define VERTICAL_ALIGN_SUBTOP 0 // top edge of the 4:3 screen (safe area not included)
#define VERTICAL_ALIGN_TOP 1 // top viewable (safe area) edge
#define VERTICAL_ALIGN_CENTER 2 // center of the screen (reticle)
#define VERTICAL_ALIGN_BOTTOM 3 // bottom viewable (safe area) edge
#define VERTICAL_ALIGN_FULLSCREEN 4 // disregards safe area
#define VERTICAL_ALIGN_NOSCALE 5 // uses exact parameters - neither adjusts for safe area nor scales for screen size
#define VERTICAL_ALIGN_TO480 6 // scales a real-screen resolution y down into the 0 - 480 range
#define VERTICAL_ALIGN_CENTER_SAFEAREA 7 // center of the save area
#define VERTICAL_ALIGN_MAX VERTICAL_ALIGN_CENTER_SAFEAREA
#define VERTICAL_ALIGN_DEFAULT VERTICAL_ALIGN_SUBTOP*/
//color
typedef struct vec4_t
{
float red;
float green;
float blue;
float alpha;
};
//flags2
typedef struct flags2_t
{
int16 visible;
int16 hasForeColor;
};
//menuDef
typedef struct menuDef_t
{
int32 namePointer;
rectDef_t rect1; //not sure why theres two
rectDef_t rect2; //quake engine says first is for client and second is for screen?
int32 unknown1;
int32 style;
int32 border;
int32 ownerDraw;
int32 ownerDrawFlags;
float borderSize;
int32 flags1;
flags2_t flags2; //not sure why theres four
flags2_t flags2; //PC has one flags2
flags2_t flags2;
flags2_t flags2;
vec4_t foreColor;
vec4_t backColor;
vec4_t borderColor;
vec4_t outlineColor;
vec4_t disableColor;
int32 backgroundPointer;
int32 fullscreen;
int32 numItems;
int32 unknown2;
int32 unknownPointer1;
int32 unknownPointer2;
int32 unknownPointer3;
int32 unknownPointer4;
int32 fadeCycle;
float fadeClamp;
float fadeAmount;
float fadeInAmount;
int32 blurWorld;
int32 onOpenPointer;
int32 onRequestClosePointer;
int32 onClosePointer;
int32 onEscPointer;
int32 execKeysPointer;
int32 visibleWhenPointer;
int32 allowedBindingPointer
int32 soundLoopPointer;
int32 unknown3;
vec4_t focusColor;
int32 unknown4;
int32 unknownPointer;
int32 unknown6;
int32 unknown7;
int32 itemsPointer;
bytes[0x1C0] unknownNullBytes = ReadBytes(0x1C0);
//not sure if needed for menu to run
//if it is then we got more work to do xD
int32 parentMenuPointer;
wtfisthisshit loadSomeStuffFromHere;
if( namePointer == -1 )
string name = ReadNullTerminatedString();
//shader
if(backgroundPointer == -1)
{
unknownPointer = ReadInt32();
bytes[0xA4] unknownNullBytes = ReadBytes(0xA4);
string background = ReadNullTerminatedString();
}
if( onOpenPointer == -1 )
menuScript_t onOpen;
if( onClosePointer == -1 )
menuScript_t onClose;
if( onEscPointer == -1 )
menuScript_t onEsc;
//sound
if( soundLoopPointer == -1 )
{
bytes[0x1C] nullBytes = ReadBytes(0x1C);
string soundLoop = ReadNullTerminatedString();
}
if( itemsPointer == -1 )
{
for( int32 i = 0; i < numItems ; i++ )
itemDefPointer.Add(ReadInt32());
for( int32 i = 0; i < numItems ; i++ )
{
if(itemDefPointer[i] == -1)
{
itemDef itemDef = new itemDef();
itemDef.Read();
itemDefs.Add(itemDef);
}
}
}
};
//itemDef
typedef struct itemDef_t
{
int32 namePointer;
rectdef_t rect1;
rectdef_t rect2;
int32 groupPointer;
int32 style;
int32 border;
int32 ownerDraw;
int32 ownerDrawFlags;
float borderSize;
int32 flags1;
flags2_t flags2; //not sure why theres four
flags2_t flags2; //PC has one flags2
flags2_t flags2;
flags2_t flags2;
int32 unknown1;
vec4_t foreColor;
vec4_t backColor;
vec4_t borderColor;
vec4_t outlineColor;
vec4_t disableColor;
int32 backgroundPointer;
//either padding or same as menudef just unused
//have yet to find data in these 0x50 bytes
bytes[0x50] unknownNullBytes = ReadBytes(0x50);
int32 type1;
int32 type2;
int32 align;
int32 textFont;
int32 textAlign;
float textAlignX;
float textAlignY;
float textScale;
int32 textStyle;
int32 gameMsgWindowIndex;
int32 gameMsgWindowMode;
int32 textPointer;
int32 unknown3;
int32 unknown4;
int32 mouseEnterText;
int32 mouseExitText;
int32 mouseEnter;
int32 mouseExit;
int32 actionPointer;
int32 acceptPointer;
int32 onFocusPointer;
int32 leaveFocusPointer;
int32 dvarPointer;
int32 dvarTestPointer;
int32 xDvarPointer;
int32 localVarPointer;
int32 xDvarType;
int32 focusSoundPointer;
float feeder;
int32 unknown8;
int32 unknown9;
int32 unknown10;
int32 unknown11;
int32 typeDataPointer;
int32 unknown13;
int32 unknown14;
int32 unknownPointer;
int32 visibleExpPointer;
int32 disabledExp;
int32 textExpPointer;
int32 unknownPointer;
byte[0x28] unknownBytes = ReadBytes(0x2
;
if(namePointer == -1)
string name = ReadNullTerminatedString();
if(groupPointer == -1)
string group = ReadNullTerminatedString();
//shader
if(backgroundPointer == -1)
{
unknownPointer = ReadInt32();
bytes[0xA4] unknownNullBytes = ReadBytes(0xA4);
string background = ReadNullTerminatedString();
}
if(textPointer == -1)
string text = ReadNullTerminatedString();
//menuScript_t not finished
if(actionPointer == -1)
menuScript_t action;
if(acceptPointer == -1)
menuScript_t accept;
if(onFocusPointer == -1)
menuScript_t onFocus;
if(leaveFocusPointer == -1)
menuScript_t leaveFocus;
if(dvarPointer == -1)
string dvar = readNullTerminatedString();
if(dvarTestPointer == -1)
string dvarTest = readNullTerminatedString();
//need to map out execKey_t
if(execKeysPointer == -1)
execKey_t execKeys;
if(localVarPointer == -1)
string localVar = ReadNullTerminatedString();
};
kay:
Copyright © 2026, NextGenUpdate.
All Rights Reserved.