From e848bf77df5b3639d859019e688d5cbbc873c94b Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 6 Sep 2021 15:20:22 +0200 Subject: [PATCH] :bug: Fix teleport not working in all locations - Player cannot TP to current location - Cannot teleport to any object location (including doors) - Can teleport to void locations - Cannot teleport to dead monsters --- Source/missiles.cpp | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/Source/missiles.cpp b/Source/missiles.cpp index 175416fcd..cd69b423e 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -1898,29 +1898,23 @@ void AddMagmaball(Missile &missile, Point dst, Direction /*midir*/) void AddTeleport(Missile &missile, Point dst, Direction /*midir*/) { - missile._miDelFlag = true; - for (int i = 0; i < 6; i++) { int k = CrawlNum[i]; int ck = k + 2; for (auto j = static_cast(CrawlTable[k]); j > 0; j--, ck += 2) { Point target = dst + Displacement { CrawlTable[ck - 1], CrawlTable[ck] }; - if (!InDungeonBounds(target) || IsTileSolid(target)) + if (!PosOkPlayer(Players[missile._misource], target)) continue; - if (dMonster[target.x][target.y] == 0 && dObject[target.x][target.y] == 0 && dPlayer[target.x][target.y] == 0) { - missile.position.tile = target; - missile.position.start = target; - missile._miDelFlag = false; - i = 6; - break; - } + + missile.position.tile = target; + missile.position.start = target; + UseMana(missile._misource, SPL_TELEPORT); + missile._mirange = 2; + return; } } - if (!missile._miDelFlag) { - UseMana(missile._misource, SPL_TELEPORT); - missile._mirange = 2; - } + missile._miDelFlag = true; } void AddLightball(Missile &missile, Point dst, Direction /*midir*/)