From f5e8ae47c0587a8a64debf48d21986176337ae6e Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Thu, 5 Dec 2019 00:29:48 +0100 Subject: [PATCH] [controller] Correct movment range Previously the player could wald across lava bends and sneak past blocked paths --- SourceX/controls/plrctrls.cpp | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/SourceX/controls/plrctrls.cpp b/SourceX/controls/plrctrls.cpp index 71ee1f0bc..53251492c 100644 --- a/SourceX/controls/plrctrls.cpp +++ b/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(dir.x)][static_cast(dir.y)]; + PATHNODE pPath = { 0 }; + pPath.x = plr[myplr]._px; + pPath.y = plr[myplr]._py; + int pdir = kFaceDir[static_cast(dir.x)][static_cast(dir.y)]; + if (path_solid_pieces(&pPath, pPath.x + kOffsets[pdir][0], pPath.y + kOffsets[pdir][1])) { + plr[myplr].walkpath[0] = kMoveToWalkDir[static_cast(dir.x)][static_cast(dir.y)]; + } plr[myplr].destAction = ACTION_NONE; // stop attacking, etc. - plr[myplr]._pdir = kFaceDir[static_cast(dir.x)][static_cast(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];