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.
2202 lines
63 KiB
2202 lines
63 KiB
//HEADER_GOES_HERE |
|
|
|
#include "../types.h" |
|
|
|
|
|
|
|
// 20 frames per second |
|
// if increased for smoother mouse movement, the animation rate has to be throttled |
|
#define MENU_FRAME_RATE 20 |
|
|
|
|
|
|
|
char chr_name_str[16]; |
|
int playmovie = 0; |
|
|
|
// prevent calling from the DLL |
|
void __cdecl UiDestroy() { return; } |
|
BOOL __stdcall UiTitleDialog(int a1) { return 0; } |
|
void __cdecl UiInitialize() { return ; } |
|
BOOL __stdcall UiCopyProtError(int *pdwResult) { return 0; } |
|
void __stdcall UiAppActivate(BOOL bActive) { return; } |
|
BOOL __fastcall UiValidPlayerName(char *name) { return 0; } /* check __stdcall */ |
|
BOOL __stdcall UiSelHeroMultDialog(BOOL (__stdcall *fninfo)(BOOL (__stdcall *fninfofunc)(_uiheroinfo *)), BOOL (__stdcall *fncreate)(_uiheroinfo *), BOOL (__stdcall *fnremove)(_uiheroinfo *), BOOL (__stdcall *fnstats)(int, _uidefaultstats *), int *dlgresult, int *a6, char *name) { return 0; } |
|
BOOL __stdcall UiSelHeroSingDialog(BOOL (__stdcall *fninfo)(BOOL (__stdcall *fninfofunc)(_uiheroinfo *)), BOOL (__stdcall *fncreate)(_uiheroinfo *), BOOL (__stdcall *fnremove)(_uiheroinfo *), BOOL (__stdcall *fnstats)(int, _uidefaultstats *), int *dlgresult, char *name, int *difficulty) { return 0; } |
|
BOOL __stdcall UiCreditsDialog(int a1) { return 0; } |
|
BOOL __stdcall UiMainMenuDialog(char *name, int *pdwResult, void (__stdcall *fnSound)(char *file), int a4) { return 0; } |
|
int __stdcall UiProgressDialog(HWND window, char *msg, int a3, void *fnfunc, int a5) { return 0; } |
|
int __cdecl UiProfileGetString() { return 0; } |
|
void __cdecl UiProfileCallback() { return ; } |
|
void __cdecl UiProfileDraw() { return ; } |
|
BOOL __stdcall UiCategoryCallback(int a1, int a2, int a3, int a4, int a5, _DWORD *a6, _DWORD *a7) { return 0; } |
|
BOOL __stdcall UiGetDataCallback(int game_type, int data_code, void *a3, int a4, int a5) { return 0; } |
|
BOOL __stdcall UiAuthCallback(int a1, char *a2, char *a3, char a4, char *a5, LPSTR lpBuffer, int cchBufferMax) { return 0; } |
|
BOOL __stdcall UiSoundCallback(int a1, int type, int a3) { return 0; } |
|
void __stdcall UiMessageBoxCallback(HWND hWnd, char *lpText, LPCSTR lpCaption, UINT uType) { return ; } |
|
BOOL __stdcall UiDrawDescCallback(int arg0, COLORREF color, LPCSTR lpString, char *a4, int a5, UINT align, time_t a7, HDC *a8) { return 0; } |
|
BOOL __stdcall UiCreateGameCallback(int a1, int a2, int a3, int a4, int a5, int a6) { return 0; } |
|
BOOL __stdcall UiArtCallback(int game_type, unsigned int art_code, PALETTEENTRY *pPalette, void *pBuffer, DWORD dwBuffersize, DWORD *pdwWidth, DWORD *pdwHeight, DWORD *pdwBpp) { return 0; } |
|
int __stdcall UiSelectGame(int a1, _SNETPROGRAMDATA *client_info, _SNETPLAYERDATA *user_info, _SNETUIDATA *ui_info, _SNETVERSIONDATA *file_info, int *a6) { return 0; } |
|
int __stdcall UiSelectProvider(int a1, _SNETPROGRAMDATA *client_info, _SNETPLAYERDATA *user_info, _SNETUIDATA *ui_info, _SNETVERSIONDATA *file_info, int *type) { return 0; } |
|
BOOL __stdcall UiCreatePlayerDescription(_uiheroinfo *info, int mode, char *desc) { return 0; } |
|
void __stdcall UiSetupPlayerInfo(char *infostr, _uiheroinfo *pInfo, int type) { return ; } |
|
void __stdcall UiCreateGameCriteria(_uiheroinfo *pInfo, char *str) { return ; } |
|
BOOL __stdcall UiGetDefaultStats(int pclass, _uidefaultstats *pStats) { return 0; } |
|
BOOL __stdcall UiBetaDisclaimer(int a1) { return 0; } |
|
|
|
/* |
|
* |
|
* custom palettes |
|
* diablo happens to lack my three favorite colors :P |
|
* |
|
* overwrite palette array to use, and shift the string color |
|
* |
|
* |
|
*/ |
|
/* |
|
|
|
|
|
BYTE GreenPal[8][3] = |
|
{ |
|
{ 0xBE, 0xFD, 0x9F }, |
|
{ 0x99, 0xF9, 0x6A }, |
|
{ 0x75, 0xF4, 0x35 }, |
|
{ 0x50, 0xF0, 0x00 }, |
|
{ 0x3F, 0xBC, 0x00 }, |
|
{ 0x2D, 0x87, 0x00 }, |
|
{ 0x1C, 0x53, 0x00 }, |
|
{ 0x0A, 0x1E, 0x00 } |
|
}; |
|
|
|
BYTE PinkPal[8][3] = |
|
{ |
|
{ 0xFD, 0x9F, 0xBE }, |
|
{ 0xF9, 0x6A, 0x99 }, |
|
{ 0xF4, 0x35, 0x75 }, |
|
{ 0xF0, 0x00, 0x50 }, |
|
{ 0xBC, 0x00, 0x3F }, |
|
{ 0x87, 0x00, 0x2D }, |
|
{ 0x53, 0x00, 0x1C }, |
|
{ 0x1E, 0x00, 0x0A } |
|
}; |
|
|
|
BYTE PurplePal[8][3] = |
|
{ |
|
{ 0xBE, 0x9F, 0xDD }, |
|
{ 0x99, 0x6A, 0xD9 }, |
|
{ 0x75, 0x35, 0xD4 }, |
|
{ 0x50, 0x00, 0xD0 }, |
|
{ 0x3F, 0x00, 0x9C }, |
|
{ 0x2D, 0x00, 0x67 }, |
|
{ 0x1C, 0x00, 0x33 }, |
|
{ 0x0A, 0x00, 0x0E } |
|
};*/ |
|
|
|
int __fastcall TEMP_diablo_init_menu(int a1, int bSinglePlayer) |
|
{ |
|
int v2; // esi |
|
int v3; // edi |
|
int v4; // ecx |
|
int pfExitProgram; // [esp+Ch] [ebp-4h] |
|
|
|
v2 = bSinglePlayer; |
|
v3 = a1; |
|
byte_678640 = 1; |
|
while ( 1 ) |
|
{ |
|
pfExitProgram = 0; |
|
dword_5256E8 = 0; |
|
if ( !NetInit(v2, &pfExitProgram) ) |
|
break; |
|
byte_678640 = 0; |
|
if ( v3 ) |
|
{ |
|
InitLevels(); |
|
InitQuests(); |
|
InitPortals(); |
|
InitDungMsgs(myplr); |
|
v4 = WM_DIABLOADGAME; |
|
} |
|
else |
|
{ |
|
v4 = WM_DIABNEWGAME; |
|
} |
|
run_game_loop(v4); |
|
NetClose(); |
|
pfile_create_player_description(0, 0); |
|
if ( !gbRunGameResult ) |
|
goto LABEL_11; |
|
break; |
|
} |
|
gbRunGameResult = pfExitProgram == 0; |
|
LABEL_11: |
|
SNetDestroy(); |
|
return gbRunGameResult; |
|
} |
|
|
|
/////////////////////////////////////////////////////////////////////////////////////// |
|
/////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
int gdwLogoWidth; |
|
int gdwLogoHeight; |
|
void *pPcxLogoImage; |
|
|
|
int gdwFontWidth; |
|
int gdwFontHeight; |
|
void *pPcxFontImage; |
|
unsigned char *pFont; |
|
|
|
int gdwFont2Width; |
|
int gdwFont2Height; |
|
void *pPcxFont2Image; |
|
unsigned char *pFont2; |
|
|
|
int gdwFont3Width; |
|
int gdwFont3Height; |
|
void *pPcxFont3Image; |
|
unsigned char *pFont3; |
|
|
|
int gdwTitleWidth; |
|
int gdwTitleHeight; |
|
void *pPcxTitleImage; |
|
|
|
int gdwHeroWidth; |
|
int gdwHeroHeight; |
|
void *pPcxHeroImage; |
|
|
|
int gdwSHeroWidth; |
|
int gdwSHeroHeight; |
|
void *pPcxSHeroImage; |
|
|
|
int gdwCreditsWidth; |
|
int gdwCreditsHeight; |
|
void *pPcxCreditsImage; |
|
|
|
int gdwCursorWidth; |
|
int gdwCursorHeight; |
|
void *pPcxCursorImage; |
|
|
|
/////////////////////////////////////////////////////////////////////////////////////// |
|
/////////////////////////////////////////////////////////////////////////////////////// |
|
//////// PCX HELPER FUNCTIONS ///////////////////////////////////////////////////// |
|
/////////////////////////////////////////////////////////////////////////////////////// |
|
int bloaded = 0; |
|
|
|
PALETTEENTRY pcxPal[256]; |
|
|
|
void __fastcall LoadPalInMem(PALETTEENTRY *pPal) |
|
{ |
|
int i; // eax |
|
|
|
for(i = 0; i < 256; i++) |
|
{ |
|
orig_palette[i].peFlags = 0; |
|
orig_palette[i].peRed = pPal[i].peRed; |
|
orig_palette[i].peGreen = pPal[i].peGreen; |
|
orig_palette[i].peBlue = pPal[i].peBlue; |
|
} |
|
} |
|
|
|
BOOL __cdecl LoadArtImage(char *pszFile, void **pBuffer, int frames, DWORD *data) |
|
{ |
|
DWORD width; // [esp+44h] [ebp-8h] |
|
DWORD height; // [esp+48h] [ebp-4h] MAPDST |
|
|
|
*pBuffer = NULL; |
|
|
|
if ( !SBmpLoadImage(pszFile, 0, 0, 0, &width, &height, 0) ) |
|
return 0; |
|
*pBuffer = SMemAlloc(height * width, "U:\\DiabloUI\\Ui\\local.cpp", 88); |
|
if ( !SBmpLoadImage(pszFile, NULL, *pBuffer, height * width, 0, 0, 0) ) |
|
return 0; |
|
if ( pBuffer && data ) |
|
{ |
|
data[0] = width; |
|
data[1] = height / frames; |
|
} |
|
return 1; |
|
} |
|
/* |
|
|
|
|
|
// Test sample.pcx to see if it is a PCX |
|
SDL_RWops *rwop; |
|
rwop=SDL_RWFromFile("sample.pcx", "rb"); |
|
if(IMG_isPCX(rwop)) |
|
printf("sample.pcx is a PCX file.\n"); |
|
else |
|
printf("sample.pcx is not a PCX file, or PCX support is not available.\n"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
BOOL __cdecl LoadArtWithPal(char *pszFile, void **pBuffer, int frames, DWORD *data) |
|
{ |
|
DWORD width; // [esp+44h] [ebp-8h] |
|
DWORD height; // [esp+48h] [ebp-4h] MAPDST |
|
|
|
*pBuffer = NULL; |
|
|
|
if ( !SBmpLoadImage(pszFile, 0, 0, 0, &width, &height, 0) ) |
|
return 0; |
|
*pBuffer = SMemAlloc(height * width, "U:\\DiabloUI\\Ui\\local.cpp", 88); |
|
if ( !SBmpLoadImage(pszFile, pcxPal, *pBuffer, height * width, 0, 0, 0) ) |
|
return 0; |
|
|
|
LoadPalInMem(pcxPal); |
|
lpDDPalette->SetEntries(0, 0, 256, orig_palette); |
|
|
|
if ( pBuffer && data ) |
|
{ |
|
data[0] = width; |
|
data[1] = height / frames; |
|
} |
|
return 1; |
|
} |
|
|
|
|
|
|
|
void DrawArtImage(int SX, int SY, int SW, int SH, int nFrame, void *pBuffer) |
|
{ |
|
BYTE *src = (BYTE *)pBuffer+(SW * SH * nFrame); |
|
BYTE *dst = (BYTE *)&gpBuffer->row[SY].pixels[SX]; |
|
|
|
for(int i = 0; i < SH; i++, src += SW, dst += 768) |
|
{ |
|
for(int j = 0; j < SW; j++) |
|
{ |
|
dst[j] = src[j]; |
|
} |
|
} |
|
} |
|
|
|
void DrawArtWithMask(int SX, int SY, int SW, int SH, int nFrame, BYTE bMask, void *pBuffer) |
|
{ |
|
BYTE *src = (BYTE *)pBuffer+(SW * SH * nFrame); |
|
BYTE *dst = (BYTE *)&gpBuffer->row[SY].pixels[SX]; |
|
|
|
for(int i = 0; i < SH; i++, src += SW, dst += 768) |
|
{ |
|
for(int j = 0; j < SW; j++) |
|
{ |
|
if(src[j] != bMask) |
|
dst[j] = src[j]; |
|
} |
|
} |
|
} |
|
|
|
int __fastcall GetPCXFontWidth(char *str, BYTE *font) |
|
{ |
|
int len; // eax |
|
unsigned __int8 i; // bl |
|
BYTE chr; // bl |
|
int width; // esi |
|
|
|
len = 0; |
|
for ( i = *str; *str; i = *str ) |
|
{ |
|
chr = font[i + 2]; |
|
if ( chr ) |
|
width = chr; |
|
else |
|
width = *font; |
|
len += width; |
|
++str; |
|
} |
|
return len; |
|
} |
|
|
|
void DrawPCXString(int x, int y, int w, int h, char *str, BYTE *font, void *pBuff) |
|
{ |
|
int i; |
|
int len = 0; |
|
for(i = 0; i < strlen(str); i++) |
|
{ |
|
DrawArtWithMask(x+len, y, w, h, str[i], 32, pBuff); |
|
//DrawPCX(x+len, y, str[i], 32); |
|
if(font[str[i]+2]) |
|
len += font[str[i]+2]; |
|
else |
|
len += *font; |
|
} |
|
} |
|
|
|
void ShiftStrColor(int w, int h, int frames, void *pBuff, BYTE bMask, BYTE bShift, BOOL b4BPP) |
|
{ |
|
BYTE *dst = (BYTE*)pBuff; |
|
for(int i = 0; i < w*h*frames; i++) |
|
{ |
|
if(*dst != bMask) { |
|
if(b4BPP) { |
|
BYTE c = *dst & 0xF; |
|
c /= 2; |
|
*dst -= c+1; |
|
} |
|
*dst += bShift; |
|
} |
|
dst++; |
|
} |
|
} |
|
//////////////////////////////////////////////////////////////////////////// |
|
//////////////////////////////////////////////////////////////////////////// |
|
//////////////////////////////////////////////////////////////////////////// |
|
//////////////////////////////////////////////////////////////////////////// |
|
|
|
|
|
|
|
|
|
int menu_music_track_id = 5; // idb |
|
LRESULT CALLBACK GM_Title(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); |
|
void __cdecl mainmenu_refresh_music() |
|
{ |
|
int v0; // eax |
|
|
|
music_start((GetTickCount() % 5)+1); |
|
v0 = menu_music_track_id; |
|
do |
|
{ |
|
if ( ++v0 == 6 ) |
|
v0 = 0; |
|
} |
|
while ( !v0 || v0 == 1 ); |
|
menu_music_track_id = v0; |
|
} |
|
|
|
void __stdcall mainmenu_create_hero(char *a1, char *a2) |
|
{ |
|
// char *v2; // [esp-14h] [ebp-14h] |
|
|
|
//if ( UiValidPlayerName(a1) ) /* v2 */ |
|
pfile_create_save_file(a1, a2); |
|
} |
|
|
|
int __stdcall mainmenu_select_hero_dialog(const struct _SNETPROGRAMDATA *u1,const struct _SNETPLAYERDATA *u2,const struct _SNETUIDATA *u3,const struct _SNETVERSIONDATA *u4,DWORD mode,char *cname, DWORD clen, char *cdesc, DWORD cdlen,BOOL *multi) |
|
{ |
|
int v10; // eax |
|
int a6; // [esp+8h] [ebp-8h] |
|
int a5; // [esp+Ch] [ebp-4h] |
|
|
|
a6 = 1; |
|
a5 = 0; |
|
// if ( gbMaxPlayers == 1 ) |
|
// { |
|
// if ( !UiSelHeroSingDialog( |
|
// pfile_ui_set_hero_infos, |
|
// pfile_ui_save_create, |
|
// pfile_delete_save, |
|
// pfile_ui_set_class_stats, |
|
// &a5, |
|
// chr_name_str, |
|
// &gnDifficulty) ) |
|
// TermMsg("Unable to display SelHeroSing"); |
|
// if ( a5 == 2 ) |
|
// { |
|
// dword_5256E8 = 1; |
|
// goto LABEL_6; |
|
// } |
|
// dword_5256E8 = 0; |
|
// } |
|
// else if ( !UiSelHeroMultDialog( |
|
// pfile_ui_set_hero_infos, |
|
// pfile_ui_save_create, |
|
// pfile_delete_save, |
|
// pfile_ui_set_class_stats, |
|
// &a5, |
|
// &a6, |
|
// chr_name_str) ) |
|
// { |
|
// TermMsg("Can't load multiplayer dialog"); |
|
// } |
|
if ( a5 == 4 ) |
|
{ |
|
SErrSetLastError(1223); |
|
return 0; |
|
} |
|
LABEL_6: |
|
pfile_create_player_description(cdesc, cdlen); |
|
if ( multi ) |
|
{ |
|
if ( mode == 'BNET' ) |
|
v10 = a6 || !plr[myplr].pBattleNet; |
|
else |
|
v10 = a6; |
|
*multi = v10; |
|
} |
|
if ( cname ) |
|
{ |
|
if ( clen ) |
|
SStrCopy(cname, chr_name_str, clen); |
|
} |
|
return 1; |
|
} |
|
|
|
/* |
|
"Gendata\\Titlgray.CEL" |
|
"Gendata\\Titltext.CEL" |
|
"Gendata\\Pentitle.CEL" |
|
"Gendata\\Titlqtxt.CEL" |
|
"Gendata\\Diabfr.CEL" |
|
"Gendata\\Title.pal" |
|
*/ |
|
_uiheroinfo heroarray[10]; |
|
int fuckcount = 0; |
|
char gb_title_option; |
|
unsigned char is_typing_plr_name; |
|
unsigned char title_cel_is_loaded; |
|
int diablogo_cel_frame; |
|
void *pTitlgrayCel_sgpBackCel; |
|
void *pTitltextCel; |
|
void *pPentitleCel; |
|
void *pTitlqtxtCel; |
|
void *pPentSmall; |
|
void *pDiabfrCel; |
|
void *p_reserved_title; |
|
//void *pPlayerGFX; |
|
int gb_Lfont_str_len; |
|
char byte_5DE90C; //unused |
|
int gb_Lfont_pix_width; |
|
int the_pcx_frame; |
|
|
|
int sgbMenuOption; |
|
int gbProcessFrame; |
|
int new_timer_2_int; |
|
|
|
int gNewMSG; |
|
int gbProcType; |
|
int some_usless_adder_int = 0; |
|
/* |
|
void __cdecl load_title_game00() |
|
{ |
|
char str[52]; // [esp+Ch] [ebp-34h] |
|
|
|
some_save_flag = 0; |
|
sprintf(gszSaveFilePath, "%s%s", gszSavePath64_not_long, "\\Game00.sav"); |
|
_searchenv(gszSaveFilePath, 0, str); |
|
if ( str[0] ) |
|
some_save_flag |= 0x80u; |
|
} |
|
*/ |
|
|
|
void __fastcall print_title_str_large(int a1, int a2, char *a3) |
|
{ |
|
int screen_y; // [esp+Ch] [ebp-14h] |
|
int screen_x; // [esp+10h] [ebp-10h] |
|
char v5; // [esp+14h] [ebp-Ch] |
|
signed int i; // [esp+18h] [ebp-8h] |
|
signed int v7; // [esp+1Ch] [ebp-4h] |
|
|
|
screen_y = a2; |
|
screen_x = a1; |
|
v7 = strlen(a3); |
|
for ( i = 0; v7 > i; ++i ) |
|
{ |
|
v5 = lfontframe[fontidx[a3[i]]]; |
|
if ( v5 ) |
|
CelDecodeOnly(screen_x, screen_y, pTitltextCel, v5, 46); |
|
screen_x += lfontkern[v5] + 2; |
|
} |
|
gb_Lfont_pix_width = screen_x; |
|
gb_Lfont_str_len = v7; |
|
} |
|
|
|
void __fastcall print_title_str_small(int a1, int a2, char *a3) |
|
{ |
|
int screen_y; // [esp+Ch] [ebp-14h] |
|
int screen_x; // [esp+10h] [ebp-10h] |
|
char v5; // [esp+14h] [ebp-Ch] |
|
signed int i; // [esp+18h] [ebp-8h] |
|
signed int v7; // [esp+1Ch] [ebp-4h] |
|
|
|
screen_y = a2; |
|
screen_x = a1; |
|
v7 = strlen(a3); |
|
for ( i = 0; i < v7; ++i ) |
|
{ |
|
v5 = mfontframe[fontidx[a3[i]]]; |
|
if ( v5 ) |
|
CelDecodeOnly(screen_x, screen_y, pTitlqtxtCel, v5, 22); |
|
screen_x += mfontkern[v5] + 2; |
|
} |
|
} |
|
|
|
int __fastcall gmenu_get_lfont2(char *pItem) |
|
{ |
|
char *v2; // eax |
|
int i; // edx |
|
unsigned char v4; // cl |
|
|
|
v2 = pItem; |
|
for ( i = 0; ; i += lfontkern[lfontframe[fontidx[v4]]] + 2 ) |
|
{ |
|
v4 = *v2; |
|
if ( !*v2 ) |
|
break; |
|
++v2; |
|
} |
|
return i - 2; |
|
} |
|
int thehero = 0; |
|
int __fastcall gmenu_get_sfont2(char *pItem) |
|
{ |
|
char *v2; // eax |
|
int i; // edx |
|
unsigned char v4; // cl |
|
|
|
v2 = pItem; |
|
for ( i = 0; ; i += fontkern[fontframe[fontidx[v4]]] + 2 ) |
|
{ |
|
v4 = *v2; |
|
if ( !*v2 ) |
|
break; |
|
++v2; |
|
} |
|
return i - 2; |
|
} |
|
int thefucker = 1; |
|
int maxheroes = 0; |
|
void __cdecl LoadNames(int fuckthem) |
|
{ |
|
int item_basex[3]; // [esp+Ch] [ebp-48h] |
|
int y; // [esp+18h] [ebp-3Ch] |
|
int i; // [esp+1Ch] [ebp-38h] |
|
int x; // [esp+20h] [ebp-34h] |
|
char strtbl[5][16]; // [esp+24h] [ebp-30h] |
|
char pclass[32]; |
|
if(!fuckthem) { |
|
ClearScreenBuffer(); |
|
//CelDecodeOnly(64, 639, pTitlgrayCel_sgpBackCel, 1, 640); |
|
|
|
} |
|
//DrawArtImage(0, 0, gdwTitleWidth, gdwTitleHeight, 0, pPcxTitleImage); |
|
DrawArtImage(0, 0, gdwSHeroWidth, gdwSHeroHeight, 0, pPcxSHeroImage); |
|
DrawArtWithMask(320-(gdwLogoWidth/2), 0, gdwLogoWidth, gdwLogoHeight, the_pcx_frame, 250, pPcxLogoImage); |
|
//CelDecodeOnly(236, 282, pDiabfrCel, 1, 296);//CelDecodeOnly(64, 377, pDiabfrCel, diablogo_cel_frame, 640); |
|
// if ( demo_mode ) |
|
// strcpy(tempstr, "Pre-release Demo"); |
|
// else |
|
// strcpy(tempstr, "V1.0"); |
|
// print_title_str_small(80, 624, tempstr); |
|
|
|
bool empty = 0; |
|
//CelDecodeOnly(408, 600, pSTextBoxCels, 1, 271); |
|
for ( i = 0; i < 10; ++i ) |
|
{ |
|
if(heroarray[i].name) { |
|
if(((!fuckthem && sgdwProgress == i) || (fuckthem && i == thehero)) && heroarray[i].level) |
|
{ |
|
DrawArtImage(30, 211, gdwHeroWidth, gdwHeroHeight, heroarray[i].heroclass, pPcxHeroImage); |
|
|
|
int add_this_to_the_ypos = 320; |
|
sprintf(tempstr, " Level: %i", heroarray[i].level); |
|
DrawPCXString(46, add_this_to_the_ypos, gdwFont3Width, gdwFont3Height, tempstr, pFont3, pPcxFont3Image); |
|
add_this_to_the_ypos += pFont3[1]*2; |
|
sprintf(tempstr, " Strength: %i", heroarray[i].strength); |
|
DrawPCXString(50, add_this_to_the_ypos, gdwFont3Width, gdwFont3Height, tempstr, pFont3, pPcxFont3Image); |
|
add_this_to_the_ypos += pFont3[1]; |
|
sprintf(tempstr, " Magic: %i", heroarray[i].magic); |
|
DrawPCXString(52, add_this_to_the_ypos, gdwFont3Width, gdwFont3Height, tempstr, pFont3, pPcxFont3Image); |
|
add_this_to_the_ypos += pFont3[1]; |
|
sprintf(tempstr, " Dexterity: %i", heroarray[i].dexterity); |
|
DrawPCXString(50, add_this_to_the_ypos, gdwFont3Width, gdwFont3Height, tempstr, pFont3, pPcxFont3Image); |
|
add_this_to_the_ypos += pFont3[1]; |
|
sprintf(tempstr, " Vitality: %i", heroarray[i].vitality); |
|
DrawPCXString(50, add_this_to_the_ypos, gdwFont3Width, gdwFont3Height, tempstr, pFont3, pPcxFont3Image); |
|
} |
|
|
|
sprintf(tempstr, "%s", heroarray[i].name); |
|
char col = COL_GOLD; |
|
if(!heroarray[i].level && !empty) { |
|
if(i == sgdwProgress) DrawArtImage(30, 211, gdwHeroWidth, gdwHeroHeight, 3, pPcxHeroImage); |
|
strcpy(tempstr, "New Hero"); |
|
maxheroes = i; |
|
empty = 1; |
|
col = COL_RED; |
|
} |
|
x = 424 - (GetPCXFontWidth(tempstr, pFont2) / 2); |
|
y = pFont2[1] * i + 256; |
|
|
|
DrawPCXString(x, y, gdwFont2Width, gdwFont2Height, tempstr, pFont2, pPcxFont2Image); |
|
y += 160+20; |
|
x = 400; |
|
|
|
if(fuckthem && i == thehero) |
|
{ |
|
CelDecodeOnly(x-20, y, pPentSmall, fuckthem ? 1 : progress_id, 12); |
|
CelDecodeOnly(x+175, y, pPentSmall, fuckthem ? 1 : progress_id, 12); |
|
} |
|
else if ( !fuckthem && i == sgdwProgress ) |
|
{ |
|
CelDecodeOnly(x-20, y, pPentSmall, fuckthem ? 1 : progress_id, 12); |
|
CelDecodeOnly(x+175, y, pPentSmall, fuckthem ? 1 : progress_id, 12); |
|
} |
|
} |
|
} |
|
} |
|
|
|
void __cdecl paint_diff_screen() |
|
{ |
|
int item_basex[3]; // [esp+Ch] [ebp-48h] |
|
int y; // [esp+18h] [ebp-3Ch] |
|
int i; // [esp+1Ch] [ebp-38h] |
|
int x; // [esp+20h] [ebp-34h] |
|
char strtbl[5][16]; // [esp+24h] [ebp-30h] |
|
|
|
ClearScreenBuffer(); |
|
LoadNames(1); |
|
strcpy(strtbl[4], "Select Difficulty");//&hero_names[0*32]); |
|
strcpy(strtbl[0], " Arena Match"); |
|
strcpy(strtbl[1], "Normal"); |
|
strcpy(strtbl[2], "Nightmare"); |
|
strcpy(strtbl[3], "Hell"); |
|
|
|
item_basex[0] = 86; |
|
item_basex[1] = 88; |
|
item_basex[2] = 113; |
|
item_basex[3] = 158; |
|
item_basex[4] = 113; |
|
//CelDecodeOnly(64, 639, pTitlgrayCel_sgpBackCel, 1, 640); |
|
//CelDecodeOnly(236, 282, pDiabfrCel, 1, 296);//CelDecodeOnly(64, 377, pDiabfrCel, diablogo_cel_frame, 640); |
|
// if ( demo_mode ) |
|
// strcpy(tempstr, "Pre-release Demo"); |
|
// else |
|
strcpy(tempstr, "V1.0"); |
|
print_title_str_small(80, 624, tempstr); |
|
|
|
x = 100; |
|
y = 45 * (0) + 340; |
|
ADD_PlrStringXY(x, y-160, x+(gmenu_get_sfont2(strtbl[4])), strtbl[4], COL_GOLD); |
|
|
|
for ( i = 0; i < 4; ++i ) |
|
{ |
|
x = 100; |
|
y = 18 * (i+1) + 350; |
|
ADD_PlrStringXY(x, y-160, x+(gmenu_get_sfont2(strtbl[4])), strtbl[i], i == 0 ? COL_BLUE : COL_WHITE); |
|
//print_title_str_small(x, y, strtbl[i]); |
|
if ( i == sgdwProgress ) |
|
{ |
|
CelDecodeOnly(172-10, y + 1, pPentSmall, progress_id, 12); |
|
CelDecodeOnly(300+10, y + 1, pPentSmall, progress_id, 12); |
|
//CelDecodeOnly(155, y + 1, pPentitleCel, progress_id, 48); |
|
//CelDecodeOnly(563, y + 1, pPentitleCel, progress_id, 48); |
|
} |
|
} |
|
if(!sgdwProgress) { |
|
ADD_PlrStringXY(0, 450-160, 350, "Must complete Hell to unlock", COL_RED); |
|
ADD_PlrStringXY(0, 462-160, 350, "Fight endless hoards of demons", COL_WHITE); |
|
ADD_PlrStringXY(0, 474-160, 350, "until death or time runs out!", COL_WHITE); |
|
} |
|
//CelDrawHdrOnly(164, 364, (char *)pCursCels, some_usless_adder_int+12, InvItemWidth[some_usless_adder_int+12], 0, 8); |
|
//CelDecodeOnly(64, 64, pCursCels, 11, 28); |
|
} |
|
|
|
void __cdecl paint_title_screen() |
|
{ |
|
int item_basex[3]; // [esp+Ch] [ebp-48h] |
|
int y; // [esp+18h] [ebp-3Ch] |
|
int i; // [esp+1Ch] [ebp-38h] |
|
int x; // [esp+20h] [ebp-34h] |
|
char strtbl[5][16]; // [esp+24h] [ebp-30h] |
|
|
|
ClearScreenBuffer(); |
|
//DrawPCXString(x, y, "fucker"); |
|
DrawArtImage(0, 0, gdwTitleWidth, gdwTitleHeight, 0, pPcxTitleImage); |
|
DrawArtWithMask(320-(gdwLogoWidth/2), 0, gdwLogoWidth, gdwLogoHeight, the_pcx_frame, 250, pPcxLogoImage); |
|
strcpy(strtbl[0], "Single Player");//&hero_names[0*32]); |
|
strcpy(strtbl[1], "Multi Player"); |
|
strcpy(strtbl[2], "Replay Intro"); |
|
strcpy(strtbl[3], "Show Credits"); |
|
strcpy(strtbl[4], "Exit Diablo"); |
|
|
|
item_basex[0] = 86; |
|
item_basex[1] = 88; |
|
item_basex[2] = 113; |
|
item_basex[3] = 158; |
|
item_basex[4] = 113; |
|
//CelDecodeOnly(64, 639, pTitlgrayCel_sgpBackCel, 1, 640); |
|
//CelDecodeOnly(236, 282, pDiabfrCel, 1, 296);//CelDecodeOnly(64, 377, pDiabfrCel, diablogo_cel_frame, 640); |
|
|
|
print_title_str_small(80, 624, gszProductName); |
|
//print_title_str_small(120, 630, "Copyright (C) 1996 Blizzard Entertainment"); |
|
//ADD_PlrStringXY(0, 600-160, 640, "Copyright (C) 1996 Blizzard Entertainment", 0); |
|
for ( i = 0; i < 5; ++i ) |
|
{ |
|
//x = 384 - (gmenu_get_lfont2(strtbl[i]) >> 1); |
|
x = 320 - (GetPCXFontWidth(strtbl[i], pFont) / 2) - 1; |
|
y = pFont[1] * i + 192; // 42 large font, 30 or 16 |
|
//print_title_str_large(x, y, strtbl[i]); |
|
DrawPCXString(x, y, gdwFontWidth, gdwFontHeight, strtbl[i], pFont, pPcxFontImage); |
|
if ( i == sgdwProgress ) |
|
{ |
|
CelDecodeOnly(155, y + 208, pPentitleCel, progress_id, 48); |
|
CelDecodeOnly(563, y + 208, pPentitleCel, progress_id, 48); |
|
//DrawPCX(155-64, (y-160-45) + 1, progress_id-1); |
|
//DrawPCX(563-64, (y-160-45) + 1, progress_id-1); |
|
} |
|
} |
|
//CelDrawHdrOnly(164, 364, (char *)pCursCels, some_usless_adder_int+12, InvItemWidth[some_usless_adder_int+12], 0, 8); |
|
//CelDecodeOnly(64, 64, pCursCels, 11, 28); |
|
|
|
} |
|
|
|
char *the_long_ass_credits[] = |
|
{ |
|
"","","","","","","","","","","","", |
|
"$-- Devilution --", |
|
"Reversed by Andi \"GalaXyHaXz\"", |
|
"", |
|
"$-- Meet the Team --", |
|
"seritools", |
|
"mewmew", |
|
"nomdenom", |
|
"AJenbo", |
|
"ApertureSecurity", |
|
"", |
|
"$-- Special Thanks --", |
|
"The Sanctuary preservation project", |
|
"Jarulf's guide to the Devil himself", |
|
"", |
|
"", |
|
"$...The Devil is in the details", |
|
"", |
|
"", |
|
"$Game Design", |
|
"Blizzard North", |
|
"", |
|
"$Senior Designers", |
|
"Erich Schaefer, David Brevik", |
|
"", |
|
"$Additional Design", |
|
"Max Schaefer, Eric Sexton, Kenneth Williams", |
|
"", |
|
"$Lead Programmer", |
|
"David Brevik", |
|
"", |
|
"$Senior Programmers", |
|
"Richard Seis, Doron Gartner,", |
|
"Patrick Wyatt, Mike O'Brien", |
|
"", |
|
"$Programming", |
|
"Peter Brevik, Robin van der Wel, Jon Morin", |
|
"", |
|
"$Special Guest Programmers", |
|
"Collin Murray, Frank Pearce", |
|
"", |
|
"$Battle.net Programming", |
|
"Mike O'Brien, Mike Morhaime, Dan Liebgold", |
|
"", |
|
"$Serial Communications Programming", |
|
"Jeff Strain, Mike O'Brien", |
|
"", |
|
"$Installer Programming", |
|
"Bob Fitch, Patrick Wyatt", |
|
"", |
|
"$Art Directors", |
|
"Erich Schaefer, Samwise Didier", |
|
"", |
|
"$Artwork", |
|
"Michio Okamura, Eric Sexton, Ben Haas, Patrick Tougas,", |
|
"Kelly Johnson, Erich Schaefer, Max Schaefer, Hugh Tom", |
|
"Byrne, Roman Kenney, Samwise Didier, Dave Berggren,", |
|
"Micky Neilson, Eric Flannum, Justin Thavirat, Brian", |
|
"Sousa, Stu Rose, Nick Carpenter, Joeyray Hall", |
|
"", |
|
"$Technical Artwork", |
|
"Christopher Root, Mark Sutherland,", |
|
"Robert Djordjevich, Jeffrey Vaughn", |
|
"", |
|
"$Cinematic Art Directors", |
|
"Duane Stinnett, Matt Samia", |
|
"", |
|
"$3D Cinematic Artwork", |
|
"Duane Stinnett, Matt Samia, Rob McNaughton,", |
|
"Eric Flannum, Dave Pursley, Micky Neilson,", |
|
"Maxx Marshall, Trevor Jacobs, Brian Sousa,", |
|
"Samwise Didier, Ron Smorynski, Ben Haas, Patrick Tougas", |
|
"", |
|
"$Cinematic Technical Artwork", |
|
"Joeyray Hall ", |
|
"", |
|
"$Executive Producer", |
|
"Allen Adham", |
|
"", |
|
"$Producer", |
|
"Bill Roper", |
|
"", |
|
"$Associate Producer", |
|
"James Phinney", |
|
"", |
|
"$Diablo Strike Team", |
|
"Allen Adham, Ron Millar, Mike O'Brien,", |
|
"James Phinney, Bill Roper, Patrick Wyatt", |
|
"", |
|
"$Music", |
|
"Matt Uelmen", |
|
"", |
|
"$Sound Design", |
|
"Matt Uelmen, Glenn Stafford", |
|
"", |
|
"$Cinematic Music & Sound", |
|
"Glenn Stafford, Matt Uelmen", |
|
"", |
|
"$Voice Production, Direction & Casting", |
|
"Mark Schwarz, Glenn Stafford, Bill Roper", |
|
"", |
|
"$Script & Story", |
|
"Erich Schaefer, Eric Sexton,", |
|
"Chris Metzen, Bill Roper", |
|
"", |
|
"$Voice Editing", |
|
"Glenn Stafford", |
|
"", |
|
"$Voices", |
|
"Michael Haley, Glynnis Talken, Michael Gough,", |
|
"Paul Eiding, Lani Minella, Steve Brodie, Bill Roper,", |
|
"Mark Schwarz, Glenn Stafford, Chris Metzen, Max Schaefer", |
|
"", |
|
"$Recording Engineer", |
|
"Robert Koenigsberg", |
|
"", |
|
"$Manual Design & Layout", |
|
"Peter Underwood, Jeffrey Vaughn,", |
|
"Chris Metzen, Bill Roper", |
|
"", |
|
"$Manual Artwork", |
|
"Samwise Didier, Chris Metzen,", |
|
"Roman Kenney, Maxx Marshall", |
|
"", |
|
"$Provisional Director of QA (Lead Tester)", |
|
"Shane Dabiri", |
|
"", |
|
"$QA Assault Team (Testers)", |
|
"Christopher Cross, Mike Givens, Dave Hale,", |
|
"Brian \"Doc\" Love, Hung Nguyen, Dean Shipley,", |
|
"Chris Sigaty, Ian Welke, Jamie Wiggs", |
|
"", |
|
"$QA Special Ops Team (Compatibility Testers)", |
|
"Adam Maxwell, Russell \"Rug\" Miller", |
|
"", |
|
"$QA Artillery Support (Additional Testers) ", |
|
"Rich Alcazar, Mike Jones, Rev. Dan Moore, Matt Morris,", |
|
"Mark Pfeiffer, Harish \"Pepe the Enforcer\" Rao, Chris Millar", |
|
"", |
|
"$QA Counterintelligence", |
|
"Alan Dabiri, Jesse McReynolds, Walter Takata", |
|
"", |
|
"$Order of Network Information Services", |
|
"Robert Bridenbecker, Jason \"Brother Shaggy\" Schmit,", |
|
"Jamie \"Brother Gug\" Steigerwald, Richard Seis ", |
|
"", |
|
"$Customer Support", |
|
"John Schwartz, Vic Larson, Chad Chaudry, Mick Yanko,", |
|
"Brandon Riseling, Kirk Mahony, Tony Hardy, Richard", |
|
"Amtower, Collin Smith, Andrew Edwards, Roger Eberhart", |
|
"", |
|
"$Sales", |
|
"Jorge Rivero, Rob Beatie", |
|
"", |
|
"$Dunsel", |
|
"Alan Dabiri", |
|
"", |
|
"$Mr. Dabiri's Background Vocalists", |
|
"Karin Colenzo, Christina Cade,", |
|
"Kim Farrington, Melissa Edwards", |
|
"", |
|
"$Public Relations", |
|
"Linda Duttenhaver, Susan Wooley", |
|
"", |
|
"$Marketing", |
|
"John Patrick, Steve Huot, Neal Hubbard, Kathy Carter", |
|
"", |
|
"$International Sales", |
|
"Ralph Becker, Chris Yoshimura", |
|
"", |
|
"$U.S. Sales", |
|
"Todd Coyle, Danny Kearns", |
|
"", |
|
"$Manufacturing", |
|
"John Goodman, Tom Bryan", |
|
"", |
|
"$Legal & Business", |
|
"Paula Duffy, Eric Roeder, Paul Sams, Kenneth Williams", |
|
"", |
|
"$Special Thanks To", |
|
"Primenet, Earthlink, AOL, Compuserve, ATI, Matrox, STB, ", |
|
"Creative Labs, Logitech, U.S. Robotics, Gravis, Cyrix", |
|
"", |
|
"$Thanks To", |
|
"Ian Colquhoun, Rod Shean, Brian Fitzgerald, Sharon Schafer, Todd ", |
|
"Schafer, Richard and Sandra Schaefer, Rick Bowles, Greg Bogden, ", |
|
"Cindy Sievert, Brad Mason, Chuck Goldman, Karin Colenzo, Wendy ", |
|
"Brevik, Jennie Brevik, Hanna Carroll, Katie Newell, Karen Weiss, ", |
|
"Kurt Beaver, Stan McDonald, Brian Sexton, Michael Wan, Megan ", |
|
"Williams, Jessica Gensley, Beth Ann Parks, Brian Piltin, Johnathan ", |
|
"Root, Brett Supernaw, Sabeer Bhatia, Mark Rearick, Brad Mason, ", |
|
"Diane Kodama, Bernadette Sexton, Barbara Uhlmann, Patricia", |
|
"McDonald, Kris Kelley, Alissa Vaage, Denise Hernandez, Paula ", |
|
"White, Rachel Marie Hawley, Laura Gaber, Isaac Matarasso,", |
|
"Susan Stafford, Gretchen Witte, Jason Sailor, Eufemia Palomino, ", |
|
"Nathalie Didier, Nicole Welke, Dawn Caddel, Anna-Marcelle ", |
|
"Okamura, Amber Okamura, Megan Okamura Tracey McNaughton, ", |
|
"Trisha Ann Ochoa, Annie Strain, Dr. Gregory T. Street, Ray the Soda ", |
|
"Guy, Sam Raimi, A. Guinness Brewing Co., John Woo, Chow Yun Fat, ", |
|
"Jackie Chan,Proposition 215, Rumiko Takahashi, Bunchy & Mason, ", |
|
"The Friends of Stan, The Zoo Crew, Team Hamro, Brazil 2001, RUSH, ", |
|
"Cornholio, THE BROS., Dar, Emeril Lagasse, Tom Waits, Ice-Cube, ", |
|
"The Strike Team Deflectors, Tony Levin, Big Jim and the Twins, ", |
|
"Jag`rmeister, The Megasphere, Condor, The Allower, The Sunday ", |
|
"Night Group, Gravitar, Steinway Pianos, Round Table Pizza, The Poxy ", |
|
"Boggards, Urban Mystic & Co., Caffeine, Hunter Rose, Marly ", |
|
"mediums in the box, sweet Poteen, Dave Scarpitti, TheByter, Bim ", |
|
"Man, Krissann for color, Patty at Avalon Tattoo, James, Whaleboy, ", |
|
"Dunsel Training Institute, monkeys, Dob Bole, Rootes Group, Porshe, ", |
|
"Bongo, Scarlett, Apollo, The House of Mediocrity, Amelias, The King, ", |
|
"Saag and all the folks at Davidson", |
|
"", |
|
"$In memory of", |
|
"Lawrence and Barbara Williams", |
|
"David A. Hargrave", |
|
"Tony \"Xatre\" Collin", |
|
"Thomas H Sexton", |
|
"", |
|
"$Very Special Thanks to", |
|
"Bob and Jan Davidson", |
|
"Walter Forbes", |
|
"", |
|
"$The Ring of One Thousand", |
|
"Andrew Abernathy, Christopher Abramo, David Adams, David ", |
|
"Adcox, Marko Agterberg, Cory Aiken, Judah Altaras, John ", |
|
"Alvarez, Jose Alvarez, Richard Amable, Alexander Amaral, ", |
|
"Scott Amis, Vincent Amoroso, Mark An, David Andersen, Jason ", |
|
"Andrew Abernathy, Christopher Abramo, David Adams, David ", |
|
"Adcox, Marko Agterberg, Cory Aiken, Judah Altaras, John ", |
|
"Alvarez, Jose Alvarez, Richard Amable, Alexander Amaral, ", |
|
"Scott Amis, Vincent Amoroso, Mark An, David Andersen, Jason ", |
|
"Andersen, Aaron Anderson, George Anderson, Matthew ", |
|
"Anderson, Michael Anderson, Sean Anderson, Robert Andrade, ", |
|
"Cerny Andre, Michael Andreev, Devin Angle, Brian Apple, ", |
|
"Brian Arbuthnot, Billy Arden, Dorian Arnold, Andre Arsenault, ", |
|
"Erik Asplund, Mark Assam, John Athey, Jason Attard, Jeff ", |
|
"Atwood, Ricky Au, Scott Avery, Rand Babcock, Steve Babel, ", |
|
"Raymond Bacalso, Ed Bachta, Steven Back, Scott Baeder, Alex ", |
|
"Baevski, Scott Bailey, Kenneth Baird, Thomas Baker, Todd ", |
|
"Bala, Jan Ball, Greg Baltz, Blake Baltzley, Doug Bambrick, Wes ", |
|
"Bangerter, Paul Barfuss, Chris Barghout, Dave Barnebey, Jon ", |
|
"Barnhart, Terje Barth, Nicole Baskin, Bernard Baylen, Ryan ", |
|
"Bear, Phil Bedard, Todd Belcher, Chip Bell, Erez Ben-Aharon, ", |
|
"Jonathan Bender, Nick Bennett, Ireney Berezniak, Ted Berg, ", |
|
"Gunnar Bergem, Russell Beuker, Ed Bickford, Stephen Biles, ", |
|
"John Billdt, Gerald Binder, John Bird, Hannah Blackerby, Tom ", |
|
"Blackerby, Clayton Blackwell, Thomas Blake, Shawn Blaszak, ", |
|
"Daniel Bliss, Fred Bliss, Jeff Bliss, Jon Blum, Rune Boersjoe, ", |
|
"Andrew Boggs, Dave Boisvenu, Joe Bolt, John Bonds, Jeff ", |
|
"Borenstein, Dorian Borin, Ed Boris, Bartholomew Botta, ", |
|
"Michael Boutin, Michael Boyd, Charles Boyer, Mike ", |
|
"Boyersmith, Michael Boyko, Eric Bradberry, John Brandstetter, ", |
|
"Ryan Breding, Paul Brinkmann, Patrick Briscoe, Scott Brisko, ", |
|
"Jeremy Britton, Adrian Broadhead, Glenn Brouwer, Joe Brown, ", |
|
"Sebastien Brulotte, Darrell Brunsch, William Bryan, Jason ", |
|
"Bucher, Chris Buchinger, Clayton Buckingham, John Buckles, ", |
|
"David Bugay, Ed Bujone, Erik Burgess, Gabriel Burkett, Chris ", |
|
"Burnes, Richard Butler, Jeffrey Bye, Dougall Campbell, Donnie ", |
|
"Cannon, Shane Cantrell, Connor Caple, Daniel Carey, James ", |
|
"Carlton, Michael Carmel, Mike Carpenter, Ronald Carruthers, ", |
|
"Phil Carter, Bryce Cartmill, Eric Cartwright, Anthony Caruso, ", |
|
"Lon Casey, Tim Caster, Aaron Chan, Otto Chan, Gene Chang, ", |
|
"Hsiao-Lung Chang, William Chang, George Chappel, Larry ", |
|
"Charbonneau, Troy Chase, Bruce Chen, Chun Hsien Chen, Sam ", |
|
"Chen, Tzu-Mainn Chen, Mike Cheng, Chris Chiapusio, Damien ", |
|
"Chiesa, Nick Chin, Nim Ching, Jonathan Chinn, Michael Chinn, ", |
|
"Philander Chiu, Thayne Christiansen, Philip Chui, Steve ", |
|
"Cintamani, Richard Ciordia, Colin Clark, Steve Clark, Samuel ", |
|
"Clements, Meredith Clifton, Jeff Cohen, Dale Colton, Dax ", |
|
"Combe, Matt Compton, Jacob Conklin, Richard Conn, Zac ", |
|
"Cook, Tim Coolong, Gregory Coomer, Dennis Cosgrove, Kelly ", |
|
"Couch, Andrew Coulter, Eric Coutinho, David Coutts, James ", |
|
"Craig, John Craig, Kazial Craig, John Crawford, Marcelo ", |
|
"Crespo, Orville Crews, Tim Cristy, Elmer Crosby III, Russell ", |
|
"Cullison, Ryan Cupples, Andrew Dagley, Steve Dallaire, Richard ", |
|
"Dalton, David Dandar, Pro Daulo, Rob Dautermann, Mike ", |
|
"Davies, Kalieb Davis, Marshall Davis, Ronald Davis, Danny De ", |
|
"Bie, Marc De Filippis, Myles Deighton, Kent Dejarnett, Anthony ", |
|
"Delarosa, Neil Dempster, Peter Denitto, Joaquim Dentz, Scott ", |
|
"Dewar, Anish Dhingra, Philip Dhingra, David Diaz, Stewart ", |
|
"Dicks, Brad Dietz, Josh Dietz, Colleen Diggins, Mike Ditchburn, ", |
|
"Eric Dittman, Allen Do, Huy Doan, Matthew Dolman, Antoine ", |
|
"Dongois, Eamonn Donohoe, Bill Dorell, Mark Dorison, Dan ", |
|
"Dorsett, Chris Dorsey, Jim Dose, Willis Doss, Chin Du, William ", |
|
"Dubis, Timothy Duewell, Brandon Dunn, Andrew Durham, Don ", |
|
"Duvall, Kevin Dvojack, Daniel Eaton, Paul Eberting, Eric ", |
|
"Echelbarger, Lance Eddleman, Ben Eggers, David Eggum, John ", |
|
"Ehde, Brian Eikenberry, Patrick Elven, Peter Engdahl, Philip ", |
|
"Engdahl, Michael Ennis, Darren Eslinger, Eric Ezell, Darren ", |
|
"Falslev, Stephen Feather, Tony Fenn, Ben Ferguson, Mike ", |
|
"Fernandez, Gwendal Feuillet, Guy Fietz, Julian Figueroa, Dale ", |
|
"Fillpot, Stan Finchem, Michael Finley, Nick Fisher, William ", |
|
"Fisher, Mark Fitlin, Dave Flatt, Joel J. Flores, John Folkers, ", |
|
"Steven Forgie, Tom Forsythe, Matthew Foster, Scott Francis, ", |
|
"Jim Frank, Paulo Fraser, Glenn French, Kurt Frerichs, Chris ", |
|
"Frey, Mark Friedman, Charles Friedmann, Dan Friend, Kirk ", |
|
"Fry, Aaron Fu, Erik Gaalema, Brandon Gabbard, Phil Gagner, ", |
|
"Tommy Gannon, David Gappmayer, Chris Garrison, Tony ", |
|
"Garrison, David Gasca, Jeremy Gasser, Michael Geist, Michael ", |
|
"Genereux, Daniel Genovese, Josh Gerwin, Paul Gibson, William ", |
|
"Gilchrist, Gabriel Gils Carbo, Chad Glendenin, Ryan Glinski, ", |
|
"Dean Gobrecht, Andrew Goldfinch, David Goodman, Mark ", |
|
"Goodson, Matt Gordon, Frank Gorgenyi, Sean Gould, Perry ", |
|
"Goutsos, Ed Govednik, Michael Grayson, Chris Green, Justin ", |
|
"Grenier, Jeff Greulich, Don Grey, Rob Griesbeck, Don Griffes, ", |
|
"Kimberly Griffeth, Jay Grizzard, Don Gronlund, Joe Gross, ", |
|
"Troy Growden, Greg Guilford, David Gusovsky, Jeremy ", |
|
"Guthrie, Adam Gutierrez, James Guzicki, Matthew Haas, Matt ", |
|
"Hadley, Ryan Hagelstrom, Bobby Hagen, Ben Hall, Brian Hall, ", |
|
"Kris Hall, Calvin Hamilton, Kris Hamilton, Bo Hammil, Dave ", |
|
"Hans, Rick Hansen, Robert Harlan, Travis Harlan, Seth ", |
|
"Harman, Jeff Harris, Shawn Hartford, Adam Hartsell, Neil ", |
|
"Harvey, Ray Hayes, John Hein, Chris Heinonen, Christer ", |
|
"Helsing, Chris Hempel, Dustin Hempel, Mathieu Henaire, Matt ", |
|
"Henry, Chuck Herb, Michael Herron, Sage Herron, Thomas ", |
|
"Herschbach, Cliff Hicks, Nelson Hicks, Paul Hierling, William ", |
|
"Hiers, Mike Higdon, Tim Hildebrand, Casey Hinkle, Ryan ", |
|
"Hitchings, Wes Hix, Alan Ho, Jenson Ho, Alan Hoffman, Jeff ", |
|
"Hoffman, Eleanor Hoffmann, Steve Hogg, Richard Holler, Brian ", |
|
"Homolya, Wade Hone, Joe Horvath, Jeff Howe, Eric Hudson, ", |
|
"Glen Huey, Chris Hufnagel, Joshua Hughes, Melissa Hughes, ", |
|
"Arief Hujaya, Thomas Hulen, Ryan Hupp, Justin Hurst, Rick ", |
|
"Hutchins, Steve Iams, Mike Iarossi, Bjorn Idren, Johan Idren, ", |
|
"Micah Imparato, Joe Ingersoll, David Ingram, Greg Ipp, Rodney ", |
|
"Irvin, Darin Isola, Justin Itoh, Mario Ivan, Fredrik Ivarsson, ", |
|
"Dax Jacobson, Michael Jacques, Stevens Jacques, Duane Jahnke, ", |
|
"William Jambrosek, Daniel Janick, Narciso Jaramillo, Neil ", |
|
"Jariwala, Harvie Jarriell, Scott Javadi, Joe Jenkins, Bart ", |
|
"Jennings, Paul Jennings, Julien Jenny, Jason Jensen, Martin ", |
|
"Jeremy, Mark Jeschke, Andy Johnson, James Johnson, Leigh ", |
|
"Johnson, Mark Johnson, Rupert Johnson, Clyde Jones, Michael ", |
|
"Jones, Tim Jordan, Ben Judy, Michael Kaae, Steve Kaczkowski, ", |
|
"Neville Kadwa, Brian Kaisner, Yoshihisa Kameyama, Michael ", |
|
"Kanemura, Daniel Kao, Eric Karabin, Ben Katz, Christopher ", |
|
"Kawamura, Erick Kayser, Craig Keddie, Kevin Kelley, Bryan ", |
|
"Kemp, Michael Kendrigan, Dan Kerber, Timothy Kerber, Tomi ", |
|
"Keski-Heikkila, Greg Kettering, Nathan Kilber, Howard Kim, ", |
|
"Orrin Kinion, Jon Kirst, David Kitch, John Klingbeil, Neil ", |
|
"Klopfenstein, Kerry Knouse, David Knox, Said Kobeissi, Jeff ", |
|
"Koches, Hades Kong, Jeff Kong, Kevin Konkle, Steve Koon, ", |
|
"David Koontz, Dan Koopmann, Steve Koskela, Kuan Kou, ", |
|
"Cameron Kracke, Jensen Krage, York Kramer, Cedar Kraus, ", |
|
"Jason Kraus, Bobby Krimen, Melissa Krispli, Steven Krispli, ", |
|
"James Kruger, Charles Kubasta, Kimmo Kulonen, Frank ", |
|
"Lackaff, Michael Lacour, Matt Lake, Jason Landry, Hans Erik ", |
|
"Lange, Michael Laramee, Brad Lascelle, Pat Laschinger, Alan ", |
|
"Lau, Sean Laurence, Anthony Lavey, Jr., Gary Le, Huey Le, ", |
|
"Stephane Le Roy Audy, Lim Leandro, Charles Lee, Conroy Lee, ", |
|
"Mike Lee, Shih-Hang Lee, Jonathan Leipert, Jason Lemann, ", |
|
"Ron Lenzi, Mitchell Leon, Stephanie Lesniewski, Brendan ", |
|
"Lewis, Robert Lewis, Sam Liao, Tom Liem, Adam Ligas, Steven ", |
|
"Liggett, Roger Lilley, Benjamin Lim, Jeff Lindholm, Johnson ", |
|
"Linwood, David Litchman, Bruce Lithimane, William Liu, ", |
|
"Wilson Liu, Robert Lobdell, Chris Logan, Razvan Loghin, Jack ", |
|
"Loh, George Loo, Russell Love, Juan Loyola, Ricardo Lozano, ", |
|
"Mike Luban, Tim Luc, Henry Luciano, Dianne Ludwig, Charles ", |
|
"Lueras, Derek Lung, Phong Ly, Scott MacGillivray, Dave Mack, ", |
|
"Alec Mak, Steve Mamayek, Michael Mancini, Daniel Mann, ", |
|
"Michael Mann, Chris Manofsky, Abdullah Marafie, Nicholas ", |
|
"Marcy, Piompino Mariano, Bob Marius, Trey Marshall, Dane ", |
|
"Martin, Gregg Martin, Renard Martin, Rich Martin, Scott ", |
|
"Martin, Thomas Martin, Jon Masters, Christopher Mathews, ", |
|
"Jay Mathis, Marc Matthews, Chris Mazur, Doug McBride, ", |
|
"Mackey McCandlish, Robin McCollum, Steven McCombie, ", |
|
"Andy McConnell, Michael McCourt, Bill McCoy, Doug ", |
|
"McCracken, Michael McDeed, Robert McDonald, Steve ", |
|
"McEachron, Craig McGee, Ryan McKenzie, Michael McKeown, ", |
|
"Daniel McMahon, Colin McMillan, Ian McWilliam, Mark ", |
|
"McWilliams, Khann Mean, Bryan Meason, Kenneth Medley, ", |
|
"Jeff Meek, John Mehr, Christopher Mende, Brian Mendenhall, ", |
|
"Peter Mengel, Michael Mersic, Mike Messom, Don Metcalf, ", |
|
"Gary Metzker, Scott Meyer, Joseph Michaud, Andrew Mielke, ", |
|
"Travis Mikalson, Troy Milburn, Ike Miller, Ronnie Miller, Sean ", |
|
"Miller, Steve Miller, Arthur Min, David Minniti, Brenda ", |
|
"Mirsberger, Bill Misek, David Mitchell, Joseph Mobley, Robert ", |
|
"Mollard, Will Mooar, Curtis Moore, Matthew Moore, Al ", |
|
"Morales, Ryan Moran, Lance Mortensen, Karel Mrazek, Ward ", |
|
"Mullee, William Munoz, Kirk Munro, Craig Murray, Shawn P. ", |
|
"Murray, Travis Murray, Michael Mushrush, Tom Mustaine, ", |
|
"David Myers, Joseph Myett, Morgan Najar, Kenta Nakamura, ", |
|
"Damian Nastri, Joshua Naumann, Nick Navarro, Douglas ", |
|
"Neitzel, Arnold Ng, Anthony Nguyen, Steve Nguyen, Joseph ", |
|
"Nicholas, Charles Nickolaus, Jon Nisbet, Patrick Nomee, David ", |
|
"Norling-Christensen, Bobby Norton, Joseph Nottingham, Frank ", |
|
"O'Connor, Jon Oden, David Oester, Lavern Ogden, Zach ", |
|
"Oglesby, Lucas Oldfield, Toby Olsson, Aaron Ondek, Sean ", |
|
"O'Neill, John Orlando, Samuel Orlando, Donovan Orloski, ", |
|
"David Pai, Nikolas Paldan, David Palek, John Palmieri, Anthony ", |
|
"Palmisano, Sanjay Pandit, Jesse Park, Alex Parker, Jimmy ", |
|
"Pasher, Lukasz Paszek, Andy Patterson, William Pelletier, ", |
|
"Duane Pemberton, Ivan Pemic, Kelly Pendergast, Mike ", |
|
"Penezich, Jon Penk, Willie Penley, Ron Penna, Matthew ", |
|
"Pennington, Kevin Pereira, Ross Perez, Ken Perkins, Brian ", |
|
"Peterik, Kelly Peterson, Chris Phillips, Rod Pickett, Cameron ", |
|
"Pierce, Reuben Pierce, Tim Pilger, Billy Pippin, Brad Plank, ", |
|
"Brian Plant, Craig Platt, David Plunkett, Michael Politi, Albert ", |
|
"Portillo, Brian Powell, David Powell, Franklin Powers Jr., Alan ", |
|
"Precourt, Michael Pronchick, Julian Quintana, Justin Radziej, ", |
|
"Steven Rajewski, Shawn Rawles, Ian Reardon, Marc Reed, Ric ", |
|
"Reichelt, Judd Reiffin, David Reilly, Garry Reisky, Drew ", |
|
"Ressler, Robert Reynolds, Walter Reynolds, Michael Rice, Ian ", |
|
"Richards, James Richards, Raymond Richmond, Dustin Riggs, ", |
|
"Keith Riskey, Brian Ro, Scott Roberts, Jorge Rodriguez, Chad ", |
|
"Rogers, Clint Rogers, Robert Rogers, Steve Rogers, Ethan Roots, ", |
|
"Ron Roque, William Ross, Sebastian Rossi, Jeff Rostis, Ben ", |
|
"Roth, Demar Roth, Rich Rouse, Oleg Rovner, Jonathan Roy, ", |
|
"Drew Rozema, Mike Ruggles, Mathias Russ, James Russell, Jim ", |
|
"Rutledge, James Rutter, Dave Ryder, Chris Salvadras, Anders ", |
|
"Samnerud, Nick Sanders, Jakob Sandgren, Joe Sapinsky, Tyler ", |
|
"Sargent, Jonas Saunders, Mark Savage, Scott Sawyer, Robert ", |
|
"Scanlon, Trevor Schaben, Aaron Schmidt, Chris Schmidt, Greg ", |
|
"Schultz, Nicholas Schumacher, Scott Schumacher, Kevin Scott, ", |
|
"Rastislav Seffer, Robert Seidler, Corey Sellers, Justin Sellers, ", |
|
"Marc Senecal, George Shannon, Ian Sheffield, Anoop Shekar, ", |
|
"Sandeep Shekar, Kevin Shelton, Leon Shephard, Eric Shepperd, ", |
|
"Jeffrey Shneidman, Samuel Shockey, Mark Shoemaker, Mike ", |
|
"Shupe, Sean Sibbet, Brian Sidharta, Jimmy Sieben, Eric ", |
|
"Siemens, William Silva, Jody Simpson, Jatinder Singh, Sonia ", |
|
"Siu, Omar Skarsvaag, Tom Skiba, Carl Skow, David Skuse, ", |
|
"Robert Slifka, Brent Smith, C. Eric Smith, Jared Smith, Jeffrey ", |
|
"Smith, Owen Smith, Shannon Smith, Steven Smith, Edward Smola, ", |
|
"Matthew Sneep, Eric Snow, Brad Sobel, Jean-Pierre Solignac, Rasmus ", |
|
"Sorensen, Andrew Sorg, Poppy Southcott, Ross Specter, Erik Spencer, ", |
|
"Keith Spencer, Chris Springer, Erikson Squier, Dean St. Onge, Stewart ", |
|
"Stanfield, John Stanley, Terrence Staton, Benjamin Stein, James ", |
|
"Steiner, David Steyer, William Stickney, Chris Stiff, James Stofer, ", |
|
"Norm Storch, Patrick Stovall, Brandon Sturgeon, Sean Stutler, Anne ", |
|
"Sukprasert, Jamal Sullivan, Bruce Sully, Jay Sung, Park Sung ", |
|
"Joon, Stein Sunnarvik, Nathan Surginer, Robert Swaringen, Lee ", |
|
"Sweeney, David Szabo, Scott Taft, Christian Takvam, Patrick ", |
|
"Talaska, Tadashi Tamaki, Simon Tan, Mark Taraba, Khon-", |
|
"Whey Tay, John Taylor, Keith Taylor, Donald Temean, Phillip ", |
|
"Tesar, Pete Thao, Brian Thomas, Keith Thomas, Speed Thomas, ", |
|
"Miles Thorpe, Paul Thurrott, Mike Timbol, Nicholas Timmins, ", |
|
"Tom Tobin, Robert Towster, Hien Tran, Timothy Traviss, Toby ", |
|
"Traylor, Tony Treadwell, George Tremoulis, Paul Trinh, Thanh ", |
|
"Trinh, Chris Tristan, Brad Truswell, Jason Tryon, Mike Tu, ", |
|
"Gernel Tuazon, Eric Tuggle, Mike Turnbull, Lyle Ubben, ", |
|
"Amilcar Ubiera, Robert Ulozas, Arie Upton, Mark Van Noy, ", |
|
"Matthew Van Sickler, Jake Vantlin, Tony Vasquez, Brady ", |
|
"Vauclin, Gianpiero Vecchi, Chad Verrall, Chris Vicente, Brett ", |
|
"Vickers, David Vickery, Jonathan Vilante, Simon Vince, Ben ", |
|
"Vinson, David Voelkert, Paul Vogt, Nicholas Voorhies, Robert ", |
|
"Vreeland, Mike Vrooman, Rick Vuong, Brian Wachhaus, Todd ", |
|
"Wachhaus, Caine Wade, Mathew Wadstein, Kenneth Wagenius, ", |
|
"Trevor Wagner, John Wagstaff, Asad Wahid, Richard ", |
|
"Wahlberg, Helio Wakasugui, Richard Walker, Wilkins Walker, ", |
|
"Matthew Wallace, Daniel Walsh, Joel Walters, Andrew Waltz, ", |
|
"Tom Wang, Tony Wang, Jay Ward, Jonathan Ward, John ", |
|
"Warner, Mark Warren, Matt Washer, Mike Watson, Sean ", |
|
"Wattles, Mike Wayne, Christian Wehba, Benjamin Wei, Richard ", |
|
"Weight, Cary Wells, David Wenck, Bill Werring, Leonard ", |
|
"Wesley, Marlon West, Mikael Westerbacka, Brian Wharry, ", |
|
"Chris White, Chris White, Jeremy White, Greg Whitlock, Gary ", |
|
"Widener, Marty Wilfried, Israel Wilkinson, Michael Willams, ", |
|
"Derek Williams, Sean Willson, Nitzan Wilnai, Jim Wilson, ", |
|
"Karsten Wilson, William Wilt, Tim Winn, Brian Winzeler, Matt ", |
|
"Wise, Lee Wissmiller, Brendan Wolfe, Daniel Wolpert, Felix ", |
|
"Wong, Power Wong, Tony Wong, Tim Wood, Timothy Wood, ", |
|
"Jeremy Woods, Michael Woods, Bill Wright, Keith Wright, ", |
|
"Patrick Wu, Gang Xie, Robert Yao, Sun Lim Yap, Stephen Yau, ", |
|
"Erek Yedwabnick, Christopher Yee, Nick Yee, Juan Yip, David ", |
|
"Young, Rob Young, Seth Young, Alex Yu, Terry Zahn, Jia-Ning ", |
|
"Zhang, Eric Zieg, Jordan Zielin, Clint Zimmerman, Matt Zinke ", |
|
"", |
|
"", |
|
"", |
|
"", |
|
"$No souls were sold in the making of this game.", |
|
"", |
|
"", |
|
" ", |
|
" ", |
|
" ", |
|
NULL |
|
}; |
|
|
|
int creditline = 0; |
|
int ybase = 0; |
|
int linecount = 24; |
|
int nottheend = 1; |
|
|
|
void ShowCredts() |
|
{ |
|
ClearScreenBuffer(); |
|
|
|
DWORD dwData[2]; |
|
|
|
if(bloaded) { |
|
LoadArtWithPal("ui_art\\credits.pcx", &pPcxCreditsImage, 1, dwData); |
|
gdwCreditsWidth = dwData[0]; |
|
gdwCreditsHeight = dwData[1]; |
|
bloaded = 0; |
|
} |
|
|
|
ybase += 1; |
|
if(ybase >= pFont2[1]) |
|
{ |
|
ybase = 0; |
|
if(!nottheend) |
|
{ |
|
linecount--; |
|
creditline++; |
|
} |
|
else if(the_long_ass_credits[creditline+24] == NULL) |
|
{ |
|
nottheend = 0; |
|
//linecount--; |
|
} |
|
else |
|
creditline++; |
|
} |
|
|
|
DrawArtImage(0, 0, gdwCreditsWidth, gdwCreditsHeight, 0, pPcxCreditsImage); |
|
for(int i = 0; i < linecount; i++) { |
|
if(*the_long_ass_credits[creditline+i] == '$') |
|
DrawPCXString( 320-(GetPCXFontWidth(the_long_ass_credits[creditline+i]+1, pFont2)/2), |
|
50+(i*pFont2[1])-ybase, |
|
gdwFont2Width, |
|
gdwFont2Height, |
|
the_long_ass_credits[creditline+i]+1, |
|
pFont2, |
|
pPcxFont2Image); |
|
else |
|
DrawPCXString( 320-(GetPCXFontWidth(the_long_ass_credits[creditline+i], pFont3)/2), |
|
50+(i*pFont3[1])-ybase, |
|
gdwFont3Width, |
|
gdwFont3Height, |
|
the_long_ass_credits[creditline+i], |
|
pFont3, |
|
pPcxFont3Image); |
|
} |
|
|
|
if(bloaded) { |
|
//bloaded = 0; |
|
//mem_free_dbg(pPcxCreditsImage); |
|
} |
|
} |
|
|
|
void __cdecl paint_select_class() |
|
{ |
|
char names[5][16]; // [esp+Ch] [ebp-88h] |
|
int width[5]; // [esp+5Ch] [ebp-38h] |
|
int a2; // [esp+70h] [ebp-24h] |
|
int j; // [esp+74h] [ebp-20h] |
|
int v4; // [esp+78h] [ebp-1Ch] |
|
int i; // [esp+7Ch] [ebp-18h] |
|
int a1; // [esp+80h] [ebp-14h] |
|
int v7; // [esp+84h] [ebp-10h] |
|
int num_lines; // [esp+88h] [ebp-Ch] |
|
int start_line; // [esp+8Ch] [ebp-8h] |
|
int v10; // [esp+90h] [ebp-4h] |
|
ClearScreenBuffer(); |
|
DrawArtImage(0, 0, gdwTitleWidth, gdwTitleHeight, 0, pPcxTitleImage); |
|
DrawArtWithMask(320-(gdwLogoWidth/2), 0, gdwLogoWidth, gdwLogoHeight, the_pcx_frame, 250, pPcxLogoImage); |
|
strcpy(names[0], "Enter Name"); |
|
// *&names[0][11] = 0; |
|
// names[0][15] = 0; |
|
strcpy(names[1], "Choose Class"); |
|
// *&names[1][13] = 0; |
|
// names[1][15] = 0; |
|
strcpy(names[2], "Warrior"); |
|
// *&names[2][8] = 0i64; |
|
strcpy(names[3], "Rogue"); |
|
// *&names[3][6] = 0.0; |
|
strcpy(names[4], "Sorceror"); |
|
// *&names[4][9] = 0; |
|
// *&names[4][13] = 0; |
|
// names[4][15] = 0; |
|
width[0] = 272; |
|
width[1] = 312; |
|
width[2] = 218; |
|
width[3] = 149; |
|
width[4] = 227; |
|
//CelDecodeOnly(64, 639, pTitlgrayCel_sgpBackCel, 1, 640); |
|
//CelDecodeOnly(236, 282, pDiabfrCel, 1, 296);//CelDecodeOnly(64, 377, pDiabfrCel, diablogo_cel_frame, 640); |
|
if ( (is_typing_plr_name & 0x80u) == 0 ) |
|
{ |
|
start_line = 1; |
|
num_lines = 5; |
|
} |
|
else |
|
{ |
|
start_line = 0; |
|
num_lines = 1; |
|
sgdwProgress = 0; |
|
} |
|
for ( i = start_line; i < num_lines; ++i ) |
|
{ |
|
a1 = ((640 - width[i]) >> 1) + 64; |
|
a2 = 45 * (i - start_line) + 350; |
|
print_title_str_large(a1, a2, names[i]); |
|
if ( num_lines == 1 ) |
|
{ |
|
v10 = 0; |
|
v7 = strlen(chr_name_str); |
|
for ( j = 0; v7 > j; ++j ) |
|
{ |
|
v4 = lfontframe[chr_name_str[j]]; |
|
v10 += lfontkern[v4] + 2; |
|
} |
|
a1 = 374 - (v10 >> 1); |
|
a2 = 9 * (5 * (i - start_line) + 5) + 450; |
|
print_title_str_large(374 - (v10 >> 1), a2, chr_name_str); |
|
} |
|
if ( i == sgdwProgress ) |
|
{ |
|
CelDecodeOnly(155, a2 + 1, pPentitleCel, progress_id, 48); |
|
CelDecodeOnly(563, a2 + 1, pPentitleCel, progress_id, 48); |
|
// if ( demo_mode ) |
|
// { |
|
// if ( sgdwProgress >= 3 ) |
|
// { |
|
// a1 = 244; |
|
// print_title_str_small(244, 624, "Not available in demo"); |
|
// } |
|
// } |
|
} |
|
} |
|
} |
|
|
|
void __cdecl paint_title_cel() |
|
{ |
|
switch ( sgdwProgress ) |
|
{ |
|
case 1: |
|
CelDecodeOnly(64, 639, pTitlgrayCel_sgpBackCel, 1, 640); |
|
break; |
|
case 2: |
|
CelDecodeOnly(64, 639, pTitltextCel, 1, 640); |
|
break; |
|
case 3: |
|
CelDecodeOnly(64, 639, pPentitleCel, 1, 640); |
|
break; |
|
case 4: |
|
CelDecodeOnly(64, 639, pTitlqtxtCel, 1, 640); |
|
break; |
|
case 5: |
|
CelDecodeOnly(64, 639, pDiabfrCel, 1, 640); |
|
break; |
|
case 6: |
|
CelDecodeOnly(64, 639, p_reserved_title, 1, 640); |
|
break; |
|
default: |
|
return; |
|
} |
|
} |
|
|
|
void __fastcall switch_title_option(int type) |
|
{ |
|
byte_5DE90C = 0; |
|
lock_buf_priv(); |
|
switch ( type ) |
|
{ |
|
case 1: |
|
paint_title_screen(); |
|
break; |
|
case 2: |
|
paint_select_class(); |
|
break; |
|
case 3: |
|
ClearScreenBuffer(); |
|
paint_title_cel(); |
|
break; |
|
case 4: |
|
DrawCutscene(); |
|
break; |
|
case 5: |
|
LoadNames(0); |
|
break; |
|
case 6: |
|
paint_diff_screen(); |
|
break; |
|
case 7: |
|
pain_credts(); |
|
break; |
|
default: |
|
break; |
|
} |
|
unlock_buf_priv(); |
|
drawpanflag = 255; |
|
} |
|
|
|
void free_title_shit(); |
|
void interfac_init_title_play_music(); |
|
|
|
void DrawMouse() |
|
{ |
|
int lines = gdwCursorHeight; |
|
if(MouseY > 480-gdwCursorHeight) |
|
lines -= (MouseY - (480-gdwCursorHeight)); |
|
int mx = MouseX; |
|
if(mx < 0) mx = 0; |
|
if(mx >639) mx = 639; |
|
int my = MouseY; |
|
if(my < 0) my = 0; |
|
if(my > 480) my = 480; |
|
|
|
// lock_buf_priv(); |
|
DrawArtWithMask(mx, my, gdwCursorWidth, lines, 0, 0, pPcxCursorImage); |
|
//unlock_buf_priv(); |
|
} |
|
int gbStopGame = 0; |
|
void __fastcall interface_pump_title_message(HWND hWnd) |
|
{ |
|
while ( gbProcessFrame ) |
|
; |
|
gbProcessFrame = 1; |
|
if(playmovie) |
|
{ |
|
playmovie = 0; |
|
music_stop(); |
|
//play_movie("gendata\\diablo1.smk", 1); |
|
mainmenu_refresh_music(); |
|
LoadPalInMem(pcxPal); |
|
lpDDPalette->SetEntries(0, 0, 256, orig_palette); |
|
} |
|
if ( sgbMenuOption ) |
|
{ |
|
if ( sgbMenuOption == 1 ) |
|
{ |
|
PaletteFadeIn(8); //DoFadeIn(); |
|
if ( !sgbMenuOption ) |
|
PostMessageA(hWnd, 0x408u, 0, 0); |
|
} |
|
if ( sgbMenuOption == 2 ) |
|
{ |
|
if ( title_cel_is_loaded & 0x40 ) |
|
sgbMenuOption = 0; |
|
else |
|
PaletteFadeOut(8); //DoFadeOut(); |
|
if ( !sgbMenuOption ) |
|
PostMessageA(hWnd, gNewMSG, 0, 0); |
|
} |
|
if(sgbMenuOption == 7) |
|
{ |
|
free_title_shit(); |
|
if(!TEMP_diablo_init_menu(GetKeyState(VK_SHIFT) < 0, 1)) |
|
{ |
|
gbStopGame = 2;//PostMessage(ghMainWnd, WM_CLOSE, 0, 0); |
|
return; |
|
} |
|
else |
|
{ |
|
interfac_init_title_play_music(); |
|
SetWindowProc(GM_Title); |
|
LoadPalInMem(pcxPal); |
|
mainmenu_refresh_music(); |
|
gb_title_option = 1; |
|
sgdwProgress = 0; |
|
sgbMenuOption = 0; |
|
//InitCursor(); |
|
//InitLevelCursor(); |
|
} |
|
} |
|
lpDDPalette->SetEntries(0, 0, 256, orig_palette); |
|
} |
|
// lock_buf_priv(); |
|
// scrollrt_draw_cursor_back_buffer(); |
|
// unlock_buf_priv(); |
|
switch_title_option(gb_title_option); |
|
// if ( (is_typing_plr_name & 0x80u) == 0 ) { |
|
// lock_buf_priv(); |
|
// scrollrt_draw_cursor_item(); |
|
// unlock_buf_priv(); |
|
// } |
|
DrawMouse(); |
|
|
|
scrollrt_draw_game_screen(0); // set to 1 to draw mouse through engine instead of PCX |
|
|
|
if ( ++progress_id == 9 ) |
|
progress_id = 1; |
|
if ( ++diablogo_cel_frame == 29 ) |
|
diablogo_cel_frame = 1; |
|
if ( ++the_pcx_frame == 15) |
|
the_pcx_frame = 0; |
|
new_timer_2_int = 0; |
|
gbProcessFrame = 0; |
|
} |
|
|
|
void __fastcall diablo_procwait_4882F9(int a1) |
|
{ |
|
while ( gbProcessFrame ) |
|
; |
|
new_timer_2_int = a1; |
|
gbProcessFrame = 0; |
|
} |
|
|
|
void __cdecl interfac_set_player_some() |
|
{ |
|
chr_name_str[0] = '-'; |
|
chr_name_str[1] = 0; |
|
gb_title_option = 2; |
|
is_typing_plr_name = 0; |
|
sgdwProgress = 2; |
|
} |
|
|
|
void __cdecl interfac_init_title_play_music() |
|
{ |
|
//ui setup |
|
DWORD dwData[2]; |
|
|
|
LoadArtWithPal("ui_art\\mainmenu.pcx", &pPcxTitleImage, 1, dwData); |
|
gdwTitleWidth = dwData[0]; |
|
gdwTitleHeight = dwData[1]; |
|
|
|
LoadArtImage("ui_art\\smlogo.pcx", &pPcxLogoImage, 15, dwData); |
|
gdwLogoWidth = dwData[0]; |
|
gdwLogoHeight = dwData[1]; |
|
|
|
LoadArtImage("ui_art\\font42g.pcx", &pPcxFontImage, 256, dwData); |
|
gdwFontWidth = dwData[0]; |
|
gdwFontHeight = dwData[1]; |
|
pFont = LoadFileInMem("ui_art\\font42.bin", 0); |
|
|
|
LoadArtImage("ui_art\\heros.pcx", &pPcxHeroImage, 4, dwData); |
|
gdwHeroWidth = dwData[0]; |
|
gdwHeroHeight = dwData[1]; |
|
|
|
LoadArtImage("ui_art\\selhero.pcx", &pPcxSHeroImage, 1, dwData); |
|
gdwSHeroWidth = dwData[0]; |
|
gdwSHeroHeight = dwData[1]; |
|
|
|
LoadArtImage("ui_art\\cursor.pcx", &pPcxCursorImage, 1, dwData); |
|
gdwCursorWidth = dwData[0]; |
|
gdwCursorHeight = dwData[1]; |
|
|
|
LoadArtImage("ui_art\\font16g.pcx", &pPcxFont2Image, 256, dwData); |
|
gdwFont2Width = dwData[0]; |
|
gdwFont2Height = dwData[1]; |
|
pFont2 = LoadFileInMem("ui_art\\font16.bin", 0); |
|
|
|
ShiftStrColor(gdwFont2Width, gdwFont2Height, 256, pPcxFont2Image, 32, -56, 1); |
|
|
|
LoadArtImage("ui_art\\font16s.pcx", &pPcxFont3Image, 256, dwData); |
|
gdwFont3Width = dwData[0]; |
|
gdwFont3Height = dwData[1]; |
|
pFont3 = LoadFileInMem("ui_art\\font16.bin", 0); |
|
|
|
//ShiftStrColor(gdwFont3Width, gdwFont3Height, 256, pPcxFont3Image, 32, 48, 1); |
|
|
|
title_cel_is_loaded = 0; |
|
is_typing_plr_name = 0; |
|
/* if ( !dword_4BC180 && debug_mode_music_enabled ) |
|
{ |
|
SFileOpenFile("Music\\Dintro.WAV", &dword_4BC180); |
|
SFileDdaBegin(dword_4BC180, 0x40000, 0x40000); |
|
} */ |
|
pTitlgrayCel_sgpBackCel = LoadFileInMem("Gendata\\Titlgray.CEL", 0); |
|
//pPlayerGFX = LoadFileInMem("PlrGFX\\warrior\\whn\\whnat.CL2", 0); |
|
pPentSmall = LoadFileInMem("Data\\PentSpn2.CEL", 0); |
|
pPanelText = LoadFileInMem("CtrlPan\\SmalText.CEL", 0); |
|
pTitltextCel = LoadFileInMem("Data\\BigTGold.CEL", 0); |
|
pPentitleCel = LoadFileInMem("Data\\PentSpin.CEL", 0); |
|
pSTextBoxCels = LoadFileInMem("Data\\TextBox2.CEL", 0); |
|
pTitlqtxtCel = LoadFileInMem("Data\\MedTextS.CEL", 0); |
|
pDiabfrCel = LoadFileInMem("Data\\Diabsmal.CEL", 0); |
|
sgdwProgress = 0; |
|
progress_id = 1; |
|
the_pcx_frame = 0; |
|
diablogo_cel_frame = 1; |
|
/* load_title_game00(); |
|
if ( some_save_flag ) |
|
dword_603F10 = 1; */ |
|
gb_title_option = 1; |
|
switch_title_option(1); |
|
//SetCursor(CURSOR_HAND); |
|
|
|
|
|
} |
|
|
|
void free_title_shit() |
|
{ |
|
//pPlayerGFX = 0; |
|
//mem_free_dbg(pPlayerGFX); |
|
pSTextBoxCels = 0; |
|
mem_free_dbg(pSTextBoxCels); |
|
pPanelText = 0; |
|
mem_free_dbg(pPanelText); |
|
pPentSmall = 0; |
|
mem_free_dbg(pPentSmall); |
|
pTitlgrayCel_sgpBackCel = 0; |
|
mem_free_dbg(pTitlgrayCel_sgpBackCel); |
|
pTitltextCel = 0; |
|
mem_free_dbg(pTitltextCel); |
|
pPentitleCel = 0; |
|
mem_free_dbg(pPentitleCel); |
|
pTitlqtxtCel = 0; |
|
mem_free_dbg(pTitlqtxtCel); |
|
pDiabfrCel = 0; |
|
mem_free_dbg(pDiabfrCel); |
|
|
|
mem_free_dbg(pPcxLogoImage); |
|
mem_free_dbg(pPcxFontImage); |
|
mem_free_dbg(pFont); |
|
mem_free_dbg(pPcxCursorImage); |
|
mem_free_dbg(pPcxFont2Image); |
|
mem_free_dbg(pFont2); |
|
mem_free_dbg(pPcxFont3Image); |
|
mem_free_dbg(pFont3); |
|
mem_free_dbg(pPcxTitleImage); |
|
mem_free_dbg(pPcxHeroImage); |
|
mem_free_dbg(pPcxSHeroImage); |
|
} |
|
|
|
LRESULT __fastcall PROC2_GM_ClassMenu(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) |
|
{ |
|
LRESULT result; // eax |
|
//void *p; // eax MAPDST |
|
char c; // [esp+1Ch] [ebp-4h] |
|
|
|
if ( Msg > WM_KEYDOWN ) |
|
{ |
|
if ( Msg > WM_MOUSEMOVE ) |
|
{ |
|
if ( Msg > WM_USER ) |
|
{ |
|
if ( Msg == 0x408 ) |
|
return 0; |
|
if ( Msg != 0x409 ) |
|
{ |
|
if ( Msg == 0x40C ) |
|
return 0; |
|
return DefWindowProcA(hWnd, Msg, wParam, lParam); |
|
} |
|
|
|
free_title_shit(); |
|
if ( is_typing_plr_name & 0x40 ) |
|
{ |
|
gNewMSG = 0x40C; |
|
//InitCutscene(); |
|
sgbMenuOption = 2; |
|
gbProcType = 14; |
|
//TEMP_diablo_init_menu(0, 1); |
|
} |
|
else |
|
{ |
|
interfac_init_title_play_music(); |
|
LoadPalette("Gendata\\Title.pal"); |
|
gbProcType = 1; |
|
is_typing_plr_name = 0; |
|
//CopyPalette(logical_palette, orig_palette); |
|
PaletteFadeIn(32); |
|
drawpanflag = 4; |
|
} |
|
result = 0; |
|
} |
|
else |
|
{ |
|
if ( Msg == WM_USER ) |
|
{ |
|
interface_pump_title_message(hWnd); |
|
return 0; |
|
} |
|
if ( Msg != WM_LBUTTONDOWN || sgbMenuOption ) |
|
return DefWindowProcA(hWnd, Msg, wParam, lParam); |
|
if ( (is_typing_plr_name & 0x80u) != 0 ) |
|
{ |
|
if ( chr_name_str[0] != '-' ) |
|
{ |
|
PlaySFX(IS_TITLSLCT); |
|
chr_name_str[gb_Lfont_str_len] = 0; |
|
//InitQuests(); |
|
PaletteFadeOut(32); |
|
title_cel_is_loaded &= 0xBFu; |
|
is_typing_plr_name |= 0x40u; |
|
gNewMSG = 1033; |
|
} |
|
} |
|
else |
|
{ |
|
sgdwProgress = 2; |
|
if ( MouseY >= 335 ) |
|
sgdwProgress = 3; |
|
if ( MouseY >= 380 ) |
|
sgdwProgress = 4; |
|
PlaySFX(IS_TITLSLCT); |
|
//if ( demo_mode && sgdwProgress >= 3 ) |
|
// return 0; |
|
if ( sgdwProgress == 2 ) |
|
c = 0; |
|
if ( sgdwProgress == 3 ) |
|
c = 1; |
|
if ( sgdwProgress == 4 ) |
|
c = 2; |
|
CreatePlayer(myplr, c); |
|
is_typing_plr_name |= 0x80u; |
|
} |
|
result = 0; |
|
} |
|
} |
|
else if ( Msg == WM_MOUSEMOVE ) |
|
{ |
|
if ( (is_typing_plr_name & 0x80u) == 0 ) |
|
{ |
|
MouseX = lParam & 0xFFFF; |
|
MouseY = lParam >> 16; |
|
} |
|
result = 0; |
|
} |
|
else |
|
{ |
|
if ( Msg != WM_CHAR || sgbMenuOption ) |
|
return DefWindowProcA(hWnd, Msg, wParam, lParam); |
|
if ( (is_typing_plr_name & 0x80u) != 0 ) |
|
{ |
|
if ( wParam == VK_BACK && gb_Lfont_str_len > 0 ) |
|
{ |
|
chr_name_str[gb_Lfont_str_len-1] = 0; |
|
if ( gb_Lfont_str_len == 1 ) |
|
{ |
|
chr_name_str[0] = '-'; |
|
chr_name_str[1] = 0; |
|
} |
|
} |
|
if ( wParam >= 'a' && wParam <= 'z' ) |
|
wParam -= ' '; |
|
if ( wParam >= ' ' && wParam <= ']' && gb_Lfont_pix_width <= 535 ) |
|
{ |
|
if ( chr_name_str[gb_Lfont_str_len-1] == '-' ) |
|
--gb_Lfont_str_len; |
|
chr_name_str[gb_Lfont_str_len] = wParam; |
|
chr_name_str[gb_Lfont_str_len + 1] = 0; |
|
} |
|
if ( wParam == VK_RETURN && chr_name_str[0] != '-' ) |
|
{ |
|
PlaySFX(IS_TITLSLCT); |
|
chr_name_str[gb_Lfont_str_len] = 0; |
|
//InitQuests(); |
|
PaletteFadeOut(32); |
|
title_cel_is_loaded &= 0xBFu; |
|
is_typing_plr_name |= 0x40u; |
|
sgbMenuOption = 7; |
|
return 0; |
|
TEMP_diablo_init_menu(0, 1); |
|
//gNewMSG = 0x409; |
|
} |
|
} |
|
result = 0; |
|
} |
|
} |
|
else |
|
{ |
|
if ( Msg == WM_KEYDOWN ) |
|
{ |
|
if ( (is_typing_plr_name & 0x80u) == 0 ) |
|
{ |
|
switch ( wParam ) |
|
{ |
|
case VK_RETURN: |
|
PlaySFX(IS_TITLSLCT); |
|
//if ( demo_mode && sgdwProgress >= 3 ) |
|
// return 0; |
|
if ( sgdwProgress == 2 ) |
|
c = 0; |
|
if ( sgdwProgress == 3 ) |
|
c = 1; |
|
if ( sgdwProgress == 4 ) |
|
c = 2; |
|
CreatePlayer(myplr, c); |
|
is_typing_plr_name |= 0x80u; |
|
return 0; |
|
case VK_UP: |
|
PlaySFX(IS_TITLEMOV); |
|
if ( sgdwProgress == 2 ) |
|
sgdwProgress = 4; |
|
else |
|
--sgdwProgress; |
|
return 0; |
|
case VK_DOWN: |
|
PlaySFX(IS_TITLEMOV); |
|
if ( ++sgdwProgress > 4 ) |
|
sgdwProgress = 2; |
|
return 0; |
|
} |
|
} |
|
if ( wParam == VK_ESCAPE ) |
|
{ |
|
//PaletteFadeOut(32); |
|
title_cel_is_loaded &= 0xBFu; |
|
gbProcType = 1; |
|
gb_title_option = 1; |
|
sgdwProgress = 0; |
|
//gNewMSG = 0x409; |
|
} |
|
return 0; |
|
} |
|
if ( Msg != WM_ACTIVATEAPP ) |
|
return DefWindowProcA(hWnd, Msg, wParam, lParam); |
|
gbActive = wParam; |
|
if ( wParam ) |
|
palette_update(); |
|
result = 0; |
|
} |
|
return result; |
|
} |
|
|
|
void __fastcall MenuKeyDown(WPARAM wParam) |
|
{ |
|
int max; |
|
if(gb_title_option == 6) |
|
max = 3; |
|
else if(gb_title_option == 5) |
|
max = maxheroes; |
|
else |
|
max = 4; |
|
|
|
switch ( wParam ) |
|
{ |
|
case VK_ESCAPE: |
|
PlaySFX(IS_TITLSLCT); |
|
if(gb_title_option == 6) |
|
{ |
|
sgdwProgress = thehero; |
|
} |
|
else { |
|
sgdwProgress = 0; |
|
} |
|
if(gb_title_option == 6) |
|
{ |
|
gb_title_option = 5; |
|
break; |
|
} |
|
if(gb_title_option == 5 || gb_title_option == 7) |
|
{ |
|
gb_title_option = 1; |
|
break; |
|
} |
|
gbStopGame = 1;//PostMessage(ghMainWnd, WM_CLOSE, 0, 0); |
|
break; |
|
case VK_RETURN: |
|
//interface_pump_title_message(hWnd); |
|
PlaySFX(IS_TITLSLCT); |
|
if(gb_title_option == 5) |
|
{ |
|
if(!heroarray[sgdwProgress].level) |
|
return; |
|
strcpy(chr_name_str, heroarray[sgdwProgress].name); |
|
thehero = sgdwProgress; |
|
sgdwProgress = 0; |
|
gb_title_option = 6; |
|
return; |
|
} |
|
if(gb_title_option == 6) |
|
{ |
|
if(!heroarray[thehero].level) |
|
return; |
|
if(sgdwProgress == 0 || sgdwProgress == 1) |
|
gnDifficulty = DIFF_NORMAL; |
|
else if(sgdwProgress == 2) |
|
gnDifficulty = DIFF_NIGHTMARE; |
|
else if(sgdwProgress == 3) |
|
gnDifficulty = DIFF_HELL; |
|
sgbMenuOption = 7; |
|
return; |
|
} |
|
else |
|
{ |
|
if ( sgdwProgress == 4 ) |
|
{ |
|
PaletteFadeOut(32); |
|
gbStopGame = 1;//PostMessage(ghMainWnd, WM_CLOSE, 0, 0); |
|
} |
|
else if (sgdwProgress == 0) |
|
{ |
|
sgdwProgress = 0; |
|
gb_title_option = 5; |
|
} |
|
else if(sgdwProgress == 2) |
|
{ |
|
playmovie = 1; |
|
} |
|
else if (sgdwProgress == 1) |
|
{ |
|
sgdwProgress = 0; |
|
title_cel_is_loaded |= 0x40u; |
|
sgbMenuOption = 2; |
|
gNewMSG = 0x409; |
|
} |
|
else if (sgdwProgress == 3) |
|
{ |
|
sgdwProgress = 0; |
|
gb_title_option = 7; |
|
bloaded = 1; |
|
} |
|
} |
|
break; |
|
case VK_UP: |
|
PlaySFX(IS_TITLEMOV); |
|
if ( sgdwProgress ) |
|
--sgdwProgress; |
|
else |
|
sgdwProgress = max; |
|
//if ( sgdwProgress == 1 ) //&& !dword_603F10 ) |
|
// --sgdwProgress; |
|
break; |
|
case VK_DOWN: |
|
|
|
PlaySFX(IS_TITLEMOV); |
|
//if ( ++sgdwProgress == 1 ) //&& !dword_603F10 ) |
|
++sgdwProgress; |
|
if ( sgdwProgress > max ) |
|
sgdwProgress = 0; |
|
break; |
|
} |
|
} |
|
|
|
void MenuMouseDown() |
|
{ |
|
int prog_old = sgdwProgress; |
|
sgdwProgress = 0; |
|
if ( MouseY >= 190 && MouseY < 231 ) |
|
{ |
|
/*if ( dword_603F10 == 1 ) |
|
sgdwProgress = 1; |
|
else */ |
|
sgdwProgress = prog_old; |
|
PlaySFX(IS_TITLSLCT); |
|
gb_title_option = 5; |
|
return; |
|
} |
|
if ( MouseY >= 232 && MouseY < 280 ) { |
|
sgdwProgress = 2; |
|
gbStopGame = 1;//PostMessage(ghMainWnd, WM_CLOSE, 0, 0); |
|
} |
|
if ( MouseY >= 140 && MouseY <= 190) { |
|
PlaySFX(IS_TITLSLCT); |
|
|
|
if ( sgdwProgress && sgdwProgress != 1 ) |
|
PaletteFadeOut(32); |
|
else |
|
title_cel_is_loaded |= 0x40u; |
|
sgbMenuOption = 2; |
|
gNewMSG = 0x409; |
|
} |
|
} |
|
|
|
LRESULT CALLBACK GM_Title(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) |
|
{ |
|
switch(Msg) |
|
{ |
|
case WM_ACTIVATEAPP: |
|
gbActive = wParam; |
|
if ( wParam ) |
|
palette_update(); |
|
break; |
|
case WM_USER: |
|
interface_pump_title_message(hWnd); |
|
return 0; |
|
case WM_LBUTTONDOWN: |
|
sgbMouseDown = 1; |
|
SetCapture(hWnd); |
|
if(!sgbMenuOption) |
|
MenuMouseDown(); |
|
break; |
|
case WM_LBUTTONUP: |
|
sgbMouseDown = 0; |
|
ReleaseCapture(); |
|
break; |
|
case WM_DESTROY: |
|
// dword_61B754 = 1; |
|
// timeEndPeriod(uPeriod); |
|
// free_title_shit(); |
|
ShowCursor(1); |
|
PostQuitMessage(0); |
|
break; |
|
case WM_MOUSEMOVE: |
|
MouseX = lParam & 0xFFFF; |
|
MouseY = lParam >> 16; |
|
break; |
|
case WM_KEYDOWN: |
|
MenuKeyDown(wParam); |
|
return 0; |
|
case 0x408: |
|
drawpanflag = 255; |
|
diablo_procwait_4882F9(0); |
|
return 0; |
|
case 0x409: |
|
if ( !(title_cel_is_loaded & 0x40) ) |
|
{ |
|
free_title_shit(); |
|
} |
|
if ( sgdwProgress == 0 ) |
|
{ |
|
interfac_set_player_some(); |
|
gbProcType = 2; |
|
drawpanflag = 255; |
|
diablo_procwait_4882F9(0); |
|
} |
|
else if ( sgdwProgress == 1 ) |
|
{ |
|
gNewMSG = 0x40D; |
|
//InitCutscene(); |
|
sgbMenuOption = 2; |
|
gbProcType = 14; |
|
} |
|
else if ( sgdwProgress == 2 ) |
|
{ |
|
//interfac_init_exit_screens(hWnd, Msg); |
|
//LoadPalette("Gendata\\Screen01.pal"); |
|
sgbMenuOption = 2; |
|
gNewMSG = 0x409; |
|
gbProcType = 13; |
|
} |
|
drawpanflag = 255; |
|
return 0; |
|
} |
|
|
|
return DefWindowProcA(hWnd, Msg, wParam, lParam); |
|
} |
|
|
|
struct timecaps_tag ptc; |
|
unsigned int uPeriod; |
|
unsigned int uDelay; |
|
int gdwCurTime; |
|
unsigned int guTimerID; |
|
int gbFuckThis = 0; |
|
|
|
void __stdcall TimeProc(UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2) |
|
{ |
|
long dwTime; // [esp+Ch] [ebp-4h] |
|
|
|
if ( !gbProcessFrame ) |
|
{ |
|
gbProcessFrame = 1; |
|
dwTime = timeGetTime(); |
|
if ( dwTime - gdwCurTime >= 1000/MENU_FRAME_RATE && !new_timer_2_int ) // 20 frames per second (50 milisecs) |
|
{ |
|
new_timer_2_int = 1; |
|
if ( gbFuckThis ) |
|
PostMessageA((HWND)dwUser, WM_USER, 0, 0); |
|
gdwCurTime = dwTime; |
|
} |
|
if ( gbFuckThis == 2 ) |
|
{ |
|
timeKillEvent(guTimerID); |
|
ExitThread(0); |
|
} |
|
gbProcessFrame = 0; |
|
} |
|
} |
|
|
|
LRESULT __stdcall MenuProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) |
|
{ |
|
LRESULT new_proc; // eax |
|
|
|
switch ( gbProcType ) |
|
{ |
|
case 0: |
|
// new_proc = PROC0_GM_Logo(hWnd, Msg, wParam, lParam); |
|
// break; |
|
case 1: |
|
new_proc = GM_Title(hWnd, Msg, wParam, lParam); |
|
break; |
|
case 2: |
|
new_proc = PROC2_GM_ClassMenu(hWnd, Msg, wParam, lParam); |
|
break; |
|
case 7: |
|
//new_proc = PROC3_GM_Game(hWnd, Msg, wParam, lParam); |
|
//break; |
|
case 12: |
|
//new_proc = PROC12_GM_Intro(hWnd, Msg, wParam, lParam); |
|
//break; |
|
case 13: |
|
//new_proc = PROC13_GM_Exit(hWnd, Msg, wParam, lParam); |
|
//break; |
|
case 14: |
|
//new_proc = PROC14_GM_Progress(hWnd, Msg, wParam, lParam); |
|
//break; |
|
default: |
|
new_proc = DefWindowProcA(hWnd, Msg, wParam, lParam); |
|
break; |
|
} |
|
return new_proc; |
|
} |
|
|
|
int __stdcall ui_add_hero_infos(_uiheroinfo *a1) |
|
{ |
|
memcpy(&heroarray[fuckcount], a1, sizeof(_uiheroinfo)); |
|
fuckcount++; |
|
return 0; |
|
} |
|
|
|
void __cdecl mainmenu_loop() |
|
{ |
|
printf("MainMenu_Loop? \n\n"); |
|
WNDPROC saveProc; // edi |
|
MSG Msg; // [esp+8h] [ebp-24h] |
|
|
|
gbFuckThis = 1; |
|
|
|
sgbMenuOption = 0; |
|
//lpDDPalette->SetEntries(0, 0, 256, orig_palette); |
|
|
|
|
|
//timer |
|
new_timer_2_int = 0; |
|
gbProcessFrame = 0; |
|
|
|
diablo_procwait_4882F9(0); |
|
timeGetDevCaps(&ptc, 8u); |
|
uPeriod = ptc.wPeriodMin; |
|
uDelay = ptc.wPeriodMin; |
|
if ( ptc.wPeriodMin <= 5 ) |
|
uDelay = 5; |
|
|
|
timeBeginPeriod(uPeriod); |
|
gdwCurTime = timeGetTime(); |
|
guTimerID = timeSetEvent(uDelay, uPeriod, TimeProc, (long)ghMainWnd, TIME_PERIODIC|TIME_CALLBACK_FUNCTION); |
|
|
|
|
|
//hero |
|
pfile_ui_set_hero_infos(ui_add_hero_infos); |
|
|
|
ClearScreenBuffer(); |
|
//InitCursor(); |
|
//InitLevelCursor(); |
|
interfac_init_title_play_music(); |
|
|
|
//main proc |
|
saveProc = SetWindowProc(MenuProc); |
|
|
|
PaletteFadeIn(8); |
|
drawpanflag = 255; |
|
mainmenu_refresh_music(); |
|
|
|
//pfile_ui_set_hero_infos(ui_add_hero_infos); |
|
|
|
while( 1 ) |
|
{ |
|
|
|
if( PeekMessage( &Msg, NULL, 0, 0, PM_NOREMOVE ) ) |
|
{ |
|
if( !GetMessage( &Msg, NULL, 0, 0 ) ) |
|
{ |
|
break; |
|
} |
|
TranslateMessage(&Msg); |
|
DispatchMessage(&Msg); |
|
} |
|
if(gbStopGame) { |
|
PostMessage(ghMainWnd, WM_CLOSE, 0, 0); |
|
break; |
|
} |
|
|
|
Sleep(1); |
|
} |
|
|
|
PaletteFadeOut(8); |
|
timeEndPeriod(uPeriod); |
|
gbFuckThis = 2; |
|
SetWindowProc(saveProc); |
|
music_stop(); |
|
if(gbStopGame == 1) |
|
free_title_shit(); |
|
init_cleanup(0); |
|
}
|
|
|