Menu Asset (BO2): Difference between revisions

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