From dd9e05222dcb5770f9a6a141356e6c0254232261 Mon Sep 17 00:00:00 2001 From: Juliano Leal Goncalves Date: Sun, 23 May 2021 23:27:53 -0300 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Change=20'PosOkPlayer'=20t?= =?UTF-8?q?o=20take=20a=20'Point'=20instead=20of=202=20separate=20ints?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source/controls/plrctrls.cpp | 6 ++-- Source/missiles.cpp | 12 +++---- Source/monster.cpp | 64 ++++++++++++++++++------------------ Source/monster.h | 10 +++--- Source/path.cpp | 6 ++-- Source/path.h | 4 +-- Source/player.cpp | 60 ++++++++++++++++----------------- Source/player.h | 2 +- Source/spells.cpp | 25 +++++++------- 9 files changed, 94 insertions(+), 95 deletions(-) diff --git a/Source/controls/plrctrls.cpp b/Source/controls/plrctrls.cpp index 64d173108..e7444c39c 100644 --- a/Source/controls/plrctrls.cpp +++ b/Source/controls/plrctrls.cpp @@ -275,7 +275,7 @@ void FindMeleeTarget() continue; } - if (!PosOkPlayer(myplr, dx, dy)) { + if (!PosOkPlayer(myplr, { dx, dy })) { visited[dx][dy] = true; if (dMonster[dx][dy] != 0) { @@ -1082,7 +1082,7 @@ bool IsPathBlocked(int x, int y, int dir) if (!nSolidTable[dPiece[d1x][d1y]] && !nSolidTable[dPiece[d2x][d2y]]) return false; - return !PosOkPlayer(myplr, d1x, d1y) && !PosOkPlayer(myplr, d2x, d2y); + return !PosOkPlayer(myplr, { d1x, d1y }) && !PosOkPlayer(myplr, { d2x, d2y }); } bool CanChangeDirection(const PlayerStruct &player) @@ -1118,7 +1118,7 @@ void WalkInDir(int playerId, AxisDirection dir) if (CanChangeDirection(player)) player._pdir = pdir; - if (PosOkPlayer(playerId, dx, dy) && IsPathBlocked(x, y, pdir)) + if (PosOkPlayer(playerId, { dx, dy }) && IsPathBlocked(x, y, pdir)) return; // Don't start backtrack around obstacles NetSendCmdLoc(playerId, true, CMD_WALKXY, { dx, dy }); diff --git a/Source/missiles.cpp b/Source/missiles.cpp index dc1ccf13c..e2468c1cb 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -470,7 +470,7 @@ void MoveMissilePos(int i) } x = missile[i].position.tile.x + dx; y = missile[i].position.tile.y + dy; - if (PosOkMonst(missile[i]._misource, x, y)) { + if (PosOkMonst(missile[i]._misource, { x, y })) { missile[i].position.tile.x += dx; missile[i].position.tile.y += dy; missile[i].position.offset.x += (dy * 32) - (dx * 32); @@ -1992,7 +1992,7 @@ void GetVileMissPos(int mi, int dx, int dy) yy = j + dy; for (i = -k; i <= k; i++) { xx = i + dx; - if (PosOkPlayer(myplr, xx, yy)) { + if (PosOkPlayer(myplr, { xx, yy })) { missile[mi].position.tile = { xx, yy }; return; } @@ -2039,7 +2039,7 @@ void AddRndTeleport(int mi, int sx, int sy, int dx, int dy, int midir, int8_t mi // BUGFIX: should only run magic circle check if dObject[dx][dy] is non-zero. if (object[pn]._otype == OBJ_MCIRCLE1 || object[pn]._otype == OBJ_MCIRCLE2) { missile[mi].position.tile = { dx, dy }; - if (!PosOkPlayer(myplr, dx, dy)) + if (!PosOkPlayer(myplr, { dx, dy })) GetVileMissPos(mi, dx, dy); } } @@ -4620,7 +4620,7 @@ void MI_Rhino(int i) GetMissilePos(i); omx = missile[i].position.tile.x; omy = missile[i].position.tile.y; - if (!PosOkMonst(monst, missile[i].position.tile.x, missile[i].position.tile.y) || (monster[monst]._mAi == AI_SNAKE && !PosOkMonst(monst, mix2, miy2))) { + if (!PosOkMonst(monst, missile[i].position.tile) || (monster[monst]._mAi == AI_SNAKE && !PosOkMonst(monst, { mix2, miy2 }))) { MissToMonst(i, mix, miy); missile[i]._miDelFlag = true; return; @@ -4655,7 +4655,7 @@ void MI_Fireman(int i) cx = monster[enemy].position.tile.x; cy = monster[enemy].position.tile.y; } - if ((bx != ax || by != ay) && ((missile[i]._miVar1 & 1 && (abs(ax - cx) >= 4 || abs(ay - cy) >= 4)) || missile[i]._miVar2 > 1) && PosOkMonst(missile[i]._misource, ax, ay)) { + if ((bx != ax || by != ay) && ((missile[i]._miVar1 & 1 && (abs(ax - cx) >= 4 || abs(ay - cy) >= 4)) || missile[i]._miVar2 > 1) && PosOkMonst(missile[i]._misource, { ax, ay })) { MissToMonst(i, ax, ay); missile[i]._miDelFlag = true; } else if ((monster[src]._mFlags & MFLAG_TARGETS_MONSTER) == 0) { @@ -4663,7 +4663,7 @@ void MI_Fireman(int i) } else { j = dMonster[bx][by]; } - if (!PosOkMissile(0, bx, by) || (j > 0 && !(missile[i]._miVar1 & 1))) { + if (!PosOkMissile(0, { bx, by }) || (j > 0 && !(missile[i]._miVar1 & 1))) { missile[i].position.velocity.x *= -1; missile[i].position.velocity.y *= -1; missile[i]._mimfnum = opposite[missile[i]._mimfnum]; diff --git a/Source/monster.cpp b/Source/monster.cpp index c88700a1b..40506a144 100644 --- a/Source/monster.cpp +++ b/Source/monster.cpp @@ -2190,7 +2190,7 @@ void M_TryH2HHit(int i, int pnum, int Hit, int MinDam, int MaxDam) StartPlrHit(pnum, 0, true); Point newPosition = plr[pnum].position.tile + monster[i]._mdir; - if (PosOkPlayer(pnum, newPosition.x, newPosition.y)) { + if (PosOkPlayer(pnum, newPosition)) { plr[pnum].position.tile = newPosition; FixPlayerLocation(pnum, plr[pnum]._pdir); FixPlrWalkTags(pnum); @@ -2493,7 +2493,7 @@ void M_Teleport(int i) x = _mx + rx * j; y = _my + ry * k; if (y >= 0 && y < MAXDUNY && x >= 0 && x < MAXDUNX && x != Monst->position.tile.x && y != Monst->position.tile.y) { - if (PosOkMonst(i, x, y)) + if (PosOkMonst(i, { x, y })) done = true; } } @@ -2813,7 +2813,7 @@ bool M_CallWalk(int i, Direction md) bool M_PathWalk(int i) { int8_t path[MAX_PATH_LENGTH]; - bool (*Check)(int, int, int); + bool (*Check)(int, Point); /** Maps from walking path step to facing direction. */ const Direction plr2monst[9] = { DIR_S, DIR_NE, DIR_NW, DIR_SE, DIR_SW, DIR_N, DIR_E, DIR_S, DIR_W }; @@ -3975,7 +3975,7 @@ void MAI_SkelKing(int i) && ((dist >= 3 && v < 4 * Monst->_mint + 35) || v < 6) && LineClearMissile(Monst->position.tile.x, Monst->position.tile.y, fx, fy)) { Point newPosition = Monst->position.tile + md; - if (PosOkMonst(i, newPosition.x, newPosition.y) && nummonsters < MAXMONSTERS) { + if (PosOkMonst(i, newPosition) && nummonsters < MAXMONSTERS) { M_SpawnSkel(newPosition.x, newPosition.y, md); M_StartSpStand(i, md); } @@ -4113,7 +4113,7 @@ void MAI_HorkDemon(int i) if (Monst->_mgoal == 1) { if ((abs(mx) >= 3 || abs(my) >= 3) && v < 2 * Monst->_mint + 43) { Point position = Monst->position.tile + Monst->_mdir; - if (PosOkMonst(i, position.x, position.y) && nummonsters < MAXMONSTERS) { + if (PosOkMonst(i, position) && nummonsters < MAXMONSTERS) { M_StartRSpAttack(i, MIS_HORKDMN, 0); } } else if (abs(mx) < 2 && abs(my) < 2) { @@ -4699,7 +4699,7 @@ bool DirOK(int i, Direction mdir) commitment((DWORD)i < MAXMONSTERS, i); Point position = monster[i].position.tile; Point futurePosition = position + mdir; - if (futurePosition.y < 0 || futurePosition.y >= MAXDUNY || futurePosition.x < 0 || futurePosition.x >= MAXDUNX || !PosOkMonst(i, futurePosition.x, futurePosition.y)) + if (futurePosition.y < 0 || futurePosition.y >= MAXDUNY || futurePosition.x < 0 || futurePosition.x >= MAXDUNX || !PosOkMonst(i, futurePosition)) return false; if (mdir == DIR_E) { if (SolidLoc(position + DIR_SE) || dFlags[position.x + 1][position.y] & BFLAG_MONSTLR) @@ -4744,14 +4744,14 @@ bool DirOK(int i, Direction mdir) return mcount == monster[i].packsize; } -bool PosOkMissile(int entity, int x, int y) +bool PosOkMissile(int entity, Point position) { - return !nMissileTable[dPiece[x][y]] && !(dFlags[x][y] & BFLAG_MONSTLR); + return !nMissileTable[dPiece[position.x][position.y]] && !(dFlags[position.x][position.y] & BFLAG_MONSTLR); } -bool CheckNoSolid(int entity, int x, int y) +bool CheckNoSolid(int entity, Point position) { - return !nSolidTable[dPiece[x][y]]; + return !nSolidTable[dPiece[position.x][position.y]]; } bool LineClearSolid(int x1, int y1, int x2, int y2) @@ -4764,7 +4764,7 @@ bool LineClearMissile(int x1, int y1, int x2, int y2) return LineClear(PosOkMissile, 0, x1, y1, x2, y2); } -bool LineClear(bool (*Clear)(int, int, int), int entity, int x1, int y1, int x2, int y2) +bool LineClear(bool (*Clear)(int, Point), int entity, int x1, int y1, int x2, int y2) { int dx, dy; int d; @@ -4807,7 +4807,7 @@ bool LineClear(bool (*Clear)(int, int, int), int entity, int x1, int y1, int x2, y1 += yincD; } x1++; - done = ((x1 != xorg || y1 != yorg) && !Clear(entity, x1, y1)); + done = ((x1 != xorg || y1 != yorg) && !Clear(entity, { x1, y1 })); } } else { if (dy < 0) { @@ -4839,7 +4839,7 @@ bool LineClear(bool (*Clear)(int, int, int), int entity, int x1, int y1, int x2, x1 += xincD; } y1++; - done = ((y1 != yorg || x1 != xorg) && !Clear(entity, x1, y1)); + done = ((y1 != yorg || x1 != xorg) && !Clear(entity, { x1, y1 })); } } return x1 == x2 && y1 == y2; @@ -5109,7 +5109,7 @@ void MissToMonst(int i, int x, int y) if (plr[pnum]._pmode != PM_GOTHIT && plr[pnum]._pmode != PM_DEATH) StartPlrHit(pnum, 0, true); newPosition = oldPosition + Monst->_mdir; - if (PosOkPlayer(pnum, newPosition.x, newPosition.y)) { + if (PosOkPlayer(pnum, newPosition)) { plr[pnum].position.tile = newPosition; FixPlayerLocation(pnum, plr[pnum]._pdir); FixPlrWalkTags(pnum); @@ -5125,7 +5125,7 @@ void MissToMonst(int i, int x, int y) M_TryM2MHit(m, dMonster[oldPosition.x][oldPosition.y] - 1, 500, Monst->mMinDamage2, Monst->mMaxDamage2); if (Monst->MType->mtype < MT_NSNAKE || Monst->MType->mtype > MT_GSNAKE) { newPosition = oldPosition + Monst->_mdir; - if (PosOkMonst(dMonster[oldPosition.x][oldPosition.y] - 1, newPosition.x, newPosition.y)) { + if (PosOkMonst(dMonster[oldPosition.x][oldPosition.y] - 1, newPosition)) { m = dMonster[oldPosition.x][oldPosition.y]; dMonster[newPosition.x][newPosition.y] = m; dMonster[oldPosition.x][oldPosition.y] = 0; @@ -5139,19 +5139,19 @@ void MissToMonst(int i, int x, int y) } } -bool PosOkMonst(int i, int x, int y) +bool PosOkMonst(int i, Point position) { int oi; bool ret; - ret = !SolidLoc({ x, y }) && dPlayer[x][y] == 0 && dMonster[x][y] == 0; - if (ret && dObject[x][y] != 0) { - oi = dObject[x][y] > 0 ? dObject[x][y] - 1 : -(dObject[x][y] + 1); + ret = !SolidLoc(position) && dPlayer[position.x][position.y] == 0 && dMonster[position.x][position.y] == 0; + if (ret && dObject[position.x][position.y] != 0) { + oi = dObject[position.x][position.y] > 0 ? dObject[position.x][position.y] - 1 : -(dObject[position.x][position.y] + 1); if (object[oi]._oSolidFlag) ret = false; } if (ret) - ret = monster_posok(i, x, y); + ret = monster_posok(i, position.x, position.y); return ret; } @@ -5196,24 +5196,24 @@ bool monster_posok(int i, int x, int y) return ret; } -bool PosOkMonst2(int i, int x, int y) +bool PosOkMonst2(int i, Point position) { int oi; bool ret; - ret = !SolidLoc({ x, y }); - if (ret && dObject[x][y] != 0) { - oi = dObject[x][y] > 0 ? dObject[x][y] - 1 : -(dObject[x][y] + 1); + ret = !SolidLoc(position); + if (ret && dObject[position.x][position.y] != 0) { + oi = dObject[position.x][position.y] > 0 ? dObject[position.x][position.y] - 1 : -(dObject[position.x][position.y] + 1); if (object[oi]._oSolidFlag) ret = false; } if (ret) - ret = monster_posok(i, x, y); + ret = monster_posok(i, position.x, position.y); return ret; } -bool PosOkMonst3(int i, int x, int y) +bool PosOkMonst3(int i, Point position) { int oi, objtype; bool ret, isdoor; @@ -5221,8 +5221,8 @@ bool PosOkMonst3(int i, int x, int y) ret = true; isdoor = false; - if (ret && dObject[x][y] != 0) { - oi = dObject[x][y] > 0 ? dObject[x][y] - 1 : -(dObject[x][y] + 1); + if (ret && dObject[position.x][position.y] != 0) { + oi = dObject[position.x][position.y] > 0 ? dObject[position.x][position.y] - 1 : -(dObject[position.x][position.y] + 1); objtype = object[oi]._otype; isdoor = objtype == OBJ_L1LDOOR || objtype == OBJ_L1RDOOR || objtype == OBJ_L2LDOOR || objtype == OBJ_L2RDOOR @@ -5232,10 +5232,10 @@ bool PosOkMonst3(int i, int x, int y) } } if (ret) { - ret = (!SolidLoc({ x, y }) || isdoor) && dPlayer[x][y] == 0 && dMonster[x][y] == 0; + ret = (!SolidLoc(position) || isdoor) && dPlayer[position.x][position.y] == 0 && dMonster[position.x][position.y] == 0; } if (ret) - ret = monster_posok(i, x, y); + ret = monster_posok(i, position.x, position.y); return ret; } @@ -5298,7 +5298,7 @@ bool SpawnSkeleton(int ii, int x, int y) if (ii == -1) return false; - if (PosOkMonst(-1, x, y)) { + if (PosOkMonst(-1, { x, y })) { Direction dir = GetDirection({ x, y }, { x, y }); // TODO useless calculation ActivateSpawn(ii, x, y, dir); return true; @@ -5309,7 +5309,7 @@ bool SpawnSkeleton(int ii, int x, int y) for (j = y - 1; j <= y + 1; j++) { xx = 0; for (k = x - 1; k <= x + 1; k++) { - monstok[xx][yy] = PosOkMonst(-1, k, j); + monstok[xx][yy] = PosOkMonst(-1, { k, j }); savail |= monstok[xx][yy]; xx++; } diff --git a/Source/monster.h b/Source/monster.h index 41712ca88..7e4ff1f7a 100644 --- a/Source/monster.h +++ b/Source/monster.h @@ -274,20 +274,20 @@ void DeleteMonsterList(); void ProcessMonsters(); void FreeMonsters(); bool DirOK(int i, Direction mdir); -bool PosOkMissile(int entity, int x, int y); +bool PosOkMissile(int entity, Point position); bool LineClearSolid(int x1, int y1, int x2, int y2); bool LineClearMissile(int x1, int y1, int x2, int y2); bool LineClear(int x1, int y1, int x2, int y2); -bool LineClear(bool (*Clear)(int, int, int), int entity, int x1, int y1, int x2, int y2); +bool LineClear(bool (*Clear)(int, Point), int entity, int x1, int y1, int x2, int y2); void SyncMonsterAnim(int i); void M_FallenFear(int x, int y); void PrintMonstHistory(int mt); void PrintUniqueHistory(); void MissToMonst(int i, int x, int y); -bool PosOkMonst(int i, int x, int y); +bool PosOkMonst(int i, Point position); bool monster_posok(int i, int x, int y); -bool PosOkMonst2(int i, int x, int y); -bool PosOkMonst3(int i, int x, int y); +bool PosOkMonst2(int i, Point position); +bool PosOkMonst3(int i, Point position); bool IsSkel(int mt); bool IsGoat(int mt); int M_SpawnSkel(int x, int y, Direction dir); diff --git a/Source/path.cpp b/Source/path.cpp index 3fac6b67f..55bae3be2 100644 --- a/Source/path.cpp +++ b/Source/path.cpp @@ -51,7 +51,7 @@ int8_t path_directions[9] = { 5, 1, 6, 2, 0, 3, 8, 4, 7 }; * check that each step is a valid position. Store the step directions (see * path_directions) in path, which must have room for 24 steps */ -int FindPath(bool (*PosOk)(int, int, int), int PosOkArg, int sx, int sy, int dx, int dy, int8_t path[MAX_PATH_LENGTH]) +int FindPath(bool (*PosOk)(int, Point), int PosOkArg, int sx, int sy, int dx, int dy, int8_t path[MAX_PATH_LENGTH]) { PATHNODE *path_start, *next_node, *current; int path_length, i; @@ -178,7 +178,7 @@ bool path_solid_pieces(PATHNODE *pPath, int dx, int dy) * * @return false if we ran out of preallocated nodes to use, else true */ -bool path_get_path(bool (*PosOk)(int, int, int), int PosOkArg, PATHNODE *pPath, int x, int y) +bool path_get_path(bool (*PosOk)(int, Point), int PosOkArg, PATHNODE *pPath, int x, int y) { int dx, dy; int i; @@ -187,7 +187,7 @@ bool path_get_path(bool (*PosOk)(int, int, int), int PosOkArg, PATHNODE *pPath, for (i = 0; i < 8; i++) { dx = pPath->position.x + pathxdir[i]; dy = pPath->position.y + pathydir[i]; - ok = PosOk(PosOkArg, dx, dy); + ok = PosOk(PosOkArg, { dx, dy }); if ((ok && path_solid_pieces(pPath, dx, dy)) || (!ok && dx == x && dy == y)) { if (!path_parent_path(pPath, dx, dy, x, y)) return false; diff --git a/Source/path.h b/Source/path.h index 1479318af..72b7b66e5 100644 --- a/Source/path.h +++ b/Source/path.h @@ -23,11 +23,11 @@ struct PATHNODE { struct PATHNODE *NextNode; }; -int FindPath(bool (*PosOk)(int, int, int), int PosOkArg, int sx, int sy, int dx, int dy, int8_t path[MAX_PATH_LENGTH]); +int FindPath(bool (*PosOk)(int, Point), int PosOkArg, int sx, int sy, int dx, int dy, int8_t path[MAX_PATH_LENGTH]); int path_get_h_cost(int sx, int sy, int dx, int dy); PATHNODE *GetNextPath(); bool path_solid_pieces(PATHNODE *pPath, int dx, int dy); -bool path_get_path(bool (*PosOk)(int, int, int), int PosOkArg, PATHNODE *pPath, int x, int y); +bool path_get_path(bool (*PosOk)(int, Point), int PosOkArg, PATHNODE *pPath, int x, int y); bool path_parent_path(PATHNODE *pPath, int dx, int dy, int sx, int sy); PATHNODE *path_get_node1(int dx, int dy); PATHNODE *path_get_node2(int dx, int dy); diff --git a/Source/player.cpp b/Source/player.cpp index 6002fedce..7f6d3a62e 100644 --- a/Source/player.cpp +++ b/Source/player.cpp @@ -1053,7 +1053,7 @@ void InitPlayer(int pnum, bool FirstTime) player.position.tile = { ViewX, ViewY }; } } else { - for (i = 0; i < 8 && !PosOkPlayer(pnum, plrxoff2[i] + player.position.tile.x, plryoff2[i] + player.position.tile.y); i++) + for (i = 0; i < 8 && !PosOkPlayer(pnum, Point { plrxoff2[i], plryoff2[i] } + player.position.tile); i++) ; player.position.tile.x += plrxoff2[i]; player.position.tile.y += plryoff2[i]; @@ -1140,7 +1140,7 @@ bool PlrDirOK(int pnum, Direction dir) Point position = player.position.tile; Point futurePosition = position + dir; - if (futurePosition.x < 0 || !dPiece[futurePosition.x][futurePosition.y] || !PosOkPlayer(pnum, futurePosition.x, futurePosition.y)) { + if (futurePosition.x < 0 || !dPiece[futurePosition.x][futurePosition.y] || !PosOkPlayer(pnum, futurePosition)) { return false; } @@ -3503,21 +3503,21 @@ void ClrPlrPath(PlayerStruct &player) memset(player.walkpath, WALK_NONE, sizeof(player.walkpath)); } -bool PosOkPlayer(int pnum, int x, int y) +bool PosOkPlayer(int pnum, Point position) { int8_t p, bv; - if (x < 0 || x >= MAXDUNX || y < 0 || y >= MAXDUNY) + if (position.x < 0 || position.x >= MAXDUNX || position.y < 0 || position.y >= MAXDUNY) return false; - if (dPiece[x][y] == 0) + if (dPiece[position.x][position.y] == 0) return false; - if (SolidLoc({ x, y })) + if (SolidLoc(position)) return false; - if (dPlayer[x][y] != 0) { - if (dPlayer[x][y] > 0) { - p = dPlayer[x][y] - 1; + if (dPlayer[position.x][position.y] != 0) { + if (dPlayer[position.x][position.y] > 0) { + p = dPlayer[position.x][position.y] - 1; } else { - p = -(dPlayer[x][y] + 1); + p = -(dPlayer[position.x][position.y] + 1); } if (p != pnum && p >= 0 @@ -3527,23 +3527,23 @@ bool PosOkPlayer(int pnum, int x, int y) } } - if (dMonster[x][y] != 0) { + if (dMonster[position.x][position.y] != 0) { if (currlevel == 0) { return false; } - if (dMonster[x][y] <= 0) { + if (dMonster[position.x][position.y] <= 0) { return false; } - if ((monster[dMonster[x][y] - 1]._mhitpoints >> 6) > 0) { + if ((monster[dMonster[position.x][position.y] - 1]._mhitpoints >> 6) > 0) { return false; } } - if (dObject[x][y] != 0) { - if (dObject[x][y] > 0) { - bv = dObject[x][y] - 1; + if (dObject[position.x][position.y] != 0) { + if (dObject[position.x][position.y] > 0) { + bv = dObject[position.x][position.y] - 1; } else { - bv = -(dObject[x][y] + 1); + bv = -(dObject[position.x][position.y] + 1); } if (object[bv]._oSolidFlag) { return false; @@ -3712,7 +3712,7 @@ void SyncPlrAnim(int pnum) void SyncInitPlrPos(int pnum) { - int x, y, xx, yy, range; + int xx, yy, range; DWORD i; bool posOk; @@ -3722,22 +3722,22 @@ void SyncInitPlrPos(int pnum) return; } + Point position = {}; for (i = 0; i < 8; i++) { - x = player.position.tile.x + plrxoff2[i]; - y = player.position.tile.y + plryoff2[i]; - if (PosOkPlayer(pnum, x, y)) { + position = player.position.tile + Point { plrxoff2[i], plryoff2[i] }; + if (PosOkPlayer(pnum, position)) { break; } } - if (!PosOkPlayer(pnum, x, y)) { + if (!PosOkPlayer(pnum, position)) { posOk = false; for (range = 1; range < 50 && !posOk; range++) { for (yy = -range; yy <= range && !posOk; yy++) { - y = yy + player.position.tile.y; + position.y = yy + player.position.tile.y; for (xx = -range; xx <= range && !posOk; xx++) { - x = xx + player.position.tile.x; - if (PosOkPlayer(pnum, x, y) && !PosOkPortal(currlevel, x, y)) { + position.x = xx + player.position.tile.x; + if (PosOkPlayer(pnum, position) && !PosOkPortal(currlevel, position.x, position.y)) { posOk = true; } } @@ -3745,13 +3745,13 @@ void SyncInitPlrPos(int pnum) } } - player.position.tile = { x, y }; - dPlayer[x][y] = pnum + 1; + player.position.tile = position; + dPlayer[position.x][position.y] = pnum + 1; if (pnum == myplr) { - player.position.future = { x, y }; - ViewX = x; - ViewY = y; + player.position.future = position; + ViewX = position.x; + ViewY = position.y; } } diff --git a/Source/player.h b/Source/player.h index ccbb568dd..4a2b3ed01 100644 --- a/Source/player.h +++ b/Source/player.h @@ -449,7 +449,7 @@ void RestartTownLvl(int pnum); void StartWarpLvl(int pnum, int pidx); void ProcessPlayers(); void ClrPlrPath(PlayerStruct &player); -bool PosOkPlayer(int pnum, int x, int y); +bool PosOkPlayer(int pnum, Point position); void MakePlrPath(int pnum, Point targetPosition, bool endspace); void CheckPlrSpell(); void SyncPlrAnim(int pnum); diff --git a/Source/spells.cpp b/Source/spells.cpp index bbf31d523..95e4a1946 100644 --- a/Source/spells.cpp +++ b/Source/spells.cpp @@ -212,31 +212,30 @@ void CastSpell(int id, int spl, int sx, int sy, int dx, int dy, int spllvl) static void PlacePlayer(int pnum) { - int nx, ny, max, min, x, y; + int max, min, x, y; DWORD i; bool done; + Point newPosition = {}; if (plr[pnum].plrlevel == currlevel) { for (i = 0; i < 8; i++) { - nx = plr[pnum].position.tile.x + plrxoff2[i]; - ny = plr[pnum].position.tile.y + plryoff2[i]; - - if (PosOkPlayer(pnum, nx, ny)) { + newPosition = plr[pnum].position.tile + Point { plrxoff2[i], plryoff2[i] }; + if (PosOkPlayer(pnum, newPosition)) { break; } } - if (!PosOkPlayer(pnum, nx, ny)) { + if (!PosOkPlayer(pnum, newPosition)) { done = false; for (max = 1, min = -1; min > -50 && !done; max++, min--) { for (y = min; y <= max && !done; y++) { - ny = plr[pnum].position.tile.y + y; + newPosition.y = plr[pnum].position.tile.y + y; for (x = min; x <= max && !done; x++) { - nx = plr[pnum].position.tile.x + x; + newPosition.x = plr[pnum].position.tile.x + x; - if (PosOkPlayer(pnum, nx, ny)) { + if (PosOkPlayer(pnum, newPosition)) { done = true; } } @@ -244,13 +243,13 @@ static void PlacePlayer(int pnum) } } - plr[pnum].position.tile = { nx, ny }; + plr[pnum].position.tile = newPosition; - dPlayer[nx][ny] = pnum + 1; + dPlayer[newPosition.x][newPosition.y] = pnum + 1; if (pnum == myplr) { - ViewX = nx; - ViewY = ny; + ViewX = newPosition.x; + ViewY = newPosition.y; } } }