Browse Source

♻️ Replace 'ViewX' and 'ViewY' globals with single 'ViewPosition'

pull/2799/head
Juliano Leal Goncalves 5 years ago committed by Stephen C. Wills
parent
commit
940a120bf9
  1. 14
      Source/automap.cpp
  2. 6
      Source/cursor.cpp
  3. 25
      Source/drlg_l1.cpp
  4. 12
      Source/drlg_l2.cpp
  5. 12
      Source/drlg_l3.cpp
  6. 26
      Source/drlg_l4.cpp
  7. 3
      Source/gendung.cpp
  8. 6
      Source/gendung.h
  9. 7
      Source/loadsave.cpp
  10. 3
      Source/missiles.cpp
  11. 22
      Source/monster.cpp
  12. 20
      Source/player.cpp
  13. 10
      Source/portal.cpp
  14. 3
      Source/quests.cpp
  15. 58
      Source/scrollrt.cpp
  16. 3
      Source/spells.cpp
  17. 21
      Source/town.cpp

14
Source/automap.cpp

@ -281,8 +281,8 @@ void SearchAutomapItem(const Surface &out, const Displacement &myPlayerOffset)
if (dItem[i][j] == 0) if (dItem[i][j] == 0)
continue; continue;
int px = i - 2 * AutomapOffset.deltaX - ViewX; int px = i - 2 * AutomapOffset.deltaX - ViewPosition.x;
int py = j - 2 * AutomapOffset.deltaY - ViewY; int py = j - 2 * AutomapOffset.deltaY - ViewPosition.y;
Point screen = { Point screen = {
(myPlayerOffset.deltaX * AutoMapScale / 100 / 2) + (px - py) * AmLine16 + gnScreenWidth / 2, (myPlayerOffset.deltaX * AutoMapScale / 100 / 2) + (px - py) * AmLine16 + gnScreenWidth / 2,
@ -318,8 +318,8 @@ void DrawAutomapPlr(const Surface &out, const Displacement &myPlayerOffset, int
tile.y++; tile.y++;
} }
int px = tile.x - 2 * AutomapOffset.deltaX - ViewX; int px = tile.x - 2 * AutomapOffset.deltaX - ViewPosition.x;
int py = tile.y - 2 * AutomapOffset.deltaY - ViewY; int py = tile.y - 2 * AutomapOffset.deltaY - ViewPosition.y;
Displacement playerOffset = player.position.offset; Displacement playerOffset = player.position.offset;
if (player.IsWalking()) if (player.IsWalking())
@ -616,7 +616,7 @@ void DrawAutomap(const Surface &out)
return; return;
} }
Automap = { (ViewX - 16) / 2, (ViewY - 16) / 2 }; Automap = { (ViewPosition.x - 16) / 2, (ViewPosition.y - 16) / 2 };
while (Automap.x + AutomapOffset.deltaX < 0) while (Automap.x + AutomapOffset.deltaX < 0)
AutomapOffset.deltaX++; AutomapOffset.deltaX++;
while (Automap.x + AutomapOffset.deltaX >= DMAXX) while (Automap.x + AutomapOffset.deltaX >= DMAXX)
@ -654,11 +654,11 @@ void DrawAutomap(const Surface &out)
screen.x -= AmLine64 * (cells / 2) - AmLine32; screen.x -= AmLine64 * (cells / 2) - AmLine32;
screen.y -= AmLine32 * (cells / 2) + AmLine16; screen.y -= AmLine32 * (cells / 2) + AmLine16;
} }
if ((ViewX & 1) != 0) { if ((ViewPosition.x & 1) != 0) {
screen.x -= AmLine16; screen.x -= AmLine16;
screen.y -= AmLine8; screen.y -= AmLine8;
} }
if ((ViewY & 1) != 0) { if ((ViewPosition.y & 1) != 0) {
screen.x += AmLine16; screen.x += AmLine16;
screen.y -= AmLine8; screen.y -= AmLine8;
} }

6
Source/cursor.cpp

@ -190,7 +190,7 @@ void CelDrawCursor(const Surface &out, Point position, int cursId)
void InitLevelCursor() void InitLevelCursor()
{ {
NewCursor(CURSOR_HAND); NewCursor(CURSOR_HAND);
cursPosition = { ViewX, ViewY }; cursPosition = ViewPosition;
pcurstemp = -1; pcurstemp = -1;
pcursmonst = -1; pcursmonst = -1;
pcursobj = -1; pcursobj = -1;
@ -296,8 +296,8 @@ void CheckCursMove()
} }
// Convert to tile grid // Convert to tile grid
int mx = ViewX; int mx = ViewPosition.x;
int my = ViewY; int my = ViewPosition.y;
int columns = 0; int columns = 0;
int rows = 0; int rows = 0;

