Menu Asset (BO2): Difference between revisions

From COD Engine Research
mNo edit summary
Therifboy (talk | contribs)
mNo edit summary
 
(4 intermediate revisions by 3 users not shown)
Line 1: Line 1:
[[Category:Assets]]
[[Category:Assets]]
[[Category:BO2]]
[[Category:BO2]]
<syntaxhighlight lang="cpp">
<syntaxhighlight lang="cpp">
enum expDataType
enum expDataType
{
{
VAL_INT = 0x0,
  VAL_INT = 0x0,
VAL_FLOAT = 0x1,
  VAL_FLOAT = 0x1,
VAL_STRING = 0x2,
  VAL_STRING = 0x2,
};
  VAL_ADDRESS = 0x3,
  VAL_DVAR = 0x4,
union operandInternalDataUnion
};
{
union operandInternalDataUnion
int intVal;
{
float floatVal;
  int intVal;
const char *string;
  float floatVal;
};
  const char *string;
  dvar_t *dvar;
struct Operand
};
{
 
expDataType dataType;
struct Operand
operandInternalDataUnion internals;
{
};
  expDataType dataType;
  operandInternalDataUnion internals;
union entryInternalData
};
{
 
int op;
enum expOperationEnum
Operand operand;
{
};
  OP_NOOP = 0x0,
  OP_RIGHTPAREN = 0x1,
struct expressionRpn
  OP_MULTIPLY = 0x2,
{
  OP_DIVIDE = 0x3,
int type;
  OP_MODULUS = 0x4,
entryInternalData data;
  OP_ADD = 0x5,
};
  OP_SUBTRACT = 0x6,
  OP_NEGATE = 0x7,
struct ExpressionStatement
  OP_NOT = 0x8,
{
  OP_LESSTHAN = 0x9,
char *string1;
  OP_LESSTHANEQUALTO = 0xA,
int unknown;
  OP_GREATERTHAN = 0xB,
int numEntries;
  OP_GREATERTHANEQUALTO = 0xC,
expressionRpn *rpn;
  OP_EQUALS = 0xD,
};
  OP_NOTEQUAL = 0xE,
  OP_AND = 0xF,
struct rectExpData_t
  OP_OR = 0x10,
{
  OP_LEFTPAREN = 0x11,
ExpressionStatement rectXExp;
  OP_COMMA = 0x12,
ExpressionStatement rectYExp;
  OP_BITWISEAND = 0x13,
ExpressionStatement rectWExp;
  OP_BITWISEOR = 0x14,
ExpressionStatement rectHExp;
  OP_BITWISENOT = 0x15,
};
  OP_BITSHIFTLEFT = 0x16,
  OP_BITSHIFTRIGHT = 0x17,
struct gameMsgDef_t
  NUM_EXPRESSION_OPERATORS = 0x18,
{
  MAX_OPERATOR_VALUE = 0x4000,
int gamemsgwindowindex;
};
int gamemsgwindowmode;
 
};
union expressionRpnDataUnion
{
struct focusItemDef_t;
  Operand constant;
  void *cmd;
union textData_t
  int cmdIdx;
{
};
focusItemDef_t *focusItemDef; // 3,4,5,7,8,9,10,11,12,13,14,16,20,21,22,30
 
gameMsgDef_t *gameMsgDef; // 15
enum expressionRpnEnum
};
{
  RPN_CONSTANT = 0x0,
struct textDef_t
  RPN_CMD_IDX = 0x1,
{
  RPN_CMD = 0x2,
rectDef_s textRect[4];
  RPN_END = 0x3,
int alignment;
};
int fontEnum;
 
int textSaveGameInfo;
struct expressionRpn
int textAlignMode;
{
float textalignx;
  expressionRpnEnum type;
float textaligny;
  expressionRpnDataUnion data;
float textscale;
};
int textpadding;
 
int textstyle;
struct ExpressionStatement
float fontColor[4];
{
float glowColor[4];
  char *filename;
float shadowColor[4];
  int line;
float fontBlur;
  int numRpn;
float glowRadius;
  expressionRpn *rpn;
float shadowSize;
};
float shadowOffset;
 
int unknown;
struct ScriptCondition
char *text;
{
ExpressionStatement *textExpData;
  bool fireOnTrue;
textData_t textData;
  int constructID;
};
  int blockID;
  ScriptCondition *next;
struct MenuCell
};
{
 
int unknown1;
struct GenericEventScript
int stringSize;
{
char *stringValue;
  ScriptCondition *prerequisites;
};
  ExpressionStatement condition;
  int type;
struct MenuRow
  bool fireOnTrue;
{
  const char *action;
MenuCell *cells;
  int blockID;
const char *eventName;
  int constructID;
const char *onFocusEventName;
  GenericEventScript *next;
char unknown[0x10];
};
};
 
