Menu Asset (MW2): Difference between revisions

From COD Engine Research
Created page with " enum operationEnum { OP_NOOP = 0x0, OP_RIGHTPAREN = 0x1, OP_MULTIPLY = 0x2, OP_DIVIDE = 0x3, OP_MODULUS = 0x4, OP_ADD = 0x5, OP_SUBTRACT = 0x6, OP_NO..."
 
No edit summary
 
(4 intermediate revisions by the same user not shown)
Line 1: Line 1:
enum operationEnum
[[Category:Assets]]
{
[[Category:MW2]]
  OP_NOOP = 0x0,
<syntaxhighlight lang="cpp">
  OP_RIGHTPAREN = 0x1,
enum operationEnum
  OP_MULTIPLY = 0x2,
{
  OP_DIVIDE = 0x3,
  OP_NOOP = 0x0,
  OP_MODULUS = 0x4,
  OP_RIGHTPAREN = 0x1,
  OP_ADD = 0x5,
  OP_MULTIPLY = 0x2,
  OP_SUBTRACT = 0x6,
  OP_DIVIDE = 0x3,
  OP_NOT = 0x7,
  OP_MODULUS = 0x4,
  OP_LESSTHAN = 0x8,
  OP_ADD = 0x5,
  OP_LESSTHANEQUALTO = 0x9,
  OP_SUBTRACT = 0x6,
  OP_GREATERTHAN = 0xA,
  OP_NOT = 0x7,
  OP_GREATERTHANEQUALTO = 0xB,
  OP_LESSTHAN = 0x8,
  OP_EQUALS = 0xC,
  OP_LESSTHANEQUALTO = 0x9,
  OP_NOTEQUAL = 0xD,
  OP_GREATERTHAN = 0xA,
  OP_AND = 0xE,
  OP_GREATERTHANEQUALTO = 0xB,
  OP_OR = 0xF,
  OP_EQUALS = 0xC,
  OP_LEFTPAREN = 0x10,
  OP_NOTEQUAL = 0xD,
  OP_COMMA = 0x11,
  OP_AND = 0xE,
  OP_BITWISEAND = 0x12,
  OP_OR = 0xF,
  OP_BITWISEOR = 0x13,
  OP_LEFTPAREN = 0x10,
  OP_BITWISENOT = 0x14,
  OP_COMMA = 0x11,
  OP_BITSHIFTLEFT = 0x15,
  OP_BITWISEAND = 0x12,
  OP_BITSHIFTRIGHT = 0x16,
  OP_BITWISEOR = 0x13,
  OP_STATICDVARINT = 0x17,
  OP_BITWISENOT = 0x14,
  OP_STATICDVARBOOL = 0x18,
  OP_BITSHIFTLEFT = 0x15,
  OP_STATICDVARFLOAT = 0x19,
  OP_BITSHIFTRIGHT = 0x16,
  OP_STATICDVARSTRING = 0x1A,
  OP_STATICDVARINT = 0x17,
  OP_INT = 0x1B,
  OP_STATICDVARBOOL = 0x18,
  OP_STRING = 0x1C,
  OP_STATICDVARFLOAT = 0x19,
  OP_FLOAT = 0x1D,
  OP_STATICDVARSTRING = 0x1A,
  OP_SIN = 0x1E,
  OP_INT = 0x1B,
  OP_COS = 0x1F,
  OP_STRING = 0x1C,
  OP_MIN = 0x20,
  OP_FLOAT = 0x1D,
  OP_MAX = 0x21,
  OP_SIN = 0x1E,
  OP_MILLISECONDS = 0x22,
  OP_COS = 0x1F,
  OP_DVARINT = 0x23,
  OP_MIN = 0x20,
  OP_DVARBOOL = 0x24,
  OP_MAX = 0x21,
  OP_DVARFLOAT = 0x25,
  OP_MILLISECONDS = 0x22,
  OP_DVARSTRING = 0x26,
  OP_DVARINT = 0x23,
  OP_STAT = 0x27,
  OP_DVARBOOL = 0x24,
  OP_UIACTIVE = 0x28,
  OP_DVARFLOAT = 0x25,
  OP_FLASHBANGED = 0x29,
  OP_DVARSTRING = 0x26,
  OP_USINGVEHICLE = 0x2A,
  OP_STAT = 0x27,
  OP_MISSILECAM = 0x2B,
  OP_UIACTIVE = 0x28,
  OP_SCOPED = 0x2C,
  OP_FLASHBANGED = 0x29,
  OP_SCOPEDTHERMAL = 0x2D,
  OP_USINGVEHICLE = 0x2A,
  OP_SCOREBOARDVISIBLE = 0x2E,
  OP_MISSILECAM = 0x2B,
  OP_INKILLCAM = 0x2F,
  OP_SCOPED = 0x2C,
  OP_INKILLCAMNPC = 0x30,
  OP_SCOPEDTHERMAL = 0x2D,
  OP_PLAYERFIELD = 0x31,
  OP_SCOREBOARDVISIBLE = 0x2E,
  OP_GETPERK = 0x32,
  OP_INKILLCAM = 0x2F,
  OP_SELECTINGLOCATION = 0x33,
  OP_INKILLCAMNPC = 0x30,
  OP_SELECTINGDIRECTION = 0x34,
  OP_PLAYERFIELD = 0x31,
  OP_TEAMFIELD = 0x35,
  OP_GETPERK = 0x32,
  OP_OTHERTEAMFIELD = 0x36,
  OP_SELECTINGLOCATION = 0x33,
  OP_MARINESFIELD = 0x37,
  OP_SELECTINGDIRECTION = 0x34,
  OP_OPFORFIELD = 0x38,
  OP_TEAMFIELD = 0x35,
  OP_MENUISOPEN = 0x39,
  OP_OTHERTEAMFIELD = 0x36,
  OP_WRITINGDATA = 0x3A,
  OP_MARINESFIELD = 0x37,
  OP_INLOBBY = 0x3B,
  OP_OPFORFIELD = 0x38,
  OP_INPRIVATEPARTY = 0x3C,
  OP_MENUISOPEN = 0x39,
  OP_PRIVATEPARTYHOST = 0x3D,
  OP_WRITINGDATA = 0x3A,
  OP_PRIVATEPARTYHOSTINLOBBY = 0x3E,
  OP_INLOBBY = 0x3B,
  OP_ALONEINPARTY = 0x3F,
  OP_INPRIVATEPARTY = 0x3C,
  OP_ADSJAVELIN = 0x40,
  OP_PRIVATEPARTYHOST = 0x3D,
  OP_WEAPLOCKBLINK = 0x41,
  OP_PRIVATEPARTYHOSTINLOBBY = 0x3E,
  OP_WEAPATTACKTOP = 0x42,
  OP_ALONEINPARTY = 0x3F,
  OP_WEAPATTACKDIRECT = 0x43,
  OP_ADSJAVELIN = 0x40,
  OP_WEAPLOCKING = 0x44,
  OP_WEAPLOCKBLINK = 0x41,
  OP_WEAPLOCKED = 0x45,
  OP_WEAPATTACKTOP = 0x42,
  OP_WEAPLOCKTOOCLOSE = 0x46,
  OP_WEAPATTACKDIRECT = 0x43,
  OP_WEAPLOCKSCREENPOSX = 0x47,
  OP_WEAPLOCKING = 0x44,
  OP_WEAPLOCKSCREENPOSY = 0x48,
  OP_WEAPLOCKED = 0x45,
  OP_SECONDSASTIME = 0x49,
  OP_WEAPLOCKTOOCLOSE = 0x46,
  OP_TABLELOOKUP = 0x4A,
  OP_WEAPLOCKSCREENPOSX = 0x47,
  OP_TABLELOOKUPBYROW = 0x4B,
  OP_WEAPLOCKSCREENPOSY = 0x48,
  OP_TABLEGETROWNUM = 0x4C,
  OP_SECONDSASTIME = 0x49,
  OP_LOCALIZESTRING = 0x4D,
  OP_TABLELOOKUP = 0x4A,
  OP_LOCALVARINT = 0x4E,
  OP_TABLELOOKUPBYROW = 0x4B,
  OP_LOCALVARBOOL = 0x4F,
  OP_TABLEGETROWNUM = 0x4C,
  OP_LOCALVARFLOAT = 0x50,
  OP_LOCALIZESTRING = 0x4D,
  OP_LOCALVARSTRING = 0x51,
  OP_LOCALVARINT = 0x4E,
  OP_TIMELEFT = 0x52,
  OP_LOCALVARBOOL = 0x4F,
  OP_SECONDSASCOUNTDOWN = 0x53,
  OP_LOCALVARFLOAT = 0x50,
  OP_GAMEMSGWNDACTIVE = 0x54,
  OP_LOCALVARSTRING = 0x51,
  OP_GAMETYPENAME = 0x55,
  OP_TIMELEFT = 0x52,
  OP_GAMETYPE = 0x56,
  OP_SECONDSASCOUNTDOWN = 0x53,
  OP_GAMETYPEDESCRIPTION = 0x57,
  OP_GAMEMSGWNDACTIVE = 0x54,
  OP_SCORE = 0x58,
  OP_GAMETYPENAME = 0x55,
  OP_FRIENDSONLINE = 0x59,
  OP_GAMETYPE = 0x56,
  OP_SPECTATINGCLIENT = 0x5A,
  OP_GAMETYPEDESCRIPTION = 0x57,
  OP_SPECTATINGFREE = 0x5B,
  OP_SCORE = 0x58,
  OP_STATRANGEBITSSET = 0x5C,
  OP_FRIENDSONLINE = 0x59,
  OP_KEYBINDING = 0x5D,
  OP_SPECTATINGCLIENT = 0x5A,
  OP_ACTIONSLOTUSABLE = 0x5E,
  OP_SPECTATINGFREE = 0x5B,
  OP_HUDFADE = 0x5F,
  OP_STATRANGEBITSSET = 0x5C,
  OP_MAXRECOMMENDEDPLAYERS = 0x60,
  OP_KEYBINDING = 0x5D,
  OP_ACCEPTINGINVITE = 0x61,
  OP_ACTIONSLOTUSABLE = 0x5E,
  OP_ISINTERMISSION = 0x62,
  OP_HUDFADE = 0x5F,
  OP_GAMEHOST = 0x63,
  OP_MAXRECOMMENDEDPLAYERS = 0x60,
  OP_PARTYISMISSINGMAPPACK = 0x64,
  OP_ACCEPTINGINVITE = 0x61,
  OP_PARTYMISSINGMAPPACKERROR = 0x65,
  OP_ISINTERMISSION = 0x62,
  OP_ANYNEWMAPPACKS = 0x66,
  OP_GAMEHOST = 0x63,
  OP_AMISELECTED = 0x67,
  OP_PARTYISMISSINGMAPPACK = 0x64,
  OP_PARTYSTATUSSTRING = 0x68,
  OP_PARTYMISSINGMAPPACKERROR = 0x65,
  OP_ATTACHEDCONTROLLERCOUNT = 0x69,
  OP_ANYNEWMAPPACKS = 0x66,
  OP_ISSPLITSCREENONLINEPOSSIBLE = 0x6A,
  OP_AMISELECTED = 0x67,
  OP_SPLITSCREENPLAYERCOUNT = 0x6B,
  OP_PARTYSTATUSSTRING = 0x68,
  OP_GETPLAYERDATA = 0x6C,
  OP_ATTACHEDCONTROLLERCOUNT = 0x69,
  OP_GETPLAYERDATASPLITSCREEN = 0x6D,
  OP_ISSPLITSCREENONLINEPOSSIBLE = 0x6A,
  OP_EXPERIENCEFORLEVEL = 0x6E,
  OP_SPLITSCREENPLAYERCOUNT = 0x6B,
  OP_LEVELFOREXPERIENCE = 0x6F,
  OP_GETPLAYERDATA = 0x6C,
  OP_ISITEMUNLOCKED = 0x70,
  OP_GETPLAYERDATASPLITSCREEN = 0x6D,
  OP_ISITEMUNLOCKEDSPLITSCREEN = 0x71,
  OP_EXPERIENCEFORLEVEL = 0x6E,
  OP_DEBUGPRINT = 0x72,
  OP_LEVELFOREXPERIENCE = 0x6F,
  OP_GETPLAYERDATAANYBOOLTRUE = 0x73,
  OP_ISITEMUNLOCKED = 0x70,
  OP_WEAPONCLASSNEW = 0x74,
  OP_ISITEMUNLOCKEDSPLITSCREEN = 0x71,
  OP_WEAPONNAME = 0x75,
  OP_DEBUGPRINT = 0x72,
  OP_ISRELOADING = 0x76,
  OP_GETPLAYERDATAANYBOOLTRUE = 0x73,
  OP_SAVEGAMEAVAILABLE = 0x77,
  OP_WEAPONCLASSNEW = 0x74,
  OP_UNLOCKEDITEMCOUNT = 0x78,
  OP_WEAPONNAME = 0x75,
  OP_UNLOCKEDITEMCOUNTSPLITSCREEN = 0x79,
  OP_ISRELOADING = 0x76,
  OP_UNLOCKEDITEM = 0x7A,
  OP_SAVEGAMEAVAILABLE = 0x77,
  OP_UNLOCKEDITEMSPLITSCREEN = 0x7B,
  OP_UNLOCKEDITEMCOUNT = 0x78,
  OP_MAILSUBJECT = 0x7C,
  OP_UNLOCKEDITEMCOUNTSPLITSCREEN = 0x79,
  OP_MAILFROM = 0x7D,
  OP_UNLOCKEDITEM = 0x7A,
  OP_MAILRECEIVED = 0x7E,
  OP_UNLOCKEDITEMSPLITSCREEN = 0x7B,
  OP_MAILBODY = 0x7F,
  OP_MAILSUBJECT = 0x7C,
  OP_MAILLOOTLOCALIZED = 0x80,
  OP_MAILFROM = 0x7D,
  OP_MAILGIVESLOOT = 0x81,
  OP_MAILRECEIVED = 0x7E,
  OP_ANYNEWMAIL = 0x82,
  OP_MAILBODY = 0x7F,
  OP_MAILTIMETOFOLLOWUP = 0x83,
  OP_MAILLOOTLOCALIZED = 0x80,
  OP_MAILLOOTTYPE = 0x84,
  OP_MAILGIVESLOOT = 0x81,
  OP_MAILRANLOTTERY = 0x85,
  OP_ANYNEWMAIL = 0x82,
  OP_LOTTERYLOOTLOCALIZED = 0x86,
  OP_MAILTIMETOFOLLOWUP = 0x83,
  OP_RADARISJAMMED = 0x87,
  OP_MAILLOOTTYPE = 0x84,
  OP_RADARJAMINTENSITY = 0x88,
  OP_MAILRANLOTTERY = 0x85,
  OP_RADARISENABLED = 0x89,
  OP_LOTTERYLOOTLOCALIZED = 0x86,
  OP_ISEMPJAMMED = 0x8A,
  OP_RADARISJAMMED = 0x87,
  OP_PLAYERADS = 0x8B,
  OP_RADARJAMINTENSITY = 0x88,
  OP_WEAPONHEATACTIVE = 0x8C,
  OP_RADARISENABLED = 0x89,
  OP_WEAPONHEATVALUE = 0x8D,
  OP_ISEMPJAMMED = 0x8A,
  OP_WEAPONHEATOVERHEATED = 0x8E,
  OP_PLAYERADS = 0x8B,
  OP_GETSPLASHTEXT = 0x8F,
  OP_WEAPONHEATACTIVE = 0x8C,
  OP_GETSPLASHDESCRIPTION = 0x90,
  OP_WEAPONHEATVALUE = 0x8D,
  OP_GETSPLASHMATERIAL = 0x91,
  OP_WEAPONHEATOVERHEATED = 0x8E,
  OP_SPLASHHASICON = 0x92,
  OP_GETSPLASHTEXT = 0x8F,
  OP_SPLASHROWNUM = 0x93,
  OP_GETSPLASHDESCRIPTION = 0x90,
  OP_GETFOCUSEDITEMNAME = 0x94,
  OP_GETSPLASHMATERIAL = 0x91,
  OP_GETFOCUSEDITEMX = 0x95,
  OP_SPLASHHASICON = 0x92,
  OP_GETFOCUSEDITEMY = 0x96,
  OP_SPLASHROWNUM = 0x93,
  OP_GETFOCUSEDITEMWIDTH = 0x97,
  OP_GETFOCUSEDITEMNAME = 0x94,
  OP_GETFOCUSEDITEMHEIGHT = 0x98,
  OP_GETFOCUSEDITEMX = 0x95,
  OP_GETITEMX = 0x99,
  OP_GETFOCUSEDITEMY = 0x96,
  OP_GETITEMY = 0x9A,
  OP_GETFOCUSEDITEMWIDTH = 0x97,
  OP_GETITEMWIDTH = 0x9B,
  OP_GETFOCUSEDITEMHEIGHT = 0x98,
  OP_GETITEMHEIGHT = 0x9C,
  OP_GETITEMX = 0x99,
  OP_PLAYLIST = 0x9D,
  OP_GETITEMY = 0x9A,
  OP_SCOREBOARDEXTERNALMUTENOTICE = 0x9E,
  OP_GETITEMWIDTH = 0x9B,
  OP_GETCLIENTMATCHDATA = 0x9F,
  OP_GETITEMHEIGHT = 0x9C,
  OP_GETCLIENTMATCHDATADEF = 0xA0,
  OP_PLAYLIST = 0x9D,
  OP_GETMAPNAME = 0xA1,
  OP_SCOREBOARDEXTERNALMUTENOTICE = 0x9E,
  OP_GETMAPIMAGE = 0xA2,
  OP_GETCLIENTMATCHDATA = 0x9F,
  OP_GETMAPCUSTOM = 0xA3,
  OP_GETCLIENTMATCHDATADEF = 0xA0,
  OP_GETMIGRATIONSTATUS = 0xA4,
  OP_GETMAPNAME = 0xA1,
  OP_GETPLAYERCARDINFO = 0xA5,
  OP_GETMAPIMAGE = 0xA2,
  OP_ISOFFLINEPROFILESELECTED = 0xA6,
  OP_GETMAPCUSTOM = 0xA3,
  OP_COOPPLAYER = 0xA7,
  OP_GETMIGRATIONSTATUS = 0xA4,
  OP_ISCOOP = 0xA8,
  OP_GETPLAYERCARDINFO = 0xA5,
  OP_GETPARTYSTATUS = 0xA9,
  OP_ISOFFLINEPROFILESELECTED = 0xA6,
  OP_GETSEARCHPARAMS = 0xAA,
  OP_COOPPLAYER = 0xA7,
  OP_GETTIMEPLAYED = 0xAB,
  OP_ISCOOP = 0xA8,
  OP_ISSELECTEDPLAYERFRIEND = 0xAC,
  OP_GETPARTYSTATUS = 0xA9,
  OP_GETCHARBYINDEX = 0xAD,
  OP_GETSEARCHPARAMS = 0xAA,
  OP_GETPROFILEDATA = 0xAE,
  OP_GETTIMEPLAYED = 0xAB,
  OP_ISPROFILESIGNEDIN = 0xAF,
  OP_ISSELECTEDPLAYERFRIEND = 0xAC,
  OP_GETWAITPOPUPSTATUS = 0xB0,
  OP_GETCHARBYINDEX = 0xAD,
  OP_GETNATTYPE = 0xB1,
  OP_GETPROFILEDATA = 0xAE,
  OP_GETLOCALIZEDNATTYPE = 0xB2,
  OP_ISPROFILESIGNEDIN = 0xAF,
  OP_GETADJUSTEDSAFEAREAHORIZONTAL = 0xB3,
  OP_GETWAITPOPUPSTATUS = 0xB0,
  OP_GETADJUSTEDSAFEAREAVERTICAL = 0xB4,
  OP_GETNATTYPE = 0xB1,
  OP_CONNECTIONINFO = 0xB5,
  OP_GETLOCALIZEDNATTYPE = 0xB2,
  OP_OFFLINEPROFILECANSAVE = 0xB6,
  OP_GETADJUSTEDSAFEAREAHORIZONTAL = 0xB3,
  OP_ALLSPLITSCREENPROFILESCANSAVE = 0xB7,
  OP_GETADJUSTEDSAFEAREAVERTICAL = 0xB4,
  OP_ALLSPLITSCREENPROFILESARESIGNEDIN = 0xB8,
  OP_CONNECTIONINFO = 0xB5,
  OP_DOWEHAVEMAPPACK = 0xB9,
  OP_OFFLINEPROFILECANSAVE = 0xB6,
};
  OP_ALLSPLITSCREENPROFILESCANSAVE = 0xB7,
  OP_ALLSPLITSCREENPROFILESARESIGNEDIN = 0xB8,
enum expDataType  
  OP_DOWEHAVEMAPPACK = 0xB9,
{
};
  VAL_INT = 0x0,
 
  VAL_FLOAT = 0x1,
enum expDataType  
  VAL_STRING = 0x2,
{
  VAL_EXPRESSION = 0x3,
  VAL_INT = 0x0,
};
  VAL_FLOAT = 0x1,
  VAL_STRING = 0x2,
struct statement_s;
  NUM_INTERNAL_DATATYPES = 0x3,
struct expression_s;
  VAL_FUNCTION = 0x3,
struct localData_t;
  NUM_DATATYPES = 0x4,
};
union operandInternalDataUnion
 
