|
|
|
|
//HEADER_GOES_HERE
|
|
|
|
|
|
|
|
|
|
#include "../types.h"
|
|
|
|
|
|
|
|
|
|
char gszHero[16];
|
|
|
|
|
|
|
|
|
|
/* data */
|
|
|
|
|
|
|
|
|
|
int menu_music_track_id = 5;
|
|
|
|
|
|
|
|
|
|
void __cdecl mainmenu_refresh_music()
|
|
|
|
|
{
|
|
|
|
|
music_start(menu_music_track_id);
|
|
|
|
|
do {
|
|
|
|
|
menu_music_track_id++;
|
|
|
|
|
if (menu_music_track_id == 6)
|
|
|
|
|
menu_music_track_id = 0;
|
|
|
|
|
} while (!menu_music_track_id || menu_music_track_id == 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void __stdcall mainmenu_create_hero(char *name_1, char *name_2)
|
|
|
|
|
{
|
|
|
|
|
if (UiValidPlayerName(name_1))
|
|
|
|
|
pfile_create_save_file(name_1, name_2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int __stdcall mainmenu_select_hero_dialog(
|
|
|
|
|
const _SNETPROGRAMDATA *client_info,
|
|
|
|
|
const _SNETPLAYERDATA *user_info,
|
|
|
|
|
const _SNETUIDATA *ui_info,
|
|
|
|
|
const _SNETVERSIONDATA *fileinfo,
|
|
|
|
|
DWORD mode,
|
|
|
|
|
char *cname, DWORD clen,
|
|
|
|
|
char *cdesc, DWORD cdlen,
|
|
|
|
|
BOOL *multi)
|
|
|
|
|
{
|
|
|
|
|
BOOL hero_is_created = TRUE;
|
|
|
|
|
int dlgresult = 0;
|
|
|
|
|
if (gbMaxPlayers == 1) {
|
|
|
|
|
if (!UiSelHeroSingDialog(
|
|
|
|
|
pfile_ui_set_hero_infos,
|
|
|
|
|
pfile_ui_save_create,
|
|
|
|
|
pfile_delete_save,
|
|
|
|
|
pfile_ui_set_class_stats,
|
|
|
|
|
&dlgresult,
|
|
|
|
|
gszHero,
|
|
|
|
|
&gnDifficulty))
|
|
|
|
|
TermMsg("Unable to display SelHeroSing");
|
|
|
|
|
|
|
|
|
|
if (dlgresult == 2)
|
|
|
|
|
gbLoadGame = TRUE;
|
|
|
|
|
else
|
|
|
|
|
gbLoadGame = FALSE;
|
|
|
|
|
|
|
|
|
|
} else if (!UiSelHeroMultDialog(
|
|
|
|
|
pfile_ui_set_hero_infos,
|
|
|
|
|
pfile_ui_save_create,
|
|
|
|
|
pfile_delete_save,
|
|
|
|
|
pfile_ui_set_class_stats,
|
|
|
|
|
&dlgresult,
|
|
|
|
|
&hero_is_created,
|
|
|
|
|
gszHero)) {
|
|
|
|
|
TermMsg("Can't load multiplayer dialog");
|
|
|
|
|
}
|
|
|
|
|
if (dlgresult == 4) {
|
|
|
|
|
SErrSetLastError(1223);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pfile_create_player_description(cdesc, cdlen);
|
|
|
|
|
if (multi) {
|
|
|
|
|
if (mode == 'BNET')
|
|
|
|
|
*multi = hero_is_created || !plr[myplr].pBattleNet;
|
|
|
|
|
else
|
|
|
|
|
*multi = hero_is_created;
|
|
|
|
|
}
|
|
|
|
|
if (cname && clen)
|
|
|
|
|
SStrCopy(cname, gszHero, clen);
|
|
|
|
|
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void __cdecl mainmenu_loop()
|
|
|
|
|
{
|
|
|
|
|
BOOL done;
|
|
|
|
|
int menu;
|
|
|
|
|
|
|
|
|
|
done = FALSE;
|
|
|
|
|
mainmenu_refresh_music();
|
|
|
|
|
|
|
|
|
|
do {
|
|
|
|
|
menu = 0;
|
|
|
|
|
if (!UiMainMenuDialog("Diablo v1.09", &menu, effects_play_sound, 30))
|
|
|
|
|
TermMsg("Unable to display mainmenu");
|
|
|
|
|
|
|
|
|
|
switch (menu) {
|
|
|
|
|
case MAINMENU_SINGLE_PLAYER:
|
|
|
|
|
if (!mainmenu_single_player())
|
|
|
|
|
done = TRUE;
|
|
|
|
|
break;
|
|
|
|
|
case MAINMENU_MULTIPLAYER:
|
|
|
|
|
if (!mainmenu_multi_player())
|
|
|
|
|
done = TRUE;
|
|
|
|
|
break;
|
|
|
|
|
case MAINMENU_REPLAY_INTRO:
|
|
|
|
|
case MAINMENU_ATTRACT_MODE:
|
|
|
|
|
if (gbActive)
|
|
|
|
|
mainmenu_play_intro();
|
|
|
|
|
break;
|
|
|
|
|
case MAINMENU_SHOW_CREDITS:
|
|
|
|
|
UiCreditsDialog(16);
|
|
|
|
|
break;
|
|
|
|
|
case MAINMENU_EXIT_DIABLO:
|
|
|
|
|
done = TRUE;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
} while (done == FALSE);
|
|
|
|
|
|
|
|
|
|
music_stop();
|
|
|
|
|
}
|
|
|
|
|
// 634980: using guessed type int gbActive;
|
|
|
|
|
|
|
|
|
|
BOOL __cdecl mainmenu_single_player()
|
|
|
|
|
{
|
|
|
|
|
gbMaxPlayers = 1;
|
|
|
|
|
return mainmenu_init_menu(1);
|
|
|
|
|
}
|
|
|
|
|
// 679660: using guessed type char gbMaxPlayers;
|
|
|
|
|
|
|
|
|
|
BOOL __fastcall mainmenu_init_menu(int type)
|
|
|
|
|
{
|
|
|
|
|
BOOL success;
|
|
|
|
|
|
|
|
|
|
if (type == 4)
|
|
|
|
|
return TRUE;
|
|
|
|
|
|
|
|
|
|
music_stop();
|
|
|
|
|
|
|
|
|
|
success = StartGame(type != 2, type != 3);
|
|
|
|
|
if (success)
|
|
|
|
|
mainmenu_refresh_music();
|
|
|
|
|
|
|
|
|
|
return success;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL __cdecl mainmenu_multi_player()
|
|
|
|
|
{
|
|
|
|
|
gbMaxPlayers = MAX_PLRS;
|
|
|
|
|
return mainmenu_init_menu(3);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void __cdecl mainmenu_play_intro()
|
|
|
|
|
{
|
|
|
|
|
music_stop();
|
|
|
|
|
play_movie("gendata\\diablo1.smk", 1);
|
|
|
|
|
mainmenu_refresh_music();
|
|
|
|
|
}
|