From af7f3f0f27762f8ace6429805ad6a17e8d62cb3a Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Fri, 8 May 2020 16:56:33 +0200 Subject: [PATCH 1/2] Bugfix for CheckCursMove (#2046) --- Source/cursor.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Source/cursor.cpp b/Source/cursor.cpp index 62bd5f8e6..695a2487c 100644 --- a/Source/cursor.cpp +++ b/Source/cursor.cpp @@ -189,7 +189,8 @@ void CheckCursMove() sy = MouseY; if (chrflag || questlog) { - if (sx >= SCREEN_WIDTH / 4) { + if (sx >= SCREEN_WIDTH / 4) { /// BUGFIX: (sx >= SCREEN_WIDTH / 2) + sx -= SCREEN_WIDTH / 4; } else { sx = 0; From 8c2fb7605e0c2002b3f12d169462f2860a83f0d6 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 11 May 2020 23:21:27 +0200 Subject: [PATCH 2/2] Use defines for tile and screen related magic numbers --- Source/automap.cpp | 28 ++--- Source/cursor.cpp | 24 +++-- Source/diablo.cpp | 2 +- Source/gendung.cpp | 8 +- Source/player.cpp | 2 +- Source/scrollrt.cpp | 258 ++++++++++++++++++++++---------------------- Source/town.cpp | 242 ++++++++++++++++++++--------------------- defs.h | 11 +- 8 files changed, 292 insertions(+), 283 deletions(-) diff --git a/Source/automap.cpp b/Source/automap.cpp index 911bc20ce..57dcc9cb9 100644 --- a/Source/automap.cpp +++ b/Source/automap.cpp @@ -75,10 +75,10 @@ void InitAutomap() for (i = 0; i < 31; i++) { d = (j << 6) / 100; - AmShiftTab[i] = 2 * (320 / d) + 1; - if (320 % d) + AmShiftTab[i] = 2 * (SCREEN_WIDTH / 2 / d) + 1; + if ((SCREEN_WIDTH / 2) % d) AmShiftTab[i]++; - if (320 % d >= (j << 5) / 100) + if ((SCREEN_WIDTH / 2) % d >= (j << 5) / 100) AmShiftTab[i]++; j += 5; } @@ -211,7 +211,7 @@ void DrawAutomap() return; } - gpBufEnd = &gpBuffer[(PANEL_Y)*BUFFER_WIDTH]; + gpBufEnd = &gpBuffer[BUFFER_WIDTH * (SCREEN_Y + VIEWPORT_HEIGHT)]; AutoMapX = (ViewX - 16) >> 1; while (AutoMapX + AutoMapXOfs < 0) @@ -234,11 +234,11 @@ void DrawAutomap() mapy = AutoMapY - 1; if (cells & 1) { - sx = 384 - AmLine64 * ((cells - 1) >> 1); - sy = 336 - AmLine32 * ((cells + 1) >> 1); + sx = SCREEN_WIDTH / 2 + SCREEN_X - AmLine64 * ((cells - 1) >> 1); + sy = (SCREEN_HEIGHT - PANEL_HEIGHT) / 2 + SCREEN_Y - AmLine32 * ((cells + 1) >> 1); } else { - sx = 384 - AmLine64 * (cells >> 1) + AmLine32; - sy = 336 - AmLine32 * (cells >> 1) - AmLine16; + sx = SCREEN_WIDTH / 2 + SCREEN_X - AmLine64 * (cells >> 1) + AmLine32; + sy = (SCREEN_HEIGHT - PANEL_HEIGHT) / 2 + SCREEN_Y - AmLine32 * (cells >> 1) - AmLine16; } if (ViewX & 1) { sx -= AmLine16; @@ -252,10 +252,10 @@ void DrawAutomap() sx += AutoMapScale * ScrollInfo._sxoff / 100 >> 1; sy += AutoMapScale * ScrollInfo._syoff / 100 >> 1; if (invflag || sbookflag) { - sx -= 160; + sx -= SCREEN_WIDTH / 4; } if (chrflag || questlog) { - sx += 160; + sx += SCREEN_WIDTH / 4; } for (i = 0; i <= cells + 1; i++) { @@ -494,13 +494,13 @@ void DrawAutomapPlr() px = x - 2 * AutoMapXOfs - ViewX; py = y - 2 * AutoMapYOfs - ViewY; - x = (plr[myplr]._pxoff * AutoMapScale / 100 >> 1) + (ScrollInfo._sxoff * AutoMapScale / 100 >> 1) + (px - py) * AmLine16 + 384; - y = (plr[myplr]._pyoff * AutoMapScale / 100 >> 1) + (ScrollInfo._syoff * AutoMapScale / 100 >> 1) + (px + py) * AmLine8 + 336; + x = (plr[myplr]._pxoff * AutoMapScale / 100 >> 1) + (ScrollInfo._sxoff * AutoMapScale / 100 >> 1) + (px - py) * AmLine16 + SCREEN_WIDTH / 2 + SCREEN_X; + y = (plr[myplr]._pyoff * AutoMapScale / 100 >> 1) + (ScrollInfo._syoff * AutoMapScale / 100 >> 1) + (px + py) * AmLine8 + (SCREEN_HEIGHT - PANEL_HEIGHT) / 2 + SCREEN_Y; if (invflag || sbookflag) - x -= 160; + x -= SCREEN_WIDTH / 4; if (chrflag || questlog) - x += 160; + x += SCREEN_WIDTH / 4; y -= AmLine8; switch (plr[myplr]._pdir) { diff --git a/Source/cursor.cpp b/Source/cursor.cpp index 695a2487c..9a2675a61 100644 --- a/Source/cursor.cpp +++ b/Source/cursor.cpp @@ -210,14 +210,15 @@ void CheckCursMove() sy >>= 1; } + // Adjust by player offset sx -= ScrollInfo._sxoff; sy -= ScrollInfo._syoff; + // Predict the next frame when walking to avoid input jitter fx = plr[myplr]._pVar6 >> 8; fy = plr[myplr]._pVar7 >> 8; fx -= (plr[myplr]._pVar6 + plr[myplr]._pxvel) >> 8; fy -= (plr[myplr]._pVar7 + plr[myplr]._pyvel) >> 8; - if (ScrollInfo._sdir != SDIR_NONE) { sx -= fx; sy -= fy; @@ -236,18 +237,23 @@ void CheckCursMove() sy = SCREEN_HEIGHT; } - tx = sx >> 6; - ty = sy >> 5; - px = sx & 0x3F; - py = sy & 0x1F; - mx = ViewX + tx + ty - (zoomflag ? (SCREEN_WIDTH / 64) : (SCREEN_WIDTH / 2 / 64)); + // Convert to tile grid + + tx = sx >> 6; // sx / TILE_WIDTH + ty = sy >> 5; // sy / TILE_HEIGHT + px = sx & (TILE_WIDTH - 1); + py = sy & (TILE_HEIGHT - 1); + + // Center player tile on screen + mx = ViewX + tx + ty - (zoomflag ? (SCREEN_WIDTH / TILE_WIDTH) : (SCREEN_WIDTH / 2 / TILE_WIDTH)); my = ViewY + ty - tx; + // Shift position to match diamond grid aligment flipy = py < (px >> 1); if (flipy) { my--; } - flipx = py >= 32 - (px >> 1); + flipx = py >= TILE_HEIGHT - (px >> 1); if (flipx) { mx++; } @@ -265,7 +271,7 @@ void CheckCursMove() my = MAXDUNY - 1; } - flipflag = flipy && flipx || (flipy || flipx) && px < 32; + flipflag = flipy && flipx || (flipy || flipx) && px < TILE_WIDTH / 2; pcurstemp = pcursmonst; pcursmonst = -1; @@ -302,7 +308,7 @@ void CheckCursMove() if (sbookflag && MouseX > RIGHT_PANEL) { return; } - if ((chrflag || questlog) && MouseX < 320) { + if ((chrflag || questlog) && MouseX < SPANEL_WIDTH) { return; } diff --git a/Source/diablo.cpp b/Source/diablo.cpp index e230ca9a1..69bb795dd 100644 --- a/Source/diablo.cpp +++ b/Source/diablo.cpp @@ -822,7 +822,7 @@ BOOL LeftMouseDown(int wParam) } else if (qtextflag) { qtextflag = FALSE; stream_stop(); - } else if (chrflag && MouseX < 320) { + } else if (chrflag && MouseX < SPANEL_WIDTH) { CheckChrBtns(); } else if (invflag && MouseX > RIGHT_PANEL) { if (!dropGoldFlag) diff --git a/Source/gendung.cpp b/Source/gendung.cpp index 0233fb299..d3fc99a7b 100644 --- a/Source/gendung.cpp +++ b/Source/gendung.cpp @@ -560,13 +560,13 @@ void SetDungeonMicros() if (zoomflag) { ViewDX = SCREEN_WIDTH; ViewDY = VIEWPORT_HEIGHT; - ViewBX = SCREEN_WIDTH / 64; - ViewBY = VIEWPORT_HEIGHT / 32; + ViewBX = SCREEN_WIDTH / TILE_WIDTH; + ViewBY = VIEWPORT_HEIGHT / TILE_HEIGHT; } else { ViewDX = ZOOM_WIDTH; ViewDY = ZOOM_HEIGHT; - ViewBX = ZOOM_WIDTH / 64; - ViewBY = ZOOM_HEIGHT / 32; + ViewBX = ZOOM_WIDTH / TILE_WIDTH; + ViewBY = ZOOM_HEIGHT / TILE_HEIGHT; } } diff --git a/Source/player.cpp b/Source/player.cpp index 4ea454d3e..796dc0d05 100644 --- a/Source/player.cpp +++ b/Source/player.cpp @@ -3672,7 +3672,7 @@ void CheckPlrSpell() if (pcurs != CURSOR_HAND || MouseY >= PANEL_TOP - || (chrflag && MouseX < 320 || invflag && MouseX > RIGHT_PANEL) + || (chrflag && MouseX < SPANEL_WIDTH || invflag && MouseX > RIGHT_PANEL) && rspell != SPL_HEAL && rspell != SPL_IDENTIFY && rspell != SPL_REPAIR diff --git a/Source/scrollrt.cpp b/Source/scrollrt.cpp index c0ff46e0e..65fd463cc 100644 --- a/Source/scrollrt.cpp +++ b/Source/scrollrt.cpp @@ -849,20 +849,20 @@ static void scrollrt_draw_clipped_e_flag(BYTE *pBuff, int x, int y, int sx, int arch_draw_type = 2; level_cel_block = pMap->mt[1]; if (level_cel_block != 0) { - drawLowerScreen(dst + 32); + drawLowerScreen(dst + TILE_WIDTH / 2); } dst = pBuff; arch_draw_type = 0; for (i = 2; i < MicroTileLen; i += 2) { - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; level_cel_block = pMap->mt[i]; if (level_cel_block != 0) { drawLowerScreen(dst); } level_cel_block = pMap->mt[i + 1]; if (level_cel_block != 0) { - drawLowerScreen(dst + 32); + drawLowerScreen(dst + TILE_WIDTH / 2); } } @@ -979,9 +979,9 @@ static void scrollrt_draw_clipped_dungeon(BYTE *pBuff, int sx, int sy, int dx, i DrawClippedPlayer(p, sx, sy - 1, px, py, pPlayer->_pAnimData, pPlayer->_pAnimFrame, pPlayer->_pAnimWidth, 0, 8); if (eflag && pPlayer->_peflag != 0) { if (pPlayer->_peflag == 2) { - scrollrt_draw_clipped_e_flag(pBuff - (BUFFER_WIDTH * 16 + 96), sx - 2, sy + 1, dx - 96, dy - 16); + scrollrt_draw_clipped_e_flag(pBuff - (BUFFER_WIDTH * TILE_HEIGHT / 2 + TILE_WIDTH + TILE_WIDTH / 2), sx - 2, sy + 1, dx - (TILE_WIDTH + TILE_WIDTH / 2), dy - TILE_HEIGHT / 2); } - scrollrt_draw_clipped_e_flag(pBuff - 64, sx - 1, sy + 1, dx - 64, dy); + scrollrt_draw_clipped_e_flag(pBuff - TILE_WIDTH, sx - 1, sy + 1, dx - TILE_WIDTH, dy); } } else { // app_fatal("draw player clipped: tried to draw illegal player %d", p); @@ -1000,7 +1000,7 @@ static void scrollrt_draw_clipped_dungeon(BYTE *pBuff, int sx, int sy, int dx, i } DrawClippedMonster(sx, sy, px, py, draw_monster_num, 0, 8); if (eflag && pMonster->_meflag) { - scrollrt_draw_clipped_e_flag(pBuff - 64, sx - 1, sy + 1, dx - 64, dy); + scrollrt_draw_clipped_e_flag(pBuff - TILE_WIDTH, sx - 1, sy + 1, dx - TILE_WIDTH, dy); } } else { // app_fatal("Draw Monster \"%s\" Clipped: uninitialized monster", pMonster->mName); @@ -1022,9 +1022,9 @@ static void scrollrt_draw_clipped_dungeon(BYTE *pBuff, int sx, int sy, int dx, i DrawClippedPlayer(p, sx, sy, px, py, pPlayer->_pAnimData, pPlayer->_pAnimFrame, pPlayer->_pAnimWidth, 0, 8); if (eflag && pPlayer->_peflag != 0) { if (pPlayer->_peflag == 2) { - scrollrt_draw_clipped_e_flag(pBuff - (BUFFER_WIDTH * 16 + 96), sx - 2, sy + 1, dx - 96, dy - 16); + scrollrt_draw_clipped_e_flag(pBuff - (BUFFER_WIDTH * TILE_HEIGHT / 2 + TILE_WIDTH + TILE_WIDTH / 2), sx - 2, sy + 1, dx - TILE_WIDTH + TILE_WIDTH / 2, dy - TILE_HEIGHT / 2); } - scrollrt_draw_clipped_e_flag(pBuff - 64, sx - 1, sy + 1, dx - 64, dy); + scrollrt_draw_clipped_e_flag(pBuff - TILE_WIDTH, sx - 1, sy + 1, dx - TILE_WIDTH, dy); } } else { // app_fatal("draw player clipped: tried to draw illegal player %d", p); @@ -1043,7 +1043,7 @@ static void scrollrt_draw_clipped_dungeon(BYTE *pBuff, int sx, int sy, int dx, i } DrawClippedMonster(sx, sy, px, py, draw_monster_num, 0, 8); if (eflag && pMonster->_meflag) { - scrollrt_draw_clipped_e_flag(pBuff - 64, sx - 1, sy + 1, dx - 64, dy); + scrollrt_draw_clipped_e_flag(pBuff - TILE_WIDTH, sx - 1, sy + 1, dx - TILE_WIDTH, dy); } } else { // app_fatal("Draw Monster \"%s\" Clipped: uninitialized monster", pMonster->mName); @@ -1120,7 +1120,7 @@ static void scrollrt_draw_lower(int x, int y, int sx, int sy, int chunks, int ef level_piece_id = dPiece[x][y]; light_table_index = dLight[x][y]; if (level_piece_id != 0) { - dst = &gpBuffer[sx + 32 + PitchTbl[sy]]; + dst = &gpBuffer[sx + TILE_WIDTH / 2 + PitchTbl[sy]]; cel_transparency_active = (BYTE)(nTransTable[level_piece_id] & TransList[dTransVal[x][y]]); arch_draw_type = 2; level_cel_block = pMap->mt[1]; @@ -1128,27 +1128,27 @@ static void scrollrt_draw_lower(int x, int y, int sx, int sy, int chunks, int ef drawLowerScreen(dst); } arch_draw_type = 0; - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; level_cel_block = pMap->mt[3]; if (level_cel_block != 0) { drawLowerScreen(dst); } - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; level_cel_block = pMap->mt[5]; if (level_cel_block != 0) { drawLowerScreen(dst); } - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; level_cel_block = pMap->mt[7]; if (level_cel_block != 0) { drawLowerScreen(dst); } - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; level_cel_block = pMap->mt[9]; if (level_cel_block != 0) { drawLowerScreen(dst); } - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; level_cel_block = pMap->mt[11]; if (level_cel_block != 0 && leveltype == DTYPE_HELL) { drawLowerScreen(dst); @@ -1160,7 +1160,7 @@ static void scrollrt_draw_lower(int x, int y, int sx, int sy, int chunks, int ef } x++; y--; - sx += 64; + sx += TILE_WIDTH; pMap++; chunks--; } @@ -1186,18 +1186,18 @@ static void scrollrt_draw_lower(int x, int y, int sx, int sy, int chunks, int ef arch_draw_type = 2; level_cel_block = pMap->mt[1]; if (level_cel_block != 0) { - drawLowerScreen(dst + 32); + drawLowerScreen(dst + TILE_WIDTH / 2); } arch_draw_type = 0; for (i = 2; i < MicroTileLen; i += 2) { - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; level_cel_block = pMap->mt[i]; if (level_cel_block != 0) { drawLowerScreen(dst); } level_cel_block = pMap->mt[i + 1]; if (level_cel_block != 0) { - drawLowerScreen(dst + 32); + drawLowerScreen(dst + TILE_WIDTH / 2); } } scrollrt_draw_clipped_dungeon(&gpBuffer[sx + PitchTbl[sy]], x, y, sx, sy, 1); @@ -1205,7 +1205,7 @@ static void scrollrt_draw_lower(int x, int y, int sx, int sy, int chunks, int ef } x++; y--; - sx += 64; + sx += TILE_WIDTH; pMap++; } @@ -1223,27 +1223,27 @@ static void scrollrt_draw_lower(int x, int y, int sx, int sy, int chunks, int ef drawLowerScreen(dst); } arch_draw_type = 0; - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; level_cel_block = pMap->mt[2]; if (level_cel_block != 0) { drawLowerScreen(dst); } - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; level_cel_block = pMap->mt[4]; if (level_cel_block != 0) { drawLowerScreen(dst); } - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; level_cel_block = pMap->mt[6]; if (level_cel_block != 0) { drawLowerScreen(dst); } - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; level_cel_block = pMap->mt[8]; if (level_cel_block != 0) { drawLowerScreen(dst); } - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; level_cel_block = pMap->mt[10]; if (level_cel_block != 0 && leveltype == DTYPE_HELL) { drawLowerScreen(dst); @@ -1279,7 +1279,7 @@ static void scrollrt_draw_clipped_e_flag_2(BYTE *pBuff, int x, int y, int row, i level_piece_id = dPiece[x][y]; light_table_index = dLight[x][y]; - dst = &pBuff[BUFFER_WIDTH * 32 * row]; + dst = &pBuff[BUFFER_WIDTH * TILE_HEIGHT * row]; cel_transparency_active = (BYTE)(nTransTable[level_piece_id] & TransList[dTransVal[x][y]]); pMap = &dpiece_defs_map_1[IsometricCoord(x, y)]; @@ -1291,37 +1291,37 @@ static void scrollrt_draw_clipped_e_flag_2(BYTE *pBuff, int x, int y, int row, i } level_cel_block = pMap->mt[3]; if (level_cel_block != 0) { - drawLowerScreen(dst + 32); + drawLowerScreen(dst + TILE_WIDTH / 2); } case 1: - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; level_cel_block = pMap->mt[4]; if (level_cel_block != 0) { drawLowerScreen(dst); } level_cel_block = pMap->mt[5]; if (level_cel_block != 0) { - drawLowerScreen(dst + 32); + drawLowerScreen(dst + TILE_WIDTH / 2); } case 2: - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; level_cel_block = pMap->mt[6]; if (level_cel_block != 0) { drawLowerScreen(dst); } level_cel_block = pMap->mt[7]; if (level_cel_block != 0) { - drawLowerScreen(dst + 32); + drawLowerScreen(dst + TILE_WIDTH / 2); } case 3: - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; level_cel_block = pMap->mt[8]; if (level_cel_block != 0) { drawLowerScreen(dst); } level_cel_block = pMap->mt[9]; if (level_cel_block != 0) { - drawLowerScreen(dst + 32); + drawLowerScreen(dst + TILE_WIDTH / 2); } break; } @@ -1444,9 +1444,9 @@ static void scrollrt_draw_clipped_dungeon_2(BYTE *pBuff, int sx, int sy, int row DrawClippedPlayer(p, sx, sy - 1, px, py, pPlayer->_pAnimData, pPlayer->_pAnimFrame, pPlayer->_pAnimWidth, CelSkip, 8); if (eflag && pPlayer->_peflag != 0) { if (pPlayer->_peflag == 2) { - scrollrt_draw_clipped_e_flag_2(pBuff - (BUFFER_WIDTH * 16 + 96), sx - 2, sy + 1, row, CelSkip, dx - 96, dy - 16); + scrollrt_draw_clipped_e_flag_2(pBuff - (BUFFER_WIDTH * TILE_HEIGHT / 2 + TILE_WIDTH + TILE_WIDTH / 2), sx - 2, sy + 1, row, CelSkip, dx - TILE_WIDTH + TILE_WIDTH / 2, dy - TILE_HEIGHT / 2); } - scrollrt_draw_clipped_e_flag_2(pBuff - 64, sx - 1, sy + 1, row, CelSkip, dx - 64, dy); + scrollrt_draw_clipped_e_flag_2(pBuff - TILE_WIDTH, sx - 1, sy + 1, row, CelSkip, dx - TILE_WIDTH, dy); } } else { // app_fatal("draw player clipped: tried to draw illegal player %d", p); @@ -1465,7 +1465,7 @@ static void scrollrt_draw_clipped_dungeon_2(BYTE *pBuff, int sx, int sy, int row } DrawClippedMonster(sx, sy, px, py, draw_monster_num, CelSkip, 8); if (eflag && !pMonster->_meflag) { - scrollrt_draw_clipped_e_flag_2(pBuff - 64, sx - 1, sy + 1, row, CelSkip, dx - 64, dy); + scrollrt_draw_clipped_e_flag_2(pBuff - TILE_WIDTH, sx - 1, sy + 1, row, CelSkip, dx - TILE_WIDTH, dy); } } else { // app_fatal("Draw Monster \"%s\" Clipped: uninitialized monster", pMonster->mName); @@ -1487,9 +1487,9 @@ static void scrollrt_draw_clipped_dungeon_2(BYTE *pBuff, int sx, int sy, int row DrawClippedPlayer(p, sx, sy, px, py, pPlayer->_pAnimData, pPlayer->_pAnimFrame, pPlayer->_pAnimWidth, CelSkip, 8); if (eflag && pPlayer->_peflag != 0) { if (pPlayer->_peflag == 2) { - scrollrt_draw_clipped_e_flag_2(pBuff - (BUFFER_WIDTH * 16 + 96), sx - 2, sy + 1, row, CelSkip, dx - 96, dy - 16); + scrollrt_draw_clipped_e_flag_2(pBuff - (BUFFER_WIDTH * TILE_HEIGHT / 2 + TILE_WIDTH + TILE_WIDTH / 2), sx - 2, sy + 1, row, CelSkip, dx - TILE_WIDTH + TILE_WIDTH / 2, dy - TILE_HEIGHT / 2); } - scrollrt_draw_clipped_e_flag_2(pBuff - 64, sx - 1, sy + 1, row, CelSkip, dx - 64, dy); + scrollrt_draw_clipped_e_flag_2(pBuff - TILE_WIDTH, sx - 1, sy + 1, row, CelSkip, dx - TILE_WIDTH, dy); } } else { // app_fatal("draw player clipped: tried to draw illegal player %d", p); @@ -1508,7 +1508,7 @@ static void scrollrt_draw_clipped_dungeon_2(BYTE *pBuff, int sx, int sy, int row } DrawClippedMonster(sx, sy, px, py, draw_monster_num, CelSkip, 8); if (eflag && !pMonster->_meflag) { - scrollrt_draw_clipped_e_flag_2(pBuff - 64, sx - 1, sy + 1, row, CelSkip, dx - 64, dy); + scrollrt_draw_clipped_e_flag_2(pBuff - TILE_WIDTH, sx - 1, sy + 1, row, CelSkip, dx - TILE_WIDTH, dy); } } else { // app_fatal("Draw Monster \"%s\" Clipped: uninitialized monster", pMonster->mName); @@ -1587,7 +1587,7 @@ static void scrollrt_draw_lower_2(int x, int y, int sx, int sy, int chunks, int level_piece_id = dPiece[x][y]; light_table_index = dLight[x][y]; if (level_piece_id != 0) { - dst = &gpBuffer[sx - (BUFFER_WIDTH * 32 - 32) + PitchTbl[sy]]; + dst = &gpBuffer[sx - (BUFFER_WIDTH * TILE_HEIGHT - 32) + PitchTbl[sy]]; cel_transparency_active = (BYTE)(nTransTable[level_piece_id] & TransList[dTransVal[x][y]]); for (i = 0; i < (MicroTileLen >> 1) - 1; i++) { if (row <= i) { @@ -1596,16 +1596,16 @@ static void scrollrt_draw_lower_2(int x, int y, int sx, int sy, int chunks, int drawLowerScreen(dst); } } - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; } if (CelSkip < 8) { - scrollrt_draw_clipped_dungeon_2(&gpBuffer[sx + PitchTbl[sy] - BUFFER_WIDTH * 16 * CelSkip], x, y, row, CelSkip, sx, sy, 0); + scrollrt_draw_clipped_dungeon_2(&gpBuffer[sx + PitchTbl[sy] - BUFFER_WIDTH * TILE_HEIGHT / 2 * CelSkip], x, y, row, CelSkip, sx, sy, 0); } } } x++; y--; - sx += 64; + sx += TILE_WIDTH; chunks--; pMap++; } @@ -1619,7 +1619,7 @@ static void scrollrt_draw_lower_2(int x, int y, int sx, int sy, int chunks, int level_piece_id = dPiece[x][y]; light_table_index = dLight[x][y]; if (level_piece_id != 0) { - dst = &gpBuffer[sx - BUFFER_WIDTH * 32 + PitchTbl[sy]]; + dst = &gpBuffer[sx - BUFFER_WIDTH * TILE_HEIGHT + PitchTbl[sy]]; cel_transparency_active = (BYTE)(nTransTable[level_piece_id] & TransList[dTransVal[x][y]]); i = 0; while (i < (MicroTileLen >> 1) - 1) { @@ -1630,20 +1630,20 @@ static void scrollrt_draw_lower_2(int x, int y, int sx, int sy, int chunks, int } level_cel_block = pMap->mt[2 * i + 3]; if (level_cel_block != 0) { - drawLowerScreen(dst + 32); + drawLowerScreen(dst + TILE_WIDTH / 2); } } i++; - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; } if (CelSkip < 8) { - scrollrt_draw_clipped_dungeon_2(&gpBuffer[sx + PitchTbl[sy] - BUFFER_WIDTH * 32 * (row + 1)], x, y, row, CelSkip, sx, sy, 1); + scrollrt_draw_clipped_dungeon_2(&gpBuffer[sx + PitchTbl[sy] - BUFFER_WIDTH * TILE_HEIGHT * (row + 1)], x, y, row, CelSkip, sx, sy, 1); } } } x++; y--; - sx += 64; + sx += TILE_WIDTH; pMap++; } @@ -1652,7 +1652,7 @@ static void scrollrt_draw_lower_2(int x, int y, int sx, int sy, int chunks, int level_piece_id = dPiece[x][y]; light_table_index = dLight[x][y]; if (level_piece_id != 0) { - dst = &gpBuffer[sx - BUFFER_WIDTH * 32 + PitchTbl[sy]]; + dst = &gpBuffer[sx - BUFFER_WIDTH * TILE_HEIGHT + PitchTbl[sy]]; cel_transparency_active = (BYTE)(nTransTable[level_piece_id] & TransList[dTransVal[x][y]]); for (i = 0; i < (MicroTileLen >> 1) - 1; i++) { if (row <= i) { @@ -1661,10 +1661,10 @@ static void scrollrt_draw_lower_2(int x, int y, int sx, int sy, int chunks, int drawLowerScreen(dst); } } - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; } if (CelSkip < 8) { - scrollrt_draw_clipped_dungeon_2(&gpBuffer[sx + PitchTbl[sy] - BUFFER_WIDTH * 16 * CelSkip], x, y, row, CelSkip, sx, sy, 0); + scrollrt_draw_clipped_dungeon_2(&gpBuffer[sx + PitchTbl[sy] - BUFFER_WIDTH * TILE_HEIGHT / 2 * CelSkip], x, y, row, CelSkip, sx, sy, 0); } } } @@ -1709,12 +1709,12 @@ static void scrollrt_draw_e_flag(BYTE *pBuff, int x, int y, int row, int CelCap, arch_draw_type = 2; level_cel_block = pMap->mt[1]; if (level_cel_block != 0) { - drawUpperScreen(dst + 32); + drawUpperScreen(dst + TILE_WIDTH / 2); } arch_draw_type = 0; for (i = 1; i < (MicroTileLen >> 1) - 1; i++) { - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; if (row >= i) { level_cel_block = pMap->mt[2 * i]; if (level_cel_block != 0) { @@ -1722,7 +1722,7 @@ static void scrollrt_draw_e_flag(BYTE *pBuff, int x, int y, int row, int CelCap, } level_cel_block = pMap->mt[2 * i + 1]; if (level_cel_block != 0) { - drawUpperScreen(dst + 32); + drawUpperScreen(dst + TILE_WIDTH / 2); } } } @@ -1774,8 +1774,8 @@ static void scrollrt_draw_dungeon(BYTE *pBuff, int sx, int sy, int row, int CelC if (visiondebug && bFlag & BFLAG_LIT) { CelClippedBlit(pBuff, pSquareCel, 1, 64, 0, CelCap); } - tx = dx - 96; - ty = dy - 16; + tx = dx - (TILE_WIDTH + TILE_WIDTH / 2); + ty = dy - TILE_HEIGHT / 2; if (MissilePreFlag && bFlag & BFLAG_MISSILE) { DrawMissile(sx, sy, dx, dy, 0, CelCap, TRUE); @@ -1839,9 +1839,9 @@ static void scrollrt_draw_dungeon(BYTE *pBuff, int sx, int sy, int row, int CelC DrawPlayer(p, sx, sy - 1, px, py, pPlayer->_pAnimData, pPlayer->_pAnimFrame, pPlayer->_pAnimWidth, 0, CelCap); if (eflag && pPlayer->_peflag != 0) { if (pPlayer->_peflag == 2) { - scrollrt_draw_e_flag(pBuff - (BUFFER_WIDTH * 16 + 96), sx - 2, sy + 1, row, CelCap, tx, ty); + scrollrt_draw_e_flag(pBuff - (BUFFER_WIDTH * TILE_HEIGHT / 2 + TILE_WIDTH + TILE_WIDTH / 2), sx - 2, sy + 1, row, CelCap, tx, ty); } - scrollrt_draw_e_flag(pBuff - 64, sx - 1, sy + 1, row, CelCap, dx - 64, dy); + scrollrt_draw_e_flag(pBuff - TILE_WIDTH, sx - 1, sy + 1, row, CelCap, dx - TILE_WIDTH, dy); } } else { // app_fatal("draw player: tried to draw illegal player %d", p); @@ -1860,7 +1860,7 @@ static void scrollrt_draw_dungeon(BYTE *pBuff, int sx, int sy, int row, int CelC } DrawMonster(sx, sy, px, py, draw_monster_num, 0, CelCap); if (eflag && !pMonster->_meflag) { - scrollrt_draw_e_flag(pBuff - 64, sx - 1, sy + 1, row, CelCap, dx - 64, dy); + scrollrt_draw_e_flag(pBuff - TILE_WIDTH, sx - 1, sy + 1, row, CelCap, dx - TILE_WIDTH, dy); } } else { // app_fatal("Draw Monster \"%s\": uninitialized monster", pMonster->mName); @@ -1882,9 +1882,9 @@ static void scrollrt_draw_dungeon(BYTE *pBuff, int sx, int sy, int row, int CelC DrawPlayer(p, sx, sy, px, py, pPlayer->_pAnimData, pPlayer->_pAnimFrame, pPlayer->_pAnimWidth, 0, CelCap); if (eflag && pPlayer->_peflag != 0) { if (pPlayer->_peflag == 2) { - scrollrt_draw_e_flag(pBuff - (BUFFER_WIDTH * 16 + 96), sx - 2, sy + 1, row, CelCap, dx - 96, dy - 16); + scrollrt_draw_e_flag(pBuff - (BUFFER_WIDTH * TILE_HEIGHT / 2 + TILE_WIDTH / 2), sx - 2, sy + 1, row, CelCap, dx - TILE_WIDTH / 2, dy - TILE_HEIGHT / 2); } - scrollrt_draw_e_flag(pBuff - 64, sx - 1, sy + 1, row, CelCap, dx - 64, dy); + scrollrt_draw_e_flag(pBuff - TILE_WIDTH, sx - 1, sy + 1, row, CelCap, dx - TILE_WIDTH, dy); } } else { // app_fatal("draw player: tried to draw illegal player %d", p); @@ -1903,7 +1903,7 @@ static void scrollrt_draw_dungeon(BYTE *pBuff, int sx, int sy, int row, int CelC } DrawMonster(sx, sy, px, py, draw_monster_num, 0, CelCap); if (eflag && !pMonster->_meflag) { - scrollrt_draw_e_flag(pBuff - 64, sx - 1, sy + 1, row, CelCap, dx - 64, dy); + scrollrt_draw_e_flag(pBuff - TILE_WIDTH, sx - 1, sy + 1, row, CelCap, dx - TILE_WIDTH, dy); } } else { // app_fatal("Draw Monster \"%s\": uninitialized monster", pMonster->mName); @@ -1978,7 +1978,7 @@ static void scrollrt_draw_upper(int x, int y, int sx, int sy, int chunks, int ro level_piece_id = dPiece[x][y]; light_table_index = dLight[x][y]; if (level_piece_id != 0) { - dst = &gpBuffer[sx + 32 + PitchTbl[sy]]; + dst = &gpBuffer[sx + TILE_HEIGHT + PitchTbl[sy]]; cel_transparency_active = (BYTE)(nTransTable[level_piece_id] & TransList[dTransVal[x][y]]); if (row >= 0) { level_cel_block = pMap->mt[1]; @@ -1988,21 +1988,21 @@ static void scrollrt_draw_upper(int x, int y, int sx, int sy, int chunks, int ro arch_draw_type = 0; } } - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; if (row >= 1) { level_cel_block = pMap->mt[3]; if (level_cel_block != 0) { drawUpperScreen(dst); } } - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; if (row >= 2) { level_cel_block = pMap->mt[5]; if (level_cel_block != 0) { drawUpperScreen(dst); } } - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; if (row >= 3) { level_cel_block = pMap->mt[7]; if (level_cel_block != 0) { @@ -2016,7 +2016,7 @@ static void scrollrt_draw_upper(int x, int y, int sx, int sy, int chunks, int ro } x++; y--; - sx += 64; + sx += TILE_WIDTH; chunks--; pMap++; } @@ -2036,11 +2036,11 @@ static void scrollrt_draw_upper(int x, int y, int sx, int sy, int chunks, int ro arch_draw_type = 2; level_cel_block = pMap->mt[1]; if (level_cel_block != 0) { - drawUpperScreen(dst + 32); + drawUpperScreen(dst + TILE_HEIGHT); } arch_draw_type = 0; for (i = 1; i < (MicroTileLen >> 1) - 1; i++) { - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; if (row >= i) { level_cel_block = pMap->mt[2 * i]; if (level_cel_block != 0) { @@ -2048,7 +2048,7 @@ static void scrollrt_draw_upper(int x, int y, int sx, int sy, int chunks, int ro } level_cel_block = pMap->mt[2 * i + 1]; if (level_cel_block != 0) { - drawUpperScreen(dst + 32); + drawUpperScreen(dst + TILE_HEIGHT); } } } @@ -2059,7 +2059,7 @@ static void scrollrt_draw_upper(int x, int y, int sx, int sy, int chunks, int ro } x++; y--; - sx += 64; + sx += TILE_WIDTH; pMap++; } @@ -2078,21 +2078,21 @@ static void scrollrt_draw_upper(int x, int y, int sx, int sy, int chunks, int ro } } arch_draw_type = 0; - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; if (row >= 1) { level_cel_block = pMap->mt[2]; if (level_cel_block != 0) { drawUpperScreen(dst); } } - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; if (row >= 2) { level_cel_block = pMap->mt[4]; if (level_cel_block != 0) { drawUpperScreen(dst); } } - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; if (row >= 3) { level_cel_block = pMap->mt[6]; if (level_cel_block != 0) { @@ -2118,34 +2118,34 @@ static void DrawGame(int x, int y) ViewDX = SCREEN_WIDTH; ViewDY = VIEWPORT_HEIGHT; - ViewBX = SCREEN_WIDTH / 64; - ViewBY = VIEWPORT_HEIGHT / 32; + ViewBX = SCREEN_WIDTH / TILE_WIDTH; + ViewBY = VIEWPORT_HEIGHT / TILE_HEIGHT; sx = ScrollInfo._sxoff + SCREEN_X; - sy = ScrollInfo._syoff + SCREEN_Y + 15; - x -= SCREEN_WIDTH / 64; + sy = ScrollInfo._syoff + SCREEN_Y + (TILE_HEIGHT / 2 - 1); + x -= SCREEN_WIDTH / TILE_WIDTH; y--; - chunks = SCREEN_WIDTH / 64; + chunks = SCREEN_WIDTH / TILE_WIDTH; blocks = 8; if (chrflag || questlog) { x += 2; y -= 2; - sx += (SCREEN_WIDTH / 2) - 32; - chunks = (SCREEN_WIDTH / 64) - 4; + sx += (SCREEN_WIDTH / 2) - TILE_WIDTH / 2; + chunks = (SCREEN_WIDTH / TILE_WIDTH) - 4; } if (invflag || sbookflag) { x += 2; y -= 2; - sx -= 32; - chunks = (SCREEN_WIDTH / 64) - 4; + sx -= TILE_WIDTH / 2; + chunks = (SCREEN_WIDTH / TILE_WIDTH) - 4; } switch (ScrollInfo._sdir) { case SDIR_NE: chunks++; case SDIR_N: - sy -= 32; + sy -= TILE_HEIGHT; x--; y--; blocks++; @@ -2161,14 +2161,14 @@ static void DrawGame(int x, int y) case SDIR_SW: blocks++; case SDIR_W: - sx -= 64; + sx -= TILE_WIDTH; x--; y++; chunks++; break; case SDIR_NW: - sx -= 64; - sy -= 32; + sx -= TILE_WIDTH; + sy -= TILE_HEIGHT; x -= 2; chunks++; blocks++; @@ -2180,35 +2180,35 @@ static void DrawGame(int x, int y) for (i = 0; i < 4; i++) { scrollrt_draw_upper(x, y, sx, sy, chunks, i, 0); y++; - sx -= 32; - sy += 16; + sx -= TILE_WIDTH / 2; + sy += TILE_HEIGHT / 2; scrollrt_draw_upper(x, y, sx, sy, chunks, i, 1); x++; - sx += 32; - sy += 16; + sx += TILE_WIDTH / 2; + sy += TILE_HEIGHT / 2; } /// ASSERT: assert(gpBuffer); gpBufEnd = &gpBuffer[PitchTbl[VIEWPORT_HEIGHT + SCREEN_Y]]; for (i = 0; i < blocks; i++) { scrollrt_draw_lower(x, y, sx, sy, chunks, 0); y++; - sx -= 32; - sy += 16; + sx -= TILE_WIDTH / 2; + sy += TILE_HEIGHT / 2; scrollrt_draw_lower(x, y, sx, sy, chunks, 1); x++; - sx += 32; - sy += 16; + sx += TILE_WIDTH / 2; + sy += TILE_HEIGHT / 2; } arch_draw_type = 0; for (i = 0; i < 4; i++) { scrollrt_draw_lower_2(x, y, sx, sy, chunks, i, 0); y++; - sx -= 32; - sy += 16; + sx -= TILE_WIDTH / 2; + sy += TILE_HEIGHT / 2; scrollrt_draw_lower_2(x, y, sx, sy, chunks, i, 1); x++; - sx += 32; - sy += 16; + sx += TILE_WIDTH / 2; + sy += TILE_HEIGHT / 2; } } @@ -2223,22 +2223,22 @@ static void DrawZoom(int x, int y) int wdt, nSrcOff, nDstOff; ViewDX = ZOOM_WIDTH; - ViewDY = ZOOM_HEIGHT - 32; - ViewBX = ZOOM_WIDTH / 64; - ViewBY = (ZOOM_HEIGHT - 32) / 32; + ViewDY = ZOOM_HEIGHT - TILE_HEIGHT; + ViewBX = ZOOM_WIDTH / TILE_WIDTH; + ViewBY = (ZOOM_HEIGHT - TILE_HEIGHT) / TILE_HEIGHT; sx = ScrollInfo._sxoff + SCREEN_X; - sy = ScrollInfo._syoff + SCREEN_Y - 17; - x -= ZOOM_WIDTH / 64; + sy = ScrollInfo._syoff + SCREEN_Y - (TILE_HEIGHT / 2 + 1); + x -= ZOOM_WIDTH / TILE_WIDTH; y--; - chunks = ZOOM_WIDTH / 64; + chunks = ZOOM_WIDTH / TILE_WIDTH; blocks = 3; switch (ScrollInfo._sdir) { case SDIR_NE: chunks++; case SDIR_N: - sy -= 32; + sy -= TILE_HEIGHT; x--; y--; blocks++; @@ -2254,14 +2254,14 @@ static void DrawZoom(int x, int y) case SDIR_SW: blocks++; case SDIR_W: - sx -= 64; + sx -= TILE_WIDTH; x--; y++; chunks++; break; case SDIR_NW: - sx -= 64; - sy -= 32; + sx -= TILE_WIDTH; + sy -= TILE_HEIGHT; x -= 2; chunks++; blocks++; @@ -2269,51 +2269,51 @@ static void DrawZoom(int x, int y) } /// ASSERT: assert(gpBuffer); - gpBufEnd = &gpBuffer[PitchTbl[-17 + SCREEN_Y]]; + gpBufEnd = &gpBuffer[PitchTbl[-(TILE_HEIGHT / 2 + 1) + SCREEN_Y]]; for (i = 0; i < 4; i++) { scrollrt_draw_upper(x, y, sx, sy, chunks, i, 0); y++; - sx -= 32; - sy += 16; + sx -= TILE_WIDTH / 2; + sy += TILE_HEIGHT / 2; scrollrt_draw_upper(x, y, sx, sy, chunks, i, 1); x++; - sx += 32; - sy += 16; + sx += TILE_WIDTH / 2; + sy += TILE_HEIGHT / 2; } /// ASSERT: assert(gpBuffer); - gpBufEnd = &gpBuffer[PitchTbl[160 + SCREEN_Y]]; + gpBufEnd = &gpBuffer[PitchTbl[(VIEWPORT_HEIGHT - TILE_HEIGHT) / 2 + SCREEN_Y]]; for (i = 0; i < blocks; i++) { scrollrt_draw_lower(x, y, sx, sy, chunks, 0); y++; - sx -= 32; - sy += 16; + sx -= TILE_WIDTH / 2; + sy += TILE_HEIGHT / 2; scrollrt_draw_lower(x, y, sx, sy, chunks, 1); x++; - sx += 32; - sy += 16; + sx += TILE_WIDTH / 2; + sy += TILE_HEIGHT / 2; } arch_draw_type = 0; for (i = 0; i < 4; i++) { scrollrt_draw_lower_2(x, y, sx, sy, chunks, i, 0); y++; - sx -= 32; - sy += 16; + sx -= TILE_WIDTH / 2; + sy += TILE_HEIGHT / 2; scrollrt_draw_lower_2(x, y, sx, sy, chunks, i, 1); x++; - sx += 32; - sy += 16; + sx += TILE_WIDTH / 2; + sy += TILE_HEIGHT / 2; } if (chrflag || questlog) { - nSrcOff = SCREENXY(112, VIEWPORT_HEIGHT / 2 - 17); - nDstOff = SCREENXY(320, VIEWPORT_HEIGHT - 2); - wdt = (SCREEN_WIDTH - 320) / 2; + nSrcOff = SCREENXY(TILE_WIDTH / 2 + SPANEL_WIDTH / 4, VIEWPORT_HEIGHT / 2 - (TILE_HEIGHT / 2 + 1)); + nDstOff = SCREENXY(SPANEL_WIDTH, VIEWPORT_HEIGHT - 2); + wdt = (SCREEN_WIDTH - SPANEL_WIDTH) / 2; } else if (invflag || sbookflag) { - nSrcOff = SCREENXY(112, VIEWPORT_HEIGHT / 2 - 17); + nSrcOff = SCREENXY(TILE_WIDTH / 2 + SPANEL_WIDTH / 4, VIEWPORT_HEIGHT / 2 - (TILE_HEIGHT / 2 + 1)); nDstOff = SCREENXY(0, VIEWPORT_HEIGHT - 2); - wdt = (SCREEN_WIDTH - 320) / 2; + wdt = (SCREEN_WIDTH - SPANEL_WIDTH) / 2; } else { - nSrcOff = SCREENXY(32, VIEWPORT_HEIGHT / 2 - 17); + nSrcOff = SCREENXY(TILE_WIDTH / 2, VIEWPORT_HEIGHT / 2 - (TILE_HEIGHT / 2 + 1)); nDstOff = SCREENXY(0, VIEWPORT_HEIGHT - 2); wdt = SCREEN_WIDTH / 2; } diff --git a/Source/town.cpp b/Source/town.cpp index 43234ac73..15a866f00 100644 --- a/Source/town.cpp +++ b/Source/town.cpp @@ -1,7 +1,7 @@ #include "all.h" /** - * Used under building to avoid HOM and outside of level + * @brief Render a black tile * @brief world_draw_black_tile but limited to upper half of screen * @param pBuff location in back buffer to render the tile, must be on upper half of screen */ @@ -12,7 +12,7 @@ void town_clear_upper_buf(BYTE *pBuff) #ifdef USE_ASM __asm { mov edi, pBuff - mov edx, 30 + mov edx, TILE_HEIGHT - 2 mov ebx, 1 xor eax, eax label1: @@ -22,7 +22,7 @@ void town_clear_upper_buf(BYTE *pBuff) mov ecx, ebx rep stosd add edi, edx - sub edi, BUFFER_WIDTH + 64 + sub edi, BUFFER_WIDTH + TILE_WIDTH or edx, edx jz label2 sub edx, 2 @@ -30,7 +30,7 @@ void town_clear_upper_buf(BYTE *pBuff) jmp label1 label2: mov edx, 2 - mov ebx, 15 + mov ebx, TILE_HEIGHT / 2 - 1 label3: cmp edi, gpBufEnd jb label4 @@ -38,10 +38,10 @@ void town_clear_upper_buf(BYTE *pBuff) mov ecx, ebx rep stosd add edi, edx - sub edi, BUFFER_WIDTH + 64 + sub edi, BUFFER_WIDTH + TILE_WIDTH dec ebx add edx, 2 - cmp edx, 32 + cmp edx, TILE_HEIGHT jnz label3 label4: nop @@ -52,13 +52,13 @@ void town_clear_upper_buf(BYTE *pBuff) dst = pBuff; - for (i = 30, j = 1; i >= 0 && dst >= gpBufEnd; i -= 2, j++, dst -= BUFFER_WIDTH + 64) { + for (i = TILE_HEIGHT - 2, j = 1; i >= 0 && dst >= gpBufEnd; i -= 2, j++, dst -= BUFFER_WIDTH + TILE_WIDTH) { dst += i; for (k = 0; k < 4 * j; k++) *dst++ = 0; dst += i; } - for (i = 2, j = 15; i != 32 && dst >= gpBufEnd; i += 2, j--, dst -= BUFFER_WIDTH + 64) { + for (i = 2, j = TILE_HEIGHT / 2 - 1; i != TILE_HEIGHT && dst >= gpBufEnd; i += 2, j--, dst -= BUFFER_WIDTH + TILE_WIDTH) { dst += i; for (k = 0; k < 4 * j; k++) *dst++ = 0; @@ -68,7 +68,7 @@ void town_clear_upper_buf(BYTE *pBuff) } /** - * Used under building to avoid HOM and outside of level + * @brief Render a black tile * @brief world_draw_black_tile but limited to lower half of screen * @param pBuff location in back buffer to render the tile, must be on lower half of screen */ @@ -79,13 +79,13 @@ void town_clear_low_buf(BYTE *pBuff) #ifdef USE_ASM __asm { mov edi, pBuff - mov edx, 30 + mov edx, TILE_HEIGHT - 2 mov ebx, 1 xor eax, eax label1: cmp edi, gpBufEnd jb label2 - add edi, 64 + add edi, TILE_WIDTH jmp label3 label2: add edi, edx @@ -93,7 +93,7 @@ void town_clear_low_buf(BYTE *pBuff) rep stosd add edi, edx label3: - sub edi, BUFFER_WIDTH + 64 + sub edi, BUFFER_WIDTH + TILE_WIDTH or edx, edx jz label4 sub edx, 2 @@ -101,11 +101,11 @@ void town_clear_low_buf(BYTE *pBuff) jmp label1 label4: mov edx, 2 - mov ebx, 15 + mov ebx, TILE_HEIGHT / 2 - 1 label5: cmp edi, gpBufEnd jb label6 - add edi, 64 + add edi, TILE_WIDTH jmp label7 label6: add edi, edx @@ -113,10 +113,10 @@ void town_clear_low_buf(BYTE *pBuff) rep stosd add edi, edx label7: - sub edi, BUFFER_WIDTH + 64 + sub edi, BUFFER_WIDTH + TILE_WIDTH dec ebx add edx, 2 - cmp edx, 32 + cmp edx, TILE_HEIGHT jnz label5 } #else @@ -125,24 +125,24 @@ void town_clear_low_buf(BYTE *pBuff) dst = pBuff; - for (i = 30, j = 1; i >= 0; i -= 2, j++, dst -= BUFFER_WIDTH + 64) { + for (i = TILE_HEIGHT - 2, j = 1; i >= 0; i -= 2, j++, dst -= BUFFER_WIDTH + TILE_WIDTH) { if (dst < gpBufEnd) { dst += i; for (k = 0; k < 4 * j; k++) *dst++ = 0; dst += i; } else { - dst += 64; + dst += TILE_WIDTH; } } - for (i = 2, j = 15; i != 32; i += 2, j--, dst -= BUFFER_WIDTH + 64) { + for (i = 2, j = TILE_HEIGHT / 2 - 1; i != TILE_HEIGHT; i += 2, j--, dst -= BUFFER_WIDTH + TILE_WIDTH) { if (dst < gpBufEnd) { dst += i; for (k = 0; k < 4 * j; k++) *dst++ = 0; dst += i; } else { - dst += 64; + dst += TILE_WIDTH; } } #endif @@ -408,9 +408,9 @@ void town_draw_clipped_e_flag(BYTE *pBuff, int x, int y, int sx, int sy) } level_cel_block = pMap->mt[i + 1]; if (level_cel_block != 0) { - drawLowerScreen(dst + 32); + drawLowerScreen(dst + TILE_WIDTH / 2); } - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; } town_draw_clipped_town(pBuff, x, y, sx, sy, 0); @@ -467,7 +467,7 @@ void town_draw_clipped_town(BYTE *pBuff, int sx, int sy, int dx, int dy, int efl } Cl2DrawSafe(px, py, plr[bv]._pAnimData, plr[bv]._pAnimFrame, plr[bv]._pAnimWidth, 0, 8); if (eflag && plr[bv]._peflag) { - town_draw_clipped_e_flag(pBuff - 64, sx - 1, sy + 1, dx - 64, dy); + town_draw_clipped_e_flag(pBuff - TILE_WIDTH, sx - 1, sy + 1, dx - TILE_WIDTH, dy); } } if (dFlags[sx][sy] & BFLAG_DEAD_PLAYER) { @@ -482,7 +482,7 @@ void town_draw_clipped_town(BYTE *pBuff, int sx, int sy, int dx, int dy, int efl } Cl2DrawSafe(px, py, plr[bv]._pAnimData, plr[bv]._pAnimFrame, plr[bv]._pAnimWidth, 0, 8); if (eflag && plr[bv]._peflag) { - town_draw_clipped_e_flag(pBuff - 64, sx - 1, sy + 1, dx - 64, dy); + town_draw_clipped_e_flag(pBuff - TILE_WIDTH, sx - 1, sy + 1, dx - TILE_WIDTH, dy); } } if (dFlags[sx][sy] & BFLAG_MISSILE) { @@ -514,14 +514,14 @@ void town_draw_lower(int x, int y, int sx, int sy, int chunks, int eflag) if (y >= 0 && y < MAXDUNY && x >= 0 && x < MAXDUNX) { level_cel_block = dPiece[x][y]; if (level_cel_block != 0) { - dst = &gpBuffer[sx + 32 + PitchTbl[sy]]; + dst = &gpBuffer[sx + TILE_WIDTH / 2 + PitchTbl[sy]]; pMap = &dpiece_defs_map_1[IsometricCoord(x, y)]; for (i = 1; i < 17; i += 2) { level_cel_block = pMap->mt[i]; if (level_cel_block != 0) { drawLowerScreen(dst); } - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; } town_draw_clipped_town(&gpBuffer[sx + PitchTbl[sy]], x, y, sx, sy, 0); } else { @@ -532,7 +532,7 @@ void town_draw_lower(int x, int y, int sx, int sy, int chunks, int eflag) } x++; y--; - sx += 64; + sx += TILE_WIDTH; } for (j = 0; j < chunks - eflag; j++) { @@ -548,9 +548,9 @@ void town_draw_lower(int x, int y, int sx, int sy, int chunks, int eflag) } level_cel_block = pMap->mt[i + 1]; if (level_cel_block != 0) { - drawLowerScreen(dst + 32); + drawLowerScreen(dst + TILE_WIDTH / 2); } - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; } town_draw_clipped_town(&gpBuffer[sx + PitchTbl[sy]], x, y, sx, sy, 1); } else { @@ -561,7 +561,7 @@ void town_draw_lower(int x, int y, int sx, int sy, int chunks, int eflag) } x++; y--; - sx += 64; + sx += TILE_WIDTH; } if (eflag) { @@ -575,7 +575,7 @@ void town_draw_lower(int x, int y, int sx, int sy, int chunks, int eflag) if (level_cel_block != 0) { drawLowerScreen(dst); } - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; } town_draw_clipped_town(&gpBuffer[sx + PitchTbl[sy]], x, y, sx, sy, 0); } else { @@ -608,7 +608,7 @@ void town_draw_clipped_e_flag_2(BYTE *pBuff, int x, int y, int row, int CelSkip, if (row == 0) { dst = pBuff; } else { - dst = &pBuff[BUFFER_WIDTH * 32 * row]; + dst = &pBuff[BUFFER_WIDTH * TILE_HEIGHT * row]; } pMap = &dpiece_defs_map_1[IsometricCoord(x, y)]; @@ -621,10 +621,10 @@ void town_draw_clipped_e_flag_2(BYTE *pBuff, int x, int y, int row, int CelSkip, } level_cel_block = pMap->mt[2 * i + 3]; if (level_cel_block != 0) { - drawLowerScreen(dst + 32); + drawLowerScreen(dst + TILE_WIDTH / 2); } } - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; } if (CelSkip < 8) { @@ -681,7 +681,7 @@ void town_draw_clipped_town_2(BYTE *pBuff, int sx, int sy, int row, int CelSkip, } Cl2DrawSafe(px, py, plr[bv]._pAnimData, plr[bv]._pAnimFrame, plr[bv]._pAnimWidth, CelSkip, 8); if (eflag && plr[bv]._peflag) { - town_draw_clipped_e_flag_2(pBuff - 64, sx - 1, sy + 1, row, CelSkip, dx - 64, dy); + town_draw_clipped_e_flag_2(pBuff - TILE_WIDTH, sx - 1, sy + 1, row, CelSkip, dx - TILE_WIDTH, dy); } } if (dFlags[sx][sy] & BFLAG_DEAD_PLAYER) { @@ -696,7 +696,7 @@ void town_draw_clipped_town_2(BYTE *pBuff, int sx, int sy, int row, int CelSkip, } Cl2DrawSafe(px, py, plr[bv]._pAnimData, plr[bv]._pAnimFrame, plr[bv]._pAnimWidth, CelSkip, 8); if (eflag && plr[bv]._peflag) { - town_draw_clipped_e_flag_2(pBuff - 64, sx - 1, sy + 1, row, CelSkip, dx - 64, dy); + town_draw_clipped_e_flag_2(pBuff - TILE_WIDTH, sx - 1, sy + 1, row, CelSkip, dx - TILE_WIDTH, dy); } } if (dFlags[sx][sy] & BFLAG_MISSILE) { @@ -731,7 +731,7 @@ void town_draw_lower_2(int x, int y, int sx, int sy, int chunks, int row, int ef if (y >= 0 && y < MAXDUNY && x >= 0 && x < MAXDUNX) { level_cel_block = dPiece[x][y]; if (level_cel_block != 0) { - dst = &gpBuffer[sx - (BUFFER_WIDTH * 32 - 32) + PitchTbl[sy]]; + dst = &gpBuffer[sx + TILE_WIDTH / 2 - BUFFER_WIDTH * TILE_HEIGHT + PitchTbl[sy]]; pMap = &dpiece_defs_map_1[IsometricCoord(x, y)]; for (i = 0; i < 7; i++) { if (row <= i) { @@ -740,7 +740,7 @@ void town_draw_lower_2(int x, int y, int sx, int sy, int chunks, int row, int ef drawLowerScreen(dst); } } - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; } if (CelSkip < 8) { town_draw_clipped_town_2(&gpBuffer[sx + PitchTbl[sy]], x, y, row, CelSkip, sx, sy, 0); @@ -753,14 +753,14 @@ void town_draw_lower_2(int x, int y, int sx, int sy, int chunks, int row, int ef } x++; y--; - sx += 64; + sx += TILE_WIDTH; } for (j = 0; j < chunks - eflag; j++) { if (y >= 0 && y < MAXDUNY && x >= 0 && x < MAXDUNX) { level_cel_block = dPiece[x][y]; if (level_cel_block != 0) { - dst = &gpBuffer[sx - BUFFER_WIDTH * 32 + PitchTbl[sy]]; + dst = &gpBuffer[sx - BUFFER_WIDTH * TILE_HEIGHT + PitchTbl[sy]]; pMap = &dpiece_defs_map_1[IsometricCoord(x, y)]; for (i = 0; i < 7; i++) { if (row <= i) { @@ -770,10 +770,10 @@ void town_draw_lower_2(int x, int y, int sx, int sy, int chunks, int row, int ef } level_cel_block = pMap->mt[2 * i + 3]; if (level_cel_block != 0) { - drawLowerScreen(dst + 32); + drawLowerScreen(dst + TILE_WIDTH / 2); } } - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; } if (CelSkip < 8) { town_draw_clipped_town_2(&gpBuffer[sx + PitchTbl[sy] - BUFFER_WIDTH * 16 * CelSkip], x, y, row, CelSkip, sx, sy, 1); @@ -786,14 +786,14 @@ void town_draw_lower_2(int x, int y, int sx, int sy, int chunks, int row, int ef } x++; y--; - sx += 64; + sx += TILE_WIDTH; } if (eflag) { if (y >= 0 && y < MAXDUNY && x >= 0 && x < MAXDUNX) { level_cel_block = dPiece[x][y]; if (level_cel_block != 0) { - dst = &gpBuffer[sx - BUFFER_WIDTH * 32 + PitchTbl[sy]]; + dst = &gpBuffer[sx - BUFFER_WIDTH * TILE_HEIGHT + PitchTbl[sy]]; pMap = &dpiece_defs_map_1[IsometricCoord(x, y)]; for (i = 0; i < 7; i++) { if (row <= i) { @@ -802,7 +802,7 @@ void town_draw_lower_2(int x, int y, int sx, int sy, int chunks, int row, int ef drawLowerScreen(dst); } } - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; } if (CelSkip < 8) { town_draw_clipped_town_2(&gpBuffer[sx + PitchTbl[sy]], x, y, row, CelSkip, sx, sy, 0); @@ -845,10 +845,10 @@ void town_draw_e_flag(BYTE *pBuff, int x, int y, int row, int CelCap, int sx, in } level_cel_block = pMap->mt[2 * i + 1]; if (level_cel_block != 0) { - drawUpperScreen(dst + 32); + drawUpperScreen(dst + TILE_WIDTH / 2); } } - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; } town_draw_town_all(pBuff, x, y, row, CelCap, sx, sy, 0); @@ -907,7 +907,7 @@ void town_draw_town_all(BYTE *pBuff, int x, int y, int row, int CelCap, int sx, /// ASSERT: assert(plr[bv]._pAnimData); Cl2Draw(px, py, plr[bv]._pAnimData, plr[bv]._pAnimFrame, plr[bv]._pAnimWidth, 0, CelCap); if (eflag && plr[bv]._peflag) { - town_draw_e_flag(pBuff - 64, x - 1, y + 1, row, CelCap, sx - 64, sy); + town_draw_e_flag(pBuff - TILE_WIDTH, x - 1, y + 1, row, CelCap, sx - TILE_WIDTH, sy); } } if (dFlags[x][y] & BFLAG_DEAD_PLAYER) { @@ -923,7 +923,7 @@ void town_draw_town_all(BYTE *pBuff, int x, int y, int row, int CelCap, int sx, /// ASSERT: assert(plr[bv]._pAnimData); Cl2Draw(px, py, plr[bv]._pAnimData, plr[bv]._pAnimFrame, plr[bv]._pAnimWidth, 0, CelCap); if (eflag && plr[bv]._peflag) { - town_draw_e_flag(pBuff - 64, x - 1, y + 1, row, CelCap, sx - 64, sy); + town_draw_e_flag(pBuff - TILE_WIDTH, x - 1, y + 1, row, CelCap, sx - TILE_WIDTH, sy); } } if (dFlags[x][y] & BFLAG_MISSILE) { @@ -961,7 +961,7 @@ void town_draw_upper(int x, int y, int sx, int sy, int chunks, int row, int efla if (y >= 0 && y < MAXDUNY && x >= 0 && x < MAXDUNX) { level_cel_block = dPiece[x][y]; if (level_cel_block != 0) { - dst = &gpBuffer[sx + 32 + PitchTbl[sy]]; + dst = &gpBuffer[sx + TILE_WIDTH / 2 + PitchTbl[sy]]; pMap = &dpiece_defs_map_1[IsometricCoord(x, y)]; for (i = 0; i < 7; i++) { if (row >= i) { @@ -970,7 +970,7 @@ void town_draw_upper(int x, int y, int sx, int sy, int chunks, int row, int efla drawUpperScreen(dst); } } - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; } town_draw_town_all(&gpBuffer[sx + PitchTbl[sy]], x, y, row, CelCap, sx, sy, 0); } else { @@ -981,7 +981,7 @@ void town_draw_upper(int x, int y, int sx, int sy, int chunks, int row, int efla } x++; y--; - sx += 64; + sx += TILE_WIDTH; } for (j = 0; j < chunks - eflag; j++) { @@ -998,10 +998,10 @@ void town_draw_upper(int x, int y, int sx, int sy, int chunks, int row, int efla } level_cel_block = pMap->mt[2 * i + 1]; if (level_cel_block != 0) { - drawUpperScreen(dst + 32); + drawUpperScreen(dst + TILE_WIDTH / 2); } } - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; } town_draw_town_all(&gpBuffer[sx + PitchTbl[sy]], x, y, row, CelCap, sx, sy, 1); } else { @@ -1012,7 +1012,7 @@ void town_draw_upper(int x, int y, int sx, int sy, int chunks, int row, int efla } x++; y--; - sx += 64; + sx += TILE_WIDTH; } if (eflag) { @@ -1028,7 +1028,7 @@ void town_draw_upper(int x, int y, int sx, int sy, int chunks, int row, int efla drawUpperScreen(dst); } } - dst -= BUFFER_WIDTH * 32; + dst -= BUFFER_WIDTH * TILE_HEIGHT; } town_draw_town_all(&gpBuffer[sx + PitchTbl[sy]], x, y, row, CelCap, sx, sy, 0); } else { @@ -1051,26 +1051,26 @@ void T_DrawGame(int x, int y) ViewDX = SCREEN_WIDTH; ViewDY = VIEWPORT_HEIGHT; - ViewBX = SCREEN_WIDTH / 64; - ViewBY = VIEWPORT_HEIGHT / 32; + ViewBX = SCREEN_WIDTH / TILE_WIDTH; + ViewBY = VIEWPORT_HEIGHT / TILE_HEIGHT; - sx = ScrollInfo._sxoff + 64; - sy = ScrollInfo._syoff + 175; - x -= SCREEN_WIDTH / 64; + sx = ScrollInfo._sxoff + TILE_WIDTH; + sy = ScrollInfo._syoff + SCREEN_Y + (TILE_HEIGHT / 2 - 1); + x -= SCREEN_WIDTH / TILE_WIDTH; y--; - chunks = SCREEN_WIDTH / 64; + chunks = SCREEN_WIDTH / TILE_WIDTH; blocks = 5; if (chrflag || questlog) { x += 2; y -= 2; - sx += (SCREEN_WIDTH / 2) - 32; + sx += (SCREEN_WIDTH / 2) - TILE_WIDTH / 2; chunks = 6; } if (invflag || sbookflag) { x += 2; y -= 2; - sx -= 32; + sx -= TILE_WIDTH / 2; chunks = 6; } @@ -1078,13 +1078,13 @@ void T_DrawGame(int x, int y) case SDIR_NONE: break; case SDIR_N: - sy -= 32; + sy -= TILE_HEIGHT; x--; y--; blocks++; break; case SDIR_NE: - sy -= 32; + sy -= TILE_HEIGHT; x--; y--; chunks++; @@ -1101,21 +1101,21 @@ void T_DrawGame(int x, int y) blocks++; break; case SDIR_SW: - sx -= 64; + sx -= TILE_WIDTH; x--; y++; chunks++; blocks++; break; case SDIR_W: - sx -= 64; + sx -= TILE_WIDTH; x--; y++; chunks++; break; case SDIR_NW: - sx -= 64; - sy -= 32; + sx -= TILE_WIDTH; + sy -= TILE_HEIGHT; x -= 2; chunks++; blocks++; @@ -1127,34 +1127,34 @@ void T_DrawGame(int x, int y) for (i = 0; i < 7; i++) { town_draw_upper(x, y, sx, sy, chunks, i, 0); y++; - sx -= 32; - sy += 16; + sx -= TILE_WIDTH / 2; + sy += TILE_HEIGHT / 2; town_draw_upper(x, y, sx, sy, chunks, i, 1); x++; - sx += 32; - sy += 16; + sx += TILE_WIDTH / 2; + sy += TILE_HEIGHT / 2; } /// ASSERT: assert(gpBuffer); gpBufEnd = &gpBuffer[PitchTbl[VIEWPORT_HEIGHT + SCREEN_Y]]; for (i = 0; i < blocks; i++) { town_draw_lower(x, y, sx, sy, chunks, 0); y++; - sx -= 32; - sy += 16; + sx -= TILE_WIDTH / 2; + sy += TILE_HEIGHT / 2; town_draw_lower(x, y, sx, sy, chunks, 1); x++; - sx += 32; - sy += 16; + sx += TILE_WIDTH / 2; + sy += TILE_HEIGHT / 2; } for (i = 0; i < 7; i++) { town_draw_lower_2(x, y, sx, sy, chunks, i, 0); y++; - sx -= 32; - sy += 16; + sx -= TILE_WIDTH / 2; + sy += TILE_HEIGHT / 2; town_draw_lower_2(x, y, sx, sy, chunks, i, 1); x++; - sx += 32; - sy += 16; + sx += TILE_WIDTH / 2; + sy += TILE_HEIGHT / 2; } } @@ -1169,28 +1169,28 @@ void T_DrawZoom(int x, int y) int wdt, nSrcOff, nDstOff; ViewDX = ZOOM_WIDTH; - ViewDY = 192; - ViewBX = ZOOM_WIDTH / 64; - ViewBY = 192 / 32; + ViewDY = ZOOM_HEIGHT - TILE_HEIGHT; + ViewBX = ZOOM_WIDTH / TILE_WIDTH; + ViewBY = (ZOOM_HEIGHT - TILE_HEIGHT) / TILE_HEIGHT; - sx = ScrollInfo._sxoff + 64; - sy = ScrollInfo._syoff + 143; - x -= 6; + sx = ScrollInfo._sxoff + SCREEN_X; + sy = ScrollInfo._syoff + SCREEN_Y - (TILE_HEIGHT / 2 + 1); + x -= ZOOM_WIDTH / TILE_WIDTH; y--; - chunks = 6; + chunks = ZOOM_WIDTH / TILE_WIDTH; blocks = 0; switch (ScrollInfo._sdir) { case SDIR_NONE: break; case SDIR_N: - sy -= 32; + sy -= TILE_HEIGHT; x--; y--; blocks++; break; case SDIR_NE: - sy -= 32; + sy -= TILE_HEIGHT; x--; y--; chunks++; @@ -1207,21 +1207,21 @@ void T_DrawZoom(int x, int y) blocks++; break; case SDIR_SW: - sx -= 64; + sx -= TILE_WIDTH; x--; y++; chunks++; blocks++; break; case SDIR_W: - sx -= 64; + sx -= TILE_WIDTH; x--; y++; chunks++; break; case SDIR_NW: - sx -= 64; - sy -= 32; + sx -= TILE_WIDTH; + sy -= TILE_HEIGHT; x -= 2; chunks++; blocks++; @@ -1233,47 +1233,47 @@ void T_DrawZoom(int x, int y) for (i = 0; i < 7; i++) { town_draw_upper(x, y, sx, sy, chunks, i, 0); y++; - sx -= 32; - sy += 16; + sx -= TILE_WIDTH / 2; + sy += TILE_HEIGHT / 2; town_draw_upper(x, y, sx, sy, chunks, i, 1); x++; - sx += 32; - sy += 16; + sx += TILE_WIDTH / 2; + sy += TILE_HEIGHT / 2; } assert(gpBuffer); gpBufEnd = &gpBuffer[PitchTbl[160 + SCREEN_Y]]; for (i = 0; i < blocks; i++) { town_draw_lower(x, y, sx, sy, chunks, 0); y++; - sx -= 32; - sy += 16; + sx -= TILE_WIDTH / 2; + sy += TILE_HEIGHT / 2; town_draw_lower(x, y, sx, sy, chunks, 1); x++; - sx += 32; - sy += 16; + sx += TILE_WIDTH / 2; + sy += TILE_HEIGHT / 2; } for (i = 0; i < 7; i++) { town_draw_lower_2(x, y, sx, sy, chunks, i, 0); y++; - sx -= 32; - sy += 16; + sx -= TILE_WIDTH / 2; + sy += TILE_HEIGHT / 2; town_draw_lower_2(x, y, sx, sy, chunks, i, 1); x++; - sx += 32; - sy += 16; + sx += TILE_WIDTH / 2; + sy += TILE_HEIGHT / 2; } if (chrflag || questlog) { - nSrcOff = SCREENXY(112, 159); - nDstOff = SCREENXY(320, 350); - wdt = (SCREEN_WIDTH - 320) / 2; + nSrcOff = SCREENXY(TILE_WIDTH / 2 + SPANEL_WIDTH / 4, VIEWPORT_HEIGHT / 2 - (TILE_HEIGHT / 2 + 1)); + nDstOff = SCREENXY(SPANEL_WIDTH, VIEWPORT_HEIGHT - 2); + wdt = (SCREEN_WIDTH - SPANEL_WIDTH) / 2; } else if (invflag || sbookflag) { - nSrcOff = SCREENXY(112, 159); - nDstOff = SCREENXY(0, 350); - wdt = (SCREEN_WIDTH - 320) / 2; + nSrcOff = SCREENXY(TILE_WIDTH / 2 + SPANEL_WIDTH / 4, VIEWPORT_HEIGHT / 2 - (TILE_HEIGHT / 2 + 1)); + nDstOff = SCREENXY(0, VIEWPORT_HEIGHT - 2); + wdt = (SCREEN_WIDTH - SPANEL_WIDTH) / 2; } else { - nSrcOff = SCREENXY(32, 159); - nDstOff = SCREENXY(0, 350); + nSrcOff = SCREENXY(TILE_WIDTH / 2, VIEWPORT_HEIGHT / 2 - (TILE_HEIGHT / 2 + 1)); + nDstOff = SCREENXY(0, VIEWPORT_HEIGHT - 2); wdt = SCREEN_WIDTH / 2; } @@ -1289,7 +1289,7 @@ void T_DrawZoom(int x, int y) add esi, ecx mov ebx, edi add ebx, BUFFER_WIDTH - mov edx, 176 + mov edx, VIEWPORT_HEIGHT / 2 label1: mov ecx, wdt label2: @@ -1319,7 +1319,7 @@ void T_DrawZoom(int x, int y) dst1 = &gpBuffer[nDstOff]; dst2 = &gpBuffer[nDstOff + BUFFER_WIDTH]; - for (hgt = 176; hgt != 0; hgt--, src -= BUFFER_WIDTH + wdt, dst1 -= 2 * (BUFFER_WIDTH + wdt), dst2 -= 2 * (BUFFER_WIDTH + wdt)) { + for (hgt = VIEWPORT_HEIGHT / 2; hgt != 0; hgt--, src -= BUFFER_WIDTH + wdt, dst1 -= 2 * (BUFFER_WIDTH + wdt), dst2 -= 2 * (BUFFER_WIDTH + wdt)) { for (i = wdt; i != 0; i--) { *dst1++ = *src; *dst1++ = *src; @@ -1426,13 +1426,13 @@ void SetTownMicros() if (zoomflag) { ViewDX = SCREEN_WIDTH; ViewDY = VIEWPORT_HEIGHT; - ViewBX = SCREEN_WIDTH / 64; - ViewBY = VIEWPORT_HEIGHT / 32; + ViewBX = SCREEN_WIDTH / TILE_WIDTH; + ViewBY = VIEWPORT_HEIGHT / TILE_HEIGHT; } else { ViewDX = ZOOM_WIDTH; ViewDY = ZOOM_HEIGHT; - ViewBX = ZOOM_WIDTH / 64; - ViewBY = ZOOM_HEIGHT / 32; + ViewBX = ZOOM_WIDTH / TILE_WIDTH; + ViewBY = ZOOM_HEIGHT / TILE_HEIGHT; } } diff --git a/defs.h b/defs.h index 0f67c867f..f25fad7d0 100644 --- a/defs.h +++ b/defs.h @@ -111,8 +111,8 @@ #define SCREEN_WIDTH 640 #define SCREEN_HEIGHT 480 -#define ZOOM_WIDTH 384 -#define ZOOM_HEIGHT 224 +#define ZOOM_WIDTH (SCREEN_WIDTH / 2 + TILE_WIDTH) +#define ZOOM_HEIGHT (VIEWPORT_HEIGHT / 2 + TILE_HEIGHT + TILE_HEIGHT / 2) // If defined, use 32-bit colors instead of 8-bit [Default -> Undefined] //#define RGBMODE @@ -133,7 +133,9 @@ #define BUFFER_WIDTH (BORDER_LEFT + SCREEN_WIDTH + BORDER_RIGHT) #define BUFFER_HEIGHT (BORDER_TOP + SCREEN_HEIGHT + BORDER_BOTTOM) -#define TILE_SIZE 32 + +#define TILE_WIDTH 64 +#define TILE_HEIGHT 32 #define PANEL_WIDTH 640 #define PANEL_HEIGHT 128 @@ -142,9 +144,10 @@ #define PANEL_X (SCREEN_X + PANEL_LEFT) #define PANEL_Y (SCREEN_Y + PANEL_TOP) +#define SPANEL_WIDTH 320 #define SPANEL_HEIGHT 352 -#define RIGHT_PANEL (SCREEN_WIDTH - 320) +#define RIGHT_PANEL (SCREEN_WIDTH - SPANEL_WIDTH) #define RIGHT_PANEL_X (SCREEN_X + RIGHT_PANEL) #if SCREEN_WIDTH <= PANEL_WIDTH