struct ItemKeyHandler
struct listBoxDef_t
{
{
  int key;
char unknown1[0x14];
  GenericEventScript *keyScript;
float elementwidth;
  ItemKeyHandler *next;
float elementheight;
};
char unknown2[8];
 
int elementtype;
struct textExp_s
char unknown3[0x21C];
{
int notselectable;
  ExpressionStatement textExp;
int noScrollBars;
};
int usePaging;
 
float selectBorder[4];
struct columnInfo_s
float disableColor[4];
{
float focusColor[4];
  int elementStyle;
float elementHighlightColor[4];
  int maxChars;
float elementBackgroundColor[4];
  rectDef_s rect;
Material *selectIcon;
};
Material *backgroundItemListBox;
 
Material *highlightTexture;
struct MenuCell
int bNoBlinkingHighlight;
{
MenuRow *rows;
  int type;
int numRows;
  int maxChars;
int unknown4;
  char *stringValue;
};
};
 
struct multiDef_t
struct MenuRow
{
{
char *dvarList[32];
  MenuCell *cells;
char *dvarStr[32];
  char *eventName;
float dvarValue[32];
  char *onFocusEventName;
char unknown[0xC];
  bool disableArg;
};
  int status;
  int name;
struct profileDef_t
};
{
 
char *profileStrList[32];
struct listBoxDef_s
char *profileFloatList[32];
{
float profileFloat[32];
  int mousePos;
char unknown[0xC];
#ifndef PC //Note: PC only has 1 cursor, but consoles can have 4 controllers connected
};
  int cursorPos[4];
  int startPos[4];
struct editFieldDef_t
  int endPos[4];
{
#else
char unknown1[0x14];
  int cursorPos[1];
int maxChars;
  int startPos[1];
int maxCharsGotoNext;
  int endPos[1];
int maxPaintChars;
#endif
char unknown2[0x10];
  int drawPadding;
};
  float elementWidth;
  float elementHeight;
struct enumDvarDef_t
  int numColumns;
{
  float special;
char *enumDvarName;
  columnInfo_s columnInfo[16];
};
  int notselectable;
  int noScrollBars;
union itemDefData_t
  int usePaging;
{
  vec4_t selectBorder;
listBoxDef_t *listBox; // 4
  vec4_t disableColor;
multiDef_t *multiDef; // 10
  vec4_t focusColor;
profileDef_t *profileDef; // 22
  vec4_t elementHighlightColor;
editFieldDef_t *editField; // 5,7,8,9,12,13,14,16,30
  vec4_t elementBackgroundColor;
enumDvarDef_t *enumDvarDef; // 11
  Material *selectIcon;
void *data;
  Material *backgroundItemListbox;
};
  Material *highlightTexture;
  int noBlinkingHighlight;
struct ScriptCondition
  MenuRow *rows;
{
  int maxRows;
char unknown[0xC];
  int rowCount;
ScriptCondition *next;
};
};
 
struct multiDef_s
struct GenericEventScript
{
{
  const char *dvarList[32];
ScriptCondition *prerequisites;
  const char *dvarStr[32];
char unknown1[0x18];
  float dvarValue[32];
char *string1;
  int count;
char unknown2[0xC];
  int actionOnEnterPressOnly;
GenericEventScript *next;
  int strDef;
};
};
 
