Browse Source

[controller] Correct movment range

Previously the player could wald across lava bends and sneak past
blocked paths
pull/505/head
Anders Jenbo 6 years ago
parent
commit
f5e8ae47c0
  1. 31
      SourceX/controls/plrctrls.cpp

31
SourceX/controls/plrctrls.cpp

@ -647,7 +647,16 @@ static const direction kFaceDir[3][3] = {
{ DIR_W, DIR_NW, DIR_SW }, // LEFT
{ DIR_E, DIR_NE, DIR_SE }, // RIGHT
};
static const int kOffsets[8][2] = {
{ 1, 1 }, // DIR_S
{ 0, 1 }, // DIR_SW
{ -1, 1 }, // DIR_W
{ -1, 0 }, // DIR_NW
{ -1, -1 }, // DIR_N
{ 0, -1 }, // DIR_NE
{ 1, -1 }, // DIR_E
{ 1, 0 }, // DIR_SE
};
void WalkInDir(MoveDirection dir)
{
if (dir.x == MoveDirectionX::NONE && dir.y == MoveDirectionY::NONE) {
@ -657,9 +666,15 @@ void WalkInDir(MoveDirection dir)
}
ClrPlrPath(myplr);
plr[myplr].walkpath[0] = kMoveToWalkDir[static_cast<std::size_t>(dir.x)][static_cast<std::size_t>(dir.y)];
PATHNODE pPath = { 0 };
pPath.x = plr[myplr]._px;
pPath.y = plr[myplr]._py;
int pdir = kFaceDir[static_cast<std::size_t>(dir.x)][static_cast<std::size_t>(dir.y)];
if (path_solid_pieces(&pPath, pPath.x + kOffsets[pdir][0], pPath.y + kOffsets[pdir][1])) {
plr[myplr].walkpath[0] = kMoveToWalkDir[static_cast<std::size_t>(dir.x)][static_cast<std::size_t>(dir.y)];
}
plr[myplr].destAction = ACTION_NONE; // stop attacking, etc.
plr[myplr]._pdir = kFaceDir[static_cast<std::size_t>(dir.x)][static_cast<std::size_t>(dir.y)];
plr[myplr]._pdir = pdir;
}
void Movement()
@ -841,16 +856,6 @@ void UpdateSpellTarget()
pcursplr = -1;
pcursmonst = -1;
static const int kOffsets[8][2] = {
{ 1, 1 }, // DIR_S
{ 0, 1 }, // DIR_SW
{ -1, 1 }, // DIR_W
{ -1, 0 }, // DIR_NW
{ -1, -1 }, // DIR_N
{ 0, -1 }, // DIR_NE
{ 1, -1 }, // DIR_E
{ 1, 0 }, // DIR_SE
};
const auto &player = plr[myplr];
cursmx = player._px + kOffsets[player._pdir][0];
cursmy = player._py + kOffsets[player._pdir][1];

Loading…
Cancel
Save