#include "../../types.h" void mainmenu_Render(char *name) { DrawArtImage(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, pPcxTitleImage); // scrollrt_draw_cursor_back_buffer(); // Doesn't work? RenderDiabloLogoSm(); int menuTop = 192; char *MENIITEMS[5] = { "Single Player", "Multi Player", "Replay Intro", "Show Credits", "Exit Diablo" }; for (int i = 0; i < 5; i++) { int y = menuTop + i * 43; if (i > 1) { y -= 1; // "Multi Player" and "Replay Intro" has a smaller gap then other items } PrintText42Gold(-1, y, MENIITEMS[i], 1); } int selectorTop = menuTop; if (SelectedItem > 2) { selectorTop -= 1; // "Multi Player" and "Replay Intro" has a smaller gap then other items } DrawSelector42(0, selectorTop, 0, 85, 43); PrintText16Silver(17, 444, name); } void mainmenu_Loade() { char *pszFile = "ui_art\\mainmenu.pcx"; if (false) //DiabloUI_GetSpawned() pszFile = "ui_art\\swmmenu.pcx"; LoadTitelArt(pszFile); } void mainmenu_Free() { mem_free_dbg(pPcxTitleImage); pPcxTitleImage = NULL; } BOOL __stdcall UiMainMenuDialog(char *name, int *pdwResult, void(__stdcall *fnSound)(char *file), int a4) { mainmenu_Loade(); SelectedItem = 1; SelectedItemMax = 5; SDL_Event event; int ItemHeight = 42; SDL_Rect SinglePlayer = { 0, 191, 515, ItemHeight }; SinglePlayer.x = GetCenterOffset(SinglePlayer.w); SDL_Rect MultiPlayer = SinglePlayer; MultiPlayer.y += ItemHeight * 1 + 1; SDL_Rect ReplayIntro = MultiPlayer; ReplayIntro.y += ItemHeight * 2 + 0; SDL_Rect ShowCredits = ReplayIntro; ShowCredits.y += ItemHeight * 3 + 1; SDL_Rect ExitDiablo = ShowCredits; ExitDiablo.y += ItemHeight * 4 + 1; bool endMenu = false; while (!endMenu) { CapFPS(); mainmenu_Render(name); DrawMouse(); UiFadeIn(); while (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; } fnSound("sfx\\items\\titlemov.wav"); break; case SDLK_DOWN: SelectedItem++; if (SelectedItem > SelectedItemMax) { SelectedItem = MAINMENU_SINGLE_PLAYER; } fnSound("sfx\\items\\titlemov.wav"); break; case SDLK_ESCAPE: *pdwResult = MAINMENU_EXIT_DIABLO; fnSound("sfx\\items\\titlslct.wav"); Sleep(250); // Wait for soudn to play endMenu = true; break; case SDLK_RETURN: case SDLK_KP_ENTER: case SDLK_SPACE: switch (SelectedItem) { case MAINMENU_SINGLE_PLAYER: fnSound("sfx\\items\\titlslct.wav"); *pdwResult = MAINMENU_SINGLE_PLAYER; endMenu = true; break; case MAINMENU_MULTIPLAYER: fnSound("sfx\\items\\titlslct.wav"); *pdwResult = MAINMENU_MULTIPLAYER; endMenu = true; break; case MAINMENU_REPLAY_INTRO: fnSound("sfx\\items\\titlslct.wav"); *pdwResult = MAINMENU_REPLAY_INTRO; endMenu = true; break; case MAINMENU_SHOW_CREDITS: fnSound("sfx\\items\\titlslct.wav"); *pdwResult = MAINMENU_SHOW_CREDITS; endMenu = true; break; case MAINMENU_EXIT_DIABLO: fnSound("sfx\\items\\titlslct.wav"); Sleep(250); // Wait for sound to play *pdwResult = MAINMENU_EXIT_DIABLO; endMenu = true; break; } break; } break; case SDL_MOUSEBUTTONDOWN: if (event.button.button == SDL_BUTTON_LEFT) { if (IsInsideRect(&event, &SinglePlayer)) { fnSound("sfx\\items\\titlslct.wav"); *pdwResult = MAINMENU_SINGLE_PLAYER; endMenu = true; break; } else if (IsInsideRect(&event, &MultiPlayer)) { fnSound("sfx\\items\\titlslct.wav"); *pdwResult = MAINMENU_MULTIPLAYER; endMenu = true; break; } else if (IsInsideRect(&event, &ReplayIntro)) { fnSound("sfx\\items\\titlslct.wav"); *pdwResult = MAINMENU_REPLAY_INTRO; endMenu = true; break; } else if (IsInsideRect(&event, &ShowCredits)) { fnSound("sfx\\items\\titlslct.wav"); *pdwResult = MAINMENU_SHOW_CREDITS; endMenu = true; break; } else if (IsInsideRect(&event, &ExitDiablo)) { fnSound("sfx\\items\\titlslct.wav"); Sleep(250); // Wait for soudn to play *pdwResult = MAINMENU_EXIT_DIABLO; endMenu = true; break; } } break; case SDL_QUIT: *pdwResult = MAINMENU_EXIT_DIABLO; endMenu = true; break; } } } BlackPalette(); mainmenu_Free(); return TRUE; }