Menu Asset (MW3): Difference between revisions

From COD Engine Research
No edit summary
No edit summary
Line 5: Line 5:
Notice Ghosts didn't change a single thing in this asset because Ghosts uses LuaFiles for it's menus now and so this is basically an unused asset now.
Notice Ghosts didn't change a single thing in this asset because Ghosts uses LuaFiles for it's menus now and so this is basically an unused asset now.
<source lang="cpp">
<source lang="cpp">
struct expression_s;
struct MenuEventHandlerSet;
struct statement_s;
struct Statement_s;


struct localVar_t
struct UIFunctionList
{
{
int dvar;
  int totalFunctions;
char *dvarName;
  Statement_s **functions;
};
};


struct localData_t
struct StaticDvar
{
{
int numExpressions;
  dvar_t *dvar;
expression_s **expressions;
  char *dvarName;
int numStaticVars;
localVar_t **staticVars;
int numStrings;
char **strings;
};
};


enum expDataType
struct StaticDvarList
{
{
VAL_INT = 0x0,
  int numStaticDvars;
VAL_FLOAT = 0x1,
  StaticDvar **staticDvars;
VAL_STRING = 0x2,
VAL_EXPRESSION = 0x3,
};
};


struct OperationStruct
struct StringList
{
{
operationEnum op;
  int totalStrings;
int unknown;
  const char **strings;
};
};


union operandInternalDataUnion
struct ExpressionSupportingData
{
{
int intVal;
  UIFunctionList uifunctions;
float floatVal;
  StaticDvarList staticDvarList;
const char *string;
  StringList uiStrings;
expression_s *expression;
};
 
enum expDataType
{
  VAL_INT = 0x0,
  VAL_FLOAT = 0x1,
  VAL_STRING = 0x2,
  NUM_INTERNAL_DATATYPES = 0x3,
  VAL_FUNCTION = 0x3,
  NUM_DATATYPES = 0x4,
};
 
struct ExpressionString
{
  const char *string;
};
 
union operandInternalDataUnion
{
  int intVal;
  float floatVal;
  ExpressionString stringVal;
  Statement_s *function;
};
};


struct Operand
struct Operand
{
{
expDataType dataType;
  operandInternalDataUnion internals;
operandInternalDataUnion internals;
  expDataType dataType;
};
};


struct entryInternalData
union entryInternalData
{
{
OperationStruct op;
  operationEnum op;
Operand operand;
  Operand operand;
};
};


// TODO: something is different
struct expressionEntry
struct expressionEntry
{
{
int type;
  int type;
entryInternalData data;
  entryInternalData data;
};
};


struct expression_s // 0x50
struct ExpressionPersistentState
{
{
int numEntries;
  int flags;
expressionEntry *entries;
  int playerDataKey[4];
localData_t *loadFrom;
  int lastExecuteTime[4];
char unknown[0x44]; // ?
  Operand lastResult[4];
};
};


struct dvarExpression_t
struct Statement_s
{
{
char *dvarName;
  int numEntries;
expression_s *expression;
  expressionEntry *entries;
  ExpressionSupportingData *supportingData;
  ExpressionPersistentState persistentState;
};
};


struct statementExpression_t
struct SetLocalVarData
{
{
statement_s *statement;
  const char *localVarName;
expression_s *expression; // loads this first
  Statement_s *expression;
};
};


union statementInternalDataUnion // 4
struct ConditionalScript
{
{
char *data;
  MenuEventHandlerSet *eventHandlerSet;
statementExpression_t *statementExpression;
  Statement_s *eventExpression; // loads this first
statement_s *statement;
};
dvarExpression_t *dvarExpression;
 
union EventData
{
  const char *unconditionalScript;
  ConditionalScript *conditionalScript;
  MenuEventHandlerSet *elseScript;
  SetLocalVarData *setLocalVarData;
};
};


#pragma pack(push, 4)
#pragma pack(push, 4)
struct statementEntry // 8
struct MenuEventHandler
{
{
statementInternalDataUnion data;
  EventData eventData;
char type;
  char eventType;
};
};
#pragma pack(pop)
#pragma pack(pop)


struct statement_s // 8
struct MenuEventHandlerSet
{
{
int numEntries;
  int eventHandlerCount;
statementEntry **entry;
  MenuEventHandler **eventHandlers;
};
}


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