struct GenericEventHandler
struct profileMultiDef_s
{
{
int unknown;
  const char *profileVarList[32];
GenericEventScript *eventScript;
  const char *profileVarStr[32];
GenericEventHandler *next;
  float profileVarValue[32];
};
  int count;
  int actionOnEnterPressOnly;
struct focusItemDef_t
  int strDef;
{
};
const char *string1;
 
const char *string2;
struct editFieldDef_s
const char *string3;
{
const char *string4;
  int cursorPos[1];
GenericEventHandler *onKey;
  float minVal;
itemDefData_t typeData;
  float maxVal;
};
  float defVal;
  float range;
union itemData_t
  int maxChars;
{
  int maxCharsGotoNext;
textDef_t *textData; // 1,3,4,5,7,8,9,10,11,12,13,14,15,16,18,20,22
  int maxPaintChars;
ExpressionStatement *imageDef; // 2
  int paintOffset;
ExpressionStatement *ownerDrawDef; // 6
};
focusItemDef_t *focusItemDef; // 19, 21
 
void *data;
struct enumDvarDef_s
};
{
  const char *enumDvarName;
struct ItemKeyHandler
};
{
 
const char *keyName;
union focusDefData_t
GenericEventScript *keyScript;
{
ItemKeyHandler *next;
  listBoxDef_s *listBox;
};
  multiDef_s *multi;
  profileMultiDef_s *profileMulti;
struct animParamsDef_t
  editFieldDef_s *editField;
{
  enumDvarDef_s *enumDvar;
const char *state;
  void *data;
char unknown[0x64];
};
ItemKeyHandler *onEvent;
 
};
struct focusItemDef_s
{
struct UIAnimInfo
  const char *mouseEnterText;
{
  const char *mouseExitText;
int count;
  const char *mouseEnter;
animParamsDef_t *animStates;
  const char *mouseExit;
char unknown[0xE4];
  ItemKeyHandler *onKey;
};
  focusDefData_t focusTypeData;
};
/* dynamicFlags */
 
#define WINDOWDYNAMIC_VISIBLE 0x00000004
struct gameMsgDef_s
#define WINDOWDYNAMIC_CHECKMASK 0x000FFFFF
{
  int gameMsgWindowIndex;
/* staticFlags */
  int gameMsgWindowMode;
#define WINDOWSTATIC_DECORATION 0x00100000
};
#define WINDOWSTATIC_HORIZONTALSCROLL 0x00200000
 
#define WINDOWSTATIC_AUTOWRAPPED 0x00800000
union textDefData_t
#define WINDOWSTATIC_POPUP 0x01000000
{
#define WINDOWSTATIC_OUTOFBOUNDSCLICK 0x02000000
  focusItemDef_s *focusItemDef; // 3,4,5,7,8,9,10,11,12,13,14,16,20,21,22,30
#define WINDOWSTATIC_LEGACYSPLITSCREENSCALE 0x04000000
  gameMsgDef_s *gameMsgDef; // 15
#define WINDOWSTATIC_ALLOWSIGNIN 0x08000000
  void *data;
#define WINDOWSTATIC_HIDDENDURINGFLASHBANG 0x10000000
};
#define WINDOWSTATIC_HIDDENDURINGSCOPE 0x20000000
 
#define WINDOWSTATIC_HIDDENDURINGUI 0x40000000
struct textDef_s
#define WINDOWSTATIC_CHECKMASK 0xFFF00000
{
#ifndef PC //Note: PC only has 1 cursor, but consoles can have 4 controllers connected
struct rectDef_s
  rectDef_s textRect[4];
{
#else
float x;
  rectDef_s textRect[1];
float y;
#endif
float w;
  int alignment;
float h;
  int fontEnum;
int horzAlign;
  int itemFlags;
int vertAlign;
  int textAlignMode;
};
  float textalignx;
  float textaligny;
struct windowDef_t
  float textscale;
{
  float textpadding;
const char *name;
  int textStyle;
rectDef_s rect;
  vec4_t fontColor;
rectDef_s rectClient;
  vec4_t glowColor;
const char *group;
  vec4_t shadowColor;
char style;
  float fontBlur;
char border;
  float glowSize;
char modal;
  float shadowSize;
char frameSide;
  vec2_t shadowOffset;
float frame[2];
  const char *text;
int ownerDraw;
  textExp_s *textExpData;
int ownerDrawFlag;
  textDefData_t textTypeData;
float borderSize;
};
int staticFlags;
 
int dynamicFlags[4];
struct imageDef_s
int nextTime;
{
float foreColor[4];
  ExpressionStatement materialExp;
float backColor[4];
};
float borderColor[4];
 
float outlineColor[4];
struct ownerDrawDef_s
float rotation;
{
Material *background;
  ExpressionStatement dataExp;
};
};
 
