|
|
|
|
@ -404,52 +404,52 @@ void CheckCursMove()
|
|
|
|
|
if (leveltype != DTYPE_TOWN) { |
|
|
|
|
if (pcurstemp != -1) { |
|
|
|
|
if (!flipflag && mx + 2 < MAXDUNX && my + 1 < MAXDUNY && dMonster[mx + 2][my + 1] != 0 && IsTileLit({ mx + 2, my + 1 })) { |
|
|
|
|
int mi = abs(dMonster[mx + 2][my + 1]) - 1; |
|
|
|
|
if (mi == pcurstemp && Monsters[mi].hitPoints >> 6 > 0 && (Monsters[mi].data().selectionType & 4) != 0) { |
|
|
|
|
const uint16_t monsterId = abs(dMonster[mx + 2][my + 1]) - 1; |
|
|
|
|
if (monsterId == pcurstemp && Monsters[monsterId].hitPoints >> 6 > 0 && (Monsters[monsterId].data().selectionType & 4) != 0) { |
|
|
|
|
cursPosition = Point { mx, my } + Displacement { 2, 1 }; |
|
|
|
|
pcursmonst = mi; |
|
|
|
|
pcursmonst = monsterId; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (flipflag && mx + 1 < MAXDUNX && my + 2 < MAXDUNY && dMonster[mx + 1][my + 2] != 0 && IsTileLit({ mx + 1, my + 2 })) { |
|
|
|
|
int mi = abs(dMonster[mx + 1][my + 2]) - 1; |
|
|
|
|
if (mi == pcurstemp && Monsters[mi].hitPoints >> 6 > 0 && (Monsters[mi].data().selectionType & 4) != 0) { |
|
|
|
|
const uint16_t monsterId = abs(dMonster[mx + 1][my + 2]) - 1; |
|
|
|
|
if (monsterId == pcurstemp && Monsters[monsterId].hitPoints >> 6 > 0 && (Monsters[monsterId].data().selectionType & 4) != 0) { |
|
|
|
|
cursPosition = Point { mx, my } + Displacement { 1, 2 }; |
|
|
|
|
pcursmonst = mi; |
|
|
|
|
pcursmonst = monsterId; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (mx + 2 < MAXDUNX && my + 2 < MAXDUNY && dMonster[mx + 2][my + 2] != 0 && IsTileLit({ mx + 2, my + 2 })) { |
|
|
|
|
int mi = abs(dMonster[mx + 2][my + 2]) - 1; |
|
|
|
|
if (mi == pcurstemp && Monsters[mi].hitPoints >> 6 > 0 && (Monsters[mi].data().selectionType & 4) != 0) { |
|
|
|
|
const uint16_t monsterId = abs(dMonster[mx + 2][my + 2]) - 1; |
|
|
|
|
if (monsterId == pcurstemp && Monsters[monsterId].hitPoints >> 6 > 0 && (Monsters[monsterId].data().selectionType & 4) != 0) { |
|
|
|
|
cursPosition = Point { mx, my } + Displacement { 2, 2 }; |
|
|
|
|
pcursmonst = mi; |
|
|
|
|
pcursmonst = monsterId; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (mx + 1 < MAXDUNX && !flipflag && dMonster[mx + 1][my] != 0 && IsTileLit({ mx + 1, my })) { |
|
|
|
|
int mi = abs(dMonster[mx + 1][my]) - 1; |
|
|
|
|
if (mi == pcurstemp && Monsters[mi].hitPoints >> 6 > 0 && (Monsters[mi].data().selectionType & 2) != 0) { |
|
|
|
|
const uint16_t monsterId = abs(dMonster[mx + 1][my]) - 1; |
|
|
|
|
if (monsterId == pcurstemp && Monsters[monsterId].hitPoints >> 6 > 0 && (Monsters[monsterId].data().selectionType & 2) != 0) { |
|
|
|
|
cursPosition = Point { mx, my } + Displacement { 1, 0 }; |
|
|
|
|
pcursmonst = mi; |
|
|
|
|
pcursmonst = monsterId; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (my + 1 < MAXDUNY && flipflag && dMonster[mx][my + 1] != 0 && IsTileLit({ mx, my + 1 })) { |
|
|
|
|
int mi = abs(dMonster[mx][my + 1]) - 1; |
|
|
|
|
if (mi == pcurstemp && Monsters[mi].hitPoints >> 6 > 0 && (Monsters[mi].data().selectionType & 2) != 0) { |
|
|
|
|
const uint16_t monsterId = abs(dMonster[mx][my + 1]) - 1; |
|
|
|
|
if (monsterId == pcurstemp && Monsters[monsterId].hitPoints >> 6 > 0 && (Monsters[monsterId].data().selectionType & 2) != 0) { |
|
|
|
|
cursPosition = Point { mx, my } + Displacement { 0, 1 }; |
|
|
|
|
pcursmonst = mi; |
|
|
|
|
pcursmonst = monsterId; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (dMonster[mx][my] != 0 && IsTileLit({ mx, my })) { |
|
|
|
|
int mi = abs(dMonster[mx][my]) - 1; |
|
|
|
|
if (mi == pcurstemp && Monsters[mi].hitPoints >> 6 > 0 && (Monsters[mi].data().selectionType & 1) != 0) { |
|
|
|
|
const uint16_t monsterId = abs(dMonster[mx][my]) - 1; |
|
|
|
|
if (monsterId == pcurstemp && Monsters[monsterId].hitPoints >> 6 > 0 && (Monsters[monsterId].data().selectionType & 1) != 0) { |
|
|
|
|
cursPosition = { mx, my }; |
|
|
|
|
pcursmonst = mi; |
|
|
|
|
pcursmonst = monsterId; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (mx + 1 < MAXDUNX && my + 1 < MAXDUNY && dMonster[mx + 1][my + 1] != 0 && IsTileLit({ mx + 1, my + 1 })) { |
|
|
|
|
int mi = abs(dMonster[mx + 1][my + 1]) - 1; |
|
|
|
|
if (mi == pcurstemp && Monsters[mi].hitPoints >> 6 > 0 && (Monsters[mi].data().selectionType & 2) != 0) { |
|
|
|
|
const uint16_t monsterId = abs(dMonster[mx + 1][my + 1]) - 1; |
|
|
|
|
if (monsterId == pcurstemp && Monsters[monsterId].hitPoints >> 6 > 0 && (Monsters[monsterId].data().selectionType & 2) != 0) { |
|
|
|
|
cursPosition = Point { mx, my } + Displacement { 1, 1 }; |
|
|
|
|
pcursmonst = mi; |
|
|
|
|
pcursmonst = monsterId; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (pcursmonst != -1 && (Monsters[pcursmonst].flags & MFLAG_HIDDEN) != 0) { |
|
|
|
|
@ -464,52 +464,52 @@ void CheckCursMove()
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (!flipflag && mx + 2 < MAXDUNX && my + 1 < MAXDUNY && dMonster[mx + 2][my + 1] != 0 && IsTileLit({ mx + 2, my + 1 })) { |
|
|
|
|
int mi = abs(dMonster[mx + 2][my + 1]) - 1; |
|
|
|
|
if (Monsters[mi].hitPoints >> 6 > 0 && (Monsters[mi].data().selectionType & 4) != 0) { |
|
|
|
|
int monsterId = abs(dMonster[mx + 2][my + 1]) - 1; |
|
|
|
|
if (Monsters[monsterId].hitPoints >> 6 > 0 && (Monsters[monsterId].data().selectionType & 4) != 0) { |
|
|
|
|
cursPosition = Point { mx, my } + Displacement { 2, 1 }; |
|
|
|
|
pcursmonst = mi; |
|
|
|
|
pcursmonst = monsterId; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (flipflag && mx + 1 < MAXDUNX && my + 2 < MAXDUNY && dMonster[mx + 1][my + 2] != 0 && IsTileLit({ mx + 1, my + 2 })) { |
|
|
|
|
int mi = abs(dMonster[mx + 1][my + 2]) - 1; |
|
|
|
|
if (Monsters[mi].hitPoints >> 6 > 0 && (Monsters[mi].data().selectionType & 4) != 0) { |
|
|
|
|
const uint16_t monsterId = abs(dMonster[mx + 1][my + 2]) - 1; |
|
|
|
|
if (Monsters[monsterId].hitPoints >> 6 > 0 && (Monsters[monsterId].data().selectionType & 4) != 0) { |
|
|
|
|
cursPosition = Point { mx, my } + Displacement { 1, 2 }; |
|
|
|
|
pcursmonst = mi; |
|
|
|
|
pcursmonst = monsterId; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (mx + 2 < MAXDUNX && my + 2 < MAXDUNY && dMonster[mx + 2][my + 2] != 0 && IsTileLit({ mx + 2, my + 2 })) { |
|
|
|
|
int mi = abs(dMonster[mx + 2][my + 2]) - 1; |
|
|
|
|
if (Monsters[mi].hitPoints >> 6 > 0 && (Monsters[mi].data().selectionType & 4) != 0) { |
|
|
|
|
const uint16_t monsterId = abs(dMonster[mx + 2][my + 2]) - 1; |
|
|
|
|
if (Monsters[monsterId].hitPoints >> 6 > 0 && (Monsters[monsterId].data().selectionType & 4) != 0) { |
|
|
|
|
cursPosition = Point { mx, my } + Displacement { 2, 2 }; |
|
|
|
|
pcursmonst = mi; |
|
|
|
|
pcursmonst = monsterId; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (!flipflag && mx + 1 < MAXDUNX && dMonster[mx + 1][my] != 0 && IsTileLit({ mx + 1, my })) { |
|
|
|
|
int mi = abs(dMonster[mx + 1][my]) - 1; |
|
|
|
|
if (Monsters[mi].hitPoints >> 6 > 0 && (Monsters[mi].data().selectionType & 2) != 0) { |
|
|
|
|
const uint16_t monsterId = abs(dMonster[mx + 1][my]) - 1; |
|
|
|
|
if (Monsters[monsterId].hitPoints >> 6 > 0 && (Monsters[monsterId].data().selectionType & 2) != 0) { |
|
|
|
|
cursPosition = Point { mx, my } + Displacement { 1, 0 }; |
|
|
|
|
pcursmonst = mi; |
|
|
|
|
pcursmonst = monsterId; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (flipflag && my + 1 < MAXDUNY && dMonster[mx][my + 1] != 0 && IsTileLit({ mx, my + 1 })) { |
|
|
|
|
int mi = abs(dMonster[mx][my + 1]) - 1; |
|
|
|
|
if (Monsters[mi].hitPoints >> 6 > 0 && (Monsters[mi].data().selectionType & 2) != 0) { |
|
|
|
|
const uint16_t monsterId = abs(dMonster[mx][my + 1]) - 1; |
|
|
|
|
if (Monsters[monsterId].hitPoints >> 6 > 0 && (Monsters[monsterId].data().selectionType & 2) != 0) { |
|
|
|
|
cursPosition = Point { mx, my } + Displacement { 0, 1 }; |
|
|
|
|
pcursmonst = mi; |
|
|
|
|
pcursmonst = monsterId; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (dMonster[mx][my] != 0 && IsTileLit({ mx, my })) { |
|
|
|
|
int mi = abs(dMonster[mx][my]) - 1; |
|
|
|
|
if (Monsters[mi].hitPoints >> 6 > 0 && (Monsters[mi].data().selectionType & 1) != 0) { |
|
|
|
|
const uint16_t monsterId = abs(dMonster[mx][my]) - 1; |
|
|
|
|
if (Monsters[monsterId].hitPoints >> 6 > 0 && (Monsters[monsterId].data().selectionType & 1) != 0) { |
|
|
|
|
cursPosition = { mx, my }; |
|
|
|
|
pcursmonst = mi; |
|
|
|
|
pcursmonst = monsterId; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (mx + 1 < MAXDUNX && my + 1 < MAXDUNY && dMonster[mx + 1][my + 1] != 0 && IsTileLit({ mx + 1, my + 1 })) { |
|
|
|
|
int mi = abs(dMonster[mx + 1][my + 1]) - 1; |
|
|
|
|
if (Monsters[mi].hitPoints >> 6 > 0 && (Monsters[mi].data().selectionType & 2) != 0) { |
|
|
|
|
const uint16_t monsterId = abs(dMonster[mx + 1][my + 1]) - 1; |
|
|
|
|
if (Monsters[monsterId].hitPoints >> 6 > 0 && (Monsters[monsterId].data().selectionType & 2) != 0) { |
|
|
|
|
cursPosition = Point { mx, my } + Displacement { 1, 1 }; |
|
|
|
|
pcursmonst = mi; |
|
|
|
|
pcursmonst = monsterId; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (pcursmonst != -1 && (Monsters[pcursmonst].flags & MFLAG_HIDDEN) != 0) { |
|
|
|
|
@ -540,34 +540,34 @@ void CheckCursMove()
|
|
|
|
|
|
|
|
|
|
if (pcursmonst == -1) { |
|
|
|
|
if (!flipflag && mx + 1 < MAXDUNX && dPlayer[mx + 1][my] != 0) { |
|
|
|
|
int8_t bv = abs(dPlayer[mx + 1][my]) - 1; |
|
|
|
|
Player &player = Players[bv]; |
|
|
|
|
const uint8_t playerId = abs(dPlayer[mx + 1][my]) - 1; |
|
|
|
|
Player &player = Players[playerId]; |
|
|
|
|
if (&player != MyPlayer && player._pHitPoints != 0) { |
|
|
|
|
cursPosition = Point { mx, my } + Displacement { 1, 0 }; |
|
|
|
|
pcursplr = bv; |
|
|
|
|
pcursplr = static_cast<int8_t>(playerId); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (flipflag && my + 1 < MAXDUNY && dPlayer[mx][my + 1] != 0) { |
|
|
|
|
int8_t bv = abs(dPlayer[mx][my + 1]) - 1; |
|
|
|
|
Player &player = Players[bv]; |
|
|
|
|
const uint8_t playerId = abs(dPlayer[mx][my + 1]) - 1; |
|
|
|
|
Player &player = Players[playerId]; |
|
|
|
|
if (&player != MyPlayer && player._pHitPoints != 0) { |
|
|
|
|
cursPosition = Point { mx, my } + Displacement { 0, 1 }; |
|
|
|
|
pcursplr = bv; |
|
|
|
|
pcursplr = static_cast<int8_t>(playerId); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (dPlayer[mx][my] != 0) { |
|
|
|
|
int8_t bv = abs(dPlayer[mx][my]) - 1; |
|
|
|
|
if (bv != MyPlayerId) { |
|
|
|
|
const uint8_t playerId = abs(dPlayer[mx][my]) - 1; |
|
|
|
|
if (playerId != MyPlayerId) { |
|
|
|
|
cursPosition = { mx, my }; |
|
|
|
|
pcursplr = bv; |
|
|
|
|
pcursplr = static_cast<int8_t>(playerId); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (TileContainsDeadPlayer({ mx, my })) { |
|
|
|
|
for (int i = 0; i < MAX_PLRS; i++) { |
|
|
|
|
const Player &player = Players[i]; |
|
|
|
|
for (size_t playerId = 0; playerId < Players.size(); ++playerId) { |
|
|
|
|
const Player &player = Players[playerId]; |
|
|
|
|
if (player.position.tile == Point { mx, my } && &player != MyPlayer) { |
|
|
|
|
cursPosition = { mx, my }; |
|
|
|
|
pcursplr = i; |
|
|
|
|
pcursplr = static_cast<int8_t>(playerId); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
@ -575,11 +575,11 @@ void CheckCursMove()
|
|
|
|
|
for (int xx = -1; xx < 2; xx++) { |
|
|
|
|
for (int yy = -1; yy < 2; yy++) { |
|
|
|
|
if (TileContainsDeadPlayer({ mx + xx, my + yy })) { |
|
|
|
|
for (int i = 0; i < MAX_PLRS; i++) { |
|
|
|
|
const Player &player = Players[i]; |
|
|
|
|
for (size_t playerId = 0; playerId < Players.size(); ++playerId) { |
|
|
|
|
const Player &player = Players[playerId]; |
|
|
|
|
if (player.position.tile.x == mx + xx && player.position.tile.y == my + yy && &player != MyPlayer) { |
|
|
|
|
cursPosition = Point { mx, my } + Displacement { xx, yy }; |
|
|
|
|
pcursplr = i; |
|
|
|
|
pcursplr = static_cast<int8_t>(playerId); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
@ -587,11 +587,11 @@ void CheckCursMove()
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (mx + 1 < MAXDUNX && my + 1 < MAXDUNY && dPlayer[mx + 1][my + 1] != 0) { |
|
|
|
|
int8_t bv = abs(dPlayer[mx + 1][my + 1]) - 1; |
|
|
|
|
const Player &player = Players[bv]; |
|
|
|
|
const uint8_t playerId = abs(dPlayer[mx + 1][my + 1]) - 1; |
|
|
|
|
const Player &player = Players[playerId]; |
|
|
|
|
if (&player != MyPlayer && player._pHitPoints != 0) { |
|
|
|
|
cursPosition = Point { mx, my } + Displacement { 1, 1 }; |
|
|
|
|
pcursplr = bv; |
|
|
|
|
pcursplr = static_cast<int8_t>(playerId); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
@ -621,36 +621,36 @@ void CheckCursMove()
|
|
|
|
|
if (object != nullptr) { |
|
|
|
|
// found object that can be activated with the given cursor position
|
|
|
|
|
cursPosition = testPosition; |
|
|
|
|
pcursobj = object->GetId(); |
|
|
|
|
pcursobj = static_cast<int8_t>(object->GetId()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (pcursplr == -1 && pcursobj == -1 && pcursmonst == -1) { |
|
|
|
|
if (!flipflag && mx + 1 < MAXDUNX && dItem[mx + 1][my] > 0) { |
|
|
|
|
int8_t bv = dItem[mx + 1][my] - 1; |
|
|
|
|
if (Items[bv]._iSelFlag >= 2) { |
|
|
|
|
const uint8_t itemId = dItem[mx + 1][my] - 1; |
|
|
|
|
if (Items[itemId]._iSelFlag >= 2) { |
|
|
|
|
cursPosition = Point { mx, my } + Displacement { 1, 0 }; |
|
|
|
|
pcursitem = bv; |
|
|
|
|
pcursitem = static_cast<int8_t>(itemId); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (flipflag && my + 1 < MAXDUNY && dItem[mx][my + 1] > 0) { |
|
|
|
|
int8_t bv = dItem[mx][my + 1] - 1; |
|
|
|
|
if (Items[bv]._iSelFlag >= 2) { |
|
|
|
|
const uint8_t itemId = dItem[mx][my + 1] - 1; |
|
|
|
|
if (Items[itemId]._iSelFlag >= 2) { |
|
|
|
|
cursPosition = Point { mx, my } + Displacement { 0, 1 }; |
|
|
|
|
pcursitem = bv; |
|
|
|
|
pcursitem = static_cast<int8_t>(itemId); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (dItem[mx][my] > 0) { |
|
|
|
|
int8_t bv = dItem[mx][my] - 1; |
|
|
|
|
if (Items[bv]._iSelFlag == 1 || Items[bv]._iSelFlag == 3) { |
|
|
|
|
const uint8_t itemId = dItem[mx][my] - 1; |
|
|
|
|
if (Items[itemId]._iSelFlag == 1 || Items[itemId]._iSelFlag == 3) { |
|
|
|
|
cursPosition = { mx, my }; |
|
|
|
|
pcursitem = bv; |
|
|
|
|
pcursitem = static_cast<int8_t>(itemId); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (mx + 1 < MAXDUNX && my + 1 < MAXDUNY && dItem[mx + 1][my + 1] > 0) { |
|
|
|
|
int8_t bv = dItem[mx + 1][my + 1] - 1; |
|
|
|
|
if (Items[bv]._iSelFlag >= 2) { |
|
|
|
|
const uint8_t itemId = dItem[mx + 1][my + 1] - 1; |
|
|
|
|
if (Items[itemId]._iSelFlag >= 2) { |
|
|
|
|
cursPosition = Point { mx, my } + Displacement { 1, 1 }; |
|
|
|
|
pcursitem = bv; |
|
|
|
|
pcursitem = static_cast<int8_t>(itemId); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (pcursitem == -1) { |
|
|
|
|
|