Line 116: Line 141:
struct rectDef_s
struct rectDef_s
{
{
float x;
  float x;
float y;
  float y;
float w;
  float w;
float h;
  float h;
char horzAlign;
  char horzAlign;
char vertAlign;
  char vertAlign;
};
};
#pragma pack(pop)
#pragma pack(pop)
typedef rectDef_s Rectangle;


// sizeof = 0xB0
// sizeof = 0xB0
struct windowDef_t
struct windowDef_t
{
{
const char *name; // 0x00
  const char *name;
Rectangle rect;
  rectDef_s rect;
Rectangle rectClient;
  rectDef_s rectClient;
char *group; // 0x2C
  const char *group;
int style;
  int style;
int border;
  int border;
int ownerDraw;
  int ownerDraw;
int ownerDrawFlags;
  int ownerDrawFlags;
float borderSize;
  float borderSize;
int staticFlags;
  int staticFlags;
int dynamicFlags[4];
#ifdef PC
int nextTime;
  int dynamicFlags[1];
vec4_t foreColor;
#else
vec4_t backColor;
  int dynamicFlags[4];
vec4_t borderColor;
#endif
vec4_t outlineColor;
  int nextTime;
vec4_t disableColor;
  float foreColor[4];
Material *background; // 0xAC
  float backColor[4];
  float borderColor[4];
  float outlineColor[4];
  float disableColor[4];
  Material *background;
};
 
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 component_t
struct ItemFloatExpression
{
{
int type;
  ItemFloatExpressionTarget target;
expression_s *expressions;
  Statement_s *expression;
};
};


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


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


struct listBoxDef_s // 0x1DC
struct columnInfo_s
{
{
char unknown1[0x1B4];
  int xpos;
statement_s *doubleClick;
  int ypos;
char unknown2[0x1C];
  int width;
Material *selectIcon;
  int height;
expression_s *expression;
  int maxChars;
  int alignment;
};
};


struct newsTicker_s
// TODO: 4 bytes missing somewhere
struct listBoxDef_s
{
{
int textSource;
#ifdef PC
int speed;
  int startPos[1];
int spacing;
  int endPos[1];
#else
  int startPos[4];
  int endPos[4];
#endif
  int drawPadding;
  float elementWidth;
  float elementHeight;
  int elementStyle;
  int numColumns;
  columnInfo_s columnInfo[16];
  MenuEventHandlerSet *onDoubleClick;
  int notselectable;
  int noScrollBars;
  int usePaging;
  float selectBorder[4];
  Material *selectIcon;
  Statement_s *elementHeightExp;
};
 
struct newsTickerDef_s
{
  int feedId;
  int speed;
  int spacing;
};
};


union itemDefData_t
union itemDefData_t
{
{
listBoxDef_s *listBox;
  listBoxDef_s *listBox;
editFieldDef_s *editField;
  editFieldDef_s *editField;
newsTicker_s *newsTicker;
  multiDef_s *multi;
multiDef_s *multiDef;
  const char *enumDvarName;
const char *enumDvarName;
  newsTickerDef_s *ticker;
int *textScroll;
  textScrollDef_s *scroll;
void *data;
  void *data;
};
 
struct itemDef_t
{
  windowDef_t window;
#ifdef PC
  rectDef_s textRect[1];
#else
  rectDef_s textRect[4];
#endif
  int type;
  int dataType;
  int alignment;
  int fontEnum;
  int textAlignMode;
  float textalignx;
  float textaligny;
  float textscale;
  int textStyle;
  int gameMsgWindowIndex;
  int gameMsgWindowMode;
  const char *text;
  int itemFlags;
  menuDef_t *parent;
  MenuEventHandlerSet *mouseEnterText;
  MenuEventHandlerSet *mouseExitText;
  MenuEventHandlerSet *mouseEnter;
  MenuEventHandlerSet *mouseExit;
  MenuEventHandlerSet *action;
  MenuEventHandlerSet *accept;
  MenuEventHandlerSet *onFocus;
  MenuEventHandlerSet *hasFocus;
  MenuEventHandlerSet *leaveFocus;
  const char *dvar;
  const char *dvarTest;
  ItemKeyHandler *onKey;
  const char *enableDvar;
  const char *localVar;
  int dvarFlags;
  snd_alias_list_t *focusSound;
  float special;
#ifdef PC
  int cursorPos[1];
#else
  int cursorPos[4];
#endif
  itemDefData_t typeData;
  int floatExpressionCount;
  ItemFloatExpression *floatExpressions;
  Statement_s *visibleExp;
  Statement_s *disabledExp;
  Statement_s *textExp;
  Statement_s *materialExp;
  float glowColor[4];
  bool decayActive;
  int fxBirthTime;
  int fxLetterTime;
  int fxDecayStartTime;
  int fxDecayDuration;
  int lastSoundPlayedTime;
  Statement_s *textAlignYExp;
};
};


struct itemDef_t // 0x1D4
struct menuTransition
{
{
windowDef_t window;
  int transitionType;
const char *text;
  int startTime;
int textSaveGameInfo;
  float startVal;
menuDef_t *parent;
  float endVal;
statement_s *mouseEnterText;
  float time;
statement_s *mouseExitText;
  int endTriggerType;
statement_s *mouseEnter;
statement_s *mouseExit;
statement_s *action;
statement_s *accept;
statement_s *onFocus;
statement_s *leaveFocus;
statement_s *unknown9;
const char *dvar;
const char *dvarTest;
ItemKeyHandler *onKey;
const char *unknown12;
const char *unknown13;
int dvarFlags;
snd_alias_list_t *focusSound;
float special;
int cursorPos[4];
itemDefData_t typeData;
int numComponents;
component_t *components;
expression_s *visibleExp;
expression_s *disabledExp;
expression_s *textExp;
expression_s *materialExp;
char unknown[0x28];
expression_s *unknown24;
};
};


// sizeof = 0x200
struct menuData_t
struct menuData_t  
{
{
int fullscreen;
  int fullScreen;
int fadeCycle;
  int fadeCycle;
float fadeClamp;
  float fadeClamp;
float fadeAmount;
  float fadeAmount;
float fadeInAmount;
  float fadeInAmount;
float blurRadius;
  float blurRadius;
statement_s *onOpen;
  MenuEventHandlerSet *onOpen;
statement_s *onRequestClose; // loaded after onClose?
  MenuEventHandlerSet *onCloseRequest;
statement_s *onClose;
  MenuEventHandlerSet *onClose;
statement_s *onEsc;
  MenuEventHandlerSet *onESC;
statement_s *unknown5;
  MenuEventHandlerSet *onFocusDueToClose;
ItemKeyHandler *onKey;
  ItemKeyHandler *onKey;
expression_s *visibleExp;
  Statement_s *visibleExp;
const char *allowedBinding;
  const char *allowedBinding;
const char *soundName;
  const char *soundName;
vec4_t focusColor;
  float focusColor[4];
expression_s *unknown6;
  Statement_s *rectXExp;
expression_s *unknown7;
  Statement_s *rectYExp;
expression_s *unknown8;
  Statement_s *rectWExp;
expression_s *unknown9;
  Statement_s *rectHExp;
expression_s *unknown10;
  Statement_s *openSoundExp;
expression_s *unknown11;
  Statement_s *closeSoundExp;
expression_s *unknown12;
  Statement_s *soundLoopExp;
int cursorItems[4];
#ifdef PC
localData_t *localData; // loaded first
  int cursorItem[1];
#else
  int cursorItem[4];
#endif
  menuTransition scaleTransition[1];
  menuTransition alphaTransition[1];
  menuTransition xTransition[1];
  menuTransition yTransition[1];
  ExpressionSupportingData *expressionData;
  char priority;
};
};


// sizeof = 0xBC
struct menuDef_t
struct menuDef_t  
{
{
menuData_t *menuStruct;
  menuData_t *data;
windowDef_t window;
  windowDef_t window;
int itemCount;
  int itemCount;
itemDef_t **items;
  itemDef_t **items;
};
};
</source>
</source>

Revision as of 07:06, 22 December 2014

Notice Ghosts didn't change a single thing in this asset because Ghosts uses LuaFiles for it's menus now and so this is basically an unused asset now.

struct MenuEventHandlerSet;
struct Statement_s;

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

struct StaticDvar
{
  dvar_t *dvar;
  char *dvarName;
};

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

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

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

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

struct ExpressionString
{
  const char *string;
};

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

struct Operand
{
  operandInternalDataUnion internals;
  expDataType dataType;
};

union entryInternalData
{
  operationEnum op;
  Operand operand;
};

// TODO: something is different
struct expressionEntry
{
  int type;
  entryInternalData data;
};

struct ExpressionPersistentState
{
  int flags;
  int playerDataKey[4];
  int lastExecuteTime[4];
  Operand lastResult[4];
};

struct Statement_s
{
  int numEntries;
  expressionEntry *entries;
  ExpressionSupportingData *supportingData;
  ExpressionPersistentState persistentState;
};

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

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

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;
};

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

// sizeof = 0xB0
struct windowDef_t
{
  const char *name;
  rectDef_s rect;
  rectDef_s rectClient;
  const char *group;
  int style;
  int border;
  int ownerDraw;
  int ownerDrawFlags;
  float borderSize;
  int staticFlags;
#ifdef PC
  int dynamicFlags[1];
#else
  int dynamicFlags[4];
#endif
  int nextTime;
  float foreColor[4];
  float backColor[4];
  float borderColor[4];
  float outlineColor[4];
  float disableColor[4];
  Material *background;
};

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;
};

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

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

struct columnInfo_s
{
  int xpos;
  int ypos;
  int width;
  int height;
  int maxChars;
  int alignment;
};

// TODO: 4 bytes missing somewhere
struct listBoxDef_s
{
#ifdef PC
  int startPos[1];
  int endPos[1];
#else
  int startPos[4];
  int endPos[4];
#endif
  int drawPadding;
  float elementWidth;
  float elementHeight;
  int elementStyle;
  int numColumns;
  columnInfo_s columnInfo[16];
  MenuEventHandlerSet *onDoubleClick;
  int notselectable;
  int noScrollBars;
  int usePaging;
  float selectBorder[4];
  Material *selectIcon;
  Statement_s *elementHeightExp;
};