struct itemDef_t
union itemData_t
{
{
windowDef_t window;
  textDef_s *textDef; // 1,3,4,5,7,8,9,10,11,12,13,14,15,16,18,20,22
int type;
  imageDef_s *imageDef; // 2
int dataType;
  ownerDrawDef_s *ownerDrawDef; // 6
int unknown4;
  focusItemDef_s *blankButtonDef; // 19, 21
const char *dvar;
  void *data;
const char *profile;
};
const char *dvarTest;
 
const char *enableDvar;
/* dynamicFlags */
int enableFlags; // 1=enableDvar, 2=disableDvar, 4=showDvar, 8=hideDvar, 16=focusDvar
#define WINDOWDYNAMIC_VISIBLE 0x00000004
itemData_t typeData;
#define WINDOWDYNAMIC_CHECKMASK 0x000FFFFF
menuDef_t *parent;
 
rectExpData_t *rectExpData;
/* staticFlags */
ExpressionStatement visibleExp;
#define WINDOWSTATIC_DECORATION 0x00100000
int unknown1;
#define WINDOWSTATIC_HORIZONTALSCROLL 0x00200000
int visibilityBits[4];
#define WINDOWSTATIC_AUTOWRAPPED 0x00800000
ExpressionStatement foreColorExp;
#define WINDOWSTATIC_POPUP 0x01000000
int ui3dWindowId;
#define WINDOWSTATIC_OUTOFBOUNDSCLICK 0x02000000
ItemKeyHandler *onEvent;
#define WINDOWSTATIC_LEGACYSPLITSCREENSCALE 0x04000000
UIAnimInfo *animInfo;
#define WINDOWSTATIC_ALLOWSIGNIN 0x08000000
int unknown2;
#define WINDOWSTATIC_HIDDENDURINGFLASHBANG 0x10000000
};
#define WINDOWSTATIC_HIDDENDURINGSCOPE 0x20000000
#define WINDOWSTATIC_HIDDENDURINGUI 0x40000000
struct menuDef_t
#define WINDOWSTATIC_CHECKMASK 0xFFF00000
{
 
windowDef_t window;
struct rectDef_s
char *font;
{
int fullscreen;
  float x;
int ui3dWindowId;
  float y;
int itemCount;
  float w;
int fontIndex;
  float h;
int cursorItem[4];
  int horzAlign;
int fadeCycle;
  int vertAlign;
int priority;
};
float fadeClamp;
 
float fadeAmount;
struct windowDef_t
float fadeInAmount;
{
float blurRadius;
  const char *name;
int openSlideSpeed;
  rectDef_s rect;
int closeSlideSpeed;
  rectDef_s rectClient;
int openSlideDirection;
  const char *group;
int closeSlideDirection;
  char style;
rectDef_s unknownRect;
  char border;
int closeFadingTime;
  char modal;
int openFadingTime;
  char frameSides;
char unknown2[0x8];
  float frameTexSize;
ItemKeyHandler *onKey;
  float frameSize;
GenericEventHandler *onEvent;
  int ownerDraw;
ExpressionStatement visibleExp;
  int ownerDrawFlags;
int unknown3;
  float borderSize;
int visibilityBits[4];
  int staticFlags;
char *allowedBinding;
  int dynamicFlags[1];
char *soundLoop;
  int nextTime;
int unknown4;
  vec4_t foreColor;
int control;
  vec4_t backColor;
float focusColor[4];
  vec4_t borderColor;
float disableColor[4];
  vec4_t outlineColor;
ExpressionStatement rectYExp;
  float rotation;
ExpressionStatement rectXExp;
  Material *background;
itemDef_t **items;
};
int unknown5;
 
};
struct animParamsDef_t
</syntaxhighlight>
{
  const char *name;
  rectDef_s rectClient;
  float borderSize;
  vec4_t foreColor;
  vec4_t backColor;
  vec4_t borderColor;
  vec4_t outlineColor;
  float textScale;
  float rotation;
  GenericEventHandler *onEvent;
};
 
struct UIAnimInfo
{
  int animStateCount;
  animParamsDef_t **animStates;
  animParamsDef_t currentAnimState;
  animParamsDef_t nextAnimState;
  int animating;
  int animStartTime;
  int animDuration;
};
 