25
Source/drlg_l1.cpp

@ -856,8 +856,7 @@ int PlaceMiniSet(const BYTE *miniset, int tmin, int tmax, int cx, int cy, bool s
} }
if (setview) { if (setview) {
ViewX = 2 * sx + 19; ViewPosition = Point { 19, 20 } + Displacement { sx, sy } * 2;
ViewY = 2 * sy + 20;
} }
if (sx < cx && sy < cy) if (sx < cx && sy < cy)
@ -2209,7 +2208,7 @@ void GenerateLevel(lvl_entry entry)
} else { } else {
if (PlaceMiniSet(PWATERIN, 1, 1, 0, 0, false, -1) < 0) if (PlaceMiniSet(PWATERIN, 1, 1, 0, 0, false, -1) < 0)
doneflag = false; doneflag = false;
ViewY--; ViewPosition.y--;
} }
} }
if (Quests[Q_LTBANNER].IsAvailable()) { if (Quests[Q_LTBANNER].IsAvailable()) {
@ -2220,10 +2219,9 @@ void GenerateLevel(lvl_entry entry)
if (PlaceMiniSet(STAIRSUP, 1, 1, 0, 0, false, -1) < 0) if (PlaceMiniSet(STAIRSUP, 1, 1, 0, 0, false, -1) < 0)
doneflag = false; doneflag = false;
if (entry == ENTRY_PREV) { if (entry == ENTRY_PREV) {
ViewX = 2 * setpc_x + 20; ViewPosition = Point { 20, 28 } + Displacement { setpc_x, setpc_y } * 2;
ViewY = 2 * setpc_y + 28;
} else { } else {
ViewY--; ViewPosition.y--;
} }
} }
} else if (entry == ENTRY_MAIN) { } else if (entry == ENTRY_MAIN) {
@ -2244,7 +2242,7 @@ void GenerateLevel(lvl_entry entry)
doneflag = false; doneflag = false;
if (PlaceMiniSet(L5STAIRSDOWN, 1, 1, 0, 0, false, -1) < 0) if (PlaceMiniSet(L5STAIRSDOWN, 1, 1, 0, 0, false, -1) < 0)
doneflag = false; doneflag = false;
ViewY++; ViewPosition.y++;
} else { } else {
if (PlaceMiniSet(L5STAIRSUPHF, 1, 1, 0, 0, true, -1) < 0) if (PlaceMiniSet(L5STAIRSUPHF, 1, 1, 0, 0, true, -1) < 0)
doneflag = false; doneflag = false;
@ -2252,7 +2250,7 @@ void GenerateLevel(lvl_entry entry)
if (PlaceMiniSet(L5STAIRSDOWN, 1, 1, 0, 0, false, -1) < 0) if (PlaceMiniSet(L5STAIRSDOWN, 1, 1, 0, 0, false, -1) < 0)
doneflag = false; doneflag = false;
} }
ViewY++; ViewPosition.y++;
} }
} else if (!Players[MyPlayerId].pOriginalCathedral && entry == ENTRY_PREV) { } else if (!Players[MyPlayerId].pOriginalCathedral && entry == ENTRY_PREV) {
if (currlevel < 21) { if (currlevel < 21) {
@ -2260,13 +2258,13 @@ void GenerateLevel(lvl_entry entry)
doneflag = false; doneflag = false;
if (PlaceMiniSet(STAIRSDOWN, 1, 1, 0, 0, true, -1) < 0) if (PlaceMiniSet(STAIRSDOWN, 1, 1, 0, 0, true, -1) < 0)
doneflag = false; doneflag = false;
ViewY--; ViewPosition.y--;
} else if (currlevel == 21) { } else if (currlevel == 21) {
if (PlaceMiniSet(L5STAIRSTOWN, 1, 1, 0, 0, false, -1) < 0) if (PlaceMiniSet(L5STAIRSTOWN, 1, 1, 0, 0, false, -1) < 0)
doneflag = false; doneflag = false;
if (PlaceMiniSet(L5STAIRSDOWN, 1, 1, 0, 0, true, -1) < 0) if (PlaceMiniSet(L5STAIRSDOWN, 1, 1, 0, 0, true, -1) < 0)
doneflag = false; doneflag = false;
ViewY += 3; ViewPosition.y += 3;
} else { } else {
if (PlaceMiniSet(L5STAIRSUPHF, 1, 1, 0, 0, true, -1) < 0) if (PlaceMiniSet(L5STAIRSUPHF, 1, 1, 0, 0, true, -1) < 0)
doneflag = false; doneflag = false;
@ -2274,7 +2272,7 @@ void GenerateLevel(lvl_entry entry)
if (PlaceMiniSet(L5STAIRSDOWN, 1, 1, 0, 0, true, -1) < 0) if (PlaceMiniSet(L5STAIRSDOWN, 1, 1, 0, 0, true, -1) < 0)
doneflag = false; doneflag = false;
} }
ViewY += 3; ViewPosition.y += 3;
} }
} else { } else {
if (currlevel < 21) { if (currlevel < 21) {
@ -2288,7 +2286,7 @@ void GenerateLevel(lvl_entry entry)
doneflag = false; doneflag = false;
else if (PlaceMiniSet(STAIRSDOWN, 1, 1, 0, 0, true, -1) < 0) else if (PlaceMiniSet(STAIRSDOWN, 1, 1, 0, 0, true, -1) < 0)
doneflag = false; doneflag = false;
ViewY--; ViewPosition.y--;
} }
} else if (currlevel == 21) { } else if (currlevel == 21) {
if (PlaceMiniSet(L5STAIRSTOWN, 1, 1, 0, 0, true, -1) < 0) if (PlaceMiniSet(L5STAIRSTOWN, 1, 1, 0, 0, true, -1) < 0)
@ -2439,8 +2437,7 @@ void LoadL1Dungeon(const char *path, int vx, int vy)
FillFloor(); FillFloor();
ViewX = vx; ViewPosition = { vx, vy };
ViewY = vy;
Pass3(); Pass3();
DRLG_Init_Globals(); DRLG_Init_Globals();

12
Source/drlg_l2.cpp

@ -1716,8 +1716,7 @@ bool PlaceMiniSet(const BYTE *miniset, int tmin, int tmax, int cx, int cy, bool
} }
if (setview) { if (setview) {
ViewX = 2 * sx + 21; ViewPosition = Point { 21, 22 } + Displacement { sx, sy } * 2;
ViewY = 2 * sy + 22;
} }
return true; return true;
@ -2925,7 +2924,7 @@ void GenerateLevel(lvl_entry entry)
doneflag = PlaceMiniSet(WARPSTAIRS, 1, 1, -1, -1, false); doneflag = PlaceMiniSet(WARPSTAIRS, 1, 1, -1, -1, false);
} }
} }
ViewY -= 2; ViewPosition.y -= 2;
} else if (entry == ENTRY_PREV) { } else if (entry == ENTRY_PREV) {
doneflag = PlaceMiniSet(USTAIRS, 1, 1, -1, -1, false); doneflag = PlaceMiniSet(USTAIRS, 1, 1, -1, -1, false);
if (doneflag) { if (doneflag) {
@ -2934,7 +2933,7 @@ void GenerateLevel(lvl_entry entry)
doneflag = PlaceMiniSet(WARPSTAIRS, 1, 1, -1, -1, false); doneflag = PlaceMiniSet(WARPSTAIRS, 1, 1, -1, -1, false);
} }
} }
ViewX--; ViewPosition.x--;
} else { } else {
doneflag = PlaceMiniSet(USTAIRS, 1, 1, -1, -1, false); doneflag = PlaceMiniSet(USTAIRS, 1, 1, -1, -1, false);
if (doneflag) { if (doneflag) {
@ -2943,7 +2942,7 @@ void GenerateLevel(lvl_entry entry)
doneflag = PlaceMiniSet(WARPSTAIRS, 1, 1, -1, -1, true); doneflag = PlaceMiniSet(WARPSTAIRS, 1, 1, -1, -1, true);
} }
} }
ViewY -= 2; ViewPosition.y -= 2;
} }
} }
@ -3130,8 +3129,7 @@ void LoadL2Dungeon(const char *path, int vx, int vy)
InitDungeonPieces(); InitDungeonPieces();
ViewX = vx; ViewPosition = { vx, vy };
ViewY = vy;
SetMapMonsters(dunData.get(), { 0, 0 }); SetMapMonsters(dunData.get(), { 0, 0 });
SetMapObjects(dunData.get(), 0, 0); SetMapObjects(dunData.get(), 0, 0);

