From 59fcb9d2e73ad406eb16d67cb37d5d0b7698b06a Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Thu, 31 Jan 2019 17:51:53 +0100 Subject: [PATCH] Add missing ui file --- CMakeLists.txt | 2 +- Stub/DiabloUI/sdlrender.cpp | 2 +- Stub/DiabloUI/sdlrender.h | 7 +- Stub/DiabloUI/selconn.cpp | 138 ++++++++++++++++++++++++++++++++++++ 4 files changed, 144 insertions(+), 5 deletions(-) create mode 100644 Stub/DiabloUI/selconn.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 4da324eef..46f2db2f2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -147,7 +147,7 @@ set(STUB_SOURCES Stub/DiabloUI/sdlrender.cpp Stub/DiabloUI/selconn.cpp Stub/DiabloUI/selhero.cpp - Stub/DiabloUI/title.cpp + Stub/DiabloUI/title.cpp 3rdParty/StormLib/src/FileStream.cpp 3rdParty/StormLib/src/SBaseCommon.cpp diff --git a/Stub/DiabloUI/sdlrender.cpp b/Stub/DiabloUI/sdlrender.cpp index 1f32e5114..8cc1988f5 100644 --- a/Stub/DiabloUI/sdlrender.cpp +++ b/Stub/DiabloUI/sdlrender.cpp @@ -257,7 +257,7 @@ int GetAnimationFrame(int frames, int fps = 60) return frame > frames ? 0 : frame; } -void UiFadeIn(int steps) +bool UiFadeIn(int steps) { if (fadeValue < 256) { fadeValue += steps; diff --git a/Stub/DiabloUI/sdlrender.h b/Stub/DiabloUI/sdlrender.h index 9a5f5397d..a1c501efa 100644 --- a/Stub/DiabloUI/sdlrender.h +++ b/Stub/DiabloUI/sdlrender.h @@ -68,19 +68,20 @@ typedef enum TXT_JUST { bool IsInsideRect(const SDL_Event *event, const SDL_Rect *rect); bool LoadArtImage(char *pszFile, void **pBuffer, int frames, DWORD *data, PALETTEENTRY *pPalette = NULL); +bool UiFadeIn(int steps = 10); bool UiFadeOut(int steps = 5); int GetAnimationFrame(int frames, int fps = 60); int GetCenterOffset(int w, int bw = 0); void DrawArtImage(int SX, int SY, int SW, int SH, int nFrame, void *pBuffer, BYTE *bMask = NULL); void DrawMouse(); void DrawSelector16(int x, int y, int width, int padding, int spacing); -void DrawSelector42(int x, int y, int width, int padding, int spacing); void DrawSelector(int x, int y, int width, int padding, int spacing); +void DrawSelector42(int x, int y, int width, int padding, int spacing); void FreeMenuItems(); void LoadHeroStats(); void LoadTitelArt(char *pszFile); -void PrintText16Silver(int x, int y, char *text, TXT_JUST align = JustLeft, int bw = 0); void PrintText16Gold(int x, int y, char *text, TXT_JUST align = JustLeft, int bw = 0); +void PrintText16Silver(int x, int y, char *text, TXT_JUST align = JustLeft, int bw = 0); void PrintText24Gold(int x, int y, char *text, TXT_JUST align = JustLeft, int bw = 0); void PrintText24Silver(int x, int y, char *text, TXT_JUST align = JustLeft, int bw = 0); void PrintText30Gold(int x, int y, char *text, TXT_JUST align = JustLeft, int bw = 0); @@ -90,4 +91,4 @@ void RenderDiabloLogo(); void RenderDiabloLogoSm(); void SdlDiabloMainWindow(); void SetMenu(int MenuId); -void UiFadeIn(int steps = 10); + diff --git a/Stub/DiabloUI/selconn.cpp b/Stub/DiabloUI/selconn.cpp new file mode 100644 index 000000000..54520b520 --- /dev/null +++ b/Stub/DiabloUI/selconn.cpp @@ -0,0 +1,138 @@ +#include "../../types.h" + +void selconn_Render() +{ + DrawArtImage(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, pPcxTitleImage); + RenderDiabloLogoSm(); + + PrintText30Silver(-1, 161, "Multi Player Game", JustCentre); + + int w = 334; + int x = 280; + int y = 261; + + PrintText30Silver(x, 211, "Select Connection", JustCentre, w); + + char *connections[5] = { + "Battle.net", + "Local Area Network (IPC)", + "Modem", + "Direct Cable Connection", + "Local Area Network (UDP)" + }; + + int selectorTop = y; + + for (int i = 0; i < 5; i++) { + PrintText16Gold(x - 1, y, connections[i], JustCentre, w); + y += 26; + } + + DrawSelector16(x, selectorTop - 2, w, 35, 26); + + PrintText16Silver(35, 218, "Players Supported: 4"); + + PrintText16Silver(35, 256, "Requirements:"); + // TODO need a word wrap function + PrintText16Silver(35, 275, "All computers must be"); + PrintText16Silver(35, 291, "connected to an"); + PrintText16Silver(35, 307, "IPX-compatible network."); + + PrintText24Silver(26, 356, "no gateway needed", JustCentre, 226); + + PrintText30Gold(349, 429, "OK"); + PrintText30Gold(476, 429, "Cancel"); +} + +void selconn_Loade() +{ + LoadTitelArt("ui_art\\selgame.pcx"); +} + +void selconn_Free() +{ + mem_free_dbg(pPcxTitleImage); + pPcxTitleImage = NULL; +} + +int __stdcall UiSelectProvider(int a1, _SNETPROGRAMDATA *client_info, _SNETPLAYERDATA *user_info, _SNETUIDATA *ui_info, + _SNETVERSIONDATA *file_info, int *type) +{ + selconn_Loade(); + + SelectedItem = 1; + SelectedItemMax = 5; + SDL_Event event; + + bool done = false; + while (done == false) { + selconn_Render(); + if (SDL_PollEvent(&event)) { + switch (event.type) { + case SDL_KEYDOWN: + switch (event.key.keysym.sym) { + case SDLK_UP: + SelectedItem--; + if (SelectedItem < MAINMENU_SINGLE_PLAYER) { + SelectedItem = SelectedItemMax; + } + effects_play_sound("sfx\\items\\titlemov.wav"); + break; + case SDLK_DOWN: + SelectedItem++; + if (SelectedItem > SelectedItemMax) { + SelectedItem = MAINMENU_SINGLE_PLAYER; + } + effects_play_sound("sfx\\items\\titlemov.wav"); + break; + case SDLK_ESCAPE: + if (PreviousItem[submenu]) { + SetMenu(PreviousItem[submenu]); + break; + } + + return FALSE; + case SDLK_RETURN: + case SDLK_KP_ENTER: + case SDLK_SPACE: + switch (SelectedItem) { + case 1: + effects_play_sound("sfx\\items\\titlslct.wav"); + done = SNetInitializeProvider('ipc', client_info, user_info, ui_info, file_info); + SelectedItem = 1; + SelectedItemMax = 3; + break; + case 2: + effects_play_sound("sfx\\items\\titlslct.wav"); + done = SNetInitializeProvider('dial', client_info, user_info, ui_info, file_info); + SelectedItem = 1; + SelectedItemMax = 3; + break; + case 3: + effects_play_sound("sfx\\items\\titlslct.wav"); + done = SNetInitializeProvider('null', client_info, user_info, ui_info, file_info); + SelectedItem = 1; + SelectedItemMax = 3; + break; + } + break; + } + break; + case SDL_QUIT: + exit(0); + } + } + + DrawMouse(); + + if (!done) { + UiFadeIn(); + } else if (UiFadeOut()) { + break; + } + } + + selconn_Free(); + + return TRUE; +}