struct itemDef_t
{
  windowDef_t window;
  int type;
  int dataType;
  int imageTrack;
  const char *dvar;
  const char *profileVar;
  const char *dvarTest;
  const char *enableDvar;
  int dvarFlags; // 1=enableDvar, 2=disableDvar, 4=showDvar, 8=hideDvar, 16=focusDvar
  itemDefData_t typeData;
  menuDef_t *parent;
  rectData_s *rectExpData;
  ExpressionStatement visibleExp;
  unsigned __int64 showBits;
  unsigned __int64 hideBits;
  ExpressionStatement forecolorAExp;
  int ui3dWindowId;
  GenericEventHandler *onEvent;
  UIAnimInfo *animInfo;
};
 
struct menuDef_t
{
  windowDef_t window;
  const char *font;
  int fullScreen;
  int ui3dWindowId;
  int itemCount;
  int fontIndex;
#ifndef PC //Note: PC only has 1 cursor, but consoles can have 4 controllers connected
  int cursorItem[4];
#else
  int cursorItem[1];
#endif
  int fadeCycle;
  int priority;
  float fadeClamp;
  float fadeAmount;
  float fadeInAmount;
  float blurRadius;
  int openSlideSpeed;
  int closeSlideSpeed;
  int openSlideDirection;
  int closeSlideDirection;
  rectDef_s initialRectInfo;
  int openFadingTime;
  int closeFadingTime;
  int fadeTimeCounter;
  int slideTimeCounter;
  GenericEventHandler *onEvent;
  ItemKeyHandler *onKey;
  ExpressionStatement visibleExp;
  unsigned __int64 showBits;
  unsigned __int64 hideBits;
  const char *allowedBinding;
  const char *soundName;
  int imageTrack;
  int control;
  vec4_t focusColor;
  vec4_t disableColor;
  ExpressionStatement rectXExp;
  ExpressionStatement rectYExp;
  itemDef_s **items;
int unknown5;
};
</syntaxhighlight>

Latest revision as of 15:05, 12 January 2015

enum expDataType
{
  VAL_INT = 0x0,
  VAL_FLOAT = 0x1,
  VAL_STRING = 0x2,
  VAL_ADDRESS = 0x3,
  VAL_DVAR = 0x4,
};
union operandInternalDataUnion
{
  int intVal;
  float floatVal;
  const char *string;
  dvar_t *dvar;
};

struct Operand
{
  expDataType dataType;
  operandInternalDataUnion internals;
};

enum expOperationEnum
{
  OP_NOOP = 0x0,
  OP_RIGHTPAREN = 0x1,
  OP_MULTIPLY = 0x2,
  OP_DIVIDE = 0x3,
  OP_MODULUS = 0x4,
  OP_ADD = 0x5,
  OP_SUBTRACT = 0x6,
  OP_NEGATE = 0x7,
  OP_NOT = 0x8,
  OP_LESSTHAN = 0x9,
  OP_LESSTHANEQUALTO = 0xA,
  OP_GREATERTHAN = 0xB,
  OP_GREATERTHANEQUALTO = 0xC,
  OP_EQUALS = 0xD,
  OP_NOTEQUAL = 0xE,
  OP_AND = 0xF,
  OP_OR = 0x10,
  OP_LEFTPAREN = 0x11,
  OP_COMMA = 0x12,
  OP_BITWISEAND = 0x13,
  OP_BITWISEOR = 0x14,
  OP_BITWISENOT = 0x15,
  OP_BITSHIFTLEFT = 0x16,
  OP_BITSHIFTRIGHT = 0x17,
  NUM_EXPRESSION_OPERATORS = 0x18,
  MAX_OPERATOR_VALUE = 0x4000,
};

union expressionRpnDataUnion
{
  Operand constant;
  void *cmd;
  int cmdIdx;
};

enum expressionRpnEnum
{
  RPN_CONSTANT = 0x0,
  RPN_CMD_IDX = 0x1,
  RPN_CMD = 0x2,
  RPN_END = 0x3,
};

struct expressionRpn
{
  expressionRpnEnum type;
  expressionRpnDataUnion data;
};

struct ExpressionStatement
{
  char *filename;
  int line;
  int numRpn;
  expressionRpn *rpn;
};

struct ScriptCondition
{
  bool fireOnTrue;
  int constructID;
  int blockID;
  ScriptCondition *next;
};