{
struct Statement_s;
  int intVal;
struct MenuEventHandlerSet;
  float floatVal;
struct ExpressionSupportingData;
  const char *string;
 
  expression_s *expression;
struct ExpressionString
};
{
  const char *string;
struct Operand  
};
{
 
  expDataType dataType;
union operandInternalDataUnion
  operandInternalDataUnion internals;
{
};
  int intVal;
  float floatVal;
struct OperationStruct
  ExpressionString *stringVal;
{
  Statement_s *function;
  operationEnum op;
};
  int unknown;
 
};
struct Operand  
{
union entryInternalData
  expDataType dataType;
{
  operandInternalDataUnion internals;
  OperationStruct op;
};
  Operand operand;
 
};
union entryInternalData
{
struct dvarExpression_t
  operationEnum op;
{
  Operand operand;
  char *dvarName;
};
  expression_s *expression;
 
};
struct SetLocalVarData
{
struct statementExpression_t
  const char *localVarName;
{
  Statement_s *expression;
  statement_s *statement;
};
  expression_s *expression;  // loads this first
 
};
struct ConditionalScript
{
struct expressionEntry  
  MenuEventHandlerSet *eventHandlerSet;
{
  Statement_s *eventExpression;  // loads this first
  int type;
};
  entryInternalData data;
 
};
struct expressionEntry  
{
struct expression_s
  int type;
{
  entryInternalData data;
  int numEntries;
};
  expressionEntry *entries;
 
