Commit 441b2421 authored by Red Bot's avatar Red Bot

test build ready for 4/19 patch

parent b199f53b
......@@ -474,6 +474,7 @@ void Client::ProcessWritePacketBuffer()
void Client::HandleLogin(char *data)
{
static char message[MAX_BUF] = { 0 };
/*
char *pc = data;
char *pc2 = NULL;
if (data[0] == '=')
......@@ -495,8 +496,8 @@ void Client::HandleLogin(char *data)
_snprintf(message, MAX_BUF, "\tNBJOIN=%s\n", name);
server->SendToAll(message);
}
}
/*
}//*/
//*
if (_strnicmp("LOGIN=", data, 6) == 0)
{
char *pc = data + 6;
......@@ -513,13 +514,28 @@ void Client::HandleLogin(char *data)
return;
}
{
static char clientlist[MAX_BUF] = { 0 };
char *cptr = clientlist;
memset(clientlist, 0, MAX_BUF);
strncpy(name, pc, strlen(pc));
authenticated = true;
_snprintf(message, MAX_BUF, "\tNBJOIN=%s\n", name);
for (int x = 0; x < server->clients->Count(); x++)
{
_snprintf(cptr, (MAX_BUF - (cptr-clientlist)), "%s", (*(server->clients))[x]->GetName());
cptr += strlen(cptr);
if (x < server->clients->Count() - 1)
{
(*cptr) = ' ';
cptr++;
}
}
_snprintf(message, MAX_BUF, "\tNBJOIN=%s\n\tNBCLIENTLIST=%s\n", name, clientlist);
//_snprintf(message, MAX_BUF, "\tNBJOIN=%s\n", name);
server->SendToAll(message);
}
}
}
/*
else if ((!authstart) && (_strnicmp("LOGIN", data, 5) == 0) && (strlen(data)==5))
{
// Login portion broken apart (go "EQBC Interface")
......@@ -533,7 +549,7 @@ void Client::HandleLogin(char *data)
*pc = 0;
}
}
*/
//*/
}
void Client::HandleCommands(char *data)
......@@ -686,6 +702,19 @@ void Client::ProcessReadPacketBuffer()
int ret = 0;
if (!authenticated)
{
ret = rbuf->Peek(data, MAX_BUF);
if ((ret > 0) && (_strnicmp(data, "LOGIN=", 6) == 0) && (strchr(data, ';')!=NULL))
{
ret = rbuf->ReadUntil(data, MAX_BUF - 1, ';');
fprintf(stderr, "Debug Login: %s\r\n", data);
command = false;
HandleLogin(data);
}
else
{
fprintf(stderr, "Debug: partial login, or invalid login: %s\n", data);
}
/*
if (!authstart)
{
ret = rbuf->ReadUntil(data, 5, '=');
......@@ -708,7 +737,7 @@ void Client::ProcessReadPacketBuffer()
command = false;
//authstart = false;
}
}
}*/
}
else if (command)
{
......
No preview for this file type
......@@ -315,19 +315,24 @@ char lvmMask[] = "x????x????xxxxx";
PBYTE xwmPattern = (PBYTE)"\x8B\x15\x00\x00\x00\x00\x89\x82\x00\x00\x00\x00\xA1\x00\x00\x00\x00\xC6\x80\x00\x00\x00\x00\x00\x8B\x0D\x00\x00\x00\x00\x89\x1D\x00\x00\x00\x00\x8B\x11\x8B\x42\x00\xFF\xD0\x85\xC0\x74\x00";
char xwmMask[] = "xx????xx????x????xx?????xx????xx????xxxx?xxxxx?";
#else
PBYTE xwmPattern = (PBYTE)"\xA1\xBC\x00\x00\x00\x00\x88\x18";
char xwmMask[] = "xx????xx";
//Apr 10 2018 Test
//A1 ? ? ? ? 89 88 ? ? ? ?
PBYTE xwmPattern = (PBYTE)"\xA1\x00\x00\x00\x00\x89\x88\x00\x00\x00\x00";
char xwmMask[] = "x????xx????";
#endif
// A1 ? ? ? ? 80 B8 ? ? ? ? ? 0F 84 ? ? ? ? 8D 88 ? ? ? ? 8B 01 3B C3 74 ? 89 45 ? 33 DB 8B 45 ? F0 FF ? 0F 94 C3 89 5D ?
//eqmain.dll
//Feb 16 2018 Test
//8B 35 ? ? ? ? 8a 86
#ifdef EMU
PBYTE swmPattern = (PBYTE)"\xA1\x00\x00\x00\x00\x80\xB8\x00\x00\x00\x00\x00\x0F\x84\x00\x00\x00\x00\x8D\x88\x00\x00\x00\x00\x8B\x01\x3B\xC3\x74\x00\x89\x45\x00\x33\xDB\x8B\x45\x00\xF0\xFF\x00\x0F\x94\xC3\x89\x5D\x00";
char swmMask[] = "x????xx?????xx????xx????xxxxx?xx?xxxx?xxxxxxxx?";
#else
PBYTE swmPattern = (PBYTE)"\x8B\x35\x00\x00\x00\x00\x8a\x86";
char swmMask[] = "xx????xx";
//Apr 10 2018 Test
//8B 35 ? ? ? ? C6 45 FC 08
PBYTE swmPattern = (PBYTE)"\x8B\x35\x00\x00\x00\x00\xC6\x45\xFC\x08";
char swmMask[] = "xx????xxxx";
#endif
// 8B 54 24 ? 56 8B 74 24 ? 8B C1 85 D2 75 ? 85 F6 75 ? 33 C0 5E C2 ? ?
//eqmain.dll func start
......@@ -363,17 +368,7 @@ char lcMask[] = "x????xx?xx?x?xxxxxx?????x????";
PBYTE lcPattern = (PBYTE)"\x89\x0D\x00\x00\x00\x00\x8B\x46\x2C";
char lcMask[] = "xx????xxx";
#endif
//Login__Pulse_x
// 56 8B F1 E8 ? FD FF FF 8B CE 5E E9 ? ? FF FF C7 01
//Feb 16 2018 Test
//IDA Style Sig: 56 8B F1 E8 ? ? ? ? 8B CE
#ifdef EMU
PBYTE lpPattern = (PBYTE)"\x56\x8B\xF1\xE8\x00\xFD\xFF\xFF\x8B\xCE\x5E\xE9\x00\x00\xFF\xFF\xC7\x01";
char lpMask[] = "xxxx?xxxxxxx??xxxx";
#else
PBYTE lpPattern = (PBYTE)"\x56\x8B\xF1\xE8\x00\x00\x00\x00\x8B\xCE";
char lpMask[] = "xxxx????xx";
#endif
#ifndef EMU
#define SPLASH "dbgsplash"
......@@ -770,7 +765,6 @@ void Cmd_Relog(PSPAWNINFO pChar, PCHAR szLine)
bInjectorUpdate = true;
}
}
DWORD Login__Pulse_x = 0;
bool bGotOffsets = false;
bool GetAllOffsets(DWORD dweqmain)
{
......@@ -903,37 +897,13 @@ void LoginPulse()
HandleWindows();
}
}
class Login
{
public:
int Pulse_Tramp();
int Pulse_Detour()
{
LoginPulse();
return Pulse_Tramp();
}
};
void RemoveLoginPulse();
DETOUR_TRAMPOLINE_EMPTY(int Login::Pulse_Tramp());
void AddOurPulse()
{
if (GetModuleHandle("eqmain.dll")) {
if (*(DWORD*)__heqmain) {
bEnd = false;
if (dwEQMainBase = (DWORD)GetModuleHandle("eqmain.dll")) {
if (Login__Pulse_x)
RemoveLoginPulse();
if (!(Login__Pulse_x = _FindPattern(dwEQMainBase, 0x200000, lpPattern, lpMask)))
{
MessageBox(NULL, "MQ2AutoLogin needs an update.", "Couldn't find Login__Pulse_x", MB_SYSTEMMODAL | MB_OK);
return;
}
if (Login__Pulse_x) {// = (DWORD)dwEQMainBase + 0x11030;
if (dwEQMainBase = *(DWORD*)__heqmain) {
if (LoginController__GiveTime) {
bGotOffsets = false;
if (*(BYTE*)Login__Pulse_x != 0xe9) {
bLoginCheckDone = false;
EzDetourwName(Login__Pulse_x, &Login::Pulse_Detour, &Login::Pulse_Tramp,"Login__Pulse_x");
}
}
}
if (!bInGame && !bSwitchServer && !dwTime)
......@@ -1140,27 +1110,10 @@ PLUGIN_API VOID InitializePlugin(VOID)
}
}
void RemoveLoginPulse()
{
if (Login__Pulse_x) {
if (!IsBadReadPtr((PVOID)Login__Pulse_x, 4)) {
RemoveDetour(Login__Pulse_x);
Login__Pulse_x = 0;
}
else {
DeleteDetour(Login__Pulse_x);
Login__Pulse_x = 0;
}
}
if (dwEQMainBase)
dwEQMainBase = 0;
bGotOffsets = false;
bEnd = false;
}
PLUGIN_API VOID ShutdownPlugin(VOID)
{
RemoveLoginPulse();
RemoveCommand("/switchserver");
RemoveCommand("/switchcharacter");
RemoveCommand("/relog");
......@@ -1173,7 +1126,13 @@ PLUGIN_API VOID ShutdownPlugin(VOID)
RemoveDetour( wpps );
LoginReset();
}
void RemovePulse()
{
if(dwEQMainBase)
dwEQMainBase = 0;
if(bGotOffsets)
bGotOffsets = false;
}
PLUGIN_API VOID SetGameState(DWORD GameState)
{
bEndAfterCharSelect = GetPrivateProfileInt( "Settings", "EndAfterCharSelect", 0, INIFileName ) == 1;
......@@ -1184,18 +1143,17 @@ PLUGIN_API VOID SetGameState(DWORD GameState)
{
//well well well... what do u know... it's loaded...
//ok fine that means we wont get any frontload notification, so lets fake it
if(!Login__Pulse_x)
if(!LoginController__GiveTime)
AddOurPulse();
}
}
if (GameState == GAMESTATE_POSTFRONTLOAD)
} else if (GameState == GAMESTATE_POSTFRONTLOAD)
{
//we know eqmain.dll is loaded now...
if(!Login__Pulse_x)
if(!LoginController__GiveTime)
AddOurPulse();
} else if(GameState == GAMESTATE_CHARSELECT)
{
RemoveLoginPulse();
RemovePulse();
if (dwServerID) {
dwServerID = 0;
if (!bSwitchChar) {
......@@ -1206,7 +1164,6 @@ PLUGIN_API VOID SetGameState(DWORD GameState)
}
else if(GameState == GAMESTATE_INGAME)
{
RemoveLoginPulse();
bInGame = true;
}
}
......@@ -1244,8 +1201,7 @@ PLUGIN_API VOID OnPulse(VOID)
if (GetGameState() == GAMESTATE_INGAME) {
if (retrylogincounter)
retrylogincounter = 0;
}
if (GetGameState() == GAMESTATE_CHARSELECT) {
} else if (GetGameState() == GAMESTATE_CHARSELECT) {
//fix for the stuck at char select "Loading Characters" bug.
BugTimer++;
if (BugTimer > 100 && retrylogincounter==0) {
......@@ -1340,6 +1296,10 @@ PLUGIN_API VOID OnPulse(VOID)
WriteChatf( "\ayAutologin now ended... press HOME to Re-Enable.", szNewChar );
}
}
else if (GetGameState() == GAMESTATE_PRECHARSELECT) {
dwEQMainBase = *(DWORD*)__heqmain;
LoginPulse();
}
}
void SwitchCharacter(PCHAR szName)
......
......@@ -612,24 +612,6 @@ void AutoSizeCmd(PSPAWNINFO pLPlayer, char* szLine)
}
}
// credit: radioactiveman/bunny771 ----------------------------------------
bool bDataCompare(const unsigned char* pucData, const unsigned char* pucMask, const char* szMask)
{
for (; *szMask; ++szMask, ++pucData, ++pucMask)
if (*szMask == 'x' && *pucData != *pucMask)
return false;
return (*szMask) == NULL;
}
unsigned long ulFindPattern(unsigned long ulAddress, unsigned long ulLen, unsigned char* pucMask, char* szMask)
{
for (unsigned long i = 0; i < ulLen; i++)
if (bDataCompare((unsigned char*)(ulAddress + i), pucMask, szMask))
return (unsigned long)(ulAddress + i);
return 0;
}
// ------------------------------------------------------------------------
PLUGIN_API void InitializePlugin()
{
addrChangeHeight = PlayerZoneClient__ChangeHeight;
......
......@@ -12,7 +12,7 @@ PreSetup("MQ2Camera");
#include <algorithm>
using namespace std;
namespace
{
float s_origZoomCameraMaxDistance = 0.0;
......@@ -20,7 +20,7 @@ namespace
bool s_initialized = false;
//.text:006646B1 loc_6646B1: ; CODE XREF: CEverQuest::MouseWheelScrolled(int)+4Dj
//.text:006646B1 loc_6646B1: ; CODE XREF: CEverQuest::MouseWheelScrolled(int)+4D?j
//.text:006646B1 mov eax, dword_F32A3C
//.text:006646B6 fld dword ptr [eax+34h]
//.text:006646B9 fstp [esp+20h+var_1C]
......@@ -77,7 +77,7 @@ namespace
//.text:005C5B32 push 0
//.text:005C5B34 call dword ptr [eax+34h]
//.text:005C5B37
//.text:005C5B37 loc_5C5B37: ; CODE XREF: CDisplay::SetViewActor(CActorInterface *)+Ej
//.text:005C5B37 loc_5C5B37: ; CODE XREF: CDisplay::SetViewActor(CActorInterface *)+E?j
//.text:005C5B37 mov ecx, [esp+1Ch+arg_0]
//.text:005C5B3B mov CActorInterface * ViewActor, ecx
//.text:005C5B41 test ecx, ecx
......@@ -103,27 +103,6 @@ public:
FUNCTION_AT_ADDRESS(void CDisplay_MQ2Camera_Extension::SetViewActor(CActorInterface*), CDisplay__SetViewActor_Offset);
inline bool DataCompare(const unsigned char* pData, const unsigned char* bMask, const char* szMask)
{
for (; *szMask; ++szMask, ++pData, ++bMask)
{
if (*szMask == 'x' && *pData != *bMask)
return false;
}
return (*szMask) == 0;
}
unsigned long FindPattern(unsigned long dwAddress, unsigned long dwLen, const unsigned char* bMask, const char* szMask)
{
for (unsigned long i = 0; i < dwLen; i++)
{
if (DataCompare((unsigned char*)(dwAddress + i), bMask, szMask))
return (unsigned long)(dwAddress + i);
}
return 0;
}
template <typename T>
T* GetDataPtrAtOffset(DWORD address, int offset)
{
......
......@@ -6090,13 +6090,75 @@ EQLIB_OBJECT CTreeView::~CTreeView(void);
class CVector3
{
public:
EQLIB_OBJECT float CVector3::GetLength(void)const;
//EQLIB_OBJECT float CVector3::GetLength(void)const;
EQLIB_OBJECT float CVector3::NormalizeAndReturnLength(void);
EQLIB_OBJECT void CVector3::Normalize(void);
EQLIB_OBJECT void CVector3::Set(float x, float y, float z) {
EQLIB_OBJECT void CVector3::Set(float x, float y, float z)
{
X = x;
Y = y;
Z = z;
}
inline CVector3& operator-=(const CVector3& vec)
{
X -= vec.X;
Y -= vec.Y;
Z -= vec.Z;
return *this;
}
inline CVector3& operator+=(const CVector3& vec)
{
X += vec.X;
Y += vec.Y;
Z += vec.Z;
return *this;
}
inline void Scale(float val)
{
X *= val;
Y *= val;
Z *= val;
}
inline CVector3 operator*(float val)const
{
CVector3 ret(*this);
ret.Scale(val);
return ret;
}
EQLIB_OBJECT void SetMax()
{
X = Y = Z = 3.402823466e+38F;
}
EQLIB_OBJECT float GetLengthSquared()const
{
return ((X * X) + (Y * Y) + (Z * Z));
}
EQLIB_OBJECT float GetLength()const
{
return sqrtf(GetLengthSquared());
}
EQLIB_OBJECT CVector3 operator-()const
{
CVector3 res;
res.Set(-X, -Y, -Z);
return res;
}
EQLIB_OBJECT CVector3 operator-(const CVector3& vec) const
{
CVector3 res;
res.Set(X - vec.X, Y - vec.Y, Z - vec.Z);
return res;
}
EQLIB_OBJECT CVector3 operator+(const CVector3& vec)const
{
CVector3 res;
res.Set(vec.X + X, vec.Y + Y, vec.Z + Z);
return res;
}
EQLIB_OBJECT float GetDistanceSquared(const CVector3& vec)const
{
CVector3 Delta = *this - vec;
return Delta.GetLengthSquared();
}
float X;
float Y;
......
This diff is collapsed.
......@@ -231,115 +231,114 @@ VFTABLE
// actual size 0x1E8 in Jan 8 2018 Test (see 0x8D7A3D) - eqmule
// actual size 0x1E0 in Feb 12 2018 Test (see 0x9E131B) - eqmule
// actual size 0x1F0 in Feb 23 2018 Test (see 0x9E2C6B) - eqmule
// actual size 0x1F8 in Mar 9 2018 Test (see 0x9E159B) - eqmule
// actual size 0x1F8 in Apr 9 2018 Test (see 0x91D8AD) - eqmule
#define CXW_NO_VTABLE \
CXW_NO_VTABLE_BEGIN \
/*0x001C*/ struct _CXSTR* WindowText; /* CXWnd__GetWindowTextA_x has this one */ \
/*0x0020*/ bool bRightAnchoredToLeft; \
/*0x0021*/ bool bClipToParent; \
/*0x0022*/ bool dShow; \
/*0x0024*/ RECT ClipRectScreen; \
/*0x0034*/ int BlinkState; \
/*0x0038*/ COLORREF BGColor; /* DO NOT CHNAGE THIS TO AN ARGBCOLOR, it will break the padding since its a union that has bytes in it. */ \
/*0x003C*/ tagSIZE MaxClientSize; \
/*0x0044*/ bool bClientClipRectChanged; \
/*0x0048*/ int BottomOffset; \
/*0x004C*/ RECT IconRect; \
/*0x005C*/ RECT ClipRectClient; \
/*0x006C*/ bool Clickable; /* found in CChatWindow__CChatWindow_x and the button handlers */ \
/*0x006D*/ bool bBottomAnchoredToTop; \
/*0x006E*/ bool Fades; \
/*0x006F*/ BYTE FadeToAlpha; /* found in CSidlScreenWnd__StoreIniInfo_x */ \
/*0x0070*/ bool bClickThrough; /* if true you can click through the window, well it doesnt work for our chatwindow (yet) so more work is needed to figure out why */ \
/*0x0074*/ UINT FadeDuration; \
/*0x0078*/ bool bTiled; \
/*0x0079*/ bool bUseInLayoutHorizontal; \
/*0x007A*/ bool bClientRectChanged; \
/*0x001C*/ bool Minimized; \
/*0x0020*/ COLORREF DisabledBackground; \
/*0x0024*/ COLORREF CRNormal; /* found in OnProcessFrame */ \
/*0x0028*/ DWORD FadeDelay; \
/*0x002C*/ bool bRightAnchoredToLeft; \
/*0x0030*/ int ParentAndContextMenuArrayIndex; \
/*0x0034*/ bool MouseOver; /* found in CXWnd__SetMouseOver_x */ \
/*0x0035*/ bool bClipToParent; \
/*0x0038*/ DWORD XMLIndex; \
/*0x003C*/ bool bTiled; \
/*0x0040*/ RECT IconRect; \
/*0x0050*/ bool bBottomAnchoredToTop; \
/*0x0051*/ BYTE bResizableMask; \
/*0x0054*/ int TopOffset; \
/*0x0058*/ UINT FadeDuration; \
/*0x005C*/ ArrayClass2_RO<UINT> RuntimeTypes; /* Size 0x1c */ \
/*0x0078*/ bool Faded; \
/*0x0079*/ BYTE TargetAlpha; \
/*0x007A*/ bool bHCenterTooltip; \
/*0x007C*/ RECT OldLocation; \
/*0x008C*/ UINT BlinkFadeStartTime; \
/*0x0090*/ bool bAction; \
/*0x0094*/ struct _CSIDLWND* pParentWindow; /* CXWnd__IsDescendantOf_x has this one, If this is NULL, coordinates are absolute... */ \
/*0x0098*/ bool bIsTransitioning; \
/*0x009C*/ struct _CXSTR* DataStr; \
/*0x00A0*/ bool Faded; \
/*0x00A1*/ bool bActive; \
/*0x00A8*/ __int64 Data; \
/*0x00B0*/ bool bKeepOnScreen; \
/*0x00B1*/ bool bLeftAnchoredToLeft; \
/*0x00B4*/ COLORREF DisabledBackground; \
/*0x00B8*/ bool MouseOver; /* found in CXWnd__SetMouseOver_x */ \
/*0x00BC*/ int DeleteCount; \
/*0x00C0*/ struct _CXSTR* XMLToolTip; /* found in CSidlManager__CreateLabel_x */ \
/*0x00C4*/ bool bTopAnchoredToTop; \
/*0x00C8*/ ArrayClass2_RO<UINT> RuntimeTypes; /* Size 0x1c */ \
/*0x00E4*/ bool ValidCXWnd; /* IsValid has this one */ \
/*0x00E5*/ bool bMarkedForDelete; \
/*0x00E8*/ DWORD BackgroundDrawType; \
/*0x00EC*/ bool bShowClickThroughMenuItem; /*shows/hides the click through option on the window menu*/ \
/*0x00F0*/ int TopOffset; \
/*0x00F4*/ struct _CSIDLWND* pWndFocusOther; \
/*0x00F8*/ void* pTipTextObject; \
/*0x00FC*/ DWORD WindowStyle; /* bit 1 - vertical scroll, bit 2 - horizontal scroll, bit 4 - title bar?, bit 8 - border */ \
/*0x0100*/ bool bHCenterTooltip; \
/*0x0104*/ UINT BlinkFadeDuration; \
/*0x0108*/ bool bBringToTopWhenClicked; \
/*0x010C*/ UINT BlinkFadeFreq; \
/*0x0110*/ bool bFullyScreenClipped; \
/*0x0111*/ BYTE bResizableMask; \
/*0x0112*/ bool Unlockable; /* found in CSidlScreenWnd__LoadIniInfo_x related to Locked */ \
/*0x0114*/ DWORD XMLIndex; \
/*0x0118*/ BYTE TargetAlpha; \
/*0x0119*/ bool bCaptureTitle; \
/*0x011C*/ UINT TransitionStartTick; \
/*0x0120*/ bool bIsParentOrContextMenuWindow; \
/*0x0124*/ RECT ClientRect; \
/*0x0134*/ int HScrollPos; \
/*0x0138*/ bool bClickThroughMenuItemStatus; /* on/off */ \
/*0x013C*/ struct _CXSTR* Tooltip; /* found in CSidlManager__CreateLabel_x */ \
/*0x0140*/ BYTE Alpha; \
/*0x0144*/ DWORD BGType; /* found in CSidlScreenWnd__StoreIniInfo_x */ \
/*0x008C*/ bool Locked; /* found in CSidlScreenWnd__LoadIniInfo_x */ \
/*0x0090*/ struct _CSIDLWND* pParentWindow; /* CXWnd__IsDescendantOf_x has this one, If this is NULL, coordinates are absolute... */ \
/*0x0094*/ bool bMaximizable; \
/*0x0098*/ int BlinkState; \
/*0x009C*/ bool bKeepOnScreen; \
/*0x00A0*/ void *pFont; \
/*0x00A4*/ void* pTextObject; \
/*0x00A8*/ RECT ClipRectScreen; \
/*0x00B8*/ tagSIZE MaxClientSize; \
/*0x00C0*/ BYTE FadeToAlpha; /* found in CSidlScreenWnd__StoreIniInfo_x */ \
/*0x00C4*/ RECT Location; \
/*0x00D4*/ DWORD BackgroundDrawType; \
/*0x00D8*/ int HScrollMax; \
/*0x00DC*/ bool Fades; \
/*0x00DD*/ bool bEscapableLocked; \
/*0x00DE*/ bool bNeedsSaving; /* will be true if you move or resize the window */ \
/*0x00E0*/ RECT TransitionRect; \
/*0x00F0*/ tagSIZE MinClientSize; \
/*0x00F8*/ bool bActive; \
/*0x00FC*/ int RightOffset; \
/*0x0100*/ DWORD LastTimeMouseOver; \
/*0x0104*/ bool ValidCXWnd; /* IsValid has this one */ \
/*0x0108*/ int HScrollPos; \
/*0x010C*/ bool bClientClipRectChanged; \
/*0x0110*/ UINT BlinkFadeDuration; \
/*0x0114*/ bool Unlockable; /* found in CSidlScreenWnd__LoadIniInfo_x related to Locked */ \
/*0x0118*/ RECT ClientRect; \
/*0x0128*/ bool bClientRectChanged; \
/*0x012C*/ void* pTipTextObject; \
/*0x0130*/ UINT LastBlinkFadeRefreshTime; \
/*0x0134*/ UINT TransitionDuration; \
/*0x0138*/ bool bBorder; \
/*0x0139*/ bool bAction; \
/*0x013C*/ DWORD WindowStyle; /* bit 1 - vertical scroll, bit 2 - horizontal scroll, bit 4 - title bar?, bit 8 - border */ \
/*0x0140*/ bool bClickThroughMenuItemStatus; /* on/off */ \
/*0x0141*/ bool Clickable; /* found in CChatWindow__CChatWindow_x and the button handlers */ \
/*0x0144*/ COLORREF BGColor; /* DO NOT CHNAGE THIS TO AN ARGBCOLOR, it will break the padding since its a union that has bytes in it. */ \
/*0x0148*/ int BlinkDuration; \
/*0x014C*/ bool Locked; /* found in CSidlScreenWnd__LoadIniInfo_x */ \
/*0x0150*/ void* pTextObject; \
/*0x0154*/ void *TitlePiece; \
/*0x0158*/ tagSIZE MinClientSize; \
/*0x0160*/ UINT LastBlinkFadeRefreshTime; \
/*0x0164*/ bool bMaximized; \
/*0x0168*/ COLORREF CRNormal; /* found in OnProcessFrame */ \
/*0x016C*/ DWORD LastTimeMouseOver; \
/*0x0170*/ bool bBorder2; \
/*0x0174*/ int HScrollMax; \
/*0x0178*/ DWORD FadeDelay; \
/*0x014C*/ int managerArrayIndex; \
/*0x0150*/ bool dShow; \
/*0x0154*/ void *TitlePiece2; \
/*0x0158*/ bool CloseOnESC; /* found in CSidlScreenWnd__StoreIniInfo_x, close when ESC is pressed */ \
/*0x015C*/ void *TitlePiece; \
/*0x0160*/ int VScrollPos; \
/*0x0164*/ DWORD BGType; /* found in CSidlScreenWnd__StoreIniInfo_x */ \
/*0x0168*/ bool bFullyScreenClipped; \
/*0x016C*/ struct _CXSTR* XMLToolTip; /* found in CSidlManager__CreateLabel_x */ \
/*0x0170*/ bool bLeftAnchoredToLeft; \
/*0x0171*/ bool bTopAnchoredToTop; \
/*0x0174*/ struct _CXSTR* WindowText; /* CXWnd__GetWindowTextA_x has this one */ \
/*0x0178*/ bool bIsTransitioning; \
/*0x0179*/ BYTE FadeAlpha; \
/*0x017A*/ bool bBringToTopWhenClicked; \
/*0x017C*/ void *IconTextureAnim; \
/*0x0180*/ void *pFont; \
/*0x0184*/ int ParentAndContextMenuArrayIndex; \
/*0x0188*/ bool bEscapableLocked; \
/*0x0189*/ bool bNeedsSaving; /* will be true if you move or resize the window */ \
/*0x018A*/ BYTE FadeAlpha; \
/*0x018B*/ bool Enabled; \
/*0x018C*/ void *pLayoutStrategy; \
/*0x0190*/ int LeftOffset; \
/*0x0194*/ bool bBorder; \
/*0x0198*/ RECT Location; \
/*0x01A8*/ int VScrollMax; \
/*0x01AC*/ bool bMaximizable; \
/*0x01AD*/ bool CloseOnESC; /* found in CSidlScreenWnd__StoreIniInfo_x, close when ESC is pressed */ \