Browse Source

Deduplicate drawing players

pull/380/head
Anders Jenbo 7 years ago
parent
commit
dfbce7b2ce
  1. 49
      Source/scrollrt.cpp

49
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;

Loading…
Cancel
Save