Menu Asset (MW3)
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 expression_s;
struct statement_s;
struct localVar_t
{
int dvar;
char *dvarName;
};
struct localData_t
{
int numExpressions;
expression_s **expressions;
int numStaticVars;
localVar_t **staticVars;
int numStrings;
char **strings;
};
enum expDataType
{
VAL_INT = 0x0,
VAL_FLOAT = 0x1,
VAL_STRING = 0x2,
VAL_EXPRESSION = 0x3,
};
struct OperationStruct
{
operationEnum op;
int unknown;
};
union operandInternalDataUnion
{
int intVal;
float floatVal;
const char *string;
expression_s *expression;
};
struct Operand
{
expDataType dataType;
operandInternalDataUnion internals;
};
struct entryInternalData
{
OperationStruct op;
Operand operand;
};
struct expressionEntry
{
int type;
entryInternalData data;
};
struct expression_s // 0x50
{
int numEntries;
expressionEntry *entries;
localData_t *loadFrom;
char unknown[0x44]; // ?
};
struct dvarExpression_t
{
char *dvarName;
expression_s *expression;
};
struct statementExpression_t
{
statement_s *statement;
expression_s *expression; // loads this first
};
union statementInternalDataUnion // 4
{
char *data;
statementExpression_t *statementExpression;
statement_s *statement;
dvarExpression_t *dvarExpression;
};
#pragma pack(push, 4)
struct statementEntry // 8
{
statementInternalDataUnion data;
char type;
};
#pragma pack(pop)
struct statement_s // 8
{
int numEntries;
statementEntry **entry;
};
struct ItemKeyHandler
{
int key;
statement_s *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)
typedef rectDef_s Rectangle;
// sizeof = 0xB0
struct windowDef_t
{
const char *name; // 0x00
Rectangle rect;
Rectangle rectClient;
char *group; // 0x2C
int style;
int border;
int ownerDraw;
int ownerDrawFlags;
float borderSize;
int staticFlags;
int dynamicFlags[4];
int nextTime;
vec4_t foreColor;
vec4_t backColor;
vec4_t borderColor;
vec4_t outlineColor;
vec4_t disableColor;
Material *background; // 0xAC
};
struct component_t
{
int type;
expression_s *expressions;
};
struct editFieldDef_s
{
float minVal;
float maxVal;
float defVal;
float range;
int maxChars;
int maxCharsGotoNext;
int maxPaintChars;
int paintOffset;
};
struct multiDef_s // 0x188
{
const char *dvarList[32];
const char *dvarStr[32];
float dvarValue[32];
int count;
int strDef;
};
struct listBoxDef_s // 0x1DC
{
char unknown1[0x1B4];
statement_s *doubleClick;
char unknown2[0x1C];
Material *selectIcon;
expression_s *expression;
};
struct newsTicker_s
{
int textSource;
int speed;
int spacing;
};
union itemDefData_t
{
listBoxDef_s *listBox;
editFieldDef_s *editField;
newsTicker_s *newsTicker;
multiDef_s *multiDef;
const char *enumDvarName;
int *textScroll;
void *data;
};
struct itemDef_t // 0x1D4
{
windowDef_t window;
const char *text;
int textSaveGameInfo;
menuDef_t *parent;
statement_s *mouseEnterText;
statement_s *mouseExitText;
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
{
int fullscreen;
int fadeCycle;
float fadeClamp;
float fadeAmount;
float fadeInAmount;
float blurRadius;
statement_s *onOpen;
statement_s *onRequestClose; // loaded after onClose?
statement_s *onClose;
statement_s *onEsc;
statement_s *unknown5;
ItemKeyHandler *onKey;
expression_s *visibleExp;
const char *allowedBinding;
const char *soundName;
vec4_t focusColor;
expression_s *unknown6;
expression_s *unknown7;
expression_s *unknown8;
expression_s *unknown9;
expression_s *unknown10;
expression_s *unknown11;
expression_s *unknown12;
int cursorItems[4];
localData_t *localData; // loaded first
};
// sizeof = 0xBC
struct menuDef_t
{
menuData_t *menuStruct;
windowDef_t window;
int itemCount;
itemDef_t **items;
};