  localData_t *loadFrom;
struct Statement_s
  char unused[0xC];
{
};
  int numEntries;
  expressionEntry *entries;
struct component_t
  ExpressionSupportingData *supportingData;
{
  char unknown[0xC];
  int numEntries;
};
  expression_s *expressions;
 
};
enum ItemFloatExpressionTarget
{
union statementInternalDataUnion
  ITEM_FLOATEXP_TGT_RECT_X = 0x0,
{
  ITEM_FLOATEXP_TGT_RECT_Y = 0x1,
  char *data;
  ITEM_FLOATEXP_TGT_RECT_W = 0x2,
  statementExpression_t *statementExpression;
  ITEM_FLOATEXP_TGT_RECT_H = 0x3,
  statement_s *statement;
  ITEM_FLOATEXP_TGT_FORECOLOR_R = 0x4,
  dvarExpression_t *dvarExpression;
  ITEM_FLOATEXP_TGT_FORECOLOR_G = 0x5,
};
  ITEM_FLOATEXP_TGT_FORECOLOR_B = 0x6,
  ITEM_FLOATEXP_TGT_FORECOLOR_RGB = 0x7,
#pragma pack(push, 4)
  ITEM_FLOATEXP_TGT_FORECOLOR_A = 0x8,
struct statementEntry
  ITEM_FLOATEXP_TGT_GLOWCOLOR_R = 0x9,
{
  ITEM_FLOATEXP_TGT_GLOWCOLOR_G = 0xA,
  statementInternalDataUnion data;
  ITEM_FLOATEXP_TGT_GLOWCOLOR_B = 0xB,
  char type;
  ITEM_FLOATEXP_TGT_GLOWCOLOR_RGB = 0xC,
};
  ITEM_FLOATEXP_TGT_GLOWCOLOR_A = 0xD,
#pragma pack(pop)
  ITEM_FLOATEXP_TGT_BACKCOLOR_R = 0xE,
  ITEM_FLOATEXP_TGT_BACKCOLOR_G = 0xF,
struct statement_s
  ITEM_FLOATEXP_TGT_BACKCOLOR_B = 0x10,
{
  ITEM_FLOATEXP_TGT_BACKCOLOR_RGB = 0x11,
  int numEntries;
  ITEM_FLOATEXP_TGT_BACKCOLOR_A = 0x12,
  statementEntry **statements;
  ITEM_FLOATEXP_TGT__COUNT = 0x13,
};
};
 
