|
|
|
|
@ -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; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|