diff --git a/Source/scrollrt.cpp b/Source/scrollrt.cpp index 11a81f7d8..7a6d8c2a7 100644 --- a/Source/scrollrt.cpp +++ b/Source/scrollrt.cpp @@ -479,12 +479,28 @@ static void DrawItem(int x, int y, int sx, int sy, BOOL pre) CelClippedDrawLight(px, sy, pItem->_iAnimData, pItem->_iAnimFrame, pItem->_iAnimWidth); } +static void DrawPlayerHelper(int x, int y, int oy, int sx, int sy, int eflag) +{ + int p = dPlayer[x][y + oy]; + p = p > 0 ? p - 1 : -(p + 1); + PlayerStruct *pPlayer = &plr[p]; + int px = sx + pPlayer->_pxoff - pPlayer->_pAnimWidth2; + int py = sy + pPlayer->_pyoff; + + DrawPlayer(p, x, y + oy, px, py, pPlayer->_pAnimData, pPlayer->_pAnimFrame, pPlayer->_pAnimWidth); + if (eflag && pPlayer->_peflag != 0) { + if (pPlayer->_peflag == 2) { + scrollrt_draw_e_flag(x - 2, y + 1, sx - 96, sy - 16); + } + scrollrt_draw_e_flag(x - 1, y + 1, sx - 64, sy); + } +} + static void scrollrt_draw_dungeon(BYTE *pBuff, int sx, int sy, int dx, int dy, int eflag) { - int mi, px, py, nCel, nMon, negMon, p, tx, ty, frames; + int mi, px, py, nCel, nMon, negMon, frames; char bFlag, bDead, bObj, bItem, bPlr, bArch, bMap, negPlr, dd; DeadStruct *pDeadGuy; - PlayerStruct *pPlayer; MonsterStruct *pMonster; BYTE *pCelBuff; @@ -498,15 +514,11 @@ static void scrollrt_draw_dungeon(BYTE *pBuff, int sx, int sy, int dx, int dy, i bMap = dTransVal[sx][sy]; nMon = dMonster[sx][sy]; - /// ASSERT: assert((DWORD)(sy-1) < MAXDUNY); - negPlr = dPlayer[sx][sy - 1]; negMon = dMonster[sx][sy - 1]; if (visiondebug && bFlag & BFLAG_LIT) { CelClippedDraw(dx, dy, pSquareCel, 1, 64); } - tx = dx - 96; - ty = dy - 16; if (MissilePreFlag && bFlag & BFLAG_MISSILE) { DrawMissile(sx, sy, dx, dy, 1); @@ -539,17 +551,8 @@ static void scrollrt_draw_dungeon(BYTE *pBuff, int sx, int sy, int dx, int dy, i } DrawItem(sx, sy, dx, dy, true); if (bFlag & BFLAG_PLAYERLR) { - p = -(negPlr + 1); - pPlayer = &plr[p]; - px = dx + pPlayer->_pxoff - pPlayer->_pAnimWidth2; - py = dy + pPlayer->_pyoff; - DrawPlayer(p, sx, sy - 1, px, py, pPlayer->_pAnimData, pPlayer->_pAnimFrame, pPlayer->_pAnimWidth); - if (eflag && pPlayer->_peflag != 0) { - if (pPlayer->_peflag == 2) { - scrollrt_draw_e_flag(sx - 2, sy + 1, tx, ty); - } - scrollrt_draw_e_flag(sx - 1, sy + 1, dx - 64, dy); - } + /// ASSERT: assert((DWORD)(sy-1) < MAXDUNY); + DrawPlayerHelper(sx, sy, -1, dx, dy, eflag); } if (bFlag & BFLAG_MONSTLR && (bFlag & BFLAG_LIT || plr[myplr]._pInfraFlag) && negMon < 0) { mi = -(dMonster[sx][sy - 1] + 1); @@ -587,17 +590,7 @@ static void scrollrt_draw_dungeon(BYTE *pBuff, int sx, int sy, int dx, int dy, i DrawDeadPlayer(sx, sy, dx, dy); } if (bPlr > 0) { - p = bPlr - 1; - pPlayer = &plr[p]; - px = dx + pPlayer->_pxoff - pPlayer->_pAnimWidth2; - py = dy + pPlayer->_pyoff; - DrawPlayer(p, sx, sy, px, py, pPlayer->_pAnimData, pPlayer->_pAnimFrame, pPlayer->_pAnimWidth); - if (eflag && pPlayer->_peflag != 0) { - if (pPlayer->_peflag == 2) { - scrollrt_draw_e_flag(sx - 2, sy + 1, dx - 96, dy - 16); - } - scrollrt_draw_e_flag(sx - 1, sy + 1, dx - 64, dy); - } + DrawPlayerHelper(sx, sy, 0, dx, dy, eflag); } if (nMon > 0 && (bFlag & BFLAG_LIT || plr[myplr]._pInfraFlag)) { mi = nMon - 1;