struct ItemKeyHandler
struct ItemFloatExpression
{
{
  int key;
  ItemFloatExpressionTarget target;
  statement_s *statement;
  Statement_s *expression;
  ItemKeyHandler *next;
};
};
 
union EventData
struct newsTicker_s
{
{
  const char *unconditionalScript;
  int textSource;    // 0 = text input, 1 = motd
  ConditionalScript *conditionalScript;
  int speed;
  MenuEventHandlerSet *elseScript;
  int spacing;
  SetLocalVarData *setLocalVarData;
  char unknown[0x10];
};
};
 
#pragma pack(push, 4)
#define MAX_LB_COLUMNS 16
struct MenuEventHandler
{
struct columnInfo_s
  EventData eventData;
{
  char eventType;
  int pos;
};
  int width;
#pragma pack(pop)
  int maxChars;
 
  int alignment;
struct MenuEventHandlerSet
};
{
  int eventHandlerCount;
struct listBoxDef_s
  MenuEventHandler **eventHandlers;
{
};
  int startPos[4];
 
  int endPos[4];
struct ItemKeyHandler
  int drawPadding;
{
  float elementWidth;
  int key;
   float elementHeight;
  MenuEventHandlerSet *action;
  int elementStyle;
  ItemKeyHandler *next;
  int numColumns;
};
  columnInfo_s columnInfo[MAX_LB_COLUMNS];
 
  statement_s* doubleClick;
struct newsTickerDef_s
  int notselectable;
{
  int noscrollbars;
  int feedId;   // 0 = text input, 1 = motd
  int usepaging;
  int speed;
  vec4_t selectBorder;
  int spacing;
  Material *selectIcon;
  char unknown[0x10];
};
};
 
struct editFieldDef_s
#define MAX_LB_COLUMNS 16
{
 
  float minVal;
struct columnInfo_s
  float maxVal;
{
  float defVal;
  int pos;
  float range;
  int width;
  int maxChars;
  int maxChars;
  int maxCharsGotoNext;
  int alignment;
  int maxPaintChars;
};
  int paintOffset;
 
};
struct listBoxDef_s
{
#define MAX_MULTI_DVARS 32
#ifndef PC
  int startPos[4];
struct multiDef_s
  int endPos[4];
{
  int drawPadding;
  char *dvarList[MAX_MULTI_DVARS];
#else
  char *dvarStr[MAX_MULTI_DVARS];
  int unknown[4];
  float dvarValue[MAX_MULTI_DVARS];
#endif
  int count;
  float elementWidth;
  int strDef;
  float elementHeight;
};
  int elementStyle;
  int numColumns;
union itemDefData_t
  columnInfo_s columnInfo[MAX_LB_COLUMNS];
{
  MenuEventHandlerSet *doubleClick;
  listBoxDef_s *listBox;
  int notselectable;
  editFieldDef_s *editField;
  int noscrollbars;
  multiDef_s *multi;
  int usepaging;
  const char *enumDvarName;
  vec4_t selectBorder;
  newsTicker_s *newsTicker;
  Material *selectIcon;
  int *textScroll; // ?
};
  void *data;
 
};
struct editFieldDef_s
{
#define WINDOWDYNAMIC_VISIBLE 0x00000004
  float minVal;
#define WINDOWDYNAMIC_HASFORECOLOR 0x00010000
  float maxVal;
  float defVal;
#define WINDOWSTATIC_DECORATION 0x00100000
  float range;
#define WINDOWSTATIC_HORIZONTALSCROLL 0x00200000
  int maxChars;
#define WINDOWSTATIC_SCREENSPACE 0x00400000
  int maxCharsGotoNext;
#define WINDOWSTATIC_AUTOWRAPPED 0x00800000
  int maxPaintChars;
#define WINDOWSTATIC_POPUP 0x01000000
  int paintOffset;
#define WINDOWSTATIC_OUTOFBOUNDSCLICK 0x02000000
};
#define WINDOWSTATIC_LEGACYSPLITSCREENSCALE 0x04000000
 
#define WINDOWSTATIC_HIDDENDURINGFLASH 0x10000000
#define MAX_MULTI_DVARS 32
#define WINDOWSTATIC_HIDDENDURINGSCOPE 0x20000000
 
