mirror of
https://github.com/galaxyhaxz/devilution
synced 2025-02-22 12:34:59 +00:00
296 lines
6.6 KiB
C++
296 lines
6.6 KiB
C++
// ref: 0x1000FDEE
|
|
void __fastcall Title_BlitTitleBuffer(HWND hWnd)
|
|
{
|
|
_DWORD *v2; // edi
|
|
int v3; // eax
|
|
HANDLE v4; // esi
|
|
struct tagRECT Rect; // [esp+Ch] [ebp-18h]
|
|
HWND hWnda; // [esp+20h] [ebp-4h]
|
|
|
|
v2 = (_DWORD *)GetWindowLongA(hWnd, -21);
|
|
hWnda = GetDlgItem(hWnd, 1043);
|
|
if ( IsWindowVisible(hWnd) && hWnda && v2 && *v2 && titlePHTrans[0] )
|
|
{
|
|
v3 = titleTransIdx + 1;
|
|
titleTransIdx = v3;
|
|
if ( !titlePHTrans[v3] || v3 >= 30 )
|
|
titleTransIdx = 0;
|
|
GetWindowRect(hWnda, &Rect);
|
|
ScreenToClient(hWnd, (LPPOINT)&Rect);
|
|
ScreenToClient(hWnd, (LPPOINT)&Rect.right);
|
|
v4 = GetPropA(hWnd, "TITLE_BUFFER");
|
|
if ( v4 )
|
|
{
|
|
SBltROP3(
|
|
*(void **)v4,
|
|
(void *)(Rect.left + *v2 + Rect.top * v2[1]),
|
|
*((_DWORD *)v4 + 1),
|
|
*((_DWORD *)v4 + 2),
|
|
*((_DWORD *)v4 + 1),
|
|
v2[1],
|
|
0,
|
|
0xCC0020u);
|
|
STransBlt(*(void **)v4, 0, 0, *((_DWORD *)v4 + 1), (HANDLE)titlePHTrans[titleTransIdx]);
|
|
InvalidateRect(hWnda, 0, 0);
|
|
}
|
|
}
|
|
}
|
|
// 1002A58C: using guessed type int titleTransIdx;
|
|
|
|
// ref: 0x1000FEED
|
|
void __cdecl Title_DeletePhTrans()
|
|
{
|
|
int *v0; // esi
|
|
|
|
v0 = (int *)titlePHTrans;
|
|
do
|
|
{
|
|
if ( *v0 )
|
|
{
|
|
STransDelete((HANDLE)*v0);
|
|
*v0 = 0;
|
|
}
|
|
++v0;
|
|
}
|
|
while ( (signed int)v0 < (signed int)&titlePHTrans[30] );
|
|
}
|
|
|
|
// ref: 0x1000FF0F
|
|
void __fastcall Title_FreeTransMem(HWND hWnd)
|
|
{
|
|
void **v2; // eax MAPDST
|
|
void *v4; // eax
|
|
|
|
Title_DeletePhTrans();
|
|
v2 = (void **)RemovePropA(hWnd, "TITLE_BUFFER");
|
|
if ( v2 )
|
|
{
|
|
v4 = *v2;
|
|
if ( v4 )
|
|
{
|
|
SMemFree(v4, "C:\\Src\\Diablo\\DiabloUI\\Title.cpp", 114, 0);
|
|
*v2 = 0;
|
|
}
|
|
SMemFree(v2, "C:\\Src\\Diablo\\DiabloUI\\Title.cpp", 117, 0);
|
|
}
|
|
}
|
|
|
|
// ref: 0x1000FF51
|
|
void __fastcall Title_SetTitleBMP(HWND hWnd)
|
|
{
|
|
HWND v1; // eax MAPDST
|
|
_DWORD *v2; // esi
|
|
void *v3; // eax
|
|
struct tagRECT Rect; // [esp+0h] [ebp-18h]
|
|
|
|
Title_FreeTransMem(hWnd);
|
|
v1 = GetDlgItem(hWnd, 1043);
|
|
if ( v1 )
|
|
{
|
|
GetClientRect(v1, &Rect);
|
|
v2 = (unsigned int *)SMemAlloc(0xCu, "C:\\Src\\Diablo\\DiabloUI\\Title.cpp", 134, 0);
|
|
v3 = SMemAlloc(Rect.right * Rect.bottom, "C:\\Src\\Diablo\\DiabloUI\\Title.cpp", 136, 8);
|
|
*v2 = (unsigned int)v3;
|
|
v2[1] = Rect.right;
|
|
v2[2] = Rect.bottom;
|
|
SDlgSetBitmapI(v1, 0, 0, -1, 1, v3, 0, Rect.right, Rect.bottom, -1);
|
|
SetPropA(hWnd, "TITLE_BUFFER", v2);
|
|
}
|
|
}
|
|
|
|
// ref: 0x1000FFE8
|
|
void __fastcall Title_LoadTitleImage(HWND hWnd, const char *pszFileName)
|
|
{
|
|
int v3; // edi
|
|
_DWORD *v4; // eax
|
|
_DWORD *v5; // esi
|
|
int v6; // ebx
|
|
int a5[4]; // [esp+8h] [ebp-20h]
|
|
int data[2]; // [esp+18h] [ebp-10h]
|
|
HANDLE *phTransOut; // [esp+20h] [ebp-8h]
|
|
BYTE *pBuffer; // [esp+24h] [ebp-4h]
|
|
|
|
v3 = 0;
|
|
pBuffer = 0;
|
|
local_LoadArtImage(pszFileName, &pBuffer, (DWORD *)data);
|
|
v4 = (unsigned int *)GetPropA(hWnd, "TITLE_BUFFER");
|
|
v5 = v4;
|
|
if ( pBuffer )
|
|
{
|
|
if ( v4 )
|
|
{
|
|
v6 = data[1] / v4[2];
|
|
if ( v6 > 30 )
|
|
v6 = 30;
|
|
if ( v6 > 0 )
|
|
{
|
|
phTransOut = (HANDLE *)titlePHTrans;
|
|
do
|
|
{
|
|
a5[0] = 0;
|
|
a5[2] = v5[1] - 1;
|
|
a5[1] = v3 * v5[2];
|
|
a5[3] = v5[2] + a5[1] - 1;
|
|
STransCreateI(pBuffer, v5[1], v5[2], 8, (int)a5, 16777466, phTransOut);
|
|
++phTransOut;
|
|
++v3;
|
|
}
|
|
while ( v3 < v6 );
|
|
}
|
|
}
|
|
SMemFree(pBuffer, "C:\\Src\\Diablo\\DiabloUI\\Title.cpp", 197, 0);
|
|
}
|
|
titleTransIdx = 0;
|
|
}
|
|
// 1002A58C: using guessed type int titleTransIdx;
|
|
|
|
// ref: 0x1001009E
|
|
void __fastcall Title_LoadImgSetTimer(HWND hWnd, const char *pszFileName)
|
|
{
|
|
Title_SetTitleBMP(hWnd);
|
|
Title_LoadTitleImage(hWnd, pszFileName);
|
|
Title_BlitTitleBuffer(hWnd);
|
|
SDlgSetTimer((int)hWnd, 2, 55, Title_BlitTitleBufFnc);
|
|
}
|
|
|
|
// ref: 0x100100CB
|
|
void __stdcall Title_BlitTitleBufFnc(int hWnd, int a2, int a3, int a4)
|
|
{
|
|
Title_BlitTitleBuffer((HWND)hWnd);
|
|
}
|
|
|
|
// ref: 0x100100DC
|
|
void __cdecl Title_cpp_init()
|
|
{
|
|
Title_cpp_float = Title_cpp_float_value;
|
|
}
|
|
// 1001F47C: using guessed type int Title_cpp_float_value;
|
|
// 1002A588: using guessed type int Title_cpp_float;
|
|
|
|
// ref: 0x100100E7
|
|
void __fastcall Title_KillTitleTimer(HWND hWnd)
|
|
{
|
|
HWND v1; // esi
|
|
|
|
v1 = hWnd;
|
|
SDlgKillTimer((int)hWnd, 2);
|
|
Title_FreeTransMem(v1);
|
|
}
|
|
|
|
// ref: 0x100100FA
|
|
BOOL __stdcall UiTitleDialog(int a1)
|
|
{
|
|
int v1; // eax
|
|
|
|
artfont_LoadAllFonts();
|
|
v1 = (int)SDrawGetFrameWindow(NULL);
|
|
SDlgDialogBoxParam(ghUiInst, "TITLESCREEN_DIALOG", v1, Title_MainProc, a1);
|
|
return 1;
|
|
}
|
|
// 10010382: using guessed type _DWORD __stdcall SDrawGetFrameWindow();
|
|
|
|
// ref: 0x10010126
|
|
LRESULT __stdcall Title_MainProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
HWND v5; // eax
|
|
|
|
if ( uMsg <= 0x111 )
|
|
{
|
|
if ( uMsg != 273 )
|
|
{
|
|
if ( uMsg != 2 )
|
|
{
|
|
if ( uMsg == 135 )
|
|
return 4;
|
|
if ( uMsg != 256 )
|
|
{
|
|
if ( uMsg > 0x103 )
|
|
{
|
|
if ( uMsg <= 0x105 )
|
|
{
|
|
v5 = (HWND)SDrawGetFrameWindow(NULL);
|
|
SendMessageA(v5, uMsg, wParam, lParam);
|
|
}
|
|
else if ( uMsg == 272 )
|
|
{
|
|
Title_LoadAllTitleImgs(hWnd, lParam);
|
|
PostMessageA(hWnd, 0x7E8u, 0, 0);
|
|
return 1;
|
|
}
|
|
}
|
|
return (LRESULT)SDlgDefDialogProc(hWnd, uMsg, (HDC)wParam, (HWND)lParam);
|
|
}
|
|
goto LABEL_25;
|
|
}
|
|
Title_KillTimerAndFree(hWnd);
|
|
return (LRESULT)SDlgDefDialogProc(hWnd, uMsg, (HDC)wParam, (HWND)lParam);
|
|
}
|
|
goto LABEL_25;
|
|
}
|
|
if ( uMsg != 275 )
|
|
{
|
|
if ( uMsg != 513 && uMsg != 516 )
|
|
{
|
|
if ( uMsg == 528 )
|
|
{
|
|
if ( (_WORD)wParam == 513 || (_WORD)wParam == 516 )
|
|
Title_KillAndFadeDlg(hWnd);
|
|
}
|
|
else if ( uMsg == 2024 )
|
|
{
|
|
if ( !Fade_CheckRange5() )
|
|
Fade_SetFadeTimer((int)hWnd);
|
|
return 0;
|
|
}
|
|
return (LRESULT)SDlgDefDialogProc(hWnd, uMsg, (HDC)wParam, (HWND)lParam);
|
|
}
|
|
LABEL_25:
|
|
Title_KillAndFadeDlg(hWnd);
|
|
return 0;
|
|
}
|
|
if ( wParam == 1 )
|
|
goto LABEL_25;
|
|
return 0;
|
|
}
|
|
// 1001037C: using guessed type int __stdcall SDlgDefDialogProc(_DWORD, _DWORD, _DWORD, _DWORD);
|
|
// 10010382: using guessed type _DWORD __stdcall SDrawGetFrameWindow();
|
|
|
|
// ref: 0x10010235
|
|
void __fastcall Title_KillTimerAndFree(HWND hWnd)
|
|
{
|
|
void **v2; // eax
|
|
|
|
Title_KillTitleTimer(hWnd);
|
|
Doom_DeleteFreeProcs(hWnd, titlemsgtbl);
|
|
v2 = (void **)GetWindowLongA(hWnd, -21);
|
|
local_FreeMemPtr(v2);
|
|
}
|
|
|
|
// ref: 0x1001025A
|
|
void __fastcall Title_LoadAllTitleImgs(HWND hWnd, int time)
|
|
{
|
|
DWORD *v4; // edi
|
|
|
|
v4 = local_AllocWndLongData();
|
|
SetWindowLongA(hWnd, -21, (LONG)v4);
|
|
if ( v4 )
|
|
{
|
|
local_LoadArtWithPal(hWnd, 0, &nullcharacter, -1, 1, "ui_art\\title.pcx", (BYTE **)v4, v4 + 1, 0);
|
|
Fade_NoInputAndArt(hWnd, 0);
|
|
}
|
|
Doom_ParseWndProc3(hWnd, titlemsgtbl, 3);
|
|
Title_LoadImgSetTimer(hWnd, "ui_art\\logo.pcx");
|
|
if ( time )
|
|
SDlgSetTimer((int)hWnd, 1, 1000 * time, 0);
|
|
else
|
|
SDlgSetTimer((int)hWnd, 1, 5000, 0);
|
|
}
|
|
|
|
// ref: 0x100102D7
|
|
void __fastcall Title_KillAndFadeDlg(HWND hWnd)
|
|
{
|
|
Fade_Range5SetZero();
|
|
SDlgKillTimer((int)hWnd, 1);
|
|
Fade_UpdatePaletteRange(10);
|
|
SDlgEndDialog(hWnd, (void *)HANDLE_FLAG_INHERIT);
|
|
}
|