12
Source/drlg_l3.cpp

@ -1666,8 +1666,7 @@ bool PlaceMiniSet(const BYTE *miniset, int tmin, int tmax, int cx, int cy, bool
} }
if (setview) { if (setview) {
ViewX = 2 * sx + 17; ViewPosition = Point { 17, 19 } + Displacement { sx, sy } * 2;
ViewY = 2 * sy + 19;
} }
return false; return false;
@ -2290,13 +2289,11 @@ void GenerateLevel(lvl_entry entry)
if (!genok) { if (!genok) {
if (currlevel < 17) { if (currlevel < 17) {
genok = PlaceMiniSet(L3DOWN, 1, 1, -1, -1, true); genok = PlaceMiniSet(L3DOWN, 1, 1, -1, -1, true);
ViewX += 2; ViewPosition += { 2, -2 };
ViewY -= 2;
} else { } else {
if (currlevel != 20) { if (currlevel != 20) {
genok = PlaceMiniSet(L6DOWN, 1, 1, -1, -1, true); genok = PlaceMiniSet(L6DOWN, 1, 1, -1, -1, true);
ViewX += 2; ViewPosition += { 2, -2 };
ViewY -= 2;
} }
} }
if (!genok && currlevel == 9) { if (!genok && currlevel == 9) {
@ -2554,8 +2551,7 @@ void LoadL3Dungeon(const char *path, int vx, int vy)
Pass3(); Pass3();
DRLG_Init_Globals(); DRLG_Init_Globals();
ViewX = vx; ViewPosition = { vx, vy };
ViewY = vy;
SetMapMonsters(dunData.get(), { 0, 0 }); SetMapMonsters(dunData.get(), { 0, 0 });
SetMapObjects(dunData.get(), 0, 0); SetMapObjects(dunData.get(), 0, 0);

26
Source/drlg_l4.cpp

@ -244,8 +244,7 @@ bool PlaceMiniSet(const BYTE *miniset, int tmin, int tmax, int cx, int cy, bool
Quests[Q_BETRAYER].position = { sx + 1, sy + 1 }; Quests[Q_BETRAYER].position = { sx + 1, sy + 1 };
} }
if (setview) { if (setview) {
ViewX = 2 * sx + 21; ViewPosition = Point { 21, 22 } + Displacement { sx, sy } * 2;
ViewY = 2 * sy + 22;
} }
return true; return true;
@ -1347,20 +1346,19 @@ void GenerateLevel(lvl_entry entry)
if (doneflag && currlevel == 13) { if (doneflag && currlevel == 13) {
doneflag = PlaceMiniSet(L4TWARP, 1, 1, -1, -1, false); doneflag = PlaceMiniSet(L4TWARP, 1, 1, -1, -1, false);
} }
ViewX++; ViewPosition.x++;
} else if (entry == ENTRY_PREV) { } else if (entry == ENTRY_PREV) {
doneflag = PlaceMiniSet(L4USTAIRS, 1, 1, -1, -1, false); doneflag = PlaceMiniSet(L4USTAIRS, 1, 1, -1, -1, false);
if (doneflag && currlevel == 13) { if (doneflag && currlevel == 13) {
doneflag = PlaceMiniSet(L4TWARP, 1, 1, -1, -1, false); doneflag = PlaceMiniSet(L4TWARP, 1, 1, -1, -1, false);
} }
ViewX = 2 * setpc_x + 22; ViewPosition = Point { 22, 22 } + Displacement { setpc_x, setpc_y } * 2;
ViewY = 2 * setpc_y + 22;
} else { } else {
doneflag = PlaceMiniSet(L4USTAIRS, 1, 1, -1, -1, false); doneflag = PlaceMiniSet(L4USTAIRS, 1, 1, -1, -1, false);
if (doneflag && currlevel == 13) { if (doneflag && currlevel == 13) {
doneflag = PlaceMiniSet(L4TWARP, 1, 1, -1, -1, true); doneflag = PlaceMiniSet(L4TWARP, 1, 1, -1, -1, true);
} }
ViewX++; ViewPosition.x++;
} }
} else if (currlevel != 15) { } else if (currlevel != 15) {
if (entry == ENTRY_MAIN) { if (entry == ENTRY_MAIN) {
@ -1371,7 +1369,7 @@ void GenerateLevel(lvl_entry entry)
if (doneflag && currlevel == 13) { if (doneflag && currlevel == 13) {
doneflag = PlaceMiniSet(L4TWARP, 1, 1, -1, -1, false); doneflag = PlaceMiniSet(L4TWARP, 1, 1, -1, -1, false);
} }
ViewX++; ViewPosition.x++;
} else if (entry == ENTRY_PREV) { } else if (entry == ENTRY_PREV) {
doneflag = PlaceMiniSet(L4USTAIRS, 1, 1, -1, -1, false); doneflag = PlaceMiniSet(L4USTAIRS, 1, 1, -1, -1, false);
if (doneflag && currlevel != 16) { if (doneflag && currlevel != 16) {
@ -1380,7 +1378,7 @@ void GenerateLevel(lvl_entry entry)
if (doneflag && currlevel == 13) { if (doneflag && currlevel == 13) {
doneflag = PlaceMiniSet(L4TWARP, 1, 1, -1, -1, false); doneflag = PlaceMiniSet(L4TWARP, 1, 1, -1, -1, false);
} }
ViewY++; ViewPosition.y++;
} else { } else {
doneflag = PlaceMiniSet(L4USTAIRS, 1, 1, -1, -1, false); doneflag = PlaceMiniSet(L4USTAIRS, 1, 1, -1, -1, false);
if (doneflag && currlevel != 16) { if (doneflag && currlevel != 16) {
@ -1389,7 +1387,7 @@ void GenerateLevel(lvl_entry entry)
if (doneflag && currlevel == 13) { if (doneflag && currlevel == 13) {
doneflag = PlaceMiniSet(L4TWARP, 1, 1, -1, -1, true); doneflag = PlaceMiniSet(L4TWARP, 1, 1, -1, -1, true);
} }
ViewX++; ViewPosition.x++;
} }
} else { } else {
if (entry == ENTRY_MAIN) { if (entry == ENTRY_MAIN) {
@ -1401,7 +1399,7 @@ void GenerateLevel(lvl_entry entry)
doneflag = PlaceMiniSet(L4PENTA2, 1, 1, -1, -1, false); doneflag = PlaceMiniSet(L4PENTA2, 1, 1, -1, -1, false);
} }
} }
ViewX++; ViewPosition.x++;
} else { } else {
doneflag = PlaceMiniSet(L4USTAIRS, 1, 1, -1, -1, false); doneflag = PlaceMiniSet(L4USTAIRS, 1, 1, -1, -1, false);
if (doneflag) { if (doneflag) {
@ -1411,7 +1409,7 @@ void GenerateLevel(lvl_entry entry)
doneflag = PlaceMiniSet(L4PENTA2, 1, 1, -1, -1, true); doneflag = PlaceMiniSet(L4PENTA2, 1, 1, -1, -1, true);
} }
} }
ViewY++; ViewPosition.y++;
} }
} }
} while (!doneflag); } while (!doneflag);
@ -1475,8 +1473,7 @@ void CreateL4Dungeon(uint32_t rseed, lvl_entry entry)
dmaxx = 96; dmaxx = 96;
dmaxy = 96; dmaxy = 96;
ViewX = 40; ViewPosition = { 40, 40 };
ViewY = 40;
DRLG_InitSetPC(); DRLG_InitSetPC();
LoadQuestSetPieces(); LoadQuestSetPieces();
@ -1500,8 +1497,7 @@ void LoadL4Dungeon(const char *path, int vx, int vy)
SetRoom(dunData.get(), 0, 0); SetRoom(dunData.get(), 0, 0);
ViewX = vx; ViewPosition = { vx, vy };
ViewY = vy;
Pass3(); Pass3();
DRLG_Init_Globals(); DRLG_Init_Globals();

