207 lines
4.8 KiB
C++
207 lines
4.8 KiB
C++
/*
|
|
* UNPUBLISHED -- Rights reserved under the copyright laws of the
|
|
* United States. Use of a copyright notice is precautionary only and
|
|
* does not imply publication or disclosure.
|
|
*
|
|
* THIS DOCUMENTATION CONTAINS CONFIDENTIAL AND PROPRIETARY INFORMATION
|
|
* OF BLIZZARD ENTERTAINMENT. ANY DUPLICATION, MODIFICATION,
|
|
* DISTRIBUTION, OR DISCLOSURE IS STRICTLY PROHIBITED WITHOUT THE PRIOR
|
|
* EXPRESS WRITTEN PERMISSION OF BLIZZARD ENTERTAINMENT.
|
|
*/
|
|
|
|
#include "../types.h"
|
|
|
|
int mainmenu_cpp_init_value; // weak
|
|
char chr_name_str[16];
|
|
|
|
int mainmenu_inf = 0x7F800000; // weak
|
|
|
|
/* rdata */
|
|
|
|
int menu_music_track_id = 5; // idb
|
|
|
|
//----- (00427E13) --------------------------------------------------------
|
|
struct mainmenu_cpp_init
|
|
{
|
|
mainmenu_cpp_init()
|
|
{
|
|
mainmenu_cpp_init_value = mainmenu_inf;
|
|
}
|
|
} _mainmenu_cpp_init;
|
|
// 47F074: using guessed type int mainmenu_inf;
|
|
// 646CE0: using guessed type int mainmenu_cpp_init_value;
|
|
|
|
//----- (00427E1E) --------------------------------------------------------
|
|
void __cdecl mainmenu_refresh_music()
|
|
{
|
|
int v0; // eax
|
|
|
|
music_start(menu_music_track_id);
|
|
v0 = menu_music_track_id;
|
|
do
|
|
{
|
|
if ( ++v0 == 6 )
|
|
v0 = 0;
|
|
}
|
|
while ( !v0 || v0 == 1 );
|
|
menu_music_track_id = v0;
|
|
}
|
|
|
|
//----- (00427E45) --------------------------------------------------------
|
|
void __stdcall mainmenu_create_hero(char *a1, char *a2)
|
|
{
|
|
// char *v2; // [esp-14h] [ebp-14h]
|
|
|
|
if ( UiValidPlayerName(a1) ) /* v2 */
|
|
pfile_create_save_file(a1, a2);
|
|
}
|
|
|
|
//----- (00427E62) --------------------------------------------------------
|
|
int __stdcall mainmenu_select_hero_dialog(int u1, int u2, int u3, int u4, int mode, char *cname, int clen, char *cdesc, int cdlen, int *multi) /* fix args */
|
|
{
|
|
int v10; // eax
|
|
int a6; // [esp+8h] [ebp-8h]
|
|
int a5; // [esp+Ch] [ebp-4h]
|
|
|
|
a6 = 1;
|
|
a5 = 0;
|
|
if ( gbMaxPlayers == 1 )
|
|
{
|
|
if ( !UiSelHeroSingDialog(
|
|
pfile_ui_set_hero_infos,
|
|
pfile_ui_save_create,
|
|
pfile_delete_save,
|
|
pfile_ui_set_class_stats,
|
|
&a5,
|
|
chr_name_str,
|
|
&gnDifficulty) )
|
|
TermMsg("Unable to display SelHeroSing");
|
|
if ( a5 == 2 )
|
|
{
|
|
dword_5256E8 = 1;
|
|
goto LABEL_6;
|
|
}
|
|
dword_5256E8 = 0;
|
|
}
|
|
else if ( !UiSelHeroMultDialog(
|
|
pfile_ui_set_hero_infos,
|
|
pfile_ui_save_create,
|
|
pfile_delete_save,
|
|
pfile_ui_set_class_stats,
|
|
&a5,
|
|
&a6,
|
|
chr_name_str) )
|
|
{
|
|
TermMsg("Can't load multiplayer dialog");
|
|
}
|
|
if ( a5 == 4 )
|
|
{
|
|
SErrSetLastError(1223);
|
|
return 0;
|
|
}
|
|
LABEL_6:
|
|
pfile_create_player_description(cdesc, cdlen);
|
|
if ( multi )
|
|
{
|
|
if ( mode == 'BNET' )
|
|
v10 = a6 || !plr[myplr].pBattleNet;
|
|
else
|
|
v10 = a6;
|
|
*multi = v10;
|
|
}
|
|
if ( cname )
|
|
{
|
|
if ( clen )
|
|
SStrCopy(cname, chr_name_str, clen);
|
|
}
|
|
return 1;
|
|
}
|
|
// 5256E8: using guessed type int dword_5256E8;
|
|
// 679660: using guessed type char gbMaxPlayers;
|
|
|
|
//----- (00427F76) --------------------------------------------------------
|
|
void __fastcall mainmenu_action(int option)
|
|
{
|
|
int v1; // eax
|
|
int a2; // [esp+0h] [ebp-4h]
|
|
|
|
a2 = option;
|
|
mainmenu_refresh_music();
|
|
do
|
|
{
|
|
while ( 1 )
|
|
{
|
|
a2 = 0;
|
|
if ( !UiMainMenuDialog("Diablo v1.09", &a2, effects_play_sound, 30) )
|
|
TermMsg("Unable to display mainmenu");
|
|
if ( a2 == 1 )
|
|
break;
|
|
switch ( a2 )
|
|
{
|
|
case MAINMENU_MULTIPLAYER:
|
|
v1 = mainmenu_multi_player();
|
|
goto LABEL_15;
|
|
case MAINMENU_REPLAY_INTRO:
|
|
goto LABEL_10;
|
|
case MAINMENU_SHOW_CREDITS:
|
|
UiCreditsDialog(16);
|
|
break;
|
|
case MAINMENU_EXIT_DIABLO:
|
|
goto LABEL_16;
|
|
case MAINMENU_ATTRACT_MODE:
|
|
LABEL_10:
|
|
if ( window_activated )
|
|
mainmenu_play_intro();
|
|
break;
|
|
}
|
|
}
|
|
v1 = mainmenu_single_player();
|
|
LABEL_15:
|
|
;
|
|
}
|
|
while ( v1 );
|
|
LABEL_16:
|
|
music_stop();
|
|
}
|
|
// 634980: using guessed type int window_activated;
|
|
|
|
//----- (00427FEC) --------------------------------------------------------
|
|
int __cdecl mainmenu_single_player()
|
|
{
|
|
gbMaxPlayers = 1;
|
|
return mainmenu_init_menu(1);
|
|
}
|
|
// 679660: using guessed type char gbMaxPlayers;
|
|
|
|
//----- (00427FFA) --------------------------------------------------------
|
|
int __fastcall mainmenu_init_menu(int a1)
|
|
{
|
|
int v1; // esi
|
|
int v3; // esi
|
|
|
|
v1 = a1;
|
|
if ( a1 == 4 )
|
|
return 1;
|
|
music_stop();
|
|
v3 = diablo_init_menu(v1 != 2, v1 != 3);
|
|
if ( v3 )
|
|
mainmenu_refresh_music();
|
|
return v3;
|
|
}
|
|
|
|
//----- (00428030) --------------------------------------------------------
|
|
int __cdecl mainmenu_multi_player()
|
|
{
|
|
gbMaxPlayers = 4;
|
|
return mainmenu_init_menu(3);
|
|
}
|
|
// 679660: using guessed type char gbMaxPlayers;
|
|
|
|
//----- (0042803F) --------------------------------------------------------
|
|
void __cdecl mainmenu_play_intro()
|
|
{
|
|
music_stop();
|
|
play_movie("gendata\\diablo1.smk", 1);
|
|
mainmenu_refresh_music();
|
|
}
|