From 8f916e4d1fe140af5f4f6fb24c0e365307c7eb71 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Sat, 19 Oct 2019 18:06:06 +0200 Subject: [PATCH] Merge town_draw_town_all() with scrollrt_draw_dungeon() --- Source/scrollrt.cpp | 167 +++++++++++++++++++++----------------------- Source/scrollrt.h | 2 - Source/town.cpp | 77 +------------------- Source/town.h | 8 --- 4 files changed, 82 insertions(+), 172 deletions(-) diff --git a/Source/scrollrt.cpp b/Source/scrollrt.cpp index 69949167f..0eefc82be 100644 --- a/Source/scrollrt.cpp +++ b/Source/scrollrt.cpp @@ -17,7 +17,6 @@ int level_piece_id; DWORD sgdwCursWdt; void (*DrawPlrProc)(int, int, int, int, int, BYTE *, int, int, int, int); BYTE sgSaveBack[8192]; -int draw_monster_num; DWORD sgdwCursHgtOld; /* data */ @@ -453,11 +452,7 @@ static void scrollrt_draw_e_flag(BYTE *pBuff, int x, int y, int sx, int sy) dst -= BUFFER_WIDTH * 32; } - if (leveltype != DTYPE_TOWN) { - scrollrt_draw_dungeon(pBuff, x, y, sx, sy, 0); - } else { - town_draw_town_all(pBuff, x, y, sx, sy, 0); - } + scrollrt_draw_dungeon(pBuff, x, y, sx, sy, 0); light_table_index = lti_old; cel_transparency_active = cta_old; @@ -466,7 +461,7 @@ static void scrollrt_draw_e_flag(BYTE *pBuff, int x, int y, int sx, int sy) static void scrollrt_draw_dungeon(BYTE *pBuff, int sx, int sy, int dx, int dy, int eflag) { - int px, py, nCel, nMon, negMon, p, tx, ty, frames; + int mi, px, py, nCel, nMon, negMon, p, tx, ty, frames; char bFlag, bDead, bObj, bItem, bPlr, bArch, bMap, negPlr, dd; DeadStruct *pDeadGuy; ItemStruct *pItem; @@ -528,64 +523,59 @@ static void scrollrt_draw_dungeon(BYTE *pBuff, int sx, int sy, int dx, int dy, i pItem = &item[bItem - 1]; if (!pItem->_iPostDraw) { /// ASSERT: assert((unsigned char)bItem <= MAXITEMS); - if ((BYTE)bItem <= MAXITEMS) { - pCelBuff = pItem->_iAnimData; - if (pCelBuff != NULL) { - frames = SDL_SwapLE32(*(DWORD *)pCelBuff); - nCel = pItem->_iAnimFrame; - if (nCel >= 1 && frames <= 50 && nCel <= frames) { - px = dx - pItem->_iAnimWidth2; - if (bItem - 1 == pcursitem) { - CelBlitOutline(181, px, dy, pCelBuff, nCel, pItem->_iAnimWidth); - } - CelClippedDrawLight(px, dy, pItem->_iAnimData, pItem->_iAnimFrame, pItem->_iAnimWidth); - } else { - // app_fatal("Draw \"%s\" Item 1: frame %d of %d, item type==%d", pItem->_iIName, nCel, frames, pItem->_itype); - } - } else { - // app_fatal("Draw Item \"%s\" 1: NULL Cel Buffer", pItem->_iIName); - } + pCelBuff = pItem->_iAnimData; + nCel = pItem->_iAnimFrame; + px = dx - pItem->_iAnimWidth2; + if (bItem - 1 == pcursitem) { + CelBlitOutline(181, px, dy, pCelBuff, nCel, pItem->_iAnimWidth); } + /// ASSERT: assert(item[bv]._iAnimData); + CelClippedDrawLight(px, dy, pItem->_iAnimData, pItem->_iAnimFrame, pItem->_iAnimWidth); } } if (bFlag & BFLAG_PLAYERLR) { p = -(negPlr + 1); - if ((DWORD)p < MAX_PLRS) { - 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(pBuff - (BUFFER_WIDTH * 16 + 96), sx - 2, sy + 1, tx, ty); - } - scrollrt_draw_e_flag(pBuff - 64, sx - 1, sy + 1, dx - 64, dy); + 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(pBuff - (BUFFER_WIDTH * 16 + 96), sx - 2, sy + 1, tx, ty); } - } else { - // app_fatal("draw player: tried to draw illegal player %d", p); + scrollrt_draw_e_flag(pBuff - 64, sx - 1, sy + 1, dx - 64, dy); } } if (bFlag & BFLAG_MONSTLR && (bFlag & BFLAG_LIT || plr[myplr]._pInfraFlag) && negMon < 0) { - draw_monster_num = -(negMon + 1); - if ((DWORD)draw_monster_num < MAXMONSTERS) { - pMonster = &monster[draw_monster_num]; - if (!(pMonster->_mFlags & MFLAG_HIDDEN)) { - if (pMonster->MType != NULL) { - px = dx + pMonster->_mxoff - pMonster->MType->width2; - py = dy + pMonster->_myoff; - if (draw_monster_num == pcursmonst) { - Cl2DrawOutline(233, px, py, pMonster->_mAnimData, pMonster->_mAnimFrame, pMonster->MType->width); - } - DrawMonster(sx, sy, px, py, draw_monster_num); - if (eflag && !pMonster->_meflag) { - scrollrt_draw_e_flag(pBuff - 64, sx - 1, sy + 1, dx - 64, dy); + mi = -(dMonster[sx][sy - 1] + 1); + if (leveltype != DTYPE_TOWN) { + if ((DWORD)mi < MAXMONSTERS) { + pMonster = &monster[mi]; + if (!(pMonster->_mFlags & MFLAG_HIDDEN)) { + if (pMonster->MType != NULL) { + px = dx + pMonster->_mxoff - pMonster->MType->width2; + py = dy + pMonster->_myoff; + if (mi == pcursmonst) { + Cl2DrawOutline(233, px, py, pMonster->_mAnimData, pMonster->_mAnimFrame, pMonster->MType->width); + } + DrawMonster(sx, sy, px, py, mi); + if (eflag && !pMonster->_meflag) { + scrollrt_draw_e_flag(pBuff - 64, sx - 1, sy + 1, dx - 64, dy); + } + } else { + // app_fatal("Draw Monster \"%s\": uninitialized monster", pMonster->mName); } - } else { - // app_fatal("Draw Monster \"%s\": uninitialized monster", pMonster->mName); } + } else { + // app_fatal("Draw Monster: tried to draw illegal monster %d", mi); } } else { - // app_fatal("Draw Monster: tried to draw illegal monster %d", draw_monster_num); + px = dx - towner[mi]._tAnimWidth2; + if (mi == pcursmonst) { + CelBlitOutline(166, px, dy, towner[mi]._tAnimData, towner[mi]._tAnimFrame, towner[mi]._tAnimWidth); + } + /// ASSERT: assert(towner[mi]._tAnimData); + CelClippedDraw(px, dy, towner[mi]._tAnimData, towner[mi]._tAnimFrame, towner[mi]._tAnimWidth); } } if (bFlag & BFLAG_DEAD_PLAYER) { @@ -593,42 +583,47 @@ static void scrollrt_draw_dungeon(BYTE *pBuff, int sx, int sy, int dx, int dy, i } if (bPlr > 0) { p = bPlr - 1; - if ((DWORD)p < MAX_PLRS) { - 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(pBuff - (BUFFER_WIDTH * 16 + 96), sx - 2, sy + 1, dx - 96, dy - 16); - } - scrollrt_draw_e_flag(pBuff - 64, sx - 1, sy + 1, dx - 64, dy); + 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(pBuff - (BUFFER_WIDTH * 16 + 96), sx - 2, sy + 1, dx - 96, dy - 16); } - } else { - // app_fatal("draw player: tried to draw illegal player %d", p); + scrollrt_draw_e_flag(pBuff - 64, sx - 1, sy + 1, dx - 64, dy); } } if (nMon > 0 && (bFlag & BFLAG_LIT || plr[myplr]._pInfraFlag)) { - draw_monster_num = nMon - 1; - if ((DWORD)draw_monster_num < MAXMONSTERS) { - pMonster = &monster[draw_monster_num]; - if (!(pMonster->_mFlags & MFLAG_HIDDEN)) { - if (pMonster->MType != NULL) { - px = dx + pMonster->_mxoff - pMonster->MType->width2; - py = dy + pMonster->_myoff; - if (draw_monster_num == pcursmonst) { - Cl2DrawOutline(233, px, py, pMonster->_mAnimData, pMonster->_mAnimFrame, pMonster->MType->width); - } - DrawMonster(sx, sy, px, py, draw_monster_num); - if (eflag && !pMonster->_meflag) { - scrollrt_draw_e_flag(pBuff - 64, sx - 1, sy + 1, dx - 64, dy); + mi = nMon - 1; + if (leveltype != DTYPE_TOWN) { + if ((DWORD)mi < MAXMONSTERS) { + pMonster = &monster[mi]; + if (!(pMonster->_mFlags & MFLAG_HIDDEN)) { + if (pMonster->MType != NULL) { + px = dx + pMonster->_mxoff - pMonster->MType->width2; + py = dy + pMonster->_myoff; + if (mi == pcursmonst) { + Cl2DrawOutline(233, px, py, pMonster->_mAnimData, pMonster->_mAnimFrame, pMonster->MType->width); + } + DrawMonster(sx, sy, px, py, mi); + if (eflag && !pMonster->_meflag) { + scrollrt_draw_e_flag(pBuff - 64, sx - 1, sy + 1, dx - 64, dy); + } + } else { + // app_fatal("Draw Monster \"%s\": uninitialized monster", pMonster->mName); } - } else { - // app_fatal("Draw Monster \"%s\": uninitialized monster", pMonster->mName); } + } else { + // app_fatal("Draw Monster: tried to draw illegal monster %d", mi); } } else { - // app_fatal("Draw Monster: tried to draw illegal monster %d", draw_monster_num); + px = dx - towner[mi]._tAnimWidth2; + if (mi == pcursmonst) { + CelBlitOutline(166, px, dy, towner[mi]._tAnimData, towner[mi]._tAnimFrame, towner[mi]._tAnimWidth); + } + /// ASSERT: assert(towner[mi]._tAnimData); + CelClippedDraw(px, dy, towner[mi]._tAnimData, towner[mi]._tAnimFrame, towner[mi]._tAnimWidth); } } if (bFlag & BFLAG_MISSILE) { @@ -663,7 +658,11 @@ static void scrollrt_draw_dungeon(BYTE *pBuff, int sx, int sy, int dx, int dy, i } if (bArch != 0) { cel_transparency_active = TransList[bMap]; - CelClippedBlitLightTrans(pBuff, pSpecialCels, bArch, 64); + if (leveltype != DTYPE_TOWN) { + CelClippedBlitLightTrans(pBuff, pSpecialCels, bArch, 64); + } else { + CelBlitFrame(pBuff, pSpecialCels, bArch, 64); + } } } @@ -703,11 +702,7 @@ static void scrollrt_draw(int x, int y, int sx, int sy, int chunks, int dPieceRo } dst -= BUFFER_WIDTH * 32; } - if (leveltype != DTYPE_TOWN) { - scrollrt_draw_dungeon(&gpBuffer[sx + BUFFER_WIDTH * sy], x, y, sx, sy, 1); - } else { - town_draw_town_all(&gpBuffer[sx + BUFFER_WIDTH * sy], x, y, sx, sy, 1); - } + scrollrt_draw_dungeon(&gpBuffer[sx + BUFFER_WIDTH * sy], x, y, sx, sy, 1); } else { world_draw_black_tile(sx, sy); } diff --git a/Source/scrollrt.h b/Source/scrollrt.h index 06a3ec248..fe63cc18b 100644 --- a/Source/scrollrt.h +++ b/Source/scrollrt.h @@ -9,13 +9,11 @@ extern char arch_draw_type; extern int cel_transparency_active; extern int level_piece_id; extern void (*DrawPlrProc)(int, int, int, int, int, BYTE *, int, int, int, int); -extern int draw_monster_num; void ClearCursor(); void DrawMissile(int x, int y, int sx, int sy, BOOL pre); void DrawDeadPlayer(int x, int y, int sx, int sy); void DrawView(int StartX, int StartY); -void scrollrt_draw_e_flag(BYTE *pBuff, int x, int y, int sx, int sy); void ClearScreenBuffer(); #ifdef _DEBUG void ScrollView(); diff --git a/Source/town.cpp b/Source/town.cpp index 54b1ddcd7..3e12d9e07 100644 --- a/Source/town.cpp +++ b/Source/town.cpp @@ -2,82 +2,6 @@ DEVILUTION_BEGIN_NAMESPACE -void town_special(BYTE *pBuff, int nCel) -{ -#if 0 - CelBlitFrame(pBuff, pSpecialCels, nCel, 64); -#endif -} - -void town_draw_town_all(BYTE *pBuff, int x, int y, int sx, int sy, int eflag) -{ - int mi, px, py; - char bv; - - if (dItem[x][y] != 0) { - bv = dItem[x][y] - 1; - px = sx - item[bv]._iAnimWidth2; - if (bv == pcursitem) { - CelBlitOutline(181, px, sy, item[bv]._iAnimData, item[bv]._iAnimFrame, item[bv]._iAnimWidth); - } - /// ASSERT: assert(item[bv]._iAnimData); - CelClippedDraw(px, sy, item[bv]._iAnimData, item[bv]._iAnimFrame, item[bv]._iAnimWidth); - } - if (dFlags[x][y] & BFLAG_MONSTLR) { - mi = -(dMonster[x][y - 1] + 1); - px = sx - towner[mi]._tAnimWidth2; - if (mi == pcursmonst) { - CelBlitOutline(166, px, sy, towner[mi]._tAnimData, towner[mi]._tAnimFrame, towner[mi]._tAnimWidth); - } - /// ASSERT: assert(towner[mi]._tAnimData); - CelClippedDraw(px, sy, towner[mi]._tAnimData, towner[mi]._tAnimFrame, towner[mi]._tAnimWidth); - } - if (dMonster[x][y] > 0) { - mi = dMonster[x][y] - 1; - px = sx - towner[mi]._tAnimWidth2; - if (mi == pcursmonst) { - CelBlitOutline(166, px, sy, towner[mi]._tAnimData, towner[mi]._tAnimFrame, towner[mi]._tAnimWidth); - } - /// ASSERT: assert(towner[mi]._tAnimData); - CelClippedDraw(px, sy, towner[mi]._tAnimData, towner[mi]._tAnimFrame, towner[mi]._tAnimWidth); - } - if (dFlags[x][y] & BFLAG_PLAYERLR) { - bv = -(dPlayer[x][y - 1] + 1); - px = sx + plr[bv]._pxoff - plr[bv]._pAnimWidth2; - py = sy + plr[bv]._pyoff; - if (bv == pcursplr) { - Cl2DrawOutline(165, px, py, plr[bv]._pAnimData, plr[bv]._pAnimFrame, plr[bv]._pAnimWidth); - } - /// ASSERT: assert(plr[bv]._pAnimData); - Cl2Draw(px, py, plr[bv]._pAnimData, plr[bv]._pAnimFrame, plr[bv]._pAnimWidth); - if (eflag && plr[bv]._peflag) { - scrollrt_draw_e_flag(pBuff - 64, x - 1, y + 1, sx - 64, sy); - } - } - if (dFlags[x][y] & BFLAG_DEAD_PLAYER) { - DrawDeadPlayer(x, y, sx, sy); - } - if (dPlayer[x][y] > 0) { - bv = dPlayer[x][y] - 1; - px = sx + plr[bv]._pxoff - plr[bv]._pAnimWidth2; - py = sy + plr[bv]._pyoff; - if (bv == pcursplr) { - Cl2DrawOutline(165, px, py, plr[bv]._pAnimData, plr[bv]._pAnimFrame, plr[bv]._pAnimWidth); - } - /// ASSERT: assert(plr[bv]._pAnimData); - Cl2Draw(px, py, plr[bv]._pAnimData, plr[bv]._pAnimFrame, plr[bv]._pAnimWidth); - if (eflag && plr[bv]._peflag) { - scrollrt_draw_e_flag(pBuff - 64, x - 1, y + 1, sx - 64, sy); - } - } - if (dFlags[x][y] & BFLAG_MISSILE) { - DrawMissile(x, y, sx, sy, 0); - } - if (dArch[x][y] != 0) { - town_special(pBuff, dArch[x][y]); - } -} - void SetTownMicros() { int i, x, y, lv; @@ -230,6 +154,7 @@ void CreateTown(int entry) dmaxx = 84; dmaxy = 84; DRLG_InitTrans(); + DRLG_Init_Globals(); if (entry == 0) { ViewX = 75; diff --git a/Source/town.h b/Source/town.h index 03e7c86c4..b4025ec24 100644 --- a/Source/town.h +++ b/Source/town.h @@ -2,14 +2,6 @@ #ifndef __TOWN_H__ #define __TOWN_H__ -void town_clear_buf(BYTE *pBuff); -void town_draw_clipped_e_flag_2(BYTE *pBuff, int x, int y, int skipChunks, int sx, int sy); -void town_draw_e_flag(BYTE *pBuff, int x, int y, int capChunks, int sx, int sy); -void town_draw_town_all(BYTE *pBuff, int x, int y, int sx, int sy, int eflag); -void town_draw(int x, int y, int sx, int sy, int chunks, int dPieceRow); -void T_DrawGame(int x, int y); -void T_DrawZoom(int x, int y); -void T_DrawView(int StartX, int StartY); void SetTownMicros(); void T_FillSector(BYTE *P3Tiles, BYTE *pSector, int xi, int yi, int w, int h); void T_FillTile(BYTE *P3Tiles, int xx, int yy, int t);