3
Source/gendung.cpp

@ -41,8 +41,7 @@ BYTE currlevel;
bool setlevel; bool setlevel;
_setlevels setlvlnum; _setlevels setlvlnum;
dungeon_type setlvltype; dungeon_type setlvltype;
int ViewX; Point ViewPosition;
int ViewY;
ScrollStruct ScrollInfo; ScrollStruct ScrollInfo;
int MicroTileLen; int MicroTileLen;
char TransVal; char TransVal;

6
Source/gendung.h

@ -182,10 +182,8 @@ extern bool setlevel;
extern _setlevels setlvlnum; extern _setlevels setlvlnum;
/** Specifies the player viewpoint X-coordinate of the map. */ /** Specifies the player viewpoint X-coordinate of the map. */
extern dungeon_type setlvltype; extern dungeon_type setlvltype;
/** Specifies the player viewpoint X-coordinate of the map. */ /** Specifies the player viewpoint X,Y-coordinates of the map. */
extern int ViewX; extern Point ViewPosition;
/** Specifies the player viewpoint Y-coordinate of the map. */
extern int ViewY;
extern ScrollStruct ScrollInfo; extern ScrollStruct ScrollInfo;
extern int MicroTileLen; extern int MicroTileLen;
extern char TransVal; extern char TransVal;

