Browse Source

[hellfire] StartPlayerKill bin exact

pull/876/head
qndel 6 years ago committed by Anders Jenbo
parent
commit
c5fcc643b3
  1. 57
      Source/player.cpp

57
Source/player.cpp

@ -1829,7 +1829,8 @@ void StartPlayerKill(int pnum, int earflag)
ItemStruct ear;
ItemStruct *pi;
if (plr[pnum]._pHitPoints <= 0 && plr[pnum]._pmode == PM_DEATH) {
p = &plr[pnum];
if (p->_pHitPoints <= 0 && p->_pmode == PM_DEATH) {
return;
}
@ -1844,45 +1845,52 @@ void StartPlayerKill(int pnum, int earflag)
}
if (plr[pnum]._pClass == PC_WARRIOR) {
PlaySfxLoc(PS_DEAD, plr[pnum].WorldX, plr[pnum].WorldY); // BUGFIX: should use `PS_WARR71` like other classes
PlaySfxLoc(PS_DEAD, p->WorldX, p->WorldY); // BUGFIX: should use `PS_WARR71` like other classes
#ifndef SPAWN
} else if (plr[pnum]._pClass == PC_ROGUE) {
PlaySfxLoc(PS_ROGUE71, plr[pnum].WorldX, plr[pnum].WorldY);
PlaySfxLoc(PS_ROGUE71, p->WorldX, p->WorldY);
} else if (plr[pnum]._pClass == PC_SORCERER) {
PlaySfxLoc(PS_MAGE71, plr[pnum].WorldX, plr[pnum].WorldY);
PlaySfxLoc(PS_MAGE71, p->WorldX, p->WorldY);
#ifdef HELLFIRE
} else if (plr[pnum]._pClass == PC_MONK) {
PlaySfxLoc(PS_MONK71, p->WorldX, p->WorldY);
} else if (plr[pnum]._pClass == PC_BARD) {
PlaySfxLoc(PS_ROGUE71, p->WorldX, p->WorldY);
} else if (plr[pnum]._pClass == PC_BARBARIAN) {
PlaySfxLoc(PS_WARR71, p->WorldX, p->WorldY);
#endif
#endif
}
if (plr[pnum]._pgfxnum) {
plr[pnum]._pgfxnum = 0;
plr[pnum]._pGFXLoad = 0;
if (p->_pgfxnum) {
p->_pgfxnum = 0;
p->_pGFXLoad = 0;
SetPlrAnims(pnum);
}
if (!(plr[pnum]._pGFXLoad & PFILE_DEATH)) {
if (!(p->_pGFXLoad & PFILE_DEATH)) {
LoadPlrGFX(pnum, PFILE_DEATH);
}
p = &plr[pnum];
NewPlrAnim(pnum, p->_pDAnim[plr[pnum]._pdir], p->_pDFrames, 1, p->_pDWidth);
NewPlrAnim(pnum, p->_pDAnim[p->_pdir], p->_pDFrames, 1, p->_pDWidth);
plr[pnum]._pBlockFlag = FALSE;
plr[pnum]._pmode = PM_DEATH;
plr[pnum]._pInvincible = TRUE;
p->_pBlockFlag = FALSE;
p->_pmode = PM_DEATH;
p->_pInvincible = TRUE;
SetPlayerHitPoints(pnum, 0);
plr[pnum]._pVar8 = 1;
p->_pVar8 = 1;
if (pnum != myplr && !earflag && !diablolevel) {
for (i = 0; i < NUM_INVLOC; i++) {
plr[pnum].InvBody[i]._itype = ITYPE_NONE;
p->InvBody[i]._itype = ITYPE_NONE;
}
CalcPlrInv(pnum, FALSE);
}
if (plr[pnum].plrlevel == currlevel) {
FixPlayerLocation(pnum, plr[pnum]._pdir);
FixPlayerLocation(pnum, p->_pdir);
RemovePlrFromMap(pnum);
dFlags[plr[pnum].WorldX][plr[pnum].WorldY] |= BFLAG_DEAD_PLAYER;
dFlags[p->WorldX][p->WorldY] |= BFLAG_DEAD_PLAYER;
SetPlayerOld(pnum);
if (pnum == myplr) {
@ -1890,7 +1898,7 @@ void StartPlayerKill(int pnum, int earflag)
deathdelay = 30;
if (pcurs >= CURSOR_FIRSTITEM) {
PlrDeadItem(pnum, &plr[pnum].HoldItem, 0, 0);
PlrDeadItem(pnum, &p->HoldItem, 0, 0);
SetCursor_(CURSOR_HAND);
}
@ -1906,6 +1914,10 @@ void StartPlayerKill(int pnum, int earflag)
ear._iCurs = ICURS_EAR_WARRIOR;
} else if (plr[pnum]._pClass == PC_ROGUE) {
ear._iCurs = ICURS_EAR_ROGUE;
#ifdef HELLFIRE
} else if (plr[pnum]._pClass == PC_MONK || plr[pnum]._pClass == PC_BARD || plr[pnum]._pClass == PC_BARBARIAN) {
ear._iCurs = ICURS_EAR_ROGUE;
#endif
}
ear._iCreateInfo = plr[pnum]._pName[0] << 8 | plr[pnum]._pName[1];
@ -1916,11 +1928,10 @@ void StartPlayerKill(int pnum, int earflag)
PlrDeadItem(pnum, &ear, 0, 0);
}
} else {
pi = &plr[pnum].InvBody[0];
pi = &p->InvBody[0];
i = NUM_INVLOC;
while (i != 0) {
i--;
pdd = (i + plr[pnum]._pdir) & 7;
while (i--) {
pdd = (i + p->_pdir) & 7;
PlrDeadItem(pnum, pi, offset_x[pdd], offset_y[pdd]);
pi++;
}
@ -1931,7 +1942,9 @@ void StartPlayerKill(int pnum, int earflag)
}
}
}
#ifndef HELLFIRE
SetPlayerHitPoints(pnum, 0);
#endif
}
void PlrDeadItem(int pnum, ItemStruct *itm, int xx, int yy)

Loading…
Cancel
Save