struct GenericEventScript
{
  ScriptCondition *prerequisites;
  ExpressionStatement condition;
  int type;
  bool fireOnTrue;
  const char *action;
  int blockID;
  int constructID;
  GenericEventScript *next;
};

struct ItemKeyHandler
{
  int key;
  GenericEventScript *keyScript;
  ItemKeyHandler *next;
};

struct textExp_s
{
  ExpressionStatement textExp;
};

struct columnInfo_s
{
  int elementStyle;
  int maxChars;
  rectDef_s rect;
};

struct MenuCell
{
  int type;
  int maxChars;
  char *stringValue;
};

struct MenuRow
{
  MenuCell *cells;
  char *eventName;
  char *onFocusEventName;
  bool disableArg;
  int status;
  int name;
};

struct listBoxDef_s
{
  int mousePos;
#ifndef PC			//Note: PC only has 1 cursor, but consoles can have 4 controllers connected
  int cursorPos[4];
  int startPos[4];
  int endPos[4];
#else
  int cursorPos[1];
  int startPos[1];
  int endPos[1];
#endif
  int drawPadding;
  float elementWidth;
  float elementHeight;
  int numColumns;
  float special;
  columnInfo_s columnInfo[16];
  int notselectable;
  int noScrollBars;
  int usePaging;
  vec4_t selectBorder;
  vec4_t disableColor;
  vec4_t focusColor;
  vec4_t elementHighlightColor;
  vec4_t elementBackgroundColor;
  Material *selectIcon;
  Material *backgroundItemListbox;
  Material *highlightTexture;
  int noBlinkingHighlight;
  MenuRow *rows;
  int maxRows;
  int rowCount;
};

struct multiDef_s
{
  const char *dvarList[32];
  const char *dvarStr[32];
  float dvarValue[32];
  int count;
  int actionOnEnterPressOnly;
  int strDef;
};

struct profileMultiDef_s
{
  const char *profileVarList[32];
  const char *profileVarStr[32];
  float profileVarValue[32];
  int count;
  int actionOnEnterPressOnly;
  int strDef;
};

struct editFieldDef_s
{
  int cursorPos[1];
  float minVal;
  float maxVal;
  float defVal;
  float range;
  int maxChars;
  int maxCharsGotoNext;
  int maxPaintChars;
  int paintOffset;
};

struct enumDvarDef_s
{
  const char *enumDvarName;
};

union focusDefData_t
{
  listBoxDef_s *listBox;
  multiDef_s *multi;
  profileMultiDef_s *profileMulti;
  editFieldDef_s *editField;
  enumDvarDef_s *enumDvar;
  void *data;
};

struct focusItemDef_s
{
  const char *mouseEnterText;
  const char *mouseExitText;
  const char *mouseEnter;
  const char *mouseExit;
  ItemKeyHandler *onKey;
  focusDefData_t focusTypeData;
};

struct gameMsgDef_s
{
  int gameMsgWindowIndex;
  int gameMsgWindowMode;
};

union textDefData_t
{
  focusItemDef_s *focusItemDef;	// 3,4,5,7,8,9,10,11,12,13,14,16,20,21,22,30
  gameMsgDef_s *gameMsgDef;	// 15
  void *data;
};

struct textDef_s
{
#ifndef PC			//Note: PC only has 1 cursor, but consoles can have 4 controllers connected
  rectDef_s textRect[4];
#else
  rectDef_s textRect[1];
#endif
  int alignment;
  int fontEnum;
  int itemFlags;
  int textAlignMode;
  float textalignx;
  float textaligny;
  float textscale;
  float textpadding;
  int textStyle;
  vec4_t fontColor;
  vec4_t glowColor;
  vec4_t shadowColor;
  float fontBlur;
  float glowSize;
  float shadowSize;
  vec2_t shadowOffset;
  const char *text;
  textExp_s *textExpData;
  textDefData_t textTypeData;
};

struct imageDef_s
{
  ExpressionStatement materialExp;
};

struct ownerDrawDef_s
{
  ExpressionStatement dataExp;
};

union itemData_t
{
  textDef_s *textDef;	// 1,3,4,5,7,8,9,10,11,12,13,14,15,16,18,20,22
  imageDef_s *imageDef;		// 2
  ownerDrawDef_s *ownerDrawDef;	// 6
  focusItemDef_s *blankButtonDef;		// 19, 21
  void *data;
};