7
Source/loadsave.cpp

@ -1716,8 +1716,7 @@ void LoadGame(bool firstflag)
SyncInitPlr(MyPlayerId); SyncInitPlr(MyPlayerId);
SyncPlrAnim(MyPlayerId); SyncPlrAnim(MyPlayerId);
ViewX = viewX; ViewPosition = { viewX, viewY };
ViewY = viewY;
ActiveMonsterCount = tmpNummonsters; ActiveMonsterCount = tmpNummonsters;
ActiveItemCount = tmpNumitems; ActiveItemCount = tmpNumitems;
ActiveMissileCount = tmpNummissiles; ActiveMissileCount = tmpNummissiles;
@ -1898,8 +1897,8 @@ void SaveGameData()
file.WriteBE<uint32_t>(setlvlnum); file.WriteBE<uint32_t>(setlvlnum);
file.WriteBE<uint32_t>(currlevel); file.WriteBE<uint32_t>(currlevel);
file.WriteBE<uint32_t>(leveltype); file.WriteBE<uint32_t>(leveltype);
file.WriteBE<int32_t>(ViewX); file.WriteBE<int32_t>(ViewPosition.x);
file.WriteBE<int32_t>(ViewY); file.WriteBE<int32_t>(ViewPosition.y);
file.WriteLE<uint8_t>(invflag ? 1 : 0); file.WriteLE<uint8_t>(invflag ? 1 : 0);
file.WriteLE<uint8_t>(chrflag ? 1 : 0); file.WriteLE<uint8_t>(chrflag ? 1 : 0);
file.WriteBE<int32_t>(ActiveMonsterCount); file.WriteBE<int32_t>(ActiveMonsterCount);

