diff --git a/3rdParty/Storm/Source/storm.h b/3rdParty/Storm/Source/storm.h index 570b204c6..04f9b9601 100644 --- a/3rdParty/Storm/Source/storm.h +++ b/3rdParty/Storm/Source/storm.h @@ -303,7 +303,7 @@ BOOL SNetGetOwnerTurnsWaiting(DWORD *); bool SNetUnregisterEventHandler(event_type, SEVTHANDLER); bool SNetRegisterEventHandler(event_type, SEVTHANDLER); BOOLEAN SNetSetBasePlayer(int); -int SNetInitializeProvider(unsigned long, struct _SNETPROGRAMDATA *, struct _SNETPLAYERDATA *, struct _SNETUIDATA *, struct _SNETVERSIONDATA *); +int SNetInitializeProvider(Uint32 provider, struct GameData *gameData); int SNetGetProviderCaps(struct _SNETCAPS *); int SFileSetFilePointer(HANDLE, int, int*, int); BOOL SFileEnableDirectAccess(BOOL enable); diff --git a/DiabloUI/diabloui.h b/DiabloUI/diabloui.h index b4872a7e0..d07ac7576 100644 --- a/DiabloUI/diabloui.h +++ b/DiabloUI/diabloui.h @@ -9,13 +9,12 @@ void UiTitleDialog(); void UiSetSpawned(BOOL bSpawned); void UiInitialize(); BOOL UiValidPlayerName(const char *name); /* check */ -void UiSelHeroMultDialog(BOOL (*fninfo)(BOOL (*fninfofunc)(_uiheroinfo *)), BOOL (*fncreate)(_uiheroinfo *), BOOL (*fnremove)(_uiheroinfo *), void (*fnstats)(unsigned int, _uidefaultstats *), int *dlgresult, BOOL *hero_is_created, char (*name)[16]); -void UiSelHeroSingDialog(BOOL (*fninfo)(BOOL (*fninfofunc)(_uiheroinfo *)), BOOL (*fncreate)(_uiheroinfo *), BOOL (*fnremove)(_uiheroinfo *), void (*fnstats)(unsigned int, _uidefaultstats *), int *dlgresult, char (*name)[16], int *difficulty); +void UiSelHeroMultDialog(BOOL (*fninfo)(BOOL (*fninfofunc)(_uiheroinfo *)), BOOL (*fncreate)(_uiheroinfo *), BOOL (*fnremove)(_uiheroinfo *), void (*fnstats)(unsigned int, _uidefaultstats *), _selhero_selections *dlgresult, char (*name)[16]); +void UiSelHeroSingDialog(BOOL (*fninfo)(BOOL (*fninfofunc)(_uiheroinfo *)), BOOL (*fncreate)(_uiheroinfo *), BOOL (*fnremove)(_uiheroinfo *), void (*fnstats)(unsigned int, _uidefaultstats *), _selhero_selections *dlgresult, char (*name)[16], int *difficulty); BOOL UiCreditsDialog(); BOOL UiSupportDialog(); BOOL UiMainMenuDialog(const char *name, int *pdwResult, void (*fnSound)(const char *file), int attractTimeOut); BOOL UiProgressDialog(const char *msg, int enable, int (*fnfunc)(), int rate); -const char **UiProfileGetString(); void UiProfileCallback(); void UiProfileDraw(); BOOL UiCategoryCallback(int a1, int a2, int a3, int a4, int a5, DWORD *a6, DWORD *a7); @@ -25,9 +24,8 @@ BOOL UiSoundCallback(int a1, int type, int a3); BOOL UiDrawDescCallback(int game_type, DWORD color, const char *lpString, char *a4, int a5, UINT align, time_t a7, HDC *a8); BOOL UiCreateGameCallback(int a1, int a2, int a3, int a4, int a5, int a6); BOOL UiArtCallback(int game_type, unsigned int art_code, SDL_Color *pPalette, BYTE *pBuffer, DWORD dwBuffersize, DWORD *pdwWidth, DWORD *pdwHeight, DWORD *pdwBpp); -int UiSelectGame(int a1, _SNETPROGRAMDATA *client_info, _SNETPLAYERDATA *user_info, _SNETUIDATA *ui_info, _SNETVERSIONDATA *file_info, int *a6); -int UiSelectProvider(int a1, _SNETPROGRAMDATA *client_info, _SNETPLAYERDATA *user_info, _SNETUIDATA *ui_info, _SNETVERSIONDATA *file_info, int *type); -BOOL UiCreatePlayerDescription(_uiheroinfo *info, Uint32 mode, char (*desc)[128]); +int UiSelectGame(GameData *gameData, int *playerId); +int UiSelectProvider(GameData *gameData); void UiSetupPlayerInfo(char *infostr, _uiheroinfo *pInfo, Uint32 type); } // namespace dvl diff --git a/Source/diablo.cpp b/Source/diablo.cpp index aae0fadf2..9247eb57d 100644 --- a/Source/diablo.cpp +++ b/Source/diablo.cpp @@ -28,7 +28,7 @@ BOOL gbRunGameResult; BOOL zoomflag; /** Enable updating of player character, set to false once Diablo dies */ BOOL gbProcessPlayers; -BOOL gbLoadGame; +bool gbLoadGame; BOOLEAN cineflag; int force_redraw; BOOL light4flag; @@ -370,7 +370,7 @@ BOOL StartGame(BOOL bNewGame, BOOL bSinglePlayer) do { fExitProgram = FALSE; - gbLoadGame = FALSE; + gbLoadGame = false; if (!NetInit(bSinglePlayer, &fExitProgram)) { gbRunGameResult = !fExitProgram; @@ -395,7 +395,7 @@ BOOL StartGame(BOOL bNewGame, BOOL bSinglePlayer) } run_game_loop(uMsg); NetClose(); - pfile_create_player_description(NULL, 0); + pfile_create_player_description(); // If the player left the game into the main menu, // initialize main menu resources. diff --git a/Source/diablo.h b/Source/diablo.h index 6a5279ac5..981cb6b69 100644 --- a/Source/diablo.h +++ b/Source/diablo.h @@ -33,7 +33,7 @@ extern BOOL gbRunGame; extern BOOL gbRunGameResult; extern BOOL zoomflag; extern BOOL gbProcessPlayers; -extern BOOL gbLoadGame; +extern bool gbLoadGame; extern BOOLEAN cineflag; extern int force_redraw; /* These are defined in fonts.h */ diff --git a/Source/init.cpp b/Source/init.cpp index bf56b8720..cb700b2de 100644 --- a/Source/init.cpp +++ b/Source/init.cpp @@ -20,7 +20,6 @@ int _newlib_heap_size_user = 100 * 1024 * 1024; DEVILUTION_BEGIN_NAMESPACE -_SNETVERSIONDATA fileinfo; /** True if the game is the current active window */ int gbActive; /** A handle to an hellfire.mpq archive. */ @@ -143,10 +142,6 @@ static void init_get_file_info() void init_archives() { - HANDLE fh = NULL; - memset(&fileinfo, 0, sizeof(fileinfo)); - fileinfo.size = sizeof(fileinfo); - fileinfo.versionstring = gszVersionNumber; init_get_file_info(); std::vector paths; @@ -174,6 +169,7 @@ void init_archives() if (spawn_mpq != NULL) gbIsSpawn = true; } + HANDLE fh = NULL; if (!SFileOpenFile("ui_art\\title.pcx", &fh)) InsertCDDlg(); SFileCloseFile(fh); diff --git a/Source/init.h b/Source/init.h index b660f07da..4f5ccaf0e 100644 --- a/Source/init.h +++ b/Source/init.h @@ -12,7 +12,6 @@ DEVILUTION_BEGIN_NAMESPACE extern "C" { #endif -extern _SNETVERSIONDATA fileinfo; extern int gbActive; extern HANDLE hellfire_mpq; extern WNDPROC CurrentProc; diff --git a/Source/mainmenu.cpp b/Source/mainmenu.cpp index 56fa3d17a..a2e731ca0 100644 --- a/Source/mainmenu.cpp +++ b/Source/mainmenu.cpp @@ -77,24 +77,10 @@ static void mainmenu_play_intro() play_movie("gendata\\diablo1.smk", TRUE); mainmenu_refresh_music(); } -void mainmenu_change_name(int arg1, int arg2, int arg3, int arg4, char *name_1, char *name_2) -{ - if (UiValidPlayerName(name_2)) - pfile_rename_hero(name_1, name_2); -} -bool 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 mainmenu_select_hero_dialog(GameData *gameData) { - BOOL hero_is_created = TRUE; - int dlgresult = 0; + _selhero_selections dlgresult = SELHERO_NEW_DUNGEON; if (!gbIsMultiplayer) { UiSelHeroSingDialog( pfile_ui_set_hero_infos, @@ -104,12 +90,9 @@ bool mainmenu_select_hero_dialog( &dlgresult, &gszHero, &gnDifficulty); - client_info->initdata->nDifficulty = gnDifficulty; + gameData->nDifficulty = gnDifficulty; - if (dlgresult == SELHERO_CONTINUE) - gbLoadGame = TRUE; - else - gbLoadGame = FALSE; + gbLoadGame = (dlgresult == SELHERO_CONTINUE); } else { UiSelHeroMultDialog( pfile_ui_set_hero_infos, @@ -117,7 +100,6 @@ bool mainmenu_select_hero_dialog( pfile_delete_save, pfile_ui_set_class_stats, &dlgresult, - &hero_is_created, &gszHero); } if (dlgresult == SELHERO_PREVIOUS) { @@ -125,12 +107,7 @@ bool mainmenu_select_hero_dialog( return FALSE; } - pfile_create_player_description(cdesc, cdlen); - if (multi) { - *multi = hero_is_created; - } - if (cname && clen) - SStrCopy(cname, gszHero, clen); + pfile_create_player_description(); return TRUE; } diff --git a/Source/mainmenu.h b/Source/mainmenu.h index b80e9ab99..51eed7b7f 100644 --- a/Source/mainmenu.h +++ b/Source/mainmenu.h @@ -6,6 +6,8 @@ #ifndef __MAINMENU_H__ #define __MAINMENU_H__ +#include "multi.h" + DEVILUTION_BEGIN_NAMESPACE #ifdef __cplusplus @@ -14,16 +16,7 @@ extern "C" { extern char gszHero[16]; -void mainmenu_change_name(int arg1, int arg2, int arg3, int arg4, char *name_1, char *name_2); -bool mainmenu_select_hero_dialog( - const _SNETPROGRAMDATA *client_info, - const _SNETPLAYERDATA *user_info, - const _SNETUIDATA *ui_info, - const _SNETVERSIONDATA *fileinfo, - DWORD mode, // 4 chars, e.g. 'IPXN', 'BNET' etc. */ - char *cname, DWORD clen, // character name will be copied here - char *cdesc, DWORD cdlen, // character "description" will be copied here (used to advertise games) - bool *multi); // new character? - unsure about this +bool mainmenu_select_hero_dialog(GameData *gameData); void mainmenu_loop(); #ifdef __cplusplus diff --git a/Source/multi.cpp b/Source/multi.cpp index 2fe7a57e0..d5fd16a57 100644 --- a/Source/multi.cpp +++ b/Source/multi.cpp @@ -729,10 +729,6 @@ void NetClose() BOOL NetInit(BOOL bSinglePlayer, BOOL *pfExitProgram) { - _SNETPROGRAMDATA ProgramData; - _SNETUIDATA UiData; - _SNETPLAYERDATA plrdata; - while (1) { *pfExitProgram = FALSE; SetRndSeed(0); @@ -748,17 +744,6 @@ BOOL NetInit(BOOL bSinglePlayer, BOOL *pfExitProgram) sgGameInitInfo.bTheoQuest = sgOptions.Gameplay.bTheoQuest; sgGameInitInfo.bCowQuest = sgOptions.Gameplay.bCowQuest; sgGameInitInfo.bFriendlyFire = sgOptions.Gameplay.bFriendlyFire; - memset(&ProgramData, 0, sizeof(ProgramData)); - ProgramData.size = sizeof(ProgramData); - ProgramData.maxplayers = MAX_PLRS; - ProgramData.initdata = &sgGameInitInfo; - memset(&plrdata, 0, sizeof(plrdata)); - plrdata.size = sizeof(plrdata); - memset(&UiData, 0, sizeof(UiData)); - UiData.size = sizeof(UiData); - UiData.selectnamecallback = mainmenu_select_hero_dialog; - UiData.changenamecallback = (void (*)())mainmenu_change_name; - UiData.profilefields = UiProfileGetString(); memset(sgbPlayerTurnBitTbl, 0, sizeof(sgbPlayerTurnBitTbl)); gbGameDestroyed = FALSE; memset(sgbPlayerLeftGameTbl, 0, sizeof(sgbPlayerLeftGameTbl)); @@ -768,10 +753,10 @@ BOOL NetInit(BOOL bSinglePlayer, BOOL *pfExitProgram) memset(sgwPackPlrOffsetTbl, 0, sizeof(sgwPackPlrOffsetTbl)); SNetSetBasePlayer(0); if (bSinglePlayer) { - if (!multi_init_single(&ProgramData, &plrdata, &UiData)) + if (!multi_init_single(&sgGameInitInfo)) return FALSE; } else { - if (!multi_init_multi(&ProgramData, &plrdata, &UiData, pfExitProgram)) + if (!multi_init_multi(&sgGameInitInfo, pfExitProgram)) return FALSE; } sgbNetInited = TRUE; @@ -820,11 +805,11 @@ BOOL NetInit(BOOL bSinglePlayer, BOOL *pfExitProgram) return TRUE; } -BOOL multi_init_single(_SNETPROGRAMDATA *client_info, _SNETPLAYERDATA *user_info, _SNETUIDATA *ui_info) +BOOL multi_init_single(GameData *gameData) { int unused; - if (!SNetInitializeProvider(SELCONN_LOOPBACK, client_info, user_info, ui_info, &fileinfo)) { + if (!SNetInitializeProvider(SELCONN_LOOPBACK, gameData)) { SErrGetLastError(); return FALSE; } @@ -840,23 +825,21 @@ BOOL multi_init_single(_SNETPROGRAMDATA *client_info, _SNETPLAYERDATA *user_info return TRUE; } -BOOL multi_init_multi(_SNETPROGRAMDATA *client_info, _SNETPLAYERDATA *user_info, _SNETUIDATA *ui_info, BOOL *pfExitProgram) +BOOL multi_init_multi(GameData *gameData, BOOL *pfExitProgram) { BOOL first; int playerId; - int type; for (first = TRUE;; first = FALSE) { - type = 0x00; if (gbSelectProvider) { - if (!UiSelectProvider(0, client_info, user_info, ui_info, &fileinfo, &type) + if (!UiSelectProvider(gameData) && (!first || SErrGetLastError() != STORM_ERROR_REQUIRES_UPGRADE || !multi_upgrade(pfExitProgram))) { return FALSE; } } multi_event_handler(TRUE); - if (UiSelectGame(1, client_info, user_info, ui_info, &fileinfo, &playerId)) + if (UiSelectGame(gameData, &playerId)) break; gbSelectProvider = TRUE; diff --git a/Source/multi.h b/Source/multi.h index bedb2475f..301a100e9 100644 --- a/Source/multi.h +++ b/Source/multi.h @@ -6,6 +6,8 @@ #ifndef __MULTI_H__ #define __MULTI_H__ +#include "msg.h" + DEVILUTION_BEGIN_NAMESPACE #ifdef __cplusplus @@ -27,12 +29,6 @@ typedef struct GameData { Uint8 bFriendlyFire; } GameData; -typedef struct _SNETPROGRAMDATA { - Sint32 size; - Uint8 maxplayers; - GameData *initdata; -} _SNETPROGRAMDATA; - extern BOOLEAN gbSomebodyWonGameKludge; extern char szPlayerDescript[128]; extern WORD sgwPackPlrOffsetTbl[MAX_PLRS]; @@ -56,8 +52,8 @@ void multi_process_network_packets(); void multi_send_zero_packet(int pnum, BYTE bCmd, BYTE *pbSrc, DWORD dwLen); void NetClose(); BOOL NetInit(BOOL bSinglePlayer, BOOL *pfExitProgram); -BOOL multi_init_single(_SNETPROGRAMDATA *client_info, _SNETPLAYERDATA *user_info, _SNETUIDATA *ui_info); -BOOL multi_init_multi(_SNETPROGRAMDATA *client_info, _SNETPLAYERDATA *user_info, _SNETUIDATA *ui_info, BOOL *pfExitProgram); +BOOL multi_init_single(GameData *gameData); +BOOL multi_init_multi(GameData *gameData, BOOL *pfExitProgram); void recv_plrinfo(int pnum, TCmdPlrInfoHdr *p, BOOL recv); #ifdef __cplusplus diff --git a/Source/pfile.cpp b/Source/pfile.cpp index b7d8c7a61..ee9a622f7 100644 --- a/Source/pfile.cpp +++ b/Source/pfile.cpp @@ -192,62 +192,7 @@ void pfile_write_hero() } } -BOOL pfile_create_player_description(char *dst, DWORD len) -{ - char desc[128]; - _uiheroinfo uihero; - - myplr = 0; - pfile_read_player_from_save(); - game_2_ui_player(plr, &uihero, gbValidSaveFile); - UiSetupPlayerInfo(gszHero, &uihero, GAME_ID); - - if (dst != NULL && len) { - if (UiCreatePlayerDescription(&uihero, GAME_ID, &desc) == 0) - return FALSE; - SStrCopy(dst, desc, len); - } - return TRUE; -} - -BOOL pfile_rename_hero(const char *name_1, const char *name_2) -{ - int i; - DWORD save_num; - _uiheroinfo uihero; - BOOL found = FALSE; - - if (pfile_get_save_num_from_name(name_2) == MAX_CHARACTERS) { - for (i = 0; i != MAX_PLRS; i++) { - if (!strcasecmp(name_1, plr[i]._pName)) { - found = TRUE; - break; - } - } - } - - if (!found) - return FALSE; - save_num = pfile_get_save_num_from_name(name_1); - if (save_num == MAX_CHARACTERS) - return FALSE; - - SStrCopy(hero_names[save_num], name_2, PLR_NAME_LEN); - SStrCopy(plr[i]._pName, name_2, PLR_NAME_LEN); - if (!strcasecmp(gszHero, name_1)) - SStrCopy(gszHero, name_2, sizeof(gszHero)); - game_2_ui_player(plr, &uihero, gbValidSaveFile); - UiSetupPlayerInfo(gszHero, &uihero, GAME_ID); - pfile_write_hero(); - return TRUE; -} - -void pfile_flush_W() -{ - pfile_flush(TRUE, pfile_get_save_num_from_name(plr[myplr]._pName)); -} - -void game_2_ui_player(const PlayerStruct *p, _uiheroinfo *heroinfo, BOOL bHasSaveFile) +static void game_2_ui_player(const PlayerStruct *p, _uiheroinfo *heroinfo, BOOL bHasSaveFile) { memset(heroinfo, 0, sizeof(*heroinfo)); strncpy(heroinfo->name, p->_pName, sizeof(heroinfo->name) - 1); @@ -264,16 +209,32 @@ void game_2_ui_player(const PlayerStruct *p, _uiheroinfo *heroinfo, BOOL bHasSav heroinfo->spawned = gbIsSpawn; } -BOOL pfile_ui_set_hero_infos(BOOL (*ui_add_hero_info)(_uiheroinfo *)) +BOOL pfile_create_player_description() { - DWORD i; + char desc[128]; + _uiheroinfo uihero; + myplr = 0; + pfile_read_player_from_save(); + game_2_ui_player(&plr[myplr], &uihero, gbValidSaveFile); + UiSetupPlayerInfo(gszHero, &uihero, GAME_ID); + + return TRUE; +} + +void pfile_flush_W() +{ + pfile_flush(TRUE, pfile_get_save_num_from_name(plr[myplr]._pName)); +} + +BOOL pfile_ui_set_hero_infos(BOOL (*ui_add_hero_info)(_uiheroinfo *)) +{ memset(hero_names, 0, sizeof(hero_names)); - for (i = 0; i < MAX_CHARACTERS; i++) { - PkPlayerStruct pkplr; + for (DWORD i = 0; i < MAX_CHARACTERS; i++) { HANDLE archive = pfile_open_save_archive(i); if (archive) { + PkPlayerStruct pkplr; if (pfile_read_hero(archive, &pkplr)) { _uiheroinfo uihero; strcpy(hero_names[i], pkplr.pName); @@ -287,7 +248,7 @@ BOOL pfile_ui_set_hero_infos(BOOL (*ui_add_hero_info)(_uiheroinfo *)) RemoveEmptyInventory(0); CalcPlrInv(0, FALSE); - game_2_ui_player(plr, &uihero, hasSaveGame); + game_2_ui_player(&plr[0], &uihero, hasSaveGame); ui_add_hero_info(&uihero); } pfile_SFileCloseArchive(archive); diff --git a/Source/pfile.h b/Source/pfile.h index 90b9ac0bb..012476cff 100644 --- a/Source/pfile.h +++ b/Source/pfile.h @@ -17,10 +17,8 @@ extern "C" { extern BOOL gbValidSaveFile; void pfile_write_hero(); -BOOL pfile_create_player_description(char *dst, DWORD len); -BOOL pfile_rename_hero(const char *name_1, const char *name_2); +BOOL pfile_create_player_description(); void pfile_flush_W(); -void game_2_ui_player(const PlayerStruct *p, _uiheroinfo *heroinfo, BOOL bHasSaveFile); BOOL pfile_ui_set_hero_infos(BOOL (*ui_add_hero_info)(_uiheroinfo *)); BOOL pfile_archive_contains_game(HANDLE hsArchive, DWORD save_num); void pfile_ui_set_class_stats(unsigned int player_class_nr, _uidefaultstats *class_stats); diff --git a/SourceX/DiabloUI/diabloui.cpp b/SourceX/DiabloUI/diabloui.cpp index 533a311c2..f703888c2 100644 --- a/SourceX/DiabloUI/diabloui.cpp +++ b/SourceX/DiabloUI/diabloui.cpp @@ -500,16 +500,11 @@ void UiInitialize() } } -const char **UiProfileGetString() -{ - return NULL; -} - char connect_plrinfostr[128]; char connect_categorystr[128]; void UiSetupPlayerInfo(char *infostr, _uiheroinfo *pInfo, Uint32 type) { - SStrCopy(connect_plrinfostr, infostr, sizeof(connect_plrinfostr)); + strncpy(connect_plrinfostr, infostr, sizeof(connect_plrinfostr)); char format[32] = ""; memcpy(format, &type, 4); strcpy(&format[4], " %d %d %d %d %d %d %d %d %d"); @@ -565,29 +560,6 @@ BOOL UiValidPlayerName(const char *name) return true; } -BOOL UiCreatePlayerDescription(_uiheroinfo *info, Uint32 mode, char (*desc)[128]) -{ - char format[32] = ""; - memcpy(format, &mode, 4); - strcpy(&format[4], " %d %d %d %d %d %d %d %d %d"); - - snprintf( - *desc, - sizeof(*desc), - format, - info->level, - info->heroclass, - info->herorank, - info->strength, - info->magic, - info->dexterity, - info->vitality, - info->gold, - info->spawned); - - return true; -} - Sint16 GetCenterOffset(Sint16 w, Sint16 bw) { if (bw == 0) { diff --git a/SourceX/DiabloUI/selconn.cpp b/SourceX/DiabloUI/selconn.cpp index f7fbafa05..4eceac6f2 100644 --- a/SourceX/DiabloUI/selconn.cpp +++ b/SourceX/DiabloUI/selconn.cpp @@ -12,10 +12,7 @@ char selconn_Description[64]; char selconn_Gateway[129]; bool selconn_ReturnValue = false; bool selconn_EndMenu = false; -_SNETPROGRAMDATA *selconn_ClientInfo; -_SNETPLAYERDATA *selconn_UserInfo; -_SNETUIDATA *selconn_UiInfo; -_SNETVERSIONDATA *selconn_FileInfo; +GameData *selconn_GameData; int provider; @@ -125,22 +122,13 @@ void selconn_Select(int value) provider = vecConnItems[value]->m_value; selconn_Free(); - selconn_EndMenu = SNetInitializeProvider(provider, selconn_ClientInfo, selconn_UserInfo, selconn_UiInfo, selconn_FileInfo); + selconn_EndMenu = SNetInitializeProvider(provider, selconn_GameData); selconn_Load(); } -int UiSelectProvider( - int a1, - _SNETPROGRAMDATA *client_info, - _SNETPLAYERDATA *user_info, - _SNETUIDATA *ui_info, - _SNETVERSIONDATA *file_info, - int *type) +int UiSelectProvider(GameData *gameData) { - selconn_ClientInfo = client_info; - selconn_UserInfo = user_info; - selconn_UiInfo = ui_info; - selconn_FileInfo = file_info; + selconn_GameData = gameData; selconn_Load(); selconn_ReturnValue = true; diff --git a/SourceX/DiabloUI/selgame.cpp b/SourceX/DiabloUI/selgame.cpp index b31eaaea7..b487300a9 100644 --- a/SourceX/DiabloUI/selgame.cpp +++ b/SourceX/DiabloUI/selgame.cpp @@ -24,7 +24,7 @@ int nDifficulty; int nTickRate; int heroLevel; -static _SNETPROGRAMDATA *m_client_info; +static GameData *m_game_data; extern int provider; #define DESCRIPTION_WIDTH 205 @@ -427,7 +427,7 @@ void selgame_Password_Select(int value) if (selgame_selectedGame) { strcpy(sgOptions.Network.szPreviousHost, selgame_Ip); if (SNetJoinGame(selgame_selectedGame, selgame_Ip, selgame_Password, NULL, NULL, gdwPlayerId)) { - if (!IsGameCompatible(m_client_info->initdata)) { + if (!IsGameCompatible(m_game_data)) { selgame_GameSelection_Select(1); return; } @@ -443,14 +443,13 @@ void selgame_Password_Select(int value) return; } - GameData *data = m_client_info->initdata; - data->nDifficulty = nDifficulty; - data->nTickRate = nTickRate; - data->bRunInTown = sgOptions.Gameplay.bRunInTown; - data->bTheoQuest = sgOptions.Gameplay.bTheoQuest; - data->bCowQuest = sgOptions.Gameplay.bCowQuest; + m_game_data->nDifficulty = nDifficulty; + m_game_data->nTickRate = nTickRate; + m_game_data->bRunInTown = sgOptions.Gameplay.bRunInTown; + m_game_data->bTheoQuest = sgOptions.Gameplay.bTheoQuest; + m_game_data->bCowQuest = sgOptions.Gameplay.bCowQuest; - if (SNetCreateGame(NULL, selgame_Password, NULL, 0, (char *)data, sizeof(GameData), MAX_PLRS, NULL, NULL, gdwPlayerId)) { + if (SNetCreateGame(NULL, selgame_Password, NULL, 0, (char *)m_game_data, sizeof(GameData), MAX_PLRS, NULL, NULL, gdwPlayerId)) { UiInitList_clear(); selgame_endMenu = true; } else { @@ -469,11 +468,10 @@ void selgame_Password_Esc() selgame_GameSpeedSelection(); } -int UiSelectGame(int a1, _SNETPROGRAMDATA *client_info, _SNETPLAYERDATA *user_info, _SNETUIDATA *ui_info, - _SNETVERSIONDATA *file_info, int *playerId) +int UiSelectGame(GameData *gameData, int *playerId) { gdwPlayerId = playerId; - m_client_info = client_info; + m_game_data = gameData; LoadBackgroundArt("ui_art\\selgame.pcx"); selgame_GameSelection_Init(); diff --git a/SourceX/DiabloUI/selhero.cpp b/SourceX/DiabloUI/selhero.cpp index 063b27eb4..2ec5d5f36 100644 --- a/SourceX/DiabloUI/selhero.cpp +++ b/SourceX/DiabloUI/selhero.cpp @@ -30,7 +30,7 @@ char textStats[5][4]; char title[32]; char selhero_Lable[32]; char selhero_Description[256]; -int selhero_result; +_selhero_selections selhero_result; bool selhero_endMenu; bool selhero_isMultiPlayer; bool selhero_navigateYesNo; @@ -484,7 +484,7 @@ void selhero_Load_Select(int value) selgame_GameSelection_Select(0); } - selhero_result = 0; + selhero_result = SELHERO_NEW_DUNGEON; } static void UiSelHeroDialog( @@ -492,7 +492,7 @@ static void UiSelHeroDialog( BOOL (*fncreate)(_uiheroinfo *), void (*fnstats)(unsigned int, _uidefaultstats *), BOOL (*fnremove)(_uiheroinfo *), - int *dlgresult, + _selhero_selections *dlgresult, char (*name)[16]) { bUIElementsLoaded = true; @@ -545,7 +545,7 @@ void UiSelHeroSingDialog( BOOL (*fncreate)(_uiheroinfo *), BOOL (*fnremove)(_uiheroinfo *), void (*fnstats)(unsigned int, _uidefaultstats *), - int *dlgresult, + _selhero_selections *dlgresult, char (*name)[16], int *difficulty) { @@ -559,8 +559,7 @@ void UiSelHeroMultDialog( BOOL (*fncreate)(_uiheroinfo *), BOOL (*fnremove)(_uiheroinfo *), void (*fnstats)(unsigned int, _uidefaultstats *), - int *dlgresult, - BOOL *hero_is_created, + _selhero_selections *dlgresult, char (*name)[16]) { selhero_isMultiPlayer = true; diff --git a/SourceX/storm/storm.cpp b/SourceX/storm/storm.cpp index a4d52c664..8d7fbc1f5 100644 --- a/SourceX/storm/storm.cpp +++ b/SourceX/storm/storm.cpp @@ -787,11 +787,6 @@ void SErrSetLastError(DWORD dwErrCode) nLastError = dwErrCode; } -void SStrCopy(char *dest, const char *src, int max_length) -{ - strncpy(dest, src, max_length); -} - BOOL SFileSetBasePath(const char *path) { if (SBasePath == NULL) diff --git a/SourceX/storm/storm_net.cpp b/SourceX/storm/storm_net.cpp index 2c040a243..04908be3e 100644 --- a/SourceX/storm/storm_net.cpp +++ b/SourceX/storm/storm_net.cpp @@ -93,14 +93,11 @@ BOOL SNetLeaveGame(int type) /** * @brief Called by engine for single, called by ui for multi * @param provider BNET, IPXN, MODM, SCBL or UDPN - * @param fileinfo Ignore */ -int SNetInitializeProvider(unsigned long provider, struct _SNETPROGRAMDATA *client_info, - struct _SNETPLAYERDATA *user_info, struct _SNETUIDATA *ui_info, - struct _SNETVERSIONDATA *fileinfo) +int SNetInitializeProvider(Uint32 provider, struct GameData *gameData) { dvlnet_inst = net::abstract_net::make_net(provider); - return ui_info->selectnamecallback(client_info, user_info, ui_info, fileinfo, provider, NULL, 0, NULL, 0, NULL); + return mainmenu_select_hero_dialog(gameData); } /** diff --git a/enums.h b/enums.h index 4dd42eb4c..8b4a48ed8 100644 --- a/enums.h +++ b/enums.h @@ -2179,10 +2179,10 @@ typedef enum _mainmenu_selections { } _mainmenu_selections; typedef enum _selhero_selections { - SELHERO_NEW_DUNGEON = 1, - SELHERO_CONTINUE = 2, - SELHERO_CONNECT = 3, - SELHERO_PREVIOUS = 4 + SELHERO_NEW_DUNGEON, + SELHERO_CONTINUE, + SELHERO_CONNECT, + SELHERO_PREVIOUS, } _selhero_selections; typedef enum panel_button_id { diff --git a/structs.h b/structs.h index cc5889b7c..3cea1f4ee 100644 --- a/structs.h +++ b/structs.h @@ -268,37 +268,6 @@ typedef struct _SNETEVENT { // TPDEF PTR FCN UCHAR SNETSELECTEDPROC // TPDEF PTR FCN UCHAR SNETSTATUSPROC -typedef struct _SNETPLAYERDATA { - int size; - char *playername; - char *playerdescription; -} _SNETPLAYERDATA; - -typedef struct _SNETVERSIONDATA { - int size; - const char *versionstring; -} _SNETVERSIONDATA; - -typedef struct _SNETUIDATA { - int size; - void (*selectedcallback)(); - void (*statuscallback)(); - void (*categorylistcallback)(); - void (*newaccountcallback)(); - const char **profilefields; - bool (*selectnamecallback)( - const struct _SNETPROGRAMDATA *, - const struct _SNETPLAYERDATA *, - const struct _SNETUIDATA *, - const struct _SNETVERSIONDATA *, - DWORD provider, /* e.g. 'BNET', 'IPXN', 'MODM', 'SCBL' */ - char *, DWORD, /* character name will be copied here */ - char *, DWORD, /* character "description" will be copied here (used to advertise games) */ - bool * /* new character? - unsure about this */ - ); - void (*changenamecallback)(); -} _SNETUIDATA; - // TPDEF PTR FCN UCHAR SNETSPIBIND // TPDEF PTR FCN UCHAR SNETSPIQUERY