When trying to implement a cover-evaluation-check for my AI I stumbled across an inconsistency in Pathfinding::isBlockedDirection.
For the even directions, north, east, south and west there was only a check on whether the north- and west-wall are blocked. But not for the "Bigwall".
It seemed to not have terribly much impact on anything but my AI's method.
I played several missions of regular UFO with it and then switched to TFTD.
And alas: I realized: I can't climb on the Triton anymore!
Not being able to climb on the Triton was OG behaviour! Adding these extra checks in isBlockedDirection results in the same behaviour.
The lines I added to achieve this are the ones about the O_BIGWALLs in the following code:
case 0: // north
if (isBlocked(unit, startTile, O_NORTHWALL, bam, missileTarget)) return true;
if (isBlocked(unit, _save->getTile(currentPosition + oneTileNorth), O_BIGWALL, bam, missileTarget, BIGWALLSOUTH)) return true;
break;
@ -882,6 +883,7 @@ bool Pathfinding::isBlockedDirection(const BattleUnit *unit, Tile *startTile, co
break;
case 2: // east
if (isBlocked(unit, _save->getTile(currentPosition + oneTileEast), O_WESTWALL, bam, missileTarget)) return true;
if (isBlocked(unit, _save->getTile(currentPosition + oneTileEast), O_BIGWALL, bam, missileTarget, BIGWALLWEST)) return true;
break;
@ -893,6 +895,7 @@ bool Pathfinding::isBlockedDirection(const BattleUnit *unit, Tile *startTile, co
break;
case 4: // south
if (isBlocked(unit, _save->getTile(currentPosition + oneTileSouth), O_NORTHWALL, bam, missileTarget)) return true;
if (isBlocked(unit, _save->getTile(currentPosition + oneTileSouth), O_BIGWALL, bam, missileTarget, BIGWALLNORTH)) return true;
break;
@ -904,6 +907,7 @@ bool Pathfinding::isBlockedDirection(const BattleUnit *unit, Tile *startTile, co
break;
case 6: // west
if (isBlocked(unit, startTile, O_WESTWALL, bam, missileTarget)) return true;
if (isBlocked(unit, _save->getTile(currentPosition + oneTileWest), O_BIGWALL, bam, missileTarget, BIGWALLEAST)) return true;