Browse Source

Merge town_draw_town_all() with scrollrt_draw_dungeon()

pull/380/head
Anders Jenbo 7 years ago
parent
commit
8f916e4d1f
  1. 167
      Source/scrollrt.cpp
  2. 2
      Source/scrollrt.h
  3. 77
      Source/town.cpp
  4. 8
      Source/town.h

167
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);
}

2
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();

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

8
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);

Loading…
Cancel
Save