/* dynamicFlags */
#define WINDOWDYNAMIC_VISIBLE		0x00000004
#define WINDOWDYNAMIC_CHECKMASK	0x000FFFFF

/* staticFlags */
#define WINDOWSTATIC_DECORATION		0x00100000
#define WINDOWSTATIC_HORIZONTALSCROLL		0x00200000
#define WINDOWSTATIC_AUTOWRAPPED		0x00800000
#define WINDOWSTATIC_POPUP 			0x01000000
#define WINDOWSTATIC_OUTOFBOUNDSCLICK 		0x02000000
#define WINDOWSTATIC_LEGACYSPLITSCREENSCALE	0x04000000
#define WINDOWSTATIC_ALLOWSIGNIN		0x08000000
#define WINDOWSTATIC_HIDDENDURINGFLASHBANG	0x10000000
#define WINDOWSTATIC_HIDDENDURINGSCOPE		0x20000000
#define WINDOWSTATIC_HIDDENDURINGUI		0x40000000
#define WINDOWSTATIC_CHECKMASK			0xFFF00000

struct rectDef_s
{
  float x;
  float y;
  float w;
  float h;
  int horzAlign;
  int vertAlign;
};

struct windowDef_t
{
  const char *name;
  rectDef_s rect;
  rectDef_s rectClient;
  const char *group;
  char style;
  char border;
  char modal;
  char frameSides;
  float frameTexSize;
  float frameSize;
  int ownerDraw;
  int ownerDrawFlags;
  float borderSize;
  int staticFlags;
  int dynamicFlags[1];
  int nextTime;
  vec4_t foreColor;
  vec4_t backColor;
  vec4_t borderColor;
  vec4_t outlineColor;
  float rotation;
  Material *background;
};

struct animParamsDef_t
{
  const char *name;
  rectDef_s rectClient;
  float borderSize;
  vec4_t foreColor;
  vec4_t backColor;
  vec4_t borderColor;
  vec4_t outlineColor;
  float textScale;
  float rotation;
  GenericEventHandler *onEvent;
};

struct UIAnimInfo
{
  int animStateCount;
  animParamsDef_t **animStates;
  animParamsDef_t currentAnimState;
  animParamsDef_t nextAnimState;
  int animating;
  int animStartTime;
  int animDuration;
};

struct itemDef_t
{
  windowDef_t window;
  int type;
  int dataType;
  int imageTrack;
  const char *dvar;
  const char *profileVar;
  const char *dvarTest;
  const char *enableDvar;
  int dvarFlags;		// 1=enableDvar, 2=disableDvar, 4=showDvar, 8=hideDvar, 16=focusDvar
  itemDefData_t typeData;
  menuDef_t *parent;
  rectData_s *rectExpData;
  ExpressionStatement visibleExp;
  unsigned __int64 showBits;
  unsigned __int64 hideBits;
  ExpressionStatement forecolorAExp;
  int ui3dWindowId;
  GenericEventHandler *onEvent;
  UIAnimInfo *animInfo;
};

struct menuDef_t
{
  windowDef_t window;
  const char *font;
  int fullScreen;
  int ui3dWindowId;
  int itemCount;
  int fontIndex;
#ifndef PC			//Note: PC only has 1 cursor, but consoles can have 4 controllers connected
  int cursorItem[4];
#else
  int cursorItem[1];
#endif
  int fadeCycle;
  int priority;
  float fadeClamp;
  float fadeAmount;
  float fadeInAmount;
  float blurRadius;
  int openSlideSpeed;
  int closeSlideSpeed;
  int openSlideDirection;
  int closeSlideDirection;
  rectDef_s initialRectInfo;
  int openFadingTime;
  int closeFadingTime;
  int fadeTimeCounter;
  int slideTimeCounter;
  GenericEventHandler *onEvent;
  ItemKeyHandler *onKey;
  ExpressionStatement visibleExp;
  unsigned __int64 showBits;
  unsigned __int64 hideBits;
  const char *allowedBinding;
  const char *soundName;
  int imageTrack;
  int control;
  vec4_t focusColor;
  vec4_t disableColor;
  ExpressionStatement rectXExp;
  ExpressionStatement rectYExp;
  itemDef_s **items;
	int unknown5;
};