Devilution
Diablo devolved - magic behind the 1996 computer game
mainmenu.cpp
Go to the documentation of this file.
1 
6 #include "all.h"
7 #include "../3rdParty/Storm/Source/storm.h"
8 #include "../DiabloUI/diabloui.h"
9 
11 
12 char gszHero[16];
13 
14 /* data */
15 
18 
20 {
22 #ifndef SPAWN
23  do {
28 #endif
29 }
30 
31 void mainmenu_change_name(int arg1, int arg2, int arg3, int arg4, char *name_1, char *name_2)
32 {
33  if (UiValidPlayerName(name_2))
34  pfile_rename_hero(name_1, name_2);
35 }
36 
38  const _SNETPROGRAMDATA *client_info,
39  const _SNETPLAYERDATA *user_info,
40  const _SNETUIDATA *ui_info,
42  DWORD mode,
43  char *cname, DWORD clen,
44  char *cdesc, DWORD cdlen,
45  BOOL *multi)
46 {
47  BOOL hero_is_created = TRUE;
48  int dlgresult = 0;
49  if (gbMaxPlayers == 1) {
50  if (!UiSelHeroSingDialog(
55  &dlgresult,
56  gszHero,
57  &gnDifficulty))
58  app_fatal("Unable to display SelHeroSing");
59 
60  if (dlgresult == SELHERO_CONTINUE)
61  gbLoadGame = TRUE;
62  else
63  gbLoadGame = FALSE;
64 
65  } else if (!UiSelHeroMultDialog(
70  &dlgresult,
71  &hero_is_created,
72  gszHero)) {
73  app_fatal("Can't load multiplayer dialog");
74  }
75  if (dlgresult == SELHERO_PREVIOUS) {
76  SErrSetLastError(1223);
77  return 0;
78  }
79 
80  pfile_create_player_description(cdesc, cdlen);
81  if (multi) {
82  if (mode == 'BNET')
83  *multi = hero_is_created || !plr[myplr].pBattleNet;
84  else
85  *multi = hero_is_created;
86  }
87  if (cname && clen)
88  SStrCopy(cname, gszHero, clen);
89 
90  return 1;
91 }
92 
94 {
95  BOOL done;
96  int menu;
97 
98  done = FALSE;
100 
101  do {
102  menu = 0;
103  if (!UiMainMenuDialog(gszProductName, &menu, effects_play_sound, 30))
104  app_fatal("Unable to display mainmenu");
105 
106  switch (menu) {
108  if (!mainmenu_single_player())
109  done = TRUE;
110  break;
112  if (!mainmenu_multi_player())
113  done = TRUE;
114  break;
117 #ifdef SPAWN
118  done = FALSE;
119 #else
120  if (gbActive)
122 #endif
123  break;
125  UiCreditsDialog(16);
126  break;
128  done = TRUE;
129  break;
130  }
131  } while (done == FALSE);
132 
133  music_stop();
134 }
135 
137 {
138  gbMaxPlayers = 1;
140 }
141 
142 BOOL mainmenu_init_menu(int type)
143 {
144  BOOL success;
145 
146  if (type == SELHERO_PREVIOUS)
147  return TRUE;
148 
149  music_stop();
150 
151  success = StartGame(type != SELHERO_CONTINUE, type != SELHERO_CONNECT);
152  if (success)
154 
155  return success;
156 }
157 
159 {
162 }
163 
164 #ifndef SPAWN
166 {
167  music_stop();
168  play_movie("gendata\\diablo1.smk", TRUE);
170 }
171 #endif
172 
SELHERO_NEW_DUNGEON
@ SELHERO_NEW_DUNGEON
Definition: enums.h:2304
play_movie
void play_movie(char *pszMovie, BOOL user_can_close)
Definition: movie.cpp:17
pfile_create_player_description
BOOL pfile_create_player_description(char *dst, DWORD len)
Definition: pfile.cpp:101
TMUSIC_INTRO
@ TMUSIC_INTRO
Definition: enums.h:2290
_SNETVERSIONDATA
Definition: structs.h:1314
mainmenu_play_intro
void mainmenu_play_intro()
Definition: mainmenu.cpp:165
MAX_PLRS
#define MAX_PLRS
Definition: defs.h:16
SELHERO_CONNECT
@ SELHERO_CONNECT
Definition: enums.h:2306
mainmenu_single_player
BOOL mainmenu_single_player()
Definition: mainmenu.cpp:136
MAINMENU_SINGLE_PLAYER
@ MAINMENU_SINGLE_PLAYER
Definition: enums.h:2295
SELHERO_PREVIOUS
@ SELHERO_PREVIOUS
Definition: enums.h:2307
music_start
void music_start(int nTrack)
gbActive
int gbActive
Definition: init.cpp:16
gnDifficulty
int gnDifficulty
Definition: gendung.cpp:31
_SNETUIDATA
Definition: structs.h:1322
all.h
gbLoadGame
BOOL gbLoadGame
Definition: diablo.cpp:27
pfile_ui_save_create
BOOL pfile_ui_save_create(_uiheroinfo *heroinfo)
Definition: pfile.cpp:311
_SNETPROGRAMDATA
Definition: structs.h:1296
gbMaxPlayers
BYTE gbMaxPlayers
Specifies the maximum number of players in a game, where 1 represents a single player game and 4 repr...
Definition: multi.cpp:34
MAINMENU_REPLAY_INTRO
@ MAINMENU_REPLAY_INTRO
Definition: enums.h:2297
mainmenu_loop
void mainmenu_loop()
Definition: mainmenu.cpp:93
pfile_rename_hero
BOOL pfile_rename_hero(const char *name_1, const char *name_2)
Definition: pfile.cpp:119
app_fatal
void app_fatal(const char *pszFmt,...)
Definition: appfat.cpp:18
DEVILUTION_END_NAMESPACE
#define DEVILUTION_END_NAMESPACE
Definition: types.h:10
gszProductName
char gszProductName[MAX_PATH]
Definition: init.cpp:28
TMUSIC_TOWN
@ TMUSIC_TOWN
Definition: enums.h:2285
menu_music_track_id
int menu_music_track_id
The active music track id for the main menu.
Definition: mainmenu.cpp:17
MAINMENU_EXIT_DIABLO
@ MAINMENU_EXIT_DIABLO
Definition: enums.h:2299
mainmenu_refresh_music
void mainmenu_refresh_music()
Definition: mainmenu.cpp:19
music_stop
void music_stop()
NUM_MUSIC
@ NUM_MUSIC
Definition: enums.h:2291
mainmenu_multi_player
BOOL mainmenu_multi_player()
Definition: mainmenu.cpp:158
MAINMENU_ATTRACT_MODE
@ MAINMENU_ATTRACT_MODE
Definition: enums.h:2300
StartGame
BOOL StartGame(BOOL bNewGame, BOOL bSinglePlayer)
Definition: diablo.cpp:105
effects_play_sound
void effects_play_sound(char *snd_file)
Definition: effects.cpp:1250
_SNETPLAYERDATA
Definition: structs.h:1289
fileinfo
DEVILUTION_BEGIN_NAMESPACE _SNETVERSIONDATA fileinfo
Definition: init.cpp:15
pfile_ui_set_hero_infos
BOOL pfile_ui_set_hero_infos(BOOL(*ui_add_hero_info)(_uiheroinfo *))
Definition: pfile.cpp:190
MAINMENU_SHOW_CREDITS
@ MAINMENU_SHOW_CREDITS
Definition: enums.h:2298
myplr
int myplr
Definition: player.cpp:9
PlayerStruct::pBattleNet
unsigned char pBattleNet
Definition: structs.h:341
DEVILUTION_BEGIN_NAMESPACE
Definition: sha.cpp:10
mainmenu_change_name
void mainmenu_change_name(int arg1, int arg2, int arg3, int arg4, char *name_1, char *name_2)
Definition: mainmenu.cpp:31
pfile_delete_save
BOOL pfile_delete_save(_uiheroinfo *hero_info)
Definition: pfile.cpp:367
SELHERO_CONTINUE
@ SELHERO_CONTINUE
Definition: enums.h:2305
TMUSIC_L1
@ TMUSIC_L1
Definition: enums.h:2286
mainmenu_select_hero_dialog
int 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)
Definition: mainmenu.cpp:37
pfile_ui_set_class_stats
BOOL pfile_ui_set_class_stats(unsigned int player_class_nr, _uidefaultstats *class_stats)
Definition: pfile.cpp:286
mainmenu_init_menu
BOOL mainmenu_init_menu(int type)
Definition: mainmenu.cpp:142
MAINMENU_MULTIPLAYER
@ MAINMENU_MULTIPLAYER
Definition: enums.h:2296
plr
PlayerStruct plr[MAX_PLRS]
Definition: player.cpp:10
gszHero
DEVILUTION_BEGIN_NAMESPACE char gszHero[16]
Definition: mainmenu.cpp:12