#include "all.h" #include "DiabloUI/diabloui.h" #include "DiabloUI/selok.h" namespace dvl { int mainmenu_attract_time_out; //seconds DWORD dwAttractTicks; std::vector vecMainMenuDialog; std::vector vecMenuItems; int MainMenuResult; void UiMainMenuSelect(int value) { MainMenuResult = value; } void mainmenu_Esc() { if (SelectedItem == MAINMENU_EXIT_DIABLO) { UiMainMenuSelect(MAINMENU_EXIT_DIABLO); } else { SelectedItem = MAINMENU_EXIT_DIABLO; } } void mainmenu_restart_repintro() { dwAttractTicks = SDL_GetTicks() + mainmenu_attract_time_out * 1000; } void mainmenu_Load(char *name, void (*fnSound)(char *file)) { gfnSoundFunction = fnSound; vecMenuItems.push_back(new UiListItem("Single Player", MAINMENU_SINGLE_PLAYER)); vecMenuItems.push_back(new UiListItem("Multi Player", MAINMENU_MULTIPLAYER)); vecMenuItems.push_back(new UiListItem("Replay Intro", MAINMENU_REPLAY_INTRO)); vecMenuItems.push_back(new UiListItem("Show Credits", MAINMENU_SHOW_CREDITS)); vecMenuItems.push_back(new UiListItem("Exit Diablo", MAINMENU_EXIT_DIABLO)); UiAddBackground(&vecMainMenuDialog); UiAddLogo(&vecMainMenuDialog); vecMainMenuDialog.push_back(new UiList(vecMenuItems, PANEL_LEFT + 64, 192, 510, 43, UIS_HUGE | UIS_GOLD | UIS_CENTER)); SDL_Rect rect = { 17, 444, 605, 21 }; vecMainMenuDialog.push_back(new UiArtText(name, rect, UIS_SMALL)); if (!gbSpawned) { LoadBackgroundArt("ui_art\\mainmenu.pcx"); } else { LoadBackgroundArt("ui_art\\swmmenu.pcx"); } UiInitList(MAINMENU_SINGLE_PLAYER, MAINMENU_EXIT_DIABLO, NULL, UiMainMenuSelect, mainmenu_Esc, vecMainMenuDialog, true); } void mainmenu_Free() { ArtBackground.Unload(); for (std::size_t i = 0; i < vecMainMenuDialog.size(); i++) { UiItemBase *pUIItem = vecMainMenuDialog[i]; delete pUIItem; } vecMainMenuDialog.clear(); for (std::size_t i = 0; i < vecMenuItems.size(); i++) { UiListItem *pUIMenuItem = vecMenuItems[i]; if (pUIMenuItem) delete pUIMenuItem; } vecMenuItems.clear(); } BOOL UiMainMenuDialog(char *name, int *pdwResult, void (*fnSound)(char *file), int attractTimeOut) { MainMenuResult = 0; while (MainMenuResult == 0) { mainmenu_attract_time_out = attractTimeOut; mainmenu_Load(name, fnSound); mainmenu_restart_repintro(); // for automatic starts while (MainMenuResult == 0) { UiClearScreen(); UiPollAndRender(); if (!gbSpawned && SDL_GetTicks() >= dwAttractTicks) { MainMenuResult = MAINMENU_ATTRACT_MODE; } } mainmenu_Free(); if (gbSpawned && MainMenuResult == MAINMENU_REPLAY_INTRO) { UiSelOkDialog(NULL, "The Diablo introduction cinematic is only available in the full retail version of Diablo. Visit https://www.gog.com/game/diablo to purchase.", true); MainMenuResult = 0; } } *pdwResult = MainMenuResult; return true; } } // namespace dvl