Created
February 1, 2018 22:37
-
-
Save Chaosvex/f48457fce789b20d0624ee5e71a578af to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#pragma once | |
#define WIN32_LEAN_AND_MEAN | |
#include <Windows.h> | |
#include <cstdint> | |
namespace EngineTypes { | |
const std::uint32_t UNHI = 0x756E6869; | |
const std::uint32_t WPHI = 0x77706869; | |
const std::uint32_t GRHI = 0x67726869; | |
const std::uint32_t BITM = 0x6269746D; | |
const std::uint32_t HUDH = 0x68756423; //HUD# | |
const std::uint32_t DELA = 0x44654C61; | |
enum GAME_EVENTS : std::uint32_t { | |
FALLING_DEATH = 1, | |
GUARDIAN_KILL, | |
VEHICLE_KILL, | |
PLAYER_KILL, | |
BETRAYED, | |
SUICIDE, | |
LOCAL_DOUBLE_KILL, | |
LOCAL_KILLED_PLAYER, | |
LOCAL_TRIPLE_KILL, | |
LOCAL_KILLTACULAR, | |
LOCAL_KILLING_SPREE, | |
LOCAL_RUNNING_RIOT = 14, | |
BETRAYED_PLAYER = 13, | |
RACE_LAP_COMPLETE = 32, | |
FLAG_CAPTURED = 33, | |
UNKNOWN_CTF = 34, //won? | |
UNKNOWN_CTF_2 = 35, //lost? | |
PLAYER_FLAG_RETURN = 37, | |
RACE_FASTEST_LAP = 38, | |
ENEMY_RETURNED_FLAG = 40, | |
ALLY_STOLE_FLAG = 41, | |
ALLY_RETURNED_FLAG = 42, | |
FRIENDLY_FLAG_IDLE_RETURNED = 43, | |
ENEMY_FLAG_IDLE_RETURNED = 44 | |
}; | |
enum OVERLAY_STATES { | |
NO_OVERLAY, | |
BLANK, | |
STARTING_NETWORK_SERVER, | |
CONNECTING_TO_SERVER, | |
NEGOTIATING_CONNECTION, | |
CONNECTING_TO_SERVER_2, | |
RETRYING_SERVER, | |
CONNECTION_ESTABLISHED, | |
LOADING_MAP, | |
WAITING_FOR_NEW_GAME | |
}; | |
enum CHAT_TYPE : std::uint32_t { | |
CHAT_ALL, | |
CHAT_TEAM, | |
CHAT_VEHICLE, | |
CHAT_EVENT = 5, | |
HAC_HANDSHAKE = 0xFF | |
}; | |
enum CAMERA_PERSPECTIVES : std::uint16_t { | |
NONE, | |
FIRST_PERSON = 2, | |
DEAD = 3 | |
}; | |
#pragma pack(push, 1) | |
struct RenderedParticle { | |
std::uint16_t index; | |
std::uint16_t definition_index; | |
std::uint8_t padding[4]; | |
}; static_assert(sizeof(RenderedParticle) == 8, "RenderedParticle size incorrect!"); | |
struct CameraControl { | |
char isCameraEnabled; | |
char isCameraDisabled; | |
CAMERA_PERSPECTIVES perspective; // 0 none, 2 First Person, 3 Dead | |
char animationStuff[48]; | |
WORD objectIndex; | |
WORD objectID; | |
}; | |
struct TagEntry { | |
std::uint32_t class0; | |
std::uint32_t class1; | |
std::uint32_t class2; | |
std::uint32_t tagID; | |
char* name; | |
std::uint32_t tagStruct; | |
char Unknown[8]; | |
}; | |
struct TagTableHeader { | |
TagEntry* TagTableEntryPointer; | |
std::uint32_t FirstTagID; | |
std::uint32_t MapID; | |
std::uint32_t TagCount; | |
std::uint32_t VerticesCount; | |
std::uint32_t VerticesOffset; | |
std::uint32_t IndicesCount; | |
std::uint32_t IndicesOffset; | |
std::uint32_t ModelDataSize; | |
std::uint32_t Signature; | |
}; | |
struct BSPChunkMeta { | |
std::uint32_t offset; | |
std::uint32_t size; | |
}; | |
//Just made this up | |
struct SceneryTag { | |
std::uint32_t sections; //BSP count? | |
std::uint32_t address; | |
}; | |
/* | |
* Stores server information used for reconnecting after a map download. | |
*/ | |
struct ConnectionDetails { | |
std::uint32_t ip; | |
BYTE unknown[14]; | |
USHORT port; | |
}; | |
struct MapHeader { | |
long Signature0; // head = "daeh" | |
short Game; // Xbox = 5 / Trial = 6 / PC = 7 / CE = 0x261 | |
short Unknown0; | |
long MapSize; | |
char Unknown1[4]; | |
long IndexOffset; | |
long MetaSize; | |
char Unknown3[8]; | |
char MapName[14]; | |
char Unknown4[18]; | |
char Build[12]; // PC = 01.00.00.0564 / CE = 01.00.00.0609 | |
char Unknown5[20]; | |
char MapType; // SP = 0 / MP = 1 / UI = 2 | |
char Unknown6; | |
short Unknown7; | |
int checksum; | |
char Unknown8[1940]; | |
long Signature1; // foot = "toof" | |
}; | |
struct MapEntry { | |
char* name; | |
std::uint32_t checked; | |
std::uint32_t forgot; | |
}; | |
struct MapEntryCE : public MapEntry { | |
std::uint32_t checksum; | |
}; | |
enum multiplayer_sound { | |
_multiplayer_sound_playball, | |
_multiplayer_sound_game_over, | |
_multiplayer_sound_one_min_to_win, | |
_multiplayer_sound_30_secs_to_win, | |
_multiplayer_sound_red_team_one_min_to_win, | |
_multiplayer_sound_red_team_30_secs_to_win, | |
_multiplayer_sound_blue_team_one_min_to_win, | |
_multiplayer_sound_blue_team_30_secs_to_win, | |
_multiplayer_sound_red_team_flag_taken, | |
_multiplayer_sound_red_team_flag_returned, | |
_multiplayer_sound_red_team_flag_captured, | |
_multiplayer_sound_blue_team_flag_taken, | |
_multiplayer_sound_blue_team_flag_returned, | |
_multiplayer_sound_blue_team_flag_captured, | |
_multiplayer_sound_double_kill, | |
_multiplayer_sound_triple_kill, | |
_multiplayer_sound_killtacular, | |
_multiplayer_sound_running_riot, | |
_multiplayer_sound_killing_spree, | |
_multiplayer_sound_oddball, | |
_multiplayer_sound_race, | |
_multiplayer_sound_slayer, | |
_multiplayer_sound_ctf, | |
_multiplayer_sound_warthog, | |
_multiplayer_sound_ghost, | |
_multiplayer_sound_scorpion, | |
_multiplayer_sound_countdown_timer, | |
_multiplayer_sound_teleporter_activate, | |
_multiplayer_sound_flag_failure, | |
_multiplayer_sound_countdown_for_respawn, | |
_multiplayer_sound_hill_move, | |
_multiplayer_sound_player_respawn, | |
_multiplayer_sound_koth, | |
_multiplayer_sound_odd_ball, | |
_multiplayer_sound_team_race, | |
_multiplayer_sound_team_slayer, | |
_multiplayer_sound_team_koth, | |
_multiplayer_sound_blue_team_ctf, | |
_multiplayer_sound_red_team_ctf, | |
_multiplayer_sound_contest, | |
_multiplayer_sound_control, | |
_multiplayer_sound_hill_occupied, | |
_multiplayer_sound_countdown_timer_end, | |
_multiplayer_sound_ting, | |
_multiplayer_sound, | |
_multiplayer_sound_custom1 = _multiplayer_sound, | |
_multiplayer_sound_custom2, | |
_multiplayer_sound_custom3, | |
_multiplayer_sound_custom4, | |
_multiplayer_sound_custom5, | |
_multiplayer_sound_custom6, | |
_multiplayer_sound_custom7, | |
_multiplayer_sound_custom8, | |
_multiplayer_sound_custom9, | |
_multiplayer_sound_custom10, | |
_multiplayer_sound_custom11, | |
_multiplayer_sound_custom12, | |
_multiplayer_sound_custom13, | |
_multiplayer_sound_custom14, | |
_multiplayer_sound_custom15, | |
_multiplayer_sound_custom16, // default max s_game_globals_multiplayer_information::sounds instances = 60 | |
_multiplayer_sound_custom, | |
}; | |
struct ObjectEntry { | |
WORD ObjectID; | |
WORD Unknown0; | |
WORD Unknown1; | |
WORD size; | |
DWORD offset; | |
}; | |
struct ObjectsHeader { | |
char Name[6]; // "objects" | |
char Unknown0[26]; | |
std::uint16_t MaxObjs; // 0x800 | |
std::uint16_t ObjTableSize; // 0xC | |
std::uint32_t Unknown1; | |
std::uint32_t Signature; // data = "@t@d" | |
std::uint16_t Objs; | |
std::uint16_t CurMaxObjs; | |
std::uint16_t CurObjs; | |
std::uint16_t NextObjIndex; | |
ObjectEntry* firstObject; | |
}; | |
struct PlayerObject { | |
long TagID; | |
char Unknown0[88]; | |
float XCoord0; | |
float YCoord0; | |
float ZCoord0; | |
float XVel; | |
float YVel; | |
float ZVel; | |
float Pitch; | |
float Yaw; | |
float Roll; | |
float XScale; | |
float YScale; | |
float ZScale; | |
char Unknown1[44]; | |
char Team0; // Dead = Red = 0 / Blue = 1 | |
char Unknown2[31]; | |
float MaxHealth; // From coll tag. | |
float MaxShields; // From coll tag. | |
float Health; | |
float Shields; // None = 0 / Full = 1 / Overshield = 3 | |
char Unknown3[28]; | |
short ShieldsRechargeTicks; // Time until shields recharge. / 1 sec = 30 ticks | |
char Unknown4[18]; | |
long WeapObjID; | |
long VehiObjID; | |
short VehiSeat0; | |
char Unknown5[6]; | |
float ShieldsTarget; // Something to do with Overshield draining? | |
float FlashlightScale0; // Intensity of flashlight. | |
long Unknown6; | |
float FlashlightScale1; // Intensity of flashlight. | |
float ShieldsHit; // Something to do with shields being hit? | |
char Unknown7[76]; | |
char Team1; // Blue = Dead = 0 / Red = 1 | |
char Unknown8[123]; | |
char InvisMode; // No = 0x41 / Yes = 0x51 | |
char Unknown9; | |
char FlashlightMode; // Off = 0 / On = 8 | |
char Unknown10; | |
char CrouchButton; // Standing = 0 / Crouching = 1 / Jumping = 2 | |
char Unknown11[17]; | |
short PlayerID; | |
long Unknown12; | |
short BulletCount; // Increases with each shot? | |
char Unknown13[14]; | |
float XAim0; | |
float YAim0; | |
float ZAim0; | |
float XAim1; | |
float YAim1; | |
float ZAim1; | |
float XAim2; | |
float YAim2; | |
float ZAim2; | |
char Unknown14[12]; | |
float ForwardButton; // Negative means backward. | |
float LeftButton; // Negative means right. | |
char Unknown15[6]; | |
short Shooting0; // No = 0 / Yes = 0x3F80 | |
char Unknown16[24]; | |
char CrouchMode0; // Vehicle = 0 / Crouching = 3 / Standing = 4 | |
long Unknown17; | |
char Shooting1; // No = 0 / Yes = 1 | |
char Unknown18; | |
char CrouchMode1; // Also VehiSeat1. / Standing = 2 / Crouching = 3 | |
char Unknown19[74]; | |
char WeapType0; // Primary = 0 / Secondary = 1 / Ternary = 2 / Quartary = 3 | |
char Unknown20; | |
char WeapType1; // Primary = 0 / Secondary = 1 / Ternary = 2 / Quartary = 3 | |
char Unknown21[3]; | |
long PrimaryWeapObjID; | |
long secondaryweapObjID; | |
long TernaryWeapObjID; | |
long QuartaryWeapObjID; | |
char Unknown22[20]; | |
char NadeType0; // Frag = 0 / Plasma = 1 | |
char Unknown23; | |
char PrimaryNades; | |
char SecondaryNades; | |
char Unknown24[32]; | |
float FlashlightScale2; // Intensity of flashlight. | |
float FlashlightEnergy; // Amount of flashlight energy left. | |
char Unknown25[52]; | |
float InvisScale; // Visibility of invis. | |
char Unknown26[244]; | |
char Shooting2; // No = 0 / Yes = 1 | |
char Unknown27[7]; | |
char WeapType2; // Primary = 0 / Secondary = 1 / Ternary = 2 / Quartary = 3 | |
char Unknown28; | |
char NadeType1; // Frag = 0 / Plasma = 1 | |
char Unknown29[21]; | |
float XAim3; | |
float YAim3; | |
float ZAim3; | |
float XAim4; | |
float YAim4; | |
float ZAim4; | |
float XAim5; | |
float YAim5; | |
float ZAim5; | |
char Unknown30[20]; | |
char Airborne; // No = 0 / Yes = 1 | |
char Unknown31[19]; | |
float XCoord1; | |
float YCoord1; | |
float ZCoord1; | |
char Unknown32[32]; | |
float CrouchScale; // How crouched a player is. | |
}; | |
struct Player { | |
std::uint16_t playerID; // Stats at 0x70EC | |
std::uint16_t m_wPlayerID2; // local player 0/1 | |
wchar_t name[12]; // Unicode / Max - 11 Chars + EOS (12 total) | |
std::uint32_t _unknown; // Always -1 / 0xFFFFFFFF | |
std::uint32_t team; // 0 = Red / 1 = Blue | |
std::uint32_t m_dwSwapID; // ObjectID | |
std::uint16_t m_wSwapType; // 8 = Vehicle / 6 = Weapon | |
std::uint16_t m_wSwapSeat; // Warthog - Driver = 0 / Passenger = 1 / Gunner = 2 / Weapon = -1 | |
std::uint32_t respawn_timer; | |
std::uint32_t respawn_penalty; //adds time to respawn wait | |
std::uint16_t objectIndex; | |
std::uint16_t objectID; // Matches against object table | |
std::uint32_t m_dwUnknown3; // Some sort of ID | |
std::uint32_t m_dwSector; // This is very, very interesting. BG is split into 25 location ID's. 1 -19 | |
std::uint32_t m_dwUnknown4; // Always -1 / 0xFFFFFFFF | |
std::uint32_t m_dwBulletCount; // Something to do with bullets increases - weird. | |
wchar_t m_wcPlayerName1[12]; // Unicode / Max - 11 Chars + EOS (12 total) | |
std::uint32_t m_dwUnknown5; // 02 00 FF FF | |
std::uint32_t m_dwPlayerIndex; | |
std::uint32_t effect_timer; //counts active camo down | |
float m_fSpeedModifier; | |
char unknown10[32]; | |
char unknows4[6]; // 144 | |
unsigned short killstreak; | |
unsigned short combo; | |
unsigned short killstreak_score; | |
std::uint32_t kills; // 156 | |
std::uint32_t unknown5; // 160 | |
std::uint32_t assists; // 164 | |
std::uint32_t unknown11; //168 | |
std::uint16_t suicides; // 172 | |
std::uint16_t deaths; // 174 | |
std::uint16_t notsuicides; | |
char unknown7[22]; // 176 | |
long ctf_score; //200 | |
char sfs[16]; // 204 | |
std::int32_t ping; // 220 | |
std::uint32_t unknowns[2]; | |
std::uint32_t unknown_timer1; | |
std::uint32_t unknown_timer2; | |
float x, y, z; // 248 position | |
char unknown12[260]; // 260 | |
}; static_assert(sizeof(Player) == 0x200, "Player size incorrect!"); | |
struct PlayerServer { | |
std::uint16_t playerID; // Stats at 0x70EC | |
std::uint16_t m_wPlayerID2; // local player 0/1 | |
wchar_t name[12]; // Unicode / Max - 11 Chars + EOS (12 total) | |
std::uint32_t _unknown; // Always -1 / 0xFFFFFFFF | |
std::uint32_t team; // 0 = Red / 1 = Blue | |
std::uint32_t m_dwSwapID; // ObjectID | |
std::uint16_t m_wSwapType; // 8 = Vehicle / 6 = Weapon | |
std::uint16_t m_wSwapSeat; // Warthog - Driver = 0 / Passenger = 1 / Gunner = 2 / Weapon = -1 | |
std::uint32_t respawn_timer; | |
std::uint32_t respawn_penalty; //adds time to respawn wait | |
std::uint16_t objectIndex; | |
std::uint16_t objectID; // Matches against object table | |
std::uint32_t m_dwUnknown3; // Some sort of ID | |
std::uint32_t m_dwSector; // This is very, very interesting. BG is split into 25 location ID's. 1 -19 | |
std::uint32_t m_dwUnknown4; // Always -1 / 0xFFFFFFFF | |
std::uint32_t m_dwBulletCount; // Something to do with bullets increases - weird. | |
wchar_t m_wcPlayerName1[12]; // Unicode / Max - 11 Chars + EOS (12 total) | |
std::uint32_t m_dwUnknown5; // 02 00 FF FF | |
std::uint32_t m_dwPlayerIndex; | |
std::uint32_t effect_timer; //counts active camo down | |
float m_fSpeedModifier; | |
char unknown10[32]; | |
char unknows4[6]; // 144 | |
unsigned short killstreak; | |
unsigned short combo; | |
unsigned short killstreak_score; | |
std::uint32_t kills; // 156 | |
std::uint32_t unknown5; // 160 | |
std::uint32_t assists; // 164 | |
std::uint32_t unknown11; //168 | |
std::uint16_t suicides; // 172 | |
std::uint16_t deaths; // 174 | |
std::uint16_t notsuicides; | |
char unknown7[22]; // 176 | |
long ctf_score; //200 | |
char sfs[16]; // 204 | |
std::int32_t ping; // 220 | |
std::uint16_t tk_number; // 224 | |
char unknown8[2]; | |
std::uint32_t tk_timer; | |
char unknown9[12]; | |
long player_dead; // 244 -1 if players is dead | |
float x, y, z; // 248 position | |
char unknown12[252]; // 260 | |
}; static_assert(sizeof(PlayerServer) == 0x200, "Player server size incorrect!"); | |
struct PlayerHeader { | |
std::uint8_t m_bName[32]; // 'players' | |
std::uint16_t m_wMaxSlots; // Max number of slots/players possible | |
std::uint16_t m_wSlotSize; // Size of each Static_Player struct | |
std::uint32_t m_dwUnknown; // always 1? | |
std::uint8_t w_bData[4]; // '@t@d' - translated as 'data'? | |
std::uint16_t m_wIsInMainMenu; // 0 = in game 1 = in main menu / not in game | |
std::uint16_t m_wSlotsTaken; // or # of players | |
std::uint16_t m_wNextPlayerIndex; // Index # of the next player to join | |
std::uint16_t m_wNextPlayerID; // ID # of the next player to join | |
Player* firstPlayer; // Pointer to the first static player | |
}; | |
struct Real2D; | |
struct AnchorOffset { | |
std::int16_t x, y; | |
operator Real2D() const; | |
}; | |
struct Real2D { | |
float x, y; | |
operator AnchorOffset() const; | |
}; | |
enum MapType : std::uint16_t { | |
ALL, | |
SOLO, | |
MULTIPLAYER | |
}; | |
template<typename Tag> struct Reflexive { | |
std::uint32_t count; | |
Tag* tag; | |
std::uint32_t reserved; | |
}; | |
enum ElemAnchor: std::uint16_t { | |
TOP_LEFT, | |
TOP_RIGHT, | |
BOTTOM_LEFT, | |
BOTTOM_RIGHT, | |
CENTRE | |
}; | |
struct LayoutElement { | |
AnchorOffset offset; | |
Real2D scale; | |
}; | |
struct ColourInformation { | |
std::uint8_t blue; | |
std::uint8_t green; | |
std::uint8_t red; | |
std::uint8_t alpha; | |
}; | |
struct ScalingFlags { | |
std::uint16_t moop : 12; | |
std::uint16_t use_high_res_scale : 1; | |
std::uint16_t no_scale_size : 1; | |
std::uint16_t no_scale_offset : 1; | |
}; | |
struct AuxiliaryHUDMeter { | |
char padding[20]; | |
LayoutElement bg_layout; //0x14 | |
ScalingFlags bg_scaling; //0x20 | |
char bg_padding2[22]; //0x22 | |
char bg_bitmap_padding[16]; //0x38 | |
ColourInformation bg_default_colour; //0x48 | |
ColourInformation bg_flash_colour; //0x4C | |
float bg_flash_period; //0x50 | |
float bg_flash_delay; //0x54 | |
std::uint16_t bg_num_flashes; //0x58 | |
char bg_flash_flags; //0x5A | |
char padding3; //0x5B | |
float bg_flash_length; //0x5C | |
ColourInformation bg_disabled_colour; //0x60 | |
char padding4[4]; //0x64 | |
std::uint16_t bg_sequence_index; //0x68 | |
char padding5[18]; //0x6A | |
LayoutElement meter_layout; //0x7C | |
ScalingFlags meter_scaling; //0x88 | |
char padding6[22]; //0x8A | |
char meter_bitmap_padding[16]; //0xA0 | |
ColourInformation meter_min_colour; //0xB0 | |
ColourInformation meter_max_colour; //0xB4 | |
ColourInformation meter_flash_colour; //0xB8 | |
ColourInformation meter_empty_colour; //0xBC | |
std::uint16_t meter_flags; //0xC0 | |
std::uint16_t meter_sequence_index; //0xC2 | |
char padding7[12]; //0xC4 | |
ColourInformation meter_disabled_colour; //0xD0 | |
char padding8[104]; //0xDC | |
}; //size - 324 bytes | |
struct AuxiliaryOverlay { | |
LayoutElement layout; | |
ScalingFlags scaling; //0x0C | |
char padding[22]; //0x0E | |
char bitmap_padding[16]; //0x24 | |
ColourInformation default_colour; //0x34 | |
ColourInformation flashing_colour; //0x38 | |
float flash_period; //0x3C | |
float flash_delay; //0x40 | |
std::uint16_t num_flashes; //0x44 | |
char flash_flags; //0x46 | |
char padding2; //0x47 | |
float flash_length; //0x48 | |
ColourInformation disabled_colour; //0x4C | |
char padding3[52]; //0x50 | |
}; //size - 132 bytes | |
struct UnitHUD { | |
ElemAnchor weapon_anchor; | |
char padding[34]; //0x02 | |
LayoutElement hud_bg_layout; | |
char hug_bg_scaling_flags_padding[2]; //0x30 | |
char padding2[22]; //0x32 | |
char hud_bg_bitmap_padding[16]; //0x48 | |
ColourInformation hud_bg_default_colour; //0x58 | |
ColourInformation hud_bg_flashing_colour; //0x5C | |
float hud_bg_flash_period; //0x60 | |
float hud_bg_flash_delay; //0x64 | |
short hud_bg_num_flashes; //0x68 | |
char hud_bg_flash_flags_padding; //0x6A | |
char padding3; //0x6B | |
float hud_bg_flash_length; //0x6C | |
ColourInformation hug_bg_disabled_colour; //0x70 | |
char padding4[24]; //0x74 | |
LayoutElement shield_panel_bg_layout; //0x8C | |
char shield_panel_bg_scaling_flags_padding[2]; //0x98 | |
char padding5[22]; //0x9A | |
char shield_panel_bg_bitmap_padding[16]; //0xB0 | |
ColourInformation shield_panel_bg_default_colour; //0xC0 | |
ColourInformation shield_panel_bg_flashing_colour; //0xC4 | |
float shield_panel_bg_flash_period; //0xC8 | |
float shield_panel_bg_flash_delay; //0xCC | |
short shield_panel_bg_num_flashes; //0xD0 | |
char shield_panel_bg_flash_flags_padding; //0xD2 | |
char padding6; //0xD3 | |
float shield_panel_bg_flash_length; //0xD4 | |
ColourInformation shield_panel_bg_disabled_colour; //0xD8 | |
char padding7[24]; //0xDC | |
LayoutElement shield_panel_meter_layout; //0xF4 | |
char shield_panel_meter_scaling_flags_padding[2]; //0x100 | |
char padding8[22]; //0x102 | |
char shield_panel_meter_bitmap_padding[16]; //0x118 | |
ColourInformation shield_panel_meter_min_colour; //0x128 | |
ColourInformation shield_panel_meter_max_colour; //0x12C | |
ColourInformation shield_panel_meter_flash_colour; //0x130 | |
ColourInformation shield_panel_meter_empty_colour; //0x134 | |
char shield_panel_meter_flags_padding[2]; //0x138 | |
//char shield_panel_meter_min_value; //0x139 | |
std::uint16_t shield_panel_meter_sequence_index; //0x13A | |
char padding9[12]; //0x13C | |
ColourInformation shield_panel_meter_disabled_colour; //0x148 | |
char padding10[16]; //0x14C | |
ColourInformation shield_panel_meter_overcharge_min_colour; //0x15C | |
ColourInformation shield_panel_meter_overcharge_max_colour; //0x160 | |
ColourInformation shield_panel_meter_overcharge_flash_colour; //0x164 | |
ColourInformation shield_panel_meter_overcharge_empty_colour; //0x168 | |
char padding11[16]; //0x16C | |
LayoutElement health_panel_bg_layout; //0x17C | |
char health_panel_bg_scaling_flags_padding[2]; //0x188 | |
char padding12[22]; //0x18A | |
char health_panel_bg_bitmap_padding[16]; //0x1A0 | |
ColourInformation health_panel_bg_default_colour; //0x1B0 | |
ColourInformation health_panel_bg_flashing_colour; //0x1B4 | |
float health_panel_bg_flash_period; //0x1B8 | |
float health_panel_bg_flash_delay; //0x1BC | |
short health_panel_bg_num_flashes; //0x1C0 | |
char health_panel_bg_flash_flags_padding; //0x1C2 | |
char padding13; //0x1C3 | |
float health_panel_bg_flash_length; //0x1C4 | |
ColourInformation health_panel_bg_disabled_colour; //0x1C8 | |
char padding14[24]; //0x1CC | |
LayoutElement health_panel_meter_layout; //0x1E4 | |
char health_panel_scaling_flags_padding[2]; //0x1F0 | |
char padding15[22]; //0x1F2 | |
char health_panel_bitmap_padding[16]; //0x208 | |
ColourInformation health_panel_meter_min_colour; //0x218 | |
ColourInformation health_panel_max_meter_colour; //0x21C | |
ColourInformation health_panel_flash_meter_colour; //0x220 | |
ColourInformation health_panel_empty_meter_colour; //0x224 | |
char health_panel_meter_flags_padding[2]; //0x228 | |
char padding16[14]; //0x22A | |
ColourInformation health_panel_meter_disabled_colour; //0x238 | |
char padding17[16]; //0x23C | |
ColourInformation health_panel_meter_medium_health_left_colour; //0x24C | |
char padding18[28]; //0x250 | |
LayoutElement motion_sensor_bg_layout; //0x26C | |
char motion_sensor_bg_scaling_flags_padding[2]; //0x278 | |
char padding19[22]; //0x27A | |
char motion_sensor_bg_bitmap_padding[16]; //0x290 | |
ColourInformation motion_sensor_bg_default_colour; //0x2A0 | |
ColourInformation motion_sensor_bg_flashing_colour; //0x2A4 | |
float motion_sensor_bg_flash_period; //0x2A8 | |
float motion_sensor_bg_flash_delay; //0x2AC | |
short motion_sensor_bg_num_flashes; //0x2B0 | |
char motion_sensor_bg_flash_flags_padding; //0x2B2 | |
char padding20; //0x2B3 | |
float motion_sensor_bg_flash_length; //0x2B4 | |
ColourInformation motion_sensor_bg_disabled_colour; //0x2B8 | |
char padding21[24]; //0x2BC | |
LayoutElement motion_sensor_foreground_layout; //0x2D4 | |
char motion_sensor_foreground_scaling_flags_padding[2]; //0x2E0 | |
char padding22[22]; //0x2E2 | |
char motion_sensor_foreground_bitmap_padding[16]; //0x2F8 | |
ColourInformation motion_sensor_foreground_default_colour; //0x308 | |
ColourInformation motion_sensor_foreground_flashing_colour; //0x30C | |
float motion_sensor_foreground_flash_period; //0x310 | |
float motion_sensor_foreground_flash_delay; //0x314 | |
short motion_sensor_foreground_num_flashes; //0x318 | |
char motion_sensor_foreground_flash_flags_padding; //0x31A | |
char padding23; //0x31B | |
float motion_sensor_foreground_flash_length; //0x31C | |
ColourInformation motion_sensor_foreground_disabled_colour; //0x320 | |
char padding24[56]; //0x324 | |
LayoutElement motion_sensor_centre_layout; //0x35C | |
char padding25[60]; //0x368 | |
Reflexive<AuxiliaryOverlay> auxiliary_overlays; //0x3A4 | |
char padding27[16]; //0x3B0 | |
char padding26[12]; //0x3C0 | |
Reflexive<AuxiliaryHUDMeter> auxiliary_hud_meters; //0x3CC | |
}; | |
enum StateAttached : std::uint16_t { | |
TOTAL_AMMO, | |
LOADED_AMMO, | |
HEAT, | |
AGE, | |
SECONDARY_WEAP_TOTAL_AMMO, | |
SECONDARY_WEAP_LOADED, AMMO, | |
DISTANCE_TO_TARGET, | |
ELEVATION_TO_TARGET | |
}; | |
struct StaticElement { | |
StateAttached attached; | |
char padding[2]; //0x02 | |
MapType map_type; //0x04 | |
char padding2[30]; //0x06 | |
LayoutElement layout; | |
ScalingFlags scaling_flags; //0x30 | |
char padding4[22]; //0x32 | |
char interface_bitmap_padding[16]; //0x48 | |
ColourInformation default_colour; //0x58 | |
ColourInformation flashing_colour; //0x5C | |
float flash_period; //0x60 | |
float flash_delay; //0x64 | |
std::uint16_t num_flashes; //0x68 | |
char flash_flags; //0x6A; | |
char padding_alignment; //0x6B | |
float flash_length; //0x6C | |
ColourInformation disabled_colour; //0x70 | |
char padding7[4]; //0x74 | |
std::uint16_t sequence_index; //0x78 | |
char padding8[2]; //0x7A | |
char multitexture_overlay_padding[12]; //0x7C | |
char padding5[44]; //0x88 | |
}; //size - 180 bytes | |
struct MeterElement { | |
StateAttached attached; | |
char padding[2]; //0x02 | |
MapType map_type; //0x04 | |
char padding2[30]; //0x06 | |
LayoutElement layout; //0x24 | |
char scaling_flags_padding[2]; //0x30 | |
char padding4[22]; //0x32 | |
char meter_bitmap_padding[16]; //0x48 | |
ColourInformation meter_maximum; //0x58 | |
ColourInformation meter_minimum; //0x5C | |
ColourInformation flash_colour; //0x60 | |
ColourInformation empty_colour; //0x64 | |
char flags_padding[2]; //0x68 | |
//char minimum_meter_value; //0x69 - XML INFO IS WRONG 'ERE | |
std::int16_t sequence_index; | |
char alpha_multiplier; | |
char alpha_bias; | |
char value_scale; | |
float opacity; | |
float transulency; | |
ColourInformation disabled_colour; | |
char padding5[54]; //0x70 | |
}; //size - 180 bytes | |
struct NumberElement { | |
StateAttached attached; | |
char padding[2]; //0x02 | |
MapType map_type; //0x04 | |
char padding2[30]; //0x06 | |
LayoutElement layout; | |
char padding3[2]; //0x2E | |
char scaling_flags_padding[2]; //0x30 | |
char padding4[22]; //0x32 | |
ColourInformation default_colour; //0x48 | |
ColourInformation flashing_colour; //0x4C | |
float flash_period; //0x60 | |
float flash_delay; //0x64 | |
std::uint16_t num_flashes; //0x68 | |
char padding5[68]; //0x6A | |
}; //size - 160 bytes | |
enum ReticleTypes : std::uint16_t { | |
AIM, | |
ZOOM, | |
CHARGE, | |
RELOAD_WARNING, | |
FLASH_HEAT, | |
FLASH_TOTAL_AMMO, | |
FLASH_BATTERY, | |
RELOAD_OVERHEAT, | |
FLASH_WHEN_FIRING_NO_AMMO, | |
FLASH_WHEN_THROWING_NO_GRENADE, | |
SHOULD_RELOAD_SECONDARY_TRIGGER, | |
FLASH_SECONDARY_TOTAL_AMMO, | |
FLASH_SECONDARY_RELOAD, | |
FLASH_WHEN_FIRING_SECONDARY_TRIGGER_NO_AMMO, | |
LOW_SECONDARY_AMMO_NOT_ENOUGH_TO_RELOAD, | |
PRIMARY_TRIGGER_READY, | |
SECONDARY_TRIGGER_READY, | |
FLASH_WHEN_FIRING_DEPLETED_BATTERY | |
}; | |
struct ReticleOverlay { | |
LayoutElement layout; | |
ScalingFlags scaling_flags; //0x0C | |
char padding[22]; //0x0E | |
ColourInformation default_colour; //0x24 | |
ColourInformation flashing_colour; //0x28 | |
float flash_period; //0x2C | |
float flash_delay; //0x30 | |
std::uint16_t num_flashes; //0x34 | |
char padding2[54]; //0x36 | |
}; //size - 108 bytes | |
struct Overlay { | |
LayoutElement layout; | |
ScalingFlags scaling_flags; //0x0C | |
char padding[22]; //0x0E | |
ColourInformation default_colour; //0x24 | |
ColourInformation flashing_colour; //0x28 | |
float flash_period; //0x2C | |
float flash_delay; //0x30 | |
std::int16_t num_flashes; //0x34 | |
char flash_flags_padding; //0x36 | |
char padding2; //0x37 | |
float flash_length; //0x38 | |
ColourInformation disabled_colour; //0x3C | |
char padding3[4]; //0x40 | |
std::uint16_t frame_rate; //0x44 | |
char padding4[2]; //0x46 | |
std::uint16_t sequence_index; //0x48 | |
std::uint32_t type_padding; //0x4A | |
char padding5[58]; //0x4E | |
}; //size - 136 bytes | |
struct Reticle { | |
ReticleTypes type; | |
char padding[2]; //0x02 | |
MapType map_type; //0x04 | |
char padding2[30]; //0x06 | |
char reticle_bitmap[16]; //0x24 | |
Reflexive<ReticleOverlay> overlays; //0x34 | |
char padding3[40]; //0x40 | |
}; //size - 104 bytes | |
struct OverlayElement { | |
StateAttached attached; | |
char padding[2]; //0x02 | |
MapType map_type; //0x04 | |
char padding2[30]; //0x06 | |
char overlay_bitmap_padding[16]; //0x24 | |
Reflexive<Overlay> overlays; //0x34 | |
char padding3[40]; //0x40 | |
}; //static_assert(sizeof(OverlayElement) == 104, "OverlayElement size incorrect!"); //@todo VS2010 bug | |
struct WeaponHUD { | |
char padding[16]; | |
char padding2[4]; //0x10 | |
std::uint16_t flash_cutoff_total_ammo; //0x14 | |
std::uint16_t flash_cutoff_loaded_ammo; //0x16 | |
std::uint16_t flash_cutoff_heat; //0x18 | |
std::uint16_t flash_cutoff_age; //0x1A | |
char padding5[32]; //0x1C | |
ElemAnchor weapon_hud_anchor; //0x3C | |
char padding3[34]; //0x3E | |
Reflexive<StaticElement> static_elements; //0x60 | |
Reflexive<MeterElement> meter_elements; //0x6C | |
Reflexive<NumberElement> number_elements; //0x78 | |
Reflexive<Reticle> crosshairs; //0x84 | |
Reflexive<OverlayElement> overlay_elements; //0x90 | |
char padding4[12]; //0x9C | |
}; | |
struct Bitmap { | |
char padding[24]; | |
std::int32_t pixel_offset; //0x18 | |
std::int32_t pixel_count; //0x1C | |
std::uint32_t bitmap; //0x20 | |
std::uint32_t base_address; //0x2C | |
}; //size - 48 bytes | |
struct BitmapMeta { | |
char padding[96]; | |
Reflexive<Bitmap> bitmaps; //0x60 | |
}; | |
struct GrenadeHUD { | |
ElemAnchor anchor; | |
char padding[34]; //0x02 | |
LayoutElement bg; //0x24 | |
ScalingFlags bg_scaling_flags; //0x30 | |
char padding2[22]; //0x32 | |
char bg_bitmap_padding[16]; //0xB0 | |
ColourInformation bg_default_colour; //0x58 | |
ColourInformation bg_flashing_colour; //0x5C | |
float bg_flash_period; //0x60 | |
float bg_flash_delay; //0x64 | |
std::uint16_t num_flashes; //0x68 | |
char padding_bg_flash_flags; //0x6A | |
char padding3; //0x6B | |
float bg_flash_length; //0x6C | |
ColourInformation bg_disabled_colour; //0x70 | |
char padding4[4]; //0x74 | |
std::uint16_t bg_sequence_index; //0x78 | |
char padding5[2]; //0x7A | |
char bg_multitex_overlay_padding[12]; //0x7C | |
char padding6[4]; //0x88 | |
LayoutElement total_grenades_bg; //0x8C | |
ScalingFlags total_grenades_bg_scaling_flags; //0x98 | |
char padding7[22]; //0x9A | |
char total_grenades_bg_bitmap_padding[16]; //0xB0 | |
ColourInformation total_grenades_bg_default_colour; //0xC0 | |
ColourInformation total_grenades_bg_flashing_colour; //0xC4 | |
float total_grenades_bg_flash_period; //0xC8 | |
float total_grenades_bg_flash_delay; //0xCC | |
std::uint16_t total_grenades_num_flashes; //0xD0 | |
char total_grenades_padding_bg_flash_flags; //0xD2 | |
char padding8; //0xD3 | |
float total_grenades_bg_flash_length; //0xD4 | |
ColourInformation total_grenades_bg_disabled_colour; //0xD8 | |
char padding9[4]; //0xDC | |
std::uint16_t total_grenades_bg_sequence_index; //0xE0 | |
char padding10[18]; //0xE2 | |
LayoutElement total_grenade_numbers; //0xF4 | |
ScalingFlags total_grenade_numbers_scale; //0x100 | |
char padding15[22]; //0x102 | |
ColourInformation total_grenade_numbers_default_colour; //0x118 | |
ColourInformation total_grenade_numbers_flashing_colour; //0x11C | |
float total_grenade_numbers__flash_period; //0x120 | |
float total_grenade_numbers__flash_delay; //0x124 | |
std::uint16_t total_grenade_numbers_flashes; //0x128 | |
char total_grenade_numbers_padding_flash_flags; //0x12A | |
char padding11; //0x12B | |
float total_grenade_numbers_flash_length; //0x12C | |
ColourInformation total_grenade_numbers_disabled_colour; //0x130 | |
char padding12[4]; //0x134 | |
std::uint8_t total_grenades_max_num_digits; //0x138 | |
std::uint8_t total_grenades_numbers_flags; //0x139 | |
std::uint8_t total_grenades_num_fractional_digits; //0x13A | |
char padding13[13]; //0x13B | |
std::uint16_t total_grenades_num_flash_cutoff; //0x148 | |
char padding14[2]; //0x14A | |
char total_grenades_overlay_bitmap_padding[16]; //0x14C | |
Reflexive<Overlay> overlays; //0x15C | |
}; | |
struct HUDCounter { | |
char digitsBitmap[16]; | |
std::int8_t bitmapDigitWidth; | |
std::int8_t screenDigitWidth; | |
std::int8_t xOffset; | |
std::int8_t yOffset; | |
std::int8_t decimalPointWidth; | |
std::int8_t colonWidth; | |
}; | |
struct Resolution { | |
std::uint32_t width; | |
std::uint32_t height; | |
}; | |
enum WIDGET_TYPES : std::uint16_t { | |
CONTAINER, TEXT_BOX, SPINNER_LIST, COLUMN_LIST, GAME_MODEL, | |
MOVIE, CUSTOM | |
}; | |
enum CONTROLLER_INDEX : std::uint16_t { | |
PLAYER_1, PLAYER_2, PLAYER_3, PLAYER_4, ANY_PLAYER | |
}; | |
struct Dependency { | |
std::uint32_t offset; | |
std::uint32_t tagClass; | |
std::uint32_t notsure[2]; | |
}; static_assert(sizeof(Dependency) == 16, "Dependency size incorrect!"); | |
struct WidgetFlags { | |
std::uint32_t : 16; | |
std::uint32_t FORCE_HANDLE_MOUSE : 1; | |
std::uint32_t DO_NOT_PUSH_HISTORY : 1; | |
std::uint32_t ALWAYS_USE_NIFTY_RENDER_EFFECTS : 1; | |
std::uint32_t ALWAYS_USE_TAG_CONTROLLER_INDEX : 1; | |
std::uint32_t RETURN_TO_MAIN_MENU_IF_NO_HISTORY : 1; | |
std::uint32_t PASS_HANDLED_EVENTS_TO_ALL_CHILDREN : 1; | |
std::uint32_t RENDER_REGARDLESS_OF_CONTROLLER_INDEX : 1; | |
std::uint32_t PASS_UNHANDLED_EVENTS_TO_ALL_CHILDREN : 1; | |
std::uint32_t DO_NOT_FOCUS_SPECIFIC_CHILD_WIDGET : 1; | |
std::uint32_t D_PAD_LEFT_RIGHT_TABS_THROUGH_LIST_ITEMS : 1; | |
std::uint32_t D_PAD_UP_DOWN_TABS_THROUGH_LIST_ITEMS : 1; | |
std::uint32_t D_PAD_LEFT_RIGHT_TABS_THROUGH_CHILDREN : 1; | |
std::uint32_t D_PAD_UP_DOWN_TABS_THROUGH_CHILDREN : 1; | |
std::uint32_t FLASH_BACKGROUND_BITMAP : 1; | |
std::uint32_t PAUSE_GAME_TIME : 1; | |
std::uint32_t PASS_UNHANDLED_EVENTS_TO_FOCUSED_CHILD : 1; | |
}; static_assert(sizeof(WidgetFlags) == 4, "WidgetFlags size incorrect!"); | |
enum DATA_INPUT_FUNCTION : std::uint16_t { | |
_NONE, | |
PLAYER_SETTINGS_MENU_UPDATE_DESC, | |
UNUSED, | |
PLAYLIST_SETTINGS_MENU_UPDATE_DESC, | |
GAMETYPE_SELECT_MENU_UPDATE_DESC, | |
MP_TYPE_MENU_UPDATE_DESC, | |
SOLO_LEVEL_SELECT_UPDATE, | |
DIFFICULTY_MENU_UPDATE_DESC, | |
BUILD_NUMBER, | |
SERVER_LIST_UPDATE, | |
NETWORK_PREGAME_STATUS_UPDATE, | |
SPLITSCREEN_PREGAME_STATUS_UPDATE, | |
NETWORK_SPLITSCREEN_PREJOIN_PLAYERS, | |
MP_PROFILE_LIST_UPDATE, | |
THREE_WIDE_PLAYER_PROFILE_LIST_UPDATE, | |
PLAYER_PROFILE_EDIT_SELECT_MENU_UPDATE, | |
PLAYER_PROFILE_SMALL_MENU_UPDATE, | |
GAME_SETTINGS_LISTS_TEXT_UPDATE, | |
SOLO_GAME_OBJECTIVE_TEXT, | |
COLOUR_PICKER_UPDATE, | |
GAME_SETTINGS_LISTS_PICTURE_UPDATE, | |
MAIN_MENU_FAKE_ANIMATE, | |
MP_LEVEL_SELECT_UPDATE, | |
GET_ACTIVE_PLAYER_PROFILE_NAME, | |
GET_EDIT_PLAYER_PROFILE_NAME, | |
GET_EDIT_GAME_SETTINGS_NAME, | |
GET_ACTIVE_PLAYER_PROFILE_COLOUR, | |
MP_SET_TEXTBOX_MAP_NAME, | |
MP_SET_TEXTBOX_GAME_RULESET, | |
MP_SET_TEXTBOX_TEAMS_NO_TEAMS, | |
MP_SET_TEXTBOX_SCORE_LIMIT, | |
MP_SET_TEXTBOX_SCORE_LIMIT_TYPE, | |
MP_SET_BITMAP_FOR_MAP, | |
MP_SET_BITMAP_FOR_RULESET, | |
MP_SET_TEXTBOX_NUMBER_OF_PLAYERS, | |
MP_EDIT_PROFILE_SET_RULE_TEXT, | |
SYSTEM_LINK_STATUS_CHECK, | |
MP_GAME_DIRECTIONS, | |
TEAMS_NO_TEAMS_BITMAP_UPDATE, | |
WARN_IF_DIFFERENT_WILL_NUKE_SAVED_GAME, | |
DIM_IF_NO_NETWORK_CABLE, | |
PAUSE_GAME_SET_TEXTBOX_INVERTED, | |
DIM_UNLESS_TWO_CONTROLLERS, | |
CONTROLS_UPDATE_MENU, | |
VIDEO_MENU_UPDATE, | |
GAMESPY_SCREEN_UPDATE, | |
COMMON_BUTTON_BAR_UPDATE, | |
GAMEPAD_UPDATE_MENU, | |
SERVER_SETTINGS_UPDATE, | |
AUDIO_MENU_UPDATE, | |
MP_PROFILE_VEHICLES_UPDATE, | |
SOLO_MAP_LIST_UPDATE, | |
MP_MAP_LIST_UPDATE, | |
GAMETYPE_SELECT_LIST_UPDATE, | |
GAMETYPE_EDIT_LIST_UPDATE, | |
LOAD_GAME_LIST_UPDATE, | |
CHECKING_FOR_UPDATES, | |
DIRECT_IP_CONNECT_UPDATE, | |
NETWORK_SETTINGS_UPDATE, | |
//HAC callbacks | |
OPTIC_MENU_UPDATE, | |
CHAT_MENU_UPDATE, | |
DATA_INPUT_FUNCTIONS_END | |
}; //static_assert(sizeof(DATA_INPUT_FUNCTION) == 2, "DATA_INPUT_FUNCTION size incorrect!"); //@todo VS2010 bug | |
struct GameDataInputFunctions { | |
DATA_INPUT_FUNCTION function; | |
std::uint8_t padding[34]; | |
}; //static_assert(sizeof(GameDataInputFunctions) == 36, "GameDataInputFunctions size incorrect!"); | |
struct EventHandlerFlags { | |
std::uint32_t : 20; | |
std::uint32_t TRY_BRANCH_ON_FAILURE : 1; | |
std::uint32_t : 1; | |
std::uint32_t GO_BACK_TO_PREVIOUS_WIDGET : 1; | |
std::uint32_t REPLACE_SELF_WITH_WIDGET : 1; | |
std::uint32_t RUN_FUNCTION : 1; | |
std::uint32_t GIVE_FOCUS_TO_WIDGET : 1; | |
std::uint32_t RELOAD_OTHER_WIDGET : 1; | |
std::uint32_t RELOAD_SELF : 1; | |
std::uint32_t OPEN_WIDGET : 1; | |
std::uint32_t CLOSE_ALL_WIDGETS : 1; | |
std::uint32_t CLOSE_OTHER_WIDGET : 1; | |
std::uint32_t CLOSE_CURRENT_WIDGET : 1; | |
}; static_assert(sizeof(EventHandlerFlags) == 4, "EventHandlerFlags size incorrect!"); | |
enum EVENT_TYPES : std::uint16_t { | |
A_BUTTON, | |
B_BUTTON, | |
X_BUTTON, | |
Y_BUTTON, | |
BLACK_BUTTON, | |
WHITE_BUTTON, | |
LEFT_TRIGGER, | |
RIGHT_TRIGGER, | |
D_PAD_UP, | |
D_PAD_DOWN, | |
D_PAD_LEFT, | |
D_PAD_RIGHT, | |
START_BUTTON, | |
BACK_BUTTON, | |
LEFT_THUMB, | |
RIGHT_THUMB, | |
LEFT_ANALOGUE_STICK_UP, | |
LEFT_ANALOGUE_STICK_DOWN, | |
LEFT_ANALOGUE_STICK_LEFT, | |
LEFT_ANALOGUE_STICK_RIGHT, | |
RIGHT_ANALOGUE_STICK_UP, | |
RIGHT_ANALOGUE_STICK_DOWN, | |
RIGHT_ANALOGUE_STICK_LEFT, | |
RIGHT_ANALOGUE_STICK_RIGHT, | |
CREATED, | |
DELETED, | |
GET_FOCUS, | |
LOSE_FOCUS, | |
LEFT_MOUSE, | |
MIDDLE_MOUSE, | |
RIGHT_MOUSE, | |
_DOUBLE_CLICK, | |
CUSTOM_ACTIVATION, | |
POST_RENDER | |
}; | |
enum EVENT_HANDLER_FUNCTIONS : std::uint16_t { | |
___NONE, | |
LIST_GOTO_NEXT_ITEM, | |
LIST_GOTO_PREVIOUS_ITEM, | |
EMPTY_1, EMPTY_2, | |
INIT_SP_LEVEL_LIST_SOLO, | |
INIT_SP_LEVEL_LIST_COOP, | |
DISPOSE_SP_LEVEL_LIST, | |
SOLO_LEVEL_SET_MAP, | |
SET_DIFFICULTY, | |
START_NEW_GAME, | |
PAUSE_GAME_RESTART_AT_CHECKPOINT, | |
PAUSE_GAME_RESTART_LEVEL, | |
PAUSE_GAME_RETURN_TO_MAIN_MENU, | |
CLEAR_MP_PLAYER_JOINS, | |
JOIN_CONTROLLER_TO_MP_GAME, | |
INIT_NETWORK_GAME_SERVER_LIST, | |
START_NETWORK_GAME_SERVER, | |
DISPOSE_NETWORK_GAME_SERVER_LIST, | |
SHUTDOWN_NETWORK_GAME, | |
NETWORK_GAME_JOIN_FROM_SERVER_LIST, | |
SPLIT_GAME_SCREEN_INIT, | |
COOP_GAME_INIT, | |
MAIN_MENU_INIT, | |
MP_TYPE_MENU_UNIT, | |
PICK_PLAY_STAGE_FOR_QUICK_START, | |
MP_LEVEL_LIST_INIT, | |
MP_LEVEL_LIST_DISPOSE, | |
MP_LEVEL_SELECT, | |
MP_PROFILES_LIST_INIT, | |
MP_PROFILES_LIST_DISPOSE, | |
MP_PROFILES_SET_FOR_GAME, | |
SWAP_PLAYER_TEAM, | |
NETWORK_GAME_JOIN_PLAYER, | |
PLAYER_PROFILE_LIST_INIT, | |
PLAYER_PROFILE_LIST_DISPOSE, | |
THREE_WIDE_PLAYER_PROFILE_SET_FOR_GAME, | |
ONE_WIDE_PLAYER_PROFILE_SET_FOR_GAME, | |
MP_PROFILE_BEGIN_EDITING, | |
MP_PROFILE_END_EDITING, | |
MP_PROFILE_SET_GAME_ENGINE, | |
MP_PROFILE_CHANGE_NAME, | |
MP_PROFILE_SET_CTF_RULES, | |
MP_PROFILE_SET_KOTH_RULES, | |
MP_PROFILE_SET_SLAYER_RULES, | |
MP_PROFILE_SET_ODDBALL_RULES, | |
MP_PROFILE_SET_RACING_RULES, | |
MP_PROFILE_SET_PLAYER_OPTIONS, | |
MP_PROFILE_SET_ITEM_OPTIONS, | |
MP_PROFILE_SET_INIDICATOR_OPTIONS, | |
MP_PROFILE_INIT_GAME_ENGINE, | |
MP_PROFILE_INIT_NAME, | |
MP_PROFILE_INIT_CTF_RULES, | |
MP_PROFILE_INIT_KOTH_RULES, | |
MP_PROFILE_INIT_SLAYER_RULES, | |
MP_PROFILE_INIT_ODDBALL_RULES, | |
MP_PROFILE_INIT_RACING_RULES, | |
MP_PROFILE_INIT_PLAYER_OPTIONS, | |
MP_PROFILE_INIT_ITEM_OPTIONS, | |
MP_PROFILE_INIT_INDICATOR_OPTIONS, | |
MP_PROFILE_SAVE_CHANGES, | |
COLOUR_PICKER_MENU_INIT, | |
COLOUR_PICKER_MENU_DISPOSE, | |
COLOUR_PICKER_SELECT_COLOUR, | |
PLAYER_PROFILE_BEGIN_EDITING, | |
PLAYER_PROFILE_END_EDITING, | |
PLAYER_PROFILE_CHANGE_NAME, | |
PLAYER_PROFILE_SAVE_CHANGES, | |
PLAYER_PROFILE_INIT_CONTROL_SETTINGS, | |
PLAYER_PROFILE_INIT_ADVANCED_CONTROL_SETTINGS, | |
PLAYER_PROFILE_SAVE_CONTROL_SETTINGS, | |
PLAYER_PROFILE_SAVE_ADVANCED_CONTROL_SETTINGS, | |
MP_GAME_PLAYER_QUIT, | |
MAIN_MENU_SWITCH_TO_SOLO_GAME, | |
REQUEST_DELETE_PLAYER_PROFILE, | |
REQUEST_DELETE_PLAYLIST_PROFILE, | |
FINAL_DELETE_PLAYER_PROFILE, | |
FINAL_DELETE_PLAYLIST_PROFILE, | |
CANCEL_PROFILE_DELETE, | |
CREATE_AND_EDIT_PLAYLIST_PROFILE, | |
CREATE_AND_EDIT_PLAYER_PROFILE, | |
NETWORK_GAME_SPEED_START, | |
NETWORK_GAME_DELAY_START, | |
NETWORK_SERVER_ACCEPT_CONNECTION, | |
NETWORK_SERVER_DEFER_START, | |
NETWORK_SERVER_ALLOW_START, | |
DISABLE_IF_NO_XDEMOS, | |
RUN_XDEMOS, | |
SINGLE_PLAYER_RESET_CONTROLLER_CHOICES, | |
SINGLE_PLAYER_SET_PLAYER1_CONTROLLER_CHOICE, | |
SINGLE_PLAYER_SET_PLAYER2_CONTROLLER_CHOICE, | |
ERROR_IF_NO_NETWORK_CONNECTION, | |
START_SERVER_IF_NONE_ADVERTISED, | |
NETWORK_GAME_UNJOIN_PLAYER, | |
CLOSE_IF_NOT_EDITING_PLAYER, | |
EXIT_TO_XBOX_DASHBOARD, | |
NEW_CAMPAIGN_CHOSEN, | |
NEW_CAMPAIGN_DECISION, | |
POP_HISTORY_STACK_ONCE, | |
DIFFICULTY_MENU_INIT, | |
BEGIN_MUSIC_FADE_OUT, | |
NEW_GAME_IF_NO_PLAYER_PROFILES, | |
EXIT_GRACEFULLY_TO_XBOX_DASHBOARD, | |
PAUSE_GAME_INVERT_PITCH, | |
START_NEW_COOP_GAME, | |
PAUSE_GAME_INVERT_SPINNER_GET, | |
PAUSE_GAME_INVERT_SPINNER_SET, | |
MAIN_MENU_QUIT_GAME, | |
MOUSE_EMIT_ACCEPT_EVENT, | |
MOUSE_EMIT_BACK_EVENT, | |
MOUSE_EMIT_DPAD_LEFT_EVENT, | |
MOUSE_EMIT_DPAD_RIGHT_EVENT, | |
MOUSE_SPINNER_THREE_WIDE_CLICK, | |
CONTROLS_SCREEN_INIT, | |
VIDEO_SCREEN_INIT, | |
CONTROLS_BEGIN_BINDING, | |
GAMESPY_SCREEN_INIT, | |
GAMESPY_SCREEN_DISPOSE, | |
GAMESPY_SELECT_HEADER, | |
GAMESPY_SELECT_ITEM, | |
GAMESPY_SELECT_BUTTON, | |
PLAYER_PROFILE_INIT_MOUSE_SETTINGS, | |
PLAYER_PROFILE_CHANGE_MOUSE_SETTINGS, | |
PLAYER_PROFILE_INIT_AUDIO_SETTINGS, | |
PLAYER_PROFILE_CHANGE_AUDIO_SETTINGS, | |
PLAYER_PROFILE_CHANGE_VIDEO_SETTINGS, | |
CONTROLS_SCREEN_DISPOSE, | |
CONTROLS_SCREEN_CHANGE_SETTINGS, | |
MOUSE_EMIT_X_EVENT, | |
GAMEPAD_SCREEN_INIT, | |
GAMEPAD_SCREEN_DISPOSE, | |
GAMEPAD_SCREEN_CHANGE_GAMEPADS, | |
GAMEPAD_SCREEN_SELECT_ITEM, | |
MOUSE_SCREEN_DEFAULTS, | |
AUDIO_SCREEN_DEFAULTS, | |
VIDEO_SCREEN_DEFAULTS, | |
CONTROLS_SCREEN_DEFAULTS, | |
PROFILE_SET_EDIT_BEGIN, | |
PROFILE_MANAGER_DELETE, | |
PROFILE_MANAGER_SELECT, | |
GAMESPY_DISMISS_ERROR, | |
SERVER_SETTINGS_INIT, | |
SERVER_SETTINGS_EDIT_SERVER_NAME, | |
SERVER_SETTINGS_EDIT_SERVER_PASSWORD, | |
SERVER_SETTINGS_START_GAME, | |
VIDEO_TEST_DIALOGUE_INIT, | |
VIDEO_TEST_DIALOGUE_DISPOSE, | |
VIDEO_TEST_DIALOGUE_ACCEPT, | |
GAMESPY_DISMISS_FILTERS, | |
GAMESPY_UPDATE_FILTER_SETTINGS, | |
GAMESPY_BACK_HANDLER, | |
MOUSE_SPINNER_ONE_WIDE_CLICK, | |
CONTROLS_BACK_HANDLER, | |
CONTROLS_ADVANCED_LAUNCH, | |
CONTROLS_ADVANCED_OK, | |
MP_PAUSE_MENU_OPEN, | |
MP_GAME_OPTIONS_OPEN, | |
MP_CHOOSE_TEAM, | |
MP_PROFILE_INIT_VEHICLE_OPTIONS, | |
MP_PROFILE_SAVE_VEHICLE_OPTIONS, | |
SINGLE_PREVIOUS_CL_ITEM_ACTIVIATED, | |
MP_PROFILE_INIT_TEAMPLAY_OPTIONS, | |
MP_PROFILE_SAVE_TEAMPLAY_OPTIONS, | |
MP_GAME_OPTIONS_CHOOSE, | |
EMIT_CUSTOM_ACTIVATION_EVENT, | |
PLAYER_PROFILE_CANCEL_AUDIO_SET, | |
PLAYER_PROFILE_INIT_NETWORK_OPTIONS, | |
PLAYER_PROFILE_SAVE_NETWORK_OPTIONS, | |
CREDITS_POST_RENDER, | |
DIFFICULTY_ITEM_SELECT, | |
CREDITS_INIT, | |
CREDITS_DISPOSE, | |
GAMESPY_GET_PATCH, | |
VIDEO_SCREEN_DISPOSE, | |
CAMPAIGN_MENU_INIT, | |
CAMPAIGN_MENU_CONTINUE, | |
LOAD_GAME_MENU_INIT, | |
LOAD_GAME_MENU_DISPOSE, | |
LOAD_GAME_MENU_ACTIVATED, | |
SOLO_MENU_SAVE_CHECKPOINT, | |
MP_TYPE_SET_MODE, | |
CHECKING_FOR_UPDATES_OK, | |
CHECKING_FOR_UPDATES_DISMISS, | |
DIRECT_IP_CONNECTION_INIT, | |
DIRECT_IP_CONNECTION_GO, | |
DIRECT_IP_EDIT_FIELD, | |
NETWORK_SETTINGS_EDIT_PORT, | |
NETWORK_SETTINGS_DEFAULTS, | |
LOAD_GAME_MENU_DELETE_REQUEST, | |
LOAD_GAME_MENU_DELETE_FINISH, | |
//HAC callbacks | |
CHAT_SCREEN_INIT, | |
CHAT_SCREEN_DEFAULTS, | |
CHAT_SCREEN_SET, | |
OPTIC_SCREEN_INIT, | |
OPTIC_SCREEN_DEFAULTS, | |
OPTIC_SCREEN_SET, | |
HAC_CONTROLS_SCREEN_INIT, | |
HAC_CONTROLS_SCREEN_DEFAULTS, | |
HAC_CONTROLS_SET, | |
GENERAL_SCREEN_INIT, | |
GENERAL_SCREEN_DEFAULTS, | |
GENERAL_SCREEN_SET, | |
HAC_OPTIONS_BEGIN_EDITING, | |
HAC_OPTIONS_END_EDITING, | |
HAC_OPTIONS_SAVE_PREFERENCES, | |
UI_EVENT_CALLBACKS_END | |
}; | |
struct EventHandler { | |
EventHandlerFlags flags; | |
EVENT_TYPES eventType; | |
EVENT_HANDLER_FUNCTIONS function; | |
Dependency widgetTag; | |
Dependency soundEffect; | |
char script[32]; | |
}; //static_assert(sizeof(EventHandlers) == 72, "EventHandlers size incorrect!"); //@todo VS2010 bug | |
enum REPLACE_FUNCTION : std::uint16_t { | |
__NONE, | |
WIDGET_CONTROLLER, | |
_BUILD_NUMBER, | |
PROCESS_ID | |
}; | |
struct SearchReplaceFunction { | |
char searchString[32]; | |
REPLACE_FUNCTION function; | |
}; //static_assert(sizeof(SearchReplaceFunction) == 34, "SearchReplaceFunction size incorrect!"); //@todo VS2010 bug | |
enum ELEMENT_JUSTIFICATION : std::uint16_t { | |
LEFT_JUSTIFY, RIGHT_JUSTIFY, CENTRE_JUSTIFY | |
}; | |
struct TextBoxFlags { | |
std::uint16_t : 12; | |
std::uint16_t DO_NOT_DO_THAT_WEIRD_FOCUS_TEST : 1; | |
std::uint16_t FLASHING : 1; | |
std::uint16_t PASSWORD : 1; | |
std::uint16_t EDITABLE : 1; | |
}; static_assert(sizeof(TextBoxFlags) == 2, "TextBoxFlags size incorrect!"); | |
struct ListItemFlags { | |
std::uint16_t : 12; | |
std::uint16_t LIST_SINGLE_PREVIEW_NO_SCROLL : 1; | |
std::uint16_t LIST_ITEMS_ONLY_ONE_TOOLTIP : 1; | |
std::uint16_t LIST_ITEMS_FROM_STRING_LIST_TAG : 1; | |
std::uint16_t LIST_ITEMS_GENERATED_IN_CODE : 1; | |
}; static_assert(sizeof(ListItemFlags) == 2, "ListItemFlags size incorrect!"); | |
struct ConditionalWidgetFlags { | |
std::uint8_t : 7; | |
std::uint8_t LOAD_IF_EVENT_HANDLER_FAILS : 1; | |
}; static_assert(sizeof(ConditionalWidgetFlags) == 1, "ConditionalWidgetFlags size incorrect!"); | |
struct ConditionalWidget { | |
Dependency widgetTag; | |
char name[32]; | |
ConditionalWidgetFlags flags; | |
std::uint8_t padding[3]; | |
std::uint16_t customControllerIndex; | |
std::uint16_t verticalOffset; | |
std::uint16_t horizontalOffset; | |
std::uint8_t padding2[22]; | |
}; static_assert(sizeof(ConditionalWidget) == 80, "ConditionalWidget size incorrect!"); | |
struct ChildWidgetFlags { | |
std::uint8_t : 7; | |
std::uint8_t USE_CUSTOM_CONTROLLER_INDEX : 1; | |
}; static_assert(sizeof(ChildWidgetFlags) == 1, "ChildWidgetFlags size incorrect!"); | |
struct ChildWidget { | |
Dependency widgetTag; | |
char name[32]; | |
ChildWidgetFlags flags; | |
std::uint8_t padding[3]; | |
std::uint16_t customControllerIndex; | |
std::uint16_t verticalOffset; | |
std::uint16_t horizontalOffset; | |
std::uint8_t padding2[22]; | |
}; static_assert(sizeof(ChildWidget) == 80, "ChildWidget size incorrect!"); | |
struct UIWidget { | |
WIDGET_TYPES type; | |
CONTROLLER_INDEX controllerIndex; | |
char name[32]; | |
std::int16_t boundTop, boundLeft, boundBottom, boundRight; | |
WidgetFlags flags; | |
std::int32_t autoCloseTimer, autoCloseFadeTime; | |
Dependency bgBitmap; | |
Reflexive<GameDataInputFunctions> functions; | |
Reflexive<EventHandler> eventHandlers; | |
Reflexive<SearchReplaceFunction> replaceFunctions; | |
std::uint8_t padding4[128]; | |
Dependency textBoxUnicodeStringsList; | |
Dependency textBoxTextFont; | |
ColourInformation textBoxTextColour; | |
std::uint8_t padding5[12]; | |
ELEMENT_JUSTIFICATION textBoxJustify; | |
TextBoxFlags textBoxFlags; | |
std::uint8_t padding6[14]; | |
std::int16_t textBoxStringListIndex; | |
std::int16_t textBoxHorizontalOffset; | |
std::int16_t textBoxVerticalOffset; | |
std::uint8_t padding7[28]; | |
ListItemFlags listItemFlags; | |
std::uint8_t padding8[2]; | |
Dependency spinnerListHeaderBitmap; | |
Dependency spinnerListFooterBitmap; | |
std::int16_t spinnerListHeaderBoundsTop; | |
std::int16_t spinnerListHeaderBoundsLeft; | |
std::int16_t spinnerListHeaderBoundsBottom; | |
std::int16_t spinnerListHeaderBoundsRight; | |
std::int16_t spinnerListFooterBoundsTop; | |
std::int16_t spinnerListFooterBoundsLeft; | |
std::int16_t spinnerListFooterBoundsBottom; | |
std::int16_t spinnerListFooterBoundsRight; | |
std::uint8_t padding9[32]; | |
Dependency columnListExtendedDescWidget; | |
std::uint8_t padding10[288]; | |
Reflexive<ConditionalWidget> conditionalWidgets; | |
std::uint8_t padding11[256]; | |
Reflexive<ChildWidget> childWidgets; | |
}; | |
//Only reversed enough to get things working | |
struct UIWidgetGroupMeta { | |
std::uint16_t size; //always 112 | |
std::uint16_t maxWidgets; //always 32768 | |
std::uint16_t index; | |
std::uint16_t unknown; | |
}; static_assert(sizeof(UIWidgetGroupMeta) == 8, "UIWidgetGroupMeta size incorrect!"); | |
struct ResolutionSpinnerEntry { | |
std::uint32_t width; | |
std::uint32_t height; | |
char label[32]; | |
std::uint32_t numRefreshRates; //numbers of entries in the below array | |
std::uint32_t refreshRates[8]; //valid refresh rates for this resolution | |
}; static_assert(sizeof(ResolutionSpinnerEntry) == 76, "ResolutionSpinnerEntry size incorrect!"); | |
struct UIWidgetGroup { | |
std::uint32_t tagID; | |
char* tagName; //the entire tag is here | |
std::int16_t customControllerIndex; //possibly | |
std::int16_t horizontalOffset; | |
std::int16_t verticalOffset; | |
std::int16_t index; //at least possibly | |
float didNotCheck; | |
std::int16_t unknown; | |
std::uint8_t padding[14]; //didn't attempt to reverse | |
float alpha; //affects all widgets in the 'group' | |
UIWidgetGroup* previous; | |
UIWidgetGroup* next; | |
UIWidgetGroup* parent; | |
UIWidgetGroup* child; | |
UIWidgetGroup* child2; //not really sure what this is about - 56 | |
std::uint8_t padding2[4]; | |
std::uint16_t stringIndex; | |
std::uint16_t unknown2; //something to do with scrolling | |
void* customFunctionData; //maybe - related to 'list items from function' | |
std::uint16_t customFunctionDataEntries; //number of entries in above array | |
std::uint16_t unknown3; | |
std::uint32_t padding4; | |
UIWidgetGroup* extendedDescription; | |
std::uint8_t padding5[12]; | |
UIWidgetGroupMeta meta; | |
UIWidgetGroupMeta* prevMeta; | |
UIWidgetGroupMeta* nextMeta; | |
}; static_assert(sizeof(UIWidgetGroup) == 112, "UIWidgetGroup size incorrect!"); | |
enum UICallbackAction : std::uint32_t { // not sure about this | |
CANCEL_ACTION, | |
CONTINUE_ACTION | |
}; | |
} | |
#pragma pack(pop) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment