Browse Source

multi_player_joins bin exact (#1009)

pull/287/head^2
qndel 7 years ago committed by Anders Jenbo
parent
commit
c5ad888cc1
  1. 80
      Source/multi.cpp
  2. 2
      Source/multi.h

80
Source/multi.cpp

@ -5,7 +5,7 @@
BOOLEAN gbSomebodyWonGameKludge; // weak
TBuffer sgHiPriBuf;
char szPlayerDescript[128];
short sgwPackPlrOffsetTbl[MAX_PLRS];
WORD sgwPackPlrOffsetTbl[MAX_PLRS];
PkPlayerStruct netplr[MAX_PLRS];
BOOLEAN sgbPlayerTurnBitTbl[MAX_PLRS];
char sgbPlayerLeftGameTbl[MAX_PLRS];
@ -928,60 +928,40 @@ BOOL multi_upgrade(int *pfExitProgram)
void multi_player_joins(int pnum, TCmdPlrInfoHdr *cmd, int a3)
{
int v3; // ebx
TCmdPlrInfoHdr *v4; // edi
short *v5; // esi
int v6; // esi
BOOLEAN v7; // zf
char *v8; // eax
int v9; // ST08_4
unsigned char *v10; // edx
int v11; // eax
int v12; // ecx
int v13; // eax
v3 = pnum;
v4 = cmd;
char *msg;
if (myplr != pnum) {
v5 = &sgwPackPlrOffsetTbl[pnum];
if (*v5 == cmd->wOffset || (*v5 = 0, !cmd->wOffset)) {
if (!a3 && !*v5) {
if (sgwPackPlrOffsetTbl[pnum] == cmd->wOffset || (sgwPackPlrOffsetTbl[pnum] = 0, !cmd->wOffset)) {
if (!a3 && !sgwPackPlrOffsetTbl[pnum]) {
multi_send_pinfo(pnum, CMD_ACK_PLRINFO);
}
memcpy((char *)&netplr[v3] + (unsigned short)v4->wOffset, &v4[1], (unsigned short)v4->wBytes);
*v5 += v4->wBytes;
if (*v5 == 1266) {
*v5 = 0;
multi_player_left_msg(v3, 0);
v6 = v3;
plr[v3]._pGFXLoad = 0;
UnPackPlayer(&netplr[v3], v3, 1);
memcpy((char *)&netplr[pnum] + cmd->wOffset, &cmd[1], cmd->wBytes);
sgwPackPlrOffsetTbl[pnum] += cmd->wBytes;
if (sgwPackPlrOffsetTbl[pnum] == 1266) {
sgwPackPlrOffsetTbl[pnum] = 0;
multi_player_left_msg(pnum, 0);
plr[pnum]._pGFXLoad = 0;
UnPackPlayer(&netplr[pnum], pnum, 1);
if (a3) {
++gbActivePlayers;
v7 = sgbPlayerTurnBitTbl[v3] == 0;
plr[v6].plractive = 1;
v8 = "Player '%s' (level %d) just joined the game";
if (v7)
v8 = "Player '%s' (level %d) is already in the game";
EventPlrMsg(v8, plr[v6]._pName, plr[v6]._pLevel);
LoadPlrGFX(v3, PFILE_STAND);
SyncInitPlr(v3);
if (plr[v6].plrlevel == currlevel) {
if (plr[v6]._pHitPoints >> 6 <= 0) {
plr[v6]._pgfxnum = 0;
LoadPlrGFX(v3, PFILE_DEATH);
v9 = plr[v6]._pDWidth;
v10 = plr[v6]._pDAnim[0];
plr[v6]._pmode = 8;
NewPlrAnim(v3, v10, plr[v6]._pDFrames, 1, v9);
v11 = plr[v6]._pAnimLen;
v12 = v11 - 1;
plr[v6]._pVar8 = 2 * v11;
v13 = plr[v6].WorldX;
plr[v6]._pAnimFrame = v12;
dFlags[v13][plr[v6].WorldY] |= DFLAG_DEAD_PLAYER;
gbActivePlayers++;
plr[pnum].plractive = 1;
msg = "Player '%s' (level %d) just joined the game";
if (sgbPlayerTurnBitTbl[pnum] == 0)
msg = "Player '%s' (level %d) is already in the game";
EventPlrMsg(msg, plr[pnum]._pName, plr[pnum]._pLevel);
LoadPlrGFX(pnum, PFILE_STAND);
SyncInitPlr(pnum);
if (plr[pnum].plrlevel == currlevel) {
if (plr[pnum]._pHitPoints >> 6 > 0) {
StartStand(pnum, 0);
} else {
StartStand(v3, 0);
plr[pnum]._pgfxnum = 0;
LoadPlrGFX(pnum, PFILE_DEATH);
plr[pnum]._pmode = 8;
NewPlrAnim(pnum, plr[pnum]._pDAnim[0], plr[pnum]._pDFrames, 1, plr[pnum]._pDWidth);
plr[pnum]._pAnimFrame = plr[pnum]._pAnimLen - 1;
plr[pnum]._pVar8 = 2 * plr[pnum]._pAnimLen;
dFlags[plr[pnum].WorldX][plr[pnum].WorldY] |= DFLAG_DEAD_PLAYER;
}
}
}

2
Source/multi.h

@ -4,7 +4,7 @@
extern BOOLEAN gbSomebodyWonGameKludge; // weak
extern char szPlayerDescript[128];
extern short sgwPackPlrOffsetTbl[MAX_PLRS];
extern WORD sgwPackPlrOffsetTbl[MAX_PLRS];
extern PkPlayerStruct netplr[MAX_PLRS];
extern BOOL gbShouldValidatePackage;
extern BYTE gbActivePlayers;

Loading…
Cancel
Save