struct newsTickerDef_s
{
  int feedId;
  int speed;
  int spacing;
};

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

struct itemDef_t
{
  windowDef_t window;
#ifdef PC
  rectDef_s textRect[1];
#else
  rectDef_s textRect[4];
#endif
  int type;
  int dataType;
  int alignment;
  int fontEnum;
  int textAlignMode;
  float textalignx;
  float textaligny;
  float textscale;
  int textStyle;
  int gameMsgWindowIndex;
  int gameMsgWindowMode;
  const char *text;
  int itemFlags;
  menuDef_t *parent;
  MenuEventHandlerSet *mouseEnterText;
  MenuEventHandlerSet *mouseExitText;
  MenuEventHandlerSet *mouseEnter;
  MenuEventHandlerSet *mouseExit;
  MenuEventHandlerSet *action;
  MenuEventHandlerSet *accept;
  MenuEventHandlerSet *onFocus;
  MenuEventHandlerSet *hasFocus;
  MenuEventHandlerSet *leaveFocus;
  const char *dvar;
  const char *dvarTest;
  ItemKeyHandler *onKey;
  const char *enableDvar;
  const char *localVar;
  int dvarFlags;
  snd_alias_list_t *focusSound;
  float special;
#ifdef PC
  int cursorPos[1];
#else
  int cursorPos[4];
#endif
  itemDefData_t typeData;
  int floatExpressionCount;
  ItemFloatExpression *floatExpressions;
  Statement_s *visibleExp;
  Statement_s *disabledExp;
  Statement_s *textExp;
  Statement_s *materialExp;
  float glowColor[4];
  bool decayActive;
  int fxBirthTime;
  int fxLetterTime;
  int fxDecayStartTime;
  int fxDecayDuration;
  int lastSoundPlayedTime;
  Statement_s *textAlignYExp;
};

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

struct menuData_t
{
  int fullScreen;
  int fadeCycle;
  float fadeClamp;
  float fadeAmount;
  float fadeInAmount;
  float blurRadius;
  MenuEventHandlerSet *onOpen;
  MenuEventHandlerSet *onCloseRequest;
  MenuEventHandlerSet *onClose;
  MenuEventHandlerSet *onESC;
  MenuEventHandlerSet *onFocusDueToClose;
  ItemKeyHandler *onKey;
  Statement_s *visibleExp;
  const char *allowedBinding;
  const char *soundName;
  float focusColor[4];
  Statement_s *rectXExp;
  Statement_s *rectYExp;
  Statement_s *rectWExp;
  Statement_s *rectHExp;
  Statement_s *openSoundExp;
  Statement_s *closeSoundExp;
  Statement_s *soundLoopExp;
#ifdef PC
  int cursorItem[1];
#else
  int cursorItem[4];
#endif
  menuTransition scaleTransition[1];
  menuTransition alphaTransition[1];
  menuTransition xTransition[1];
  menuTransition yTransition[1];
  ExpressionSupportingData *expressionData;
  char priority;
};

struct menuDef_t
{
  menuData_t *data;
  windowDef_t window;
  int itemCount;
  itemDef_t **items;
};