#include "devilution.h" #include "DiabloUI/diabloui.h" namespace dvl { int mainmenu_attract_time_out; //seconds DWORD dwAttractTicks; int MainMenuResult; UiListItem MAINMENU_DIALOG_ITEMS[] = { {"Single Player", MAINMENU_SINGLE_PLAYER}, {"Multi Player", MAINMENU_MULTIPLAYER}, {"Replay Intro", MAINMENU_REPLAY_INTRO}, {"Show Credits", MAINMENU_SHOW_CREDITS}, {"Exit Diablo", MAINMENU_EXIT_DIABLO} }; UiItem MAINMENU_DIALOG[] = { MAINMENU_BACKGROUND, MAINMENU_LOGO, UiList(MAINMENU_DIALOG_ITEMS, 64, 192, 510, 43, UIS_HUGE | UIS_GOLD | UIS_CENTER), UiArtText(nullptr, { 17, 444, 605, 21 }, UIS_SMALL) }; void UiMainMenuSelect(int value) { MainMenuResult = value; } void mainmenu_Esc() { UiMainMenuSelect(MAINMENU_EXIT_DIABLO); } void mainmenu_restart_repintro() { dwAttractTicks = GetTickCount() + mainmenu_attract_time_out * 1000; } void mainmenu_Load(char *name, void (*fnSound)(char *file)) { gfnSoundFunction = fnSound; MAINMENU_DIALOG[size(MAINMENU_DIALOG) - 1].art_text.text = name; MainMenuResult = 0; char *pszFile = "ui_art\\mainmenu.pcx"; if (false) //DiabloUI_GetSpawned() pszFile = "ui_art\\swmmenu.pcx"; LoadBackgroundArt(pszFile); UiInitList(MAINMENU_SINGLE_PLAYER, MAINMENU_EXIT_DIABLO, NULL, UiMainMenuSelect, mainmenu_Esc, MAINMENU_DIALOG, size(MAINMENU_DIALOG), true); } void mainmenu_Free() { ArtBackground.Unload(); } BOOL UiMainMenuDialog(char *name, int *pdwResult, void (*fnSound)(char *file), int attractTimeOut) { mainmenu_attract_time_out = attractTimeOut; mainmenu_Load(name, fnSound); mainmenu_restart_repintro(); // for automatic starts while (MainMenuResult == 0) { UiPollAndRender(); if (GetTickCount() >= dwAttractTicks) { MainMenuResult = MAINMENU_ATTRACT_MODE; } } BlackPalette(); mainmenu_Free(); *pdwResult = MainMenuResult; return true; } }