diff --git a/Stub/diabloui.cpp b/Stub/diabloui.cpp index 5ba2066ba..1b7b41979 100644 --- a/Stub/diabloui.cpp +++ b/Stub/diabloui.cpp @@ -8,6 +8,10 @@ int MenuItem[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; int PreviousItem[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; int submenu = 0; +bool CreateSinglePlayerChar; +bool StartNewGame; +int HeroChosen = 0; + void __cdecl UiDestroy() { DUMMY(); diff --git a/Stub/init.cpp b/Stub/init.cpp index 513b61fe3..e91d5b7ac 100644 --- a/Stub/init.cpp +++ b/Stub/init.cpp @@ -1,19 +1,23 @@ +//HEADER_GOES_HERE + #include "../types.h" -#ifndef NO_GLOBALS +_SNETVERSIONDATA fileinfo; +int gbActive; // weak +char diablo_exe_path[260]; +void *unused_mpq; +char patch_rt_mpq_path[260]; +WNDPROC CurrentProc; void *diabdat_mpq; +char diabdat_mpq_path[260]; void *patch_rt_mpq; +int killed_mom_parent; // weak +BOOLEAN screensaver_enabled_prev; -_SNETVERSIONDATA fileinfo; -WNDPROC CurrentProc; -int gbActive; -#endif +/* data */ char gszVersionNumber[260] = "internal version unknown"; char gszProductName[260] = "Diablo v1.09"; -bool StartNewGame; -bool CreateSinglePlayerChar; -int HeroChosen = 0; /** * Case insensitive search for a file name in a directory. diff --git a/Stub/sdlrender.cpp b/Stub/sdlrender.cpp index abaecbdf4..bd40e4bf7 100644 --- a/Stub/sdlrender.cpp +++ b/Stub/sdlrender.cpp @@ -57,8 +57,6 @@ void *MenuPentegram16; void *MenuPentegram; void *MenuPentegram42; -void *pDiabfrCel; - char HeroUndecidedName[17]; _uiheroinfo heroarray[10]; @@ -543,7 +541,7 @@ BOOL nottheend = TRUE; ///////////////////////////////////////// PALETTEENTRY pcxPal[256]; -void __fastcall LoadPalInMem(PALETTEENTRY *pPal) +void LoadPalInMem(PALETTEENTRY *pPal) { int i; @@ -555,7 +553,7 @@ void __fastcall LoadPalInMem(PALETTEENTRY *pPal) } } -BOOL __cdecl LoadArtImage(char *pszFile, void **pBuffer, int frames, DWORD *data) +BOOL LoadArtImage(char *pszFile, void **pBuffer, int frames, DWORD *data) { DWORD width; DWORD height; @@ -746,26 +744,14 @@ void SdlDiabloMainWindow() j_lock_buf_priv(0); //FIXME 0? } -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 + SY < SCREEN_HEIGHT; i++, src += SW, dst += 768) { - for (int j = 0; j < SW && j + SX < SCREEN_WIDTH; j++) { - dst[j] = src[j]; - } - } -} - -void DrawArtWithMask(int SX, int SY, int SW, int SH, int nFrame, BYTE bMask, void *pBuffer) +void DrawArtImage(int SX, int SY, int SW, int SH, int nFrame, void *pBuffer, BYTE *bMask = NULL) { BYTE *src = (BYTE *)pBuffer + (SW * SH * nFrame); BYTE *dst = (BYTE *)&gpBuffer->row[SY].pixels[SX]; for (int i = 0; i < SH && i + SY < SCREEN_HEIGHT; i++, src += SW, dst += 768) { for (int j = 0; j < SW && j + SX < SCREEN_WIDTH; j++) { - if (src[j] != bMask) + if (bMask == NULL || src[j] != *bMask) dst[j] = src[j]; } } @@ -782,11 +768,13 @@ int GetCenterOffset(int w, int bw = 0) void DrawPCXString(int x, int y, int w, int h, BYTE *str, BYTE *font, void *pBuff) { - int i; int len = 0; + BYTE mask = 32; BYTE chr; + int i; + for (i = 0; i < strlen(str); i++) { - DrawArtWithMask(x + len, y, w, h, str[i], 32, pBuff); + DrawArtImage(x + len, y, w, h, str[i], pBuff, &mask); chr = font[str[i] + 2]; if (chr) len += chr; @@ -795,7 +783,7 @@ void DrawPCXString(int x, int y, int w, int h, BYTE *str, BYTE *font, void *pBuf } } -int __fastcall GetPCXFontWidth(unsigned char *str, BYTE *font) +int GetPCXFontWidth(unsigned char *str, BYTE *font) { int i; int len = 0; @@ -996,9 +984,10 @@ BOOL ShowCredts() void AnimateDiabloLogo(int t, int w, int h, void *pBuffer) { + BYTE mask = 250; int frame = GetAnimationFrame(15); - DrawArtWithMask(GetCenterOffset(w), t, w, h, frame, 250, pBuffer); + DrawArtImage(GetCenterOffset(w), t, w, h, frame, pBuffer, &mask); } void RenderDiabloLogo() @@ -1013,6 +1002,8 @@ void RenderDiabloLogoSm() void DrawMouse() { + BYTE mask = 0; + SDL_GetMouseState(&MouseX, &MouseY); float scaleX; @@ -1025,18 +1016,20 @@ void DrawMouse() MouseX -= view.x; MouseY -= view.y; - DrawArtWithMask(MouseX, MouseY, gdwCursorWidth, gdwCursorHeight, 0, 0, pPcxCursorImage); + DrawArtImage(MouseX, MouseY, gdwCursorWidth, gdwCursorHeight, 0, pPcxCursorImage, &mask); } void AnimateSelector(int x, int y, int width, int padding, int spacing, int swidth, void *pBuffer) { + BYTE mask = 250; + width = width ? width : SCREEN_WIDTH; x += GetCenterOffset(swidth, width); y += (SelectedItem - 1) * spacing; int frame = GetAnimationFrame(8); - DrawArtWithMask(x - width / 2 + padding, y, swidth, swidth, frame, 250, pBuffer); - DrawArtWithMask(x + width / 2 - padding, y, swidth, swidth, frame, 250, pBuffer); + DrawArtImage(x - width / 2 + padding, y, swidth, swidth, frame, pBuffer, &mask); + DrawArtImage(x + width / 2 - padding, y, swidth, swidth, frame, pBuffer, &mask); } void DrawSelector16(int x, int y, int width, int padding, int spacing) diff --git a/Stub/sdlrender.h b/Stub/sdlrender.h index 7e8b9cd37..301abb1fa 100644 --- a/Stub/sdlrender.h +++ b/Stub/sdlrender.h @@ -8,11 +8,11 @@ extern int gdwFont16Height; extern void *pPcxFont16sImage; extern void *pPcxFont16gImage; +extern unsigned char *pFont24; extern int gdwFont24Width; extern int gdwFont24Height; extern void *pPcxFont24sImage; extern void *pPcxFont24gImage; -extern unsigned char *pFont24; extern unsigned char *pFont30; extern int gdwFont30Width; @@ -25,9 +25,6 @@ extern int gdwFont42Width; extern int gdwFont42Height; extern void *pPcxFont42gImage; -extern void *pTitlqtxtCel; -extern void *pDiabfrCel; - extern void *pPcxLogoImage; extern int gdwLogoWidth; extern int gdwLogoHeight; @@ -49,11 +46,6 @@ extern int gdwSHeroWidth; extern void *pPcxSHeroImage; extern void *pMedTextCels; -extern void *pPcxGameImage; -extern void *pPcxCreditsImage; -extern int gdwCreditsWidth; -extern int gdwCreditsHeight; - extern int fadeValue; extern int lineCount; extern int creditline; @@ -63,60 +55,27 @@ extern int lastYbase; extern bool TitleImageLoaded; extern int SelectedItem; -extern int totalFrames; -//extern SDL_Texture* spriteSheet; -extern SDL_Surface *DiabloTitle; -extern SDL_Event input; - extern int SCREEN_WIDTH; extern int SCREEN_HEIGHT; extern int TotalPlayers; -extern SDL_Rect textureRect; -extern SDL_Rect windowRect; - -//Menu0 //Main Menu rects -extern SDL_Rect SinglePlrBox; -extern SDL_Rect MultiPlrBox; -extern SDL_Rect ReplayIntroBox; -extern SDL_Rect ShowCreditsBox; -extern SDL_Rect ExitBox; - -extern bool StartNewGame; -extern bool CreateSinglePlayerChar; -extern int HeroChosen; - -extern void *TitleMenuText; - extern void *MenuPentegram16; extern void *MenuPentegram; extern void *MenuPentegram42; extern char HeroUndecidedName[17]; -extern SDL_Rect SinglePlayerMenuCancelBox; -extern SDL_Rect CreateHeroBox; -void CreateMenuDialogBox(); -void CreateDiabloMainMenuz(); void SdlDiabloMainWindow(); void RenderDiabloSplashPage(); void RenderDiabloMainPage(char *name); -char *GetWorkingDirectory(); -void CreateMainDiabloMenu(); void RenderDiabloSinglePlayerPage(); BOOL ShowCredts(); -void RenderCharNames(); void FreeMenuItems(); -BOOL __cdecl LoadArtImage(char *pszFile, void **pBuffer, int frames, DWORD *data); -void DrawMouse(); -void DrawCursor(int mx, int my); +BOOL LoadArtImage(char *pszFile, void **pBuffer, int frames, DWORD *data); void CreateHeroMenu(); void RenderUndecidedHeroName(int HeroClass); void LoadHeroStats(); -void RenderDefaultStats(int HeroClass); void DrawPreGameOptions(int HeroClass, int ShowClasses); void DrawPreGameDifficultySelection(int HeroClass, int ShowClasses); void DrawSelMultiConnection(); int GetCenterOffset(int w, int bw = 0); -void DrawPCXString(int x, int y, int w, int h, BYTE *str, BYTE *font, void *pBuff); -void DrawArtWithMask(int SX, int SY, int SW, int SH, int nFrame, BYTE bMask, void *pBuffer);