3
Source/missiles.cpp

@ -3761,8 +3761,7 @@ void MI_Teleport(Missile &missile)
ChangeVisionXY(player._pvid, player.position.tile); ChangeVisionXY(player._pvid, player.position.tile);
} }
if (id == MyPlayerId) { if (id == MyPlayerId) {
ViewX = player.position.tile.x - ScrollInfo.tile.x; ViewPosition = Point { 0, 0 } + (player.position.tile - ScrollInfo.tile);
ViewY = player.position.tile.y - ScrollInfo.tile.y;
} }
} }

22
Source/monster.cpp

@ -1084,11 +1084,11 @@ void DiabloDeath(Monster &diablo, bool sendmsg)
} }
AddLight(diablo.position.tile, 8); AddLight(diablo.position.tile, 8);
DoVision(diablo.position.tile, 8, false, true); DoVision(diablo.position.tile, 8, false, true);
int dist = diablo.position.tile.WalkingDistance({ ViewX, ViewY }); int dist = diablo.position.tile.WalkingDistance(ViewPosition);
if (dist > 20) if (dist > 20)
dist = 20; dist = 20;
diablo._mVar3 = ViewX << 16; diablo._mVar3 = ViewPosition.x << 16;
diablo.position.temp.x = ViewY << 16; diablo.position.temp.x = ViewPosition.y << 16;
diablo.position.temp.y = (int)((diablo._mVar3 - (diablo.position.tile.x << 16)) / (double)dist); diablo.position.temp.y = (int)((diablo._mVar3 - (diablo.position.tile.x << 16)) / (double)dist);
diablo.position.offset2.deltaX = (int)((diablo.position.temp.x - (diablo.position.tile.y << 16)) / (double)dist); diablo.position.offset2.deltaX = (int)((diablo.position.temp.x - (diablo.position.tile.y << 16)) / (double)dist);
} }
@ -1806,16 +1806,16 @@ bool MonsterDeath(int i)
monster._mVar1++; monster._mVar1++;
if (monster.MType->mtype == MT_DIABLO) { if (monster.MType->mtype == MT_DIABLO) {
if (monster.position.tile.x < ViewX) { if (monster.position.tile.x < ViewPosition.x) {
ViewX--; ViewPosition.x--;
} else if (monster.position.tile.x > ViewX) { } else if (monster.position.tile.x > ViewPosition.x) {
ViewX++; ViewPosition.x++;
} }
if (monster.position.tile.y < ViewY) { if (monster.position.tile.y < ViewPosition.y) {
ViewY--; ViewPosition.y--;
} else if (monster.position.tile.y > ViewY) { } else if (monster.position.tile.y > ViewPosition.y) {
ViewY++; ViewPosition.y++;
} }
if (monster._mVar1 == 140) if (monster._mVar1 == 140)

20
Source/player.cpp

@ -307,8 +307,7 @@ constexpr std::array<const DirectionSettings, 8> WalkSettings { {
void ScrollViewPort(const Player &player, _scroll_direction dir) void ScrollViewPort(const Player &player, _scroll_direction dir)
{ {
ScrollInfo.tile.x = player.position.tile.x - ViewX; ScrollInfo.tile = Point { 0, 0 } + (player.position.tile - ViewPosition);
ScrollInfo.tile.y = player.position.tile.y - ViewY;
if (zoomflag) { if (zoomflag) {
if (abs(ScrollInfo.tile.x) >= 3 || abs(ScrollInfo.tile.y) >= 3) { if (abs(ScrollInfo.tile.x) >= 3 || abs(ScrollInfo.tile.y) >= 3) {
@ -430,8 +429,7 @@ void StartWalkStand(int pnum)
if (pnum == MyPlayerId) { if (pnum == MyPlayerId) {
ScrollInfo.offset = { 0, 0 }; ScrollInfo.offset = { 0, 0 };
ScrollInfo._sdir = SDIR_NONE; ScrollInfo._sdir = SDIR_NONE;
ViewX = player.position.tile.x; ViewPosition = player.position.tile;
ViewY = player.position.tile.y;
} }
} }
@ -745,8 +743,7 @@ bool DoWalk(int pnum, int variant)
//Update the "camera" tile position //Update the "camera" tile position
if (pnum == MyPlayerId && ScrollInfo._sdir != SDIR_NONE) { if (pnum == MyPlayerId && ScrollInfo._sdir != SDIR_NONE) {
ViewX = player.position.tile.x - ScrollInfo.tile.x; ViewPosition = Point { 0, 0 } + (player.position.tile - ScrollInfo.tile);
ViewY = player.position.tile.y - ScrollInfo.tile.y;
} }
if (player.walkpath[0] != WALK_NONE) { if (player.walkpath[0] != WALK_NONE) {
@ -2747,7 +2744,7 @@ void InitPlayer(Player &player, bool firstTime)
if (&player == &myPlayer) { if (&player == &myPlayer) {
if (!firstTime || currlevel != 0) { if (!firstTime || currlevel != 0) {
player.position.tile = { ViewX, ViewY }; player.position.tile = ViewPosition;
} }
} else { } else {
unsigned i; unsigned i;
@ -2808,8 +2805,7 @@ void InitMultiView()
} }
auto &myPlayer = Players[MyPlayerId]; auto &myPlayer = Players[MyPlayerId];
ViewX = myPlayer.position.tile.x; ViewPosition = myPlayer.position.tile;
ViewY = myPlayer.position.tile.y;
} }
void PlrClrTrans(Point position) void PlrClrTrans(Point position)
@ -2855,8 +2851,7 @@ void FixPlayerLocation(int pnum, Direction bDir)
if (pnum == MyPlayerId) { if (pnum == MyPlayerId) {
ScrollInfo.offset = { 0, 0 }; ScrollInfo.offset = { 0, 0 };
ScrollInfo._sdir = SDIR_NONE; ScrollInfo._sdir = SDIR_NONE;
ViewX = player.position.tile.x; ViewPosition = player.position.tile;
ViewY = player.position.tile.y;
} }
ChangeLightXY(player._plid, player.position.tile); ChangeLightXY(player._plid, player.position.tile);
ChangeVisionXY(player._pvid, player.position.tile); ChangeVisionXY(player._pvid, player.position.tile);
@ -3655,8 +3650,7 @@ void SyncInitPlrPos(int pnum)
if (pnum == MyPlayerId) { if (pnum == MyPlayerId) {
player.position.future = position; player.position.future = position;
ViewX = position.x; ViewPosition = position;
ViewY = position.y;
} }
} }

10
Source/portal.cpp

@ -162,15 +162,13 @@ void GetPortalLevel()
void GetPortalLvlPos() void GetPortalLvlPos()
{ {
if (currlevel == 0) { if (currlevel == 0) {
ViewX = WarpDropX[portalindex] + 1; ViewPosition = Point { WarpDropX[portalindex], WarpDropY[portalindex] } + Displacement { 1, 1 };
ViewY = WarpDropY[portalindex] + 1;
} else { } else {
ViewX = Portals[portalindex].position.x; ViewPosition = Portals[portalindex].position;
ViewY = Portals[portalindex].position.y;
if (portalindex != MyPlayerId) { if (portalindex != MyPlayerId) {
ViewX++; ViewPosition.x++;
ViewY++; ViewPosition.y++;
} }
} }
} }

3
Source/quests.cpp

@ -587,8 +587,7 @@ void GetReturnLvlPos()
{ {
if (Quests[Q_BETRAYER]._qactive == QUEST_DONE) if (Quests[Q_BETRAYER]._qactive == QUEST_DONE)
Quests[Q_BETRAYER]._qvar2 = 2; Quests[Q_BETRAYER]._qvar2 = 2;
ViewX = ReturnLvlX; ViewPosition = { ReturnLvlX, ReturnLvlY };
ViewY = ReturnLvlY;
currlevel = ReturnLevel; currlevel = ReturnLevel;
leveltype = ReturnLevelType; leveltype = ReturnLevelType;
} }

58
Source/scrollrt.cpp

@ -1624,66 +1624,66 @@ void ScrollView()
scroll = false; scroll = false;
if (MousePosition.x < 20) { if (MousePosition.x < 20) {
if (dmaxy - 1 <= ViewY || dminx >= ViewX) { if (dmaxy - 1 <= ViewPosition.y || dminx >= ViewPosition.x) {
if (dmaxy - 1 > ViewY) { if (dmaxy - 1 > ViewPosition.y) {
ViewY++; ViewPosition.y++;
scroll = true; scroll = true;
} }
if (dminx < ViewX) { if (dminx < ViewPosition.x) {
ViewX--; ViewPosition.x--;
scroll = true; scroll = true;
} }
} else { } else {
ViewY++; ViewPosition.y++;
ViewX--; ViewPosition.x--;
scroll = true; scroll = true;
} }
} }
if (MousePosition.x > gnScreenWidth - 20) { if (MousePosition.x > gnScreenWidth - 20) {
if (dmaxx - 1 <= ViewX || dminy >= ViewY) { if (dmaxx - 1 <= ViewPosition.x || dminy >= ViewPosition.y) {
if (dmaxx - 1 > ViewX) { if (dmaxx - 1 > ViewPosition.x) {
ViewX++; ViewPosition.x++;
scroll = true; scroll = true;
} }
if (dminy < ViewY) { if (dminy < ViewPosition.y) {
ViewY--; ViewPosition.y--;
scroll = true; scroll = true;
} }
} else { } else {
ViewY--; ViewPosition.y--;
ViewX++; ViewPosition.x++;
scroll = true; scroll = true;
} }
} }
if (MousePosition.y < 20) { if (MousePosition.y < 20) {
if (dminy >= ViewY || dminx >= ViewX) { if (dminy >= ViewPosition.y || dminx >= ViewPosition.x) {
if (dminy < ViewY) { if (dminy < ViewPosition.y) {
ViewY--; ViewPosition.y--;
scroll = true; scroll = true;
} }
if (dminx < ViewX) { if (dminx < ViewPosition.x) {
ViewX--; ViewPosition.x--;
scroll = true; scroll = true;
} }
} else { } else {
ViewX--; ViewPosition.x--;
ViewY--; ViewPosition.y--;
scroll = true; scroll = true;
} }
} }
if (MousePosition.y > gnScreenHeight - 20) { if (MousePosition.y > gnScreenHeight - 20) {
if (dmaxy - 1 <= ViewY || dmaxx - 1 <= ViewX) { if (dmaxy - 1 <= ViewPosition.y || dmaxx - 1 <= ViewPosition.x) {
if (dmaxy - 1 > ViewY) { if (dmaxy - 1 > ViewPosition.y) {
ViewY++; ViewPosition.y++;
scroll = true; scroll = true;
} }
if (dmaxx - 1 > ViewX) { if (dmaxx - 1 > ViewPosition.x) {
ViewX++; ViewPosition.x++;
scroll = true; scroll = true;
} }
} else { } else {
ViewX++; ViewPosition.x++;
ViewY++; ViewPosition.y++;
scroll = true; scroll = true;
} }
} }
@ -1768,7 +1768,7 @@ void DrawAndBlit()
nthread_UpdateProgressToNextGameTick(); nthread_UpdateProgressToNextGameTick();
DrawView(out, ViewX, ViewY); DrawView(out, ViewPosition.x, ViewPosition.y);
if (ctrlPan) { if (ctrlPan) {
DrawCtrlPan(out); DrawCtrlPan(out);
} }

3
Source/spells.cpp

@ -101,8 +101,7 @@ void PlacePlayer(int pnum)
dPlayer[newPosition.x][newPosition.y] = pnum + 1; dPlayer[newPosition.x][newPosition.y] = pnum + 1;
if (pnum == MyPlayerId) { if (pnum == MyPlayerId) {
ViewX = newPosition.x; ViewPosition = newPosition;
ViewY = newPosition.y;
} }
} }
} }

21
Source/town.cpp

@ -276,31 +276,24 @@ void CreateTown(lvl_entry entry)
DRLG_Init_Globals(); DRLG_Init_Globals();
if (entry == ENTRY_MAIN) { // New game if (entry == ENTRY_MAIN) { // New game
ViewX = 75; ViewPosition = { 75, 68 };
ViewY = 68;
} else if (entry == ENTRY_PREV) { // Cathedral } else if (entry == ENTRY_PREV) { // Cathedral
ViewX = 25; ViewPosition = { 25, 31 };
ViewY = 31;
} else if (entry == ENTRY_TWARPUP) { } else if (entry == ENTRY_TWARPUP) {
if (TWarpFrom == 5) { if (TWarpFrom == 5) {
ViewX = 49; ViewPosition = { 49, 22 };
ViewY = 22;
} }
if (TWarpFrom == 9) { if (TWarpFrom == 9) {
ViewX = 18; ViewPosition = { 18, 69 };
ViewY = 69;
} }
if (TWarpFrom == 13) { if (TWarpFrom == 13) {
ViewX = 41; ViewPosition = { 41, 81 };
ViewY = 81;
} }
if (TWarpFrom == 21) { if (TWarpFrom == 21) {
ViewX = 36; ViewPosition = { 36, 25 };
ViewY = 25;
} }
if (TWarpFrom == 17) { if (TWarpFrom == 17) {
ViewX = 79; ViewPosition = { 79, 62 };
ViewY = 62;
} }
} }

Loading…
Cancel
Save