Browse Source

Clena up NetInit

pull/88/head
Anders Jenbo 7 years ago
parent
commit
8009a47cab
  1. 2
      DiabloUI/bn_prof.cpp
  2. 2
      DiabloUI/diabloui.h
  3. 151
      Source/multi.cpp
  4. 7
      Source/multi.h

2
DiabloUI/bn_prof.cpp

@ -10,7 +10,7 @@ signed int bn_prof_100014E8() { return 0; }
// 10029404: using guessed type int dword_10029404;
// ref: 0x100014F3
int __cdecl UiProfileGetString() { return 0; }
int __stdcall UiProfileGetString() { return 0; }
//const char *UiProfileGetString() { return 0; }
/* {
return "profile\\sex";

2
DiabloUI/diabloui.h

@ -36,7 +36,7 @@ BOOL __stdcall UiSelHeroSingDialog(BOOL(__stdcall *fninfo)(BOOL(__stdcall *fninf
BOOL __stdcall UiCreditsDialog(int a1);
BOOL __stdcall UiMainMenuDialog(char *name, int *pdwResult, void(__stdcall *fnSound)(char *file), int a4);
int __stdcall UiProgressDialog(HWND window, char *msg, int a3, void *fnfunc, int a5);
int __cdecl UiProfileGetString();
int __stdcall UiProfileGetString();
void __cdecl UiProfileCallback();
void __cdecl UiProfileDraw();
BOOL __stdcall UiCategoryCallback(int a1, int a2, int a3, int a4, int a5, _DWORD *a6, _DWORD *a7);

151
Source/multi.cpp

@ -2,17 +2,17 @@
#include "../types.h"
char gbSomebodyWonGameKludge; // weak
BOOLEAN gbSomebodyWonGameKludge; // weak
TBuffer sgHiPriBuf;
char szPlayerDescript[128];
short sgwPackPlrOffsetTbl[MAX_PLRS];
PkPlayerStruct netplr[MAX_PLRS];
BYTE sgbPlayerTurnBitTbl[MAX_PLRS];
BOOLEAN sgbPlayerTurnBitTbl[MAX_PLRS];
char sgbPlayerLeftGameTbl[MAX_PLRS];
int sgbSentThisCycle; // idb
BOOL gbShouldValidatePackage;
BYTE gbActivePlayers; // weak
char gbGameDestroyed; // weak
BYTE gbActivePlayers; // weak
BOOLEAN gbGameDestroyed; // weak
BOOLEAN sgbSendDeltaTbl[MAX_PLRS];
_gamedata sgGameInitInfo;
char byte_678640; // weak
@ -24,7 +24,7 @@ BYTE gbMaxPlayers;
BOOLEAN sgbTimeout;
char szPlayerName[128];
BYTE gbDeltaSender;
int sgbNetInited; // weak
BOOL sgbNetInited; // weak
int player_state[MAX_PLRS];
const int event_types[3] = {
@ -281,7 +281,7 @@ void multi_player_left_msg(int pnum, int left)
v5 = "Player '%s' dropped due to timeout";
} else {
v5 = "Player '%s' killed Diablo and left the game!";
gbSomebodyWonGameKludge = 1;
gbSomebodyWonGameKludge = TRUE;
}
EventPlrMsg(v5, plr[v4]._pName);
}
@ -397,7 +397,7 @@ void multi_begin_timeout()
if (nLowestActive == myplr)
multi_check_drop_player();
} else {
gbGameDestroyed = 1;
gbGameDestroyed = TRUE;
}
}
} else {
@ -591,7 +591,7 @@ void multi_send_zero_packet(int pnum, char a2, void *pbSrc, int dwLen)
void NetClose()
{
if (sgbNetInited) {
sgbNetInited = 0;
sgbNetInited = FALSE;
nthread_cleanup();
dthread_cleanup();
tmsg_cleanup();
@ -651,7 +651,7 @@ void __stdcall multi_handle_events(_SNETEVENT *pEvt)
v1 = *v2;
sgdwPlayerLeftReasonTbl[pEvt->playerid] = v1;
if (v1 == 0x40000004)
gbSomebodyWonGameKludge = 1;
gbSomebodyWonGameKludge = TRUE;
sgbSendDeltaTbl[pEvt->playerid] = FALSE;
dthread_remove_player(pEvt->playerid);
if (gbDeltaSender == pEvt->playerid)
@ -665,31 +665,21 @@ void __stdcall multi_handle_events(_SNETEVENT *pEvt)
// 6761B8: using guessed type char gbSomebodyWonGameKludge;
// 6796E4: using guessed type char gbDeltaSender;
int NetInit(int bSinglePlayer, int *pfExitProgram)
{
int v2; // ebx
int v4; // eax
//int v5; // ecx
BOOLEAN v7; // zf
//int v9; // eax
//int v10; // eax
_SNETPROGRAMDATA ProgramData; // [esp+8h] [ebp-A8h]
_SNETUIDATA UiData; // [esp+44h] [ebp-6Ch]
_SNETPLAYERDATA a2; // [esp+94h] [ebp-1Ch]
int v14; // [esp+A4h] [ebp-Ch]
unsigned int len; // [esp+A8h] [ebp-8h]
int *a4; // [esp+ACh] [ebp-4h]
a4 = pfExitProgram;
v14 = bSinglePlayer;
v2 = 0;
BOOL NetInit(BOOL bSinglePlayer, BOOL *pfExitProgram)
{
int i;
_SNETPROGRAMDATA ProgramData;
_SNETUIDATA UiData;
_SNETPLAYERDATA plrdata;
unsigned int len;
while (1) {
*a4 = 0;
*pfExitProgram = FALSE;
SetRndSeed(0);
sgGameInitInfo.dwSeed = time(NULL);
_LOBYTE(sgGameInitInfo.bDiff) = gnDifficulty;
memset(&ProgramData, 0, 0x3Cu);
ProgramData.size = 60;
sgGameInitInfo.bDiff = gnDifficulty;
memset(&ProgramData, 0, sizeof(ProgramData));
ProgramData.size = sizeof(ProgramData);
ProgramData.programname = "Diablo Retail";
ProgramData.programdescription = gszVersionNumber;
ProgramData.programid = 'DRTL';
@ -699,40 +689,41 @@ int NetInit(int bSinglePlayer, int *pfExitProgram)
ProgramData.initdatabytes = 8;
ProgramData.optcategorybits = 15;
ProgramData.lcid = 1033; /* LANG_ENGLISH */
memset(&a2, 0, 0x10u);
a2.size = 16;
memset(&UiData, 0, 0x50u);
UiData.size = 80;
memset(&plrdata, 0, sizeof(plrdata));
plrdata.size = sizeof(plrdata);
memset(&UiData, 0, sizeof(UiData));
UiData.size = sizeof(UiData);
UiData.parentwindow = SDrawGetFrameWindow(NULL);
UiData.artcallback = (void(*)())UiArtCallback;
UiData.createcallback = (void(*)())UiCreateGameCallback;
UiData.drawdesccallback = (void(*)())UiDrawDescCallback;
UiData.messageboxcallback = (void(*)())UiMessageBoxCallback;
UiData.soundcallback = (void(*)())UiSoundCallback;
UiData.authcallback = (void(*)())UiAuthCallback;
UiData.getdatacallback = (void(*)())UiGetDataCallback;
UiData.categorycallback = (void(*)())UiCategoryCallback;
UiData.artcallback = (void (*)())UiArtCallback;
UiData.createcallback = (void (*)())UiCreateGameCallback;
UiData.drawdesccallback = (void (*)())UiDrawDescCallback;
UiData.messageboxcallback = (void (*)())UiMessageBoxCallback;
UiData.soundcallback = (void (*)())UiSoundCallback;
UiData.authcallback = (void (*)())UiAuthCallback;
UiData.getdatacallback = (void (*)())UiGetDataCallback;
UiData.categorycallback = (void (*)())UiCategoryCallback;
UiData.selectnamecallback = mainmenu_select_hero_dialog;
UiData.changenamecallback = (void(*)())mainmenu_create_hero;
UiData.profilebitmapcallback = (void(*)())UiProfileDraw;
UiData.profilecallback = (void(*)())UiProfileCallback;
UiData.changenamecallback = (void (*)())mainmenu_create_hero;
UiData.profilebitmapcallback = (void (*)())UiProfileDraw;
UiData.profilecallback = (void (*)())UiProfileCallback;
UiData.profilefields = UiProfileGetString();
memset(sgbPlayerTurnBitTbl, 0, 4u);
gbGameDestroyed = 0;
memset(sgbPlayerLeftGameTbl, 0, 4u);
memset(sgdwPlayerLeftReasonTbl, 0, 0x10u);
memset(sgbSendDeltaTbl, 0, 4u);
memset(plr, 0, 0x15360u);
memset(sgwPackPlrOffsetTbl, 0, 8u);
memset(sgbPlayerTurnBitTbl, 0, sizeof(sgbPlayerTurnBitTbl));
gbGameDestroyed = FALSE;
memset(sgbPlayerLeftGameTbl, 0, sizeof(sgbPlayerLeftGameTbl));
memset(sgdwPlayerLeftReasonTbl, 0, sizeof(sgdwPlayerLeftReasonTbl));
memset(sgbSendDeltaTbl, 0, sizeof(sgbSendDeltaTbl));
memset(plr, 0, sizeof(plr));
memset(sgwPackPlrOffsetTbl, 0, sizeof(sgwPackPlrOffsetTbl));
SNetSetBasePlayer(0);
if (v14)
v4 = multi_init_single(&ProgramData, &a2, &UiData);
else
v4 = multi_init_multi(&ProgramData, &a2, &UiData, a4);
if (!v4)
return 0;
sgbNetInited = 1;
sgbTimeout = 0;
if (bSinglePlayer) {
if (!multi_init_single(&ProgramData, &plrdata, &UiData))
return FALSE;
} else {
if (!multi_init_multi(&ProgramData, &plrdata, &UiData, pfExitProgram))
return FALSE;
}
sgbNetInited = TRUE;
sgbTimeout = FALSE;
delta_init();
InitPlrMsg();
buffer_init(&sgHiPriBuf);
@ -741,36 +732,34 @@ int NetInit(int bSinglePlayer, int *pfExitProgram)
sync_init();
nthread_start(sgbPlayerTurnBitTbl[myplr]);
dthread_start();
MI_Dummy(0); /* v5 */
dummy_nop_used_in_NetInit();
sgdwGameLoops = 0;
sgbSentThisCycle = 0;
gbDeltaSender = myplr;
gbSomebodyWonGameKludge = 0;
gbSomebodyWonGameKludge = FALSE;
nthread_send_and_recv_turn(0, 0);
SetupLocalCoords();
multi_send_pinfo(-2, CMD_SEND_PLRINFO);
gbActivePlayers = 1;
v7 = sgbPlayerTurnBitTbl[myplr] == 0;
plr[myplr].plractive = 1;
if (v7 || msg_wait_resync())
if (sgbPlayerTurnBitTbl[myplr] == 0 || msg_wait_resync())
break;
NetClose();
byte_678640 = 0;
}
gnDifficulty = _LOBYTE(sgGameInitInfo.bDiff);
gnDifficulty = sgGameInitInfo.bDiff;
SetRndSeed(sgGameInitInfo.dwSeed);
do {
glSeedTbl[v2] = GetRndSeed();
gnLevelTypeTbl[v2] = InitNewSeed(v2);
++v2;
} while (v2 < 17);
//_LOBYTE(v9) = SNetGetGameInfo(GAMEINFO_NAME, szPlayerName, 128, len);
for (i = 0; i < 17; i++) {
glSeedTbl[i] = GetRndSeed();
gnLevelTypeTbl[i] = InitNewSeed(i);
}
if (!SNetGetGameInfo(GAMEINFO_NAME, szPlayerName, 128, &len))
nthread_terminate_game("SNetGetGameInfo1");
//_LOBYTE(v10) = SNetGetGameInfo(GAMEINFO_PASSWORD, szPlayerDescript, 128, len);
if (!SNetGetGameInfo(GAMEINFO_PASSWORD, szPlayerDescript, 128, &len))
nthread_terminate_game("SNetGetGameInfo2");
return 1;
return TRUE;
}
// 6761B8: using guessed type char gbSomebodyWonGameKludge;
// 67862D: using guessed type char gbGameDestroyed;
@ -778,6 +767,10 @@ int NetInit(int bSinglePlayer, int *pfExitProgram)
// 6796E4: using guessed type char gbDeltaSender;
// 6796E8: using guessed type int sgbNetInited;
void dummy_nop_used_in_NetInit()
{
}
void buffer_init(TBuffer *pBuf)
{
pBuf->dwNextWriteOffset = 0;
@ -786,14 +779,10 @@ void buffer_init(TBuffer *pBuf)
void multi_send_pinfo(int pnum, char cmd)
{
char v2; // bl
int v3; // esi
PkPlayerStruct pkplr; // [esp+8h] [ebp-4F4h]
PkPlayerStruct pkplr;
v2 = cmd;
v3 = pnum;
PackPlayer(&pkplr, myplr, 1);
dthread_send_delta(v3, v2, &pkplr, 1266);
PackPlayer(&pkplr, myplr, TRUE);
dthread_send_delta(pnum, cmd, &pkplr, sizeof(pkplr));
}
int InitNewSeed(int newseed)

7
Source/multi.h

@ -2,13 +2,13 @@
#ifndef __MULTI_H__
#define __MULTI_H__
extern char gbSomebodyWonGameKludge; // weak
extern BOOLEAN gbSomebodyWonGameKludge; // weak
extern char szPlayerDescript[128];
extern short sgwPackPlrOffsetTbl[MAX_PLRS];
extern PkPlayerStruct netplr[MAX_PLRS];
extern BOOL gbShouldValidatePackage;
extern BYTE gbActivePlayers;
extern char gbGameDestroyed; // weak
extern BOOLEAN gbGameDestroyed; // weak
extern char byte_678640; // weak
extern BYTE gbMaxPlayers;
extern char szPlayerName[128];
@ -42,7 +42,8 @@ void multi_send_zero_packet(int pnum, char a2, void *pbSrc, int dwLen);
void NetClose();
char multi_event_handler(int a1);
void __stdcall multi_handle_events(_SNETEVENT *pEvt);
int NetInit(int bSinglePlayer, int *pfExitProgram);
BOOL NetInit(BOOL bSinglePlayer, BOOL *pfExitProgram);
void dummy_nop_used_in_NetInit();
void buffer_init(TBuffer *pBuf);
void multi_send_pinfo(int pnum, char cmd);
int InitNewSeed(int newseed);

Loading…
Cancel
Save