#define WINDOWSTATIC_HIDDENDURINGUI 0x40000000
struct multiDef_s
#define WINDOWSTATIC_TEXTONLYFOCUS 0x80000000
{
  char *dvarList[MAX_MULTI_DVARS];
#pragma pack(push, 4)
  char *dvarStr[MAX_MULTI_DVARS];
struct rectDef_s
  float dvarValue[MAX_MULTI_DVARS];
{
  int count;
  float x;
  int strDef;
  float y;
};
  float w;
 
  float h;
struct textScrollDef_s
  char horzAlign;
{
  char vertAlign;
  int startTime;
};
};
#pragma pack(pop)
 
union itemDefData_t
typedef rectDef_s Rectangle;
{
  listBoxDef_s *listBox;
struct windowDef_t
  editFieldDef_s *editField;
{
  multiDef_s *multi;
  const char *name;
  const char *enumDvarName;
  Rectangle rect;
  newsTickerDef_s *newsTicker;
  Rectangle rectClient;
  textScrollDef_s *textScroll;
  const char *group;
  void *data;
  int style;
};
  int border;
 
  int ownerDraw;
#define WINDOWDYNAMIC_VISIBLE 0x00000004
  int ownerDrawFlags;
#define WINDOWDYNAMIC_HASFORECOLOR 0x00010000
  float borderSize;
 
  int staticFlags;
#define WINDOWSTATIC_DECORATION 0x00100000
  int dynamicFlags[4];
#define WINDOWSTATIC_HORIZONTALSCROLL 0x00200000
  int nextTime;
#define WINDOWSTATIC_SCREENSPACE 0x00400000
  vec4_t foreColor;
#define WINDOWSTATIC_AUTOWRAPPED 0x00800000
  vec4_t backColor;
#define WINDOWSTATIC_POPUP 0x01000000
  vec4_t borderColor;
#define WINDOWSTATIC_OUTOFBOUNDSCLICK 0x02000000
  vec4_t outlineColor;
#define WINDOWSTATIC_LEGACYSPLITSCREENSCALE 0x04000000
  vec4_t disableColor;
#define WINDOWSTATIC_HIDDENDURINGFLASH 0x10000000
  Material *background;
#define WINDOWSTATIC_HIDDENDURINGSCOPE 0x20000000
};
#define WINDOWSTATIC_HIDDENDURINGUI 0x40000000
#define WINDOWSTATIC_TEXTONLYFOCUS 0x80000000
typedef windowDef_t Window;
 
#pragma pack(push, 4)
struct itemDef_s
struct rectDef_s  
{
{
  Window window;
  float x;
  Rectangle textRect[4];
  float y;
  int type;
  float w;
  int dataType;
  float h;
  int align;
  char horzAlign;
  int fontEnum;
  char vertAlign;
  int textAlignMode;
};
  float textAlignX;
#pragma pack(pop)
  float textAlignY;
 
  float textScale;
typedef rectDef_s Rectangle;
  int textStyle;
 
  int gameMsgWindowIndex;
struct windowDef_t
  int gameMsgWindowMode;
{
  const char *text;
  const char *name;
  int textSaveGameInfo;
  Rectangle rect;
  menuDef_t *parent;
  Rectangle rectClient;
  statement_s *mouseEnterText;
  const char *group;
  statement_s *mouseExitText;
  int style;
  statement_s *mouseEnter;
  int border;
  statement_s *mouseExit;
  int ownerDraw;
  statement_s *action;
  int ownerDrawFlags;
  statement_s *accept;
  float borderSize;
  statement_s *onFocus;
  int staticFlags;
  statement_s *leaveFocus;
#ifndef PC
  const char *dvar;
  int dynamicFlags[4];
  const char *dvarTest;
#else
  ItemKeyHandler *onKey;
  int dynamicFlags[1];
  const char *enableDvar;
#endif
  int dvarFlags;
  int nextTime;
  snd_alias_list_t *focusSound;
  vec4_t foreColor;
  float special;
  vec4_t backColor;
  int cursorPos[4];
  vec4_t borderColor;
  itemDefData_t typeData;
  vec4_t outlineColor;
  int imageTrack;
  vec4_t disableColor;
  int numExpressions;
  Material *background;
  component_t *componentExpressions;
};
  expression_s *visibleExp;
 
  expression_s *disabledExp;
typedef windowDef_t Window;
  expression_s *textExp;
 
  expression_s *materialExp;
struct itemDef_s
  vec4_t glowColor;
{
  int decodeEffect;
  Window window;
  int field_1B8;
#ifndef PC
  int field_1BC;
  Rectangle textRect[4];
  int field_1C0;
#else
  int field_1C4;
  Rectangle textRect[1];
  int field_1C8;
#endif
};
  int type;
  int dataType;
struct localVar_t
  int align;
{
  int fontEnum;
  int unknown;
  int textAlignMode;
  const char *dvarName;
  float textAlignX;
};
  float textAlignY;
  float textScale;
struct localData_t
  int textStyle;
{
  int gameMsgWindowIndex;
  int numExpressions;
  int gameMsgWindowMode;
  expression_s **expressions;
  const char *text;
  int numStaticVars;
  int textSaveGameInfo;
  localVar_t **staticVars;
  menuDef_t *parent;
  int numStrings;
  MenuEventHandlerSet *mouseEnterText;
  const char **strings;
  MenuEventHandlerSet *mouseExitText;
};
  MenuEventHandlerSet *mouseEnter;
  MenuEventHandlerSet *mouseExit;
struct menuDef_t
  MenuEventHandlerSet *action;
{
  MenuEventHandlerSet *accept;
  Window window;
  MenuEventHandlerSet *onFocus;
  const char *font;
  MenuEventHandlerSet *leaveFocus;
  int fullscreen;
  const char *dvar;
  int itemCount;
  const char *dvarTest;
  int fontIndex;
  ItemKeyHandler *onKey;
  int cursorItems[4];
  const char *enableDvar;
  int fadeCycle;
  int dvarFlags;
  float fadeClamp;
  snd_alias_list_t *focusSound;
  float fadeAmount;
  float special;
  float fadeInAmount;
#ifndef PC
  float blurRadius;
  int cursorPos[4];
  statement_s *onOpen;
#else
  statement_s *onRequestClose;
  int cursorPos[1];
  statement_s *onClose;
#endif
  statement_s *onEsc;
  itemDefData_t typeData;
  ItemKeyHandler *execKeys;
  int imageTrack;
  expression_s *visibleExp;
  int floatExpressionCount;
  const char *allowedBinding;
  ItemFloatExpression *floatExpressions;
  const char *soundName;
  Statement_s *visibleExp;
  int imageTrack;
  Statement_s *disabledExp;
  vec4_t focusColor;
  Statement_s *textExp;
  expression_s *rectXExp;
  Statement_s *materialExp;
  expression_s *rectYExp;
  vec4_t glowColor;
  expression_s *rectHExp;
  bool decayActive;
  expression_s *rectWExp;  
  int fxBirthTime;
  itemDef_s **items;  
  int fxLetterTime;
  char unknown[0x1C0];
  int fxDecayStartTime;
  localData_t *menuData;
  int fxDecayDuration;
};
  int lastSoundPlayedTime;
};
 
struct StaticDvar
{
  dvar_s *dvar;
  const char *dvarName;
};
 
struct StaticDvarList
{
  int numStaticDvars;
  StaticDvar **staticDvars;
};
 
struct UIFunctionList
{
  int totalFunctions;
  Statement_s **functions;
};
 
struct StringList
{
  int totalStrings;
  const char **strings;
};
 
struct ExpressionSupportingData
{
  UIFunctionList uifunctions;
  StaticDvarList staticDvarList;
  StringList uiStrings;
};
 
