You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
269 lines
6.9 KiB
269 lines
6.9 KiB
// 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 = (DWORD *)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 = (DWORD)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 = (DWORD *)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, AF_MEDGRAY); |
|
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); |
|
}
|
|
|