enum transitionType
{
  TRANS_INACTIVE = 0x0,
  TRANS_LERP = 0x1,
};
 
enum triggerType
{
  TRIGGER_NONE = 0x0,
  TRIGGER_CLOSEMENU = 0x1,
};
 
struct menuTransition
{
  transitionType transitionType;
  int startTime;
  float startVal;
  float endVal;
  float time;
  triggerType endTriggerType;
};
 
struct menuDef_t
{
  Window window;
  const char *font;
  int fullscreen;
  int itemCount;
  int fontIndex;
#ifndef PC
  int cursorItems[4];
#else
  int cursorItems[1];
#endif
  int fadeCycle;
  float fadeClamp;
  float fadeAmount;
  float fadeInAmount;
  float blurRadius;
  MenuEventHandlerSet *onOpen;
  MenuEventHandlerSet *onRequestClose;
  MenuEventHandlerSet *onClose;
  MenuEventHandlerSet *onEsc;
  ItemKeyHandler *execKeys;
  Statement_s *visibleExp;
  const char *allowedBinding;
  const char *soundName;
  int imageTrack;
  vec4_t focusColor;
  Statement_s *rectXExp;
  Statement_s *rectYExp;
  Statement_s *rectHExp;
  Statement_s *rectWExp;
#ifdef PC
  Statement_s *openSoundExp;
  Statement_s *closeSoundExp;
#endif
  itemDef_s **items;
#ifndef PC
  menuTransition scaleTransition[4];
  menuTransition alphaTransition[4];
  menuTransition xTransition[4];
  menuTransition yTransition[4];
#else
  char unknown[112];
#endif
  ExpressionSupportingData *expressionData;
};
</syntaxhighlight>

Latest revision as of 16:22, 31 July 2015

enum operationEnum
{
  OP_NOOP = 0x0,
  OP_RIGHTPAREN = 0x1,
  OP_MULTIPLY = 0x2,
  OP_DIVIDE = 0x3,
  OP_MODULUS = 0x4,
  OP_ADD = 0x5,
  OP_SUBTRACT = 0x6,
  OP_NOT = 0x7,
  OP_LESSTHAN = 0x8,
  OP_LESSTHANEQUALTO = 0x9,
  OP_GREATERTHAN = 0xA,
  OP_GREATERTHANEQUALTO = 0xB,
  OP_EQUALS = 0xC,
  OP_NOTEQUAL = 0xD,
  OP_AND = 0xE,
  OP_OR = 0xF,
  OP_LEFTPAREN = 0x10,
  OP_COMMA = 0x11,
  OP_BITWISEAND = 0x12,
  OP_BITWISEOR = 0x13,
  OP_BITWISENOT = 0x14,
  OP_BITSHIFTLEFT = 0x15,
  OP_BITSHIFTRIGHT = 0x16,
  OP_STATICDVARINT = 0x17,
  OP_STATICDVARBOOL = 0x18,
  OP_STATICDVARFLOAT = 0x19,
  OP_STATICDVARSTRING = 0x1A,
  OP_INT = 0x1B,
  OP_STRING = 0x1C,
  OP_FLOAT = 0x1D,
  OP_SIN = 0x1E,
  OP_COS = 0x1F,
  OP_MIN = 0x20,
  OP_MAX = 0x21,
  OP_MILLISECONDS = 0x22,
  OP_DVARINT = 0x23,
  OP_DVARBOOL = 0x24,
  OP_DVARFLOAT = 0x25,
  OP_DVARSTRING = 0x26,
  OP_STAT = 0x27,
  OP_UIACTIVE = 0x28,
  OP_FLASHBANGED = 0x29,
  OP_USINGVEHICLE = 0x2A,
  OP_MISSILECAM = 0x2B,
  OP_SCOPED = 0x2C,
  OP_SCOPEDTHERMAL = 0x2D,
  OP_SCOREBOARDVISIBLE = 0x2E,
  OP_INKILLCAM = 0x2F,
  OP_INKILLCAMNPC = 0x30,
  OP_PLAYERFIELD = 0x31,
  OP_GETPERK = 0x32,
  OP_SELECTINGLOCATION = 0x33,
  OP_SELECTINGDIRECTION = 0x34,
  OP_TEAMFIELD = 0x35,
  OP_OTHERTEAMFIELD = 0x36,
  OP_MARINESFIELD = 0x37,
  OP_OPFORFIELD = 0x38,
  OP_MENUISOPEN = 0x39,
  OP_WRITINGDATA = 0x3A,
  OP_INLOBBY = 0x3B,
  OP_INPRIVATEPARTY = 0x3C,
  OP_PRIVATEPARTYHOST = 0x3D,
  OP_PRIVATEPARTYHOSTINLOBBY = 0x3E,
  OP_ALONEINPARTY = 0x3F,
  OP_ADSJAVELIN = 0x40,
  OP_WEAPLOCKBLINK = 0x41,
  OP_WEAPATTACKTOP = 0x42,
  OP_WEAPATTACKDIRECT = 0x43,
  OP_WEAPLOCKING = 0x44,
  OP_WEAPLOCKED = 0x45,
  OP_WEAPLOCKTOOCLOSE = 0x46,
  OP_WEAPLOCKSCREENPOSX = 0x47,
  OP_WEAPLOCKSCREENPOSY = 0x48,
  OP_SECONDSASTIME = 0x49,
  OP_TABLELOOKUP = 0x4A,
  OP_TABLELOOKUPBYROW = 0x4B,
  OP_TABLEGETROWNUM = 0x4C,
  OP_LOCALIZESTRING = 0x4D,
  OP_LOCALVARINT = 0x4E,
  OP_LOCALVARBOOL = 0x4F,
  OP_LOCALVARFLOAT = 0x50,
  OP_LOCALVARSTRING = 0x51,
  OP_TIMELEFT = 0x52,
  OP_SECONDSASCOUNTDOWN = 0x53,
  OP_GAMEMSGWNDACTIVE = 0x54,
  OP_GAMETYPENAME = 0x55,
  OP_GAMETYPE = 0x56,
  OP_GAMETYPEDESCRIPTION = 0x57,
  OP_SCORE = 0x58,
  OP_FRIENDSONLINE = 0x59,
  OP_SPECTATINGCLIENT = 0x5A,
  OP_SPECTATINGFREE = 0x5B,
  OP_STATRANGEBITSSET = 0x5C,
  OP_KEYBINDING = 0x5D,
  OP_ACTIONSLOTUSABLE = 0x5E,
  OP_HUDFADE = 0x5F,
  OP_MAXRECOMMENDEDPLAYERS = 0x60,
  OP_ACCEPTINGINVITE = 0x61,
  OP_ISINTERMISSION = 0x62,
  OP_GAMEHOST = 0x63,
  OP_PARTYISMISSINGMAPPACK = 0x64,
  OP_PARTYMISSINGMAPPACKERROR = 0x65,
  OP_ANYNEWMAPPACKS = 0x66,
  OP_AMISELECTED = 0x67,
  OP_PARTYSTATUSSTRING = 0x68,
  OP_ATTACHEDCONTROLLERCOUNT = 0x69,
  OP_ISSPLITSCREENONLINEPOSSIBLE = 0x6A,
  OP_SPLITSCREENPLAYERCOUNT = 0x6B,
  OP_GETPLAYERDATA = 0x6C,
  OP_GETPLAYERDATASPLITSCREEN = 0x6D,
  OP_EXPERIENCEFORLEVEL = 0x6E,
  OP_LEVELFOREXPERIENCE = 0x6F,
  OP_ISITEMUNLOCKED = 0x70,
  OP_ISITEMUNLOCKEDSPLITSCREEN = 0x71,
  OP_DEBUGPRINT = 0x72,
  OP_GETPLAYERDATAANYBOOLTRUE = 0x73,
  OP_WEAPONCLASSNEW = 0x74,
  OP_WEAPONNAME = 0x75,
  OP_ISRELOADING = 0x76,
  OP_SAVEGAMEAVAILABLE = 0x77,
  OP_UNLOCKEDITEMCOUNT = 0x78,
  OP_UNLOCKEDITEMCOUNTSPLITSCREEN = 0x79,
  OP_UNLOCKEDITEM = 0x7A,
  OP_UNLOCKEDITEMSPLITSCREEN = 0x7B,
  OP_MAILSUBJECT = 0x7C,
  OP_MAILFROM = 0x7D,
  OP_MAILRECEIVED = 0x7E,
  OP_MAILBODY = 0x7F,
  OP_MAILLOOTLOCALIZED = 0x80,
  OP_MAILGIVESLOOT = 0x81,
  OP_ANYNEWMAIL = 0x82,
  OP_MAILTIMETOFOLLOWUP = 0x83,
  OP_MAILLOOTTYPE = 0x84,
  OP_MAILRANLOTTERY = 0x85,
  OP_LOTTERYLOOTLOCALIZED = 0x86,
  OP_RADARISJAMMED = 0x87,
  OP_RADARJAMINTENSITY = 0x88,
  OP_RADARISENABLED = 0x89,
  OP_ISEMPJAMMED = 0x8A,
  OP_PLAYERADS = 0x8B,
  OP_WEAPONHEATACTIVE = 0x8C,
  OP_WEAPONHEATVALUE = 0x8D,
  OP_WEAPONHEATOVERHEATED = 0x8E,
  OP_GETSPLASHTEXT = 0x8F,
  OP_GETSPLASHDESCRIPTION = 0x90,
  OP_GETSPLASHMATERIAL = 0x91,
  OP_SPLASHHASICON = 0x92,
  OP_SPLASHROWNUM = 0x93,
  OP_GETFOCUSEDITEMNAME = 0x94,
  OP_GETFOCUSEDITEMX = 0x95,
  OP_GETFOCUSEDITEMY = 0x96,
  OP_GETFOCUSEDITEMWIDTH = 0x97,
  OP_GETFOCUSEDITEMHEIGHT = 0x98,
  OP_GETITEMX = 0x99,
  OP_GETITEMY = 0x9A,
  OP_GETITEMWIDTH = 0x9B,
  OP_GETITEMHEIGHT = 0x9C,
  OP_PLAYLIST = 0x9D,
  OP_SCOREBOARDEXTERNALMUTENOTICE = 0x9E,
  OP_GETCLIENTMATCHDATA = 0x9F,
  OP_GETCLIENTMATCHDATADEF = 0xA0,
  OP_GETMAPNAME = 0xA1,
  OP_GETMAPIMAGE = 0xA2,
  OP_GETMAPCUSTOM = 0xA3,
  OP_GETMIGRATIONSTATUS = 0xA4,
  OP_GETPLAYERCARDINFO = 0xA5,
  OP_ISOFFLINEPROFILESELECTED = 0xA6,
  OP_COOPPLAYER = 0xA7,
  OP_ISCOOP = 0xA8,
  OP_GETPARTYSTATUS = 0xA9,
  OP_GETSEARCHPARAMS = 0xAA,
  OP_GETTIMEPLAYED = 0xAB,
  OP_ISSELECTEDPLAYERFRIEND = 0xAC,
  OP_GETCHARBYINDEX = 0xAD,
  OP_GETPROFILEDATA = 0xAE,
  OP_ISPROFILESIGNEDIN = 0xAF,
  OP_GETWAITPOPUPSTATUS = 0xB0,
  OP_GETNATTYPE = 0xB1,
  OP_GETLOCALIZEDNATTYPE = 0xB2,
  OP_GETADJUSTEDSAFEAREAHORIZONTAL = 0xB3,
  OP_GETADJUSTEDSAFEAREAVERTICAL = 0xB4,
  OP_CONNECTIONINFO = 0xB5,
  OP_OFFLINEPROFILECANSAVE = 0xB6,
  OP_ALLSPLITSCREENPROFILESCANSAVE = 0xB7,
  OP_ALLSPLITSCREENPROFILESARESIGNEDIN = 0xB8,
  OP_DOWEHAVEMAPPACK = 0xB9,
};

enum expDataType 
{
  VAL_INT = 0x0,
  VAL_FLOAT = 0x1,
  VAL_STRING = 0x2,
  NUM_INTERNAL_DATATYPES = 0x3,
  VAL_FUNCTION = 0x3,
  NUM_DATATYPES = 0x4,
};

struct Statement_s;
struct MenuEventHandlerSet;
struct ExpressionSupportingData;

struct ExpressionString
{
  const char *string;
};

union operandInternalDataUnion 
{
  int intVal;
  float floatVal;
  ExpressionString *stringVal;
  Statement_s *function;
};

struct Operand 
{
  expDataType dataType;
  operandInternalDataUnion internals;
};

union entryInternalData 
{
  operationEnum op;
  Operand operand;
};

struct SetLocalVarData
{
  const char *localVarName;
  Statement_s *expression;
};

struct ConditionalScript
{
  MenuEventHandlerSet *eventHandlerSet;
  Statement_s *eventExpression;  // loads this first
};

struct expressionEntry 
{
  int type;
  entryInternalData data;
};

struct Statement_s 
{
  int numEntries;
  expressionEntry *entries;
  ExpressionSupportingData *supportingData;
  char unknown[0xC];
};

enum ItemFloatExpressionTarget
{
  ITEM_FLOATEXP_TGT_RECT_X = 0x0,
  ITEM_FLOATEXP_TGT_RECT_Y = 0x1,
  ITEM_FLOATEXP_TGT_RECT_W = 0x2,
  ITEM_FLOATEXP_TGT_RECT_H = 0x3,
  ITEM_FLOATEXP_TGT_FORECOLOR_R = 0x4,
  ITEM_FLOATEXP_TGT_FORECOLOR_G = 0x5,
  ITEM_FLOATEXP_TGT_FORECOLOR_B = 0x6,
  ITEM_FLOATEXP_TGT_FORECOLOR_RGB = 0x7,
  ITEM_FLOATEXP_TGT_FORECOLOR_A = 0x8,
  ITEM_FLOATEXP_TGT_GLOWCOLOR_R = 0x9,
  ITEM_FLOATEXP_TGT_GLOWCOLOR_G = 0xA,
  ITEM_FLOATEXP_TGT_GLOWCOLOR_B = 0xB,
  ITEM_FLOATEXP_TGT_GLOWCOLOR_RGB = 0xC,
  ITEM_FLOATEXP_TGT_GLOWCOLOR_A = 0xD,
  ITEM_FLOATEXP_TGT_BACKCOLOR_R = 0xE,
  ITEM_FLOATEXP_TGT_BACKCOLOR_G = 0xF,
  ITEM_FLOATEXP_TGT_BACKCOLOR_B = 0x10,
  ITEM_FLOATEXP_TGT_BACKCOLOR_RGB = 0x11,
  ITEM_FLOATEXP_TGT_BACKCOLOR_A = 0x12,
  ITEM_FLOATEXP_TGT__COUNT = 0x13,
};

struct ItemFloatExpression
{
  ItemFloatExpressionTarget target;
  Statement_s *expression;
};

union EventData
{
  const char *unconditionalScript;
  ConditionalScript *conditionalScript;
  MenuEventHandlerSet *elseScript;
  SetLocalVarData *setLocalVarData;
};

#pragma pack(push, 4)
struct MenuEventHandler
{
  EventData eventData;
  char eventType;
};
#pragma pack(pop)

struct MenuEventHandlerSet
{
  int eventHandlerCount;
  MenuEventHandler **eventHandlers;
};

struct ItemKeyHandler
{
  int key;
  MenuEventHandlerSet *action;
  ItemKeyHandler *next;
};

struct newsTickerDef_s
{
  int feedId;    // 0 = text input, 1 = motd
  int speed;
  int spacing;
  char unknown[0x10];
};

#define MAX_LB_COLUMNS 16

struct columnInfo_s 
{
  int pos;
  int width;
  int maxChars;
  int alignment;
};

struct listBoxDef_s 
{
#ifndef PC
  int startPos[4];
  int endPos[4];
  int drawPadding;
#else
  int unknown[4];
#endif
  float elementWidth;
  float elementHeight;
  int elementStyle;
  int numColumns;
  columnInfo_s columnInfo[MAX_LB_COLUMNS];
  MenuEventHandlerSet *doubleClick;
  int notselectable;
  int noscrollbars;
  int usepaging;
  vec4_t selectBorder;
  Material *selectIcon;
};

struct editFieldDef_s 
{
  float minVal;
  float maxVal;
  float defVal;
  float range;
  int maxChars;
  int maxCharsGotoNext;
  int maxPaintChars;
  int paintOffset;
};

#define MAX_MULTI_DVARS 32

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

struct textScrollDef_s
{
  int startTime;
};

union itemDefData_t 
{
  listBoxDef_s *listBox;
  editFieldDef_s *editField;
  multiDef_s *multi;
  const char *enumDvarName;
  newsTickerDef_s *newsTicker;
  textScrollDef_s *textScroll;
  void *data;
};

#define WINDOWDYNAMIC_VISIBLE		0x00000004
#define WINDOWDYNAMIC_HASFORECOLOR	0x00010000

#define WINDOWSTATIC_DECORATION				0x00100000
#define WINDOWSTATIC_HORIZONTALSCROLL			0x00200000
#define WINDOWSTATIC_SCREENSPACE				0x00400000
#define WINDOWSTATIC_AUTOWRAPPED				0x00800000
#define WINDOWSTATIC_POPUP						0x01000000
#define WINDOWSTATIC_OUTOFBOUNDSCLICK			0x02000000
#define WINDOWSTATIC_LEGACYSPLITSCREENSCALE	0x04000000
#define WINDOWSTATIC_HIDDENDURINGFLASH			0x10000000
#define WINDOWSTATIC_HIDDENDURINGSCOPE			0x20000000
#define WINDOWSTATIC_HIDDENDURINGUI			0x40000000
#define WINDOWSTATIC_TEXTONLYFOCUS				0x80000000

#pragma pack(push, 4)
struct rectDef_s 
{
  float x;
  float y;
  float w;
  float h;
  char horzAlign;
  char vertAlign;
};
#pragma pack(pop)

typedef rectDef_s Rectangle;

struct windowDef_t
{
  const char *name;
  Rectangle rect;
  Rectangle rectClient;
  const char *group;
  int style;
  int border;
  int ownerDraw;
  int ownerDrawFlags;
  float borderSize;
  int staticFlags;
#ifndef PC
  int dynamicFlags[4];
#else
  int dynamicFlags[1];
#endif
  int nextTime;
  vec4_t foreColor;
  vec4_t backColor;
  vec4_t borderColor;
  vec4_t outlineColor;
  vec4_t disableColor;
  Material *background;
};

typedef windowDef_t Window;

struct itemDef_s 
{
  Window window;
#ifndef PC
  Rectangle textRect[4];
#else
  Rectangle textRect[1];
#endif
  int type;
  int dataType;
  int align;
  int fontEnum;
  int textAlignMode;
  float textAlignX;
  float textAlignY;
  float textScale;
  int textStyle;
  int gameMsgWindowIndex;
  int gameMsgWindowMode;
  const char *text;
  int textSaveGameInfo;
  menuDef_t *parent;
  MenuEventHandlerSet *mouseEnterText;
  MenuEventHandlerSet *mouseExitText;
  MenuEventHandlerSet *mouseEnter;
  MenuEventHandlerSet *mouseExit;
  MenuEventHandlerSet *action;
  MenuEventHandlerSet *accept;
  MenuEventHandlerSet *onFocus;
  MenuEventHandlerSet *leaveFocus;
  const char *dvar;
  const char *dvarTest;
  ItemKeyHandler *onKey;
  const char *enableDvar;
  int dvarFlags;
  snd_alias_list_t *focusSound;
  float special;
#ifndef PC
  int cursorPos[4];
#else
  int cursorPos[1];
#endif
  itemDefData_t typeData;
  int imageTrack;
  int floatExpressionCount;
  ItemFloatExpression *floatExpressions;
  Statement_s *visibleExp;
  Statement_s *disabledExp;
  Statement_s *textExp;
  Statement_s *materialExp;
  vec4_t glowColor;
  bool decayActive;
  int fxBirthTime;
  int fxLetterTime;
  int fxDecayStartTime;
  int fxDecayDuration;
  int lastSoundPlayedTime;
};

struct StaticDvar
{
  dvar_s *dvar;
  const char *dvarName;
};

struct StaticDvarList
{
  int numStaticDvars;
  StaticDvar **staticDvars;
};

struct UIFunctionList
{
  int totalFunctions;
  Statement_s **functions;
};

struct StringList
{
  int totalStrings;
  const char **strings;
};

struct ExpressionSupportingData
{
  UIFunctionList uifunctions;
  StaticDvarList staticDvarList;
  StringList uiStrings;
};

enum transitionType
{
  TRANS_INACTIVE = 0x0,
  TRANS_LERP = 0x1,
};

enum triggerType
{
  TRIGGER_NONE = 0x0,
  TRIGGER_CLOSEMENU = 0x1,
};

struct menuTransition
{
  transitionType transitionType;
  int startTime;
  float startVal;
  float endVal;
  float time;
  triggerType endTriggerType;
};

struct menuDef_t 
{
  Window window;
  const char *font;
  int fullscreen;
  int itemCount;
  int fontIndex;
#ifndef PC
  int cursorItems[4];
#else
  int cursorItems[1];
#endif
  int fadeCycle;
  float fadeClamp;
  float fadeAmount;
  float fadeInAmount;
  float blurRadius;
  MenuEventHandlerSet *onOpen;
  MenuEventHandlerSet *onRequestClose;
  MenuEventHandlerSet *onClose;
  MenuEventHandlerSet *onEsc;
  ItemKeyHandler *execKeys;
  Statement_s *visibleExp;
  const char *allowedBinding;
  const char *soundName;
  int imageTrack;
  vec4_t focusColor;
  Statement_s *rectXExp;
  Statement_s *rectYExp;
  Statement_s *rectHExp;
  Statement_s *rectWExp; 
#ifdef PC
  Statement_s *openSoundExp;
  Statement_s *closeSoundExp;
#endif
  itemDef_s **items; 
#ifndef PC
  menuTransition scaleTransition[4];
  menuTransition alphaTransition[4];
  menuTransition xTransition[4];
  menuTransition yTransition[4];
#else
  char unknown[112];
#endif
  ExpressionSupportingData *expressionData;
};