EDITED code for compactness, added in all directions, and also covered looping into the same room you have just left 
I’ve now nailed tracking the player’s facing direction. I’ve only added goE and goW at this point, but I just need to copy/edit that code for the other 6 compass points (only worth doing up/down if the player is swimming because we don’t want them standing on their head when they get the bottom of a ladder, do we?
Here’s the code - and the test output:
I’ve added the status/exit calls into the command so I don’t have to keep typing them right now, I also split the print_exits out from the check_exits so we can query the exits at any time and not spam the player..
game_start //automatically runs before the player does anything
check_exits();
print_exits();
status_output();
status_output
print("You are ");
if (facing == 0) println("facing North.");
else if (facing == 1) println("facing South.");
else if (facing == 2) println("facing East.");
else if (facing == 3) println("facing West.");
else if (facing == 4) println("facing Northeast.");
else if (facing == 5) println("facing Northwest.");
else if (facing == 6) println("facing Southeast.");
else if (facing == 7) println("facing Southwest.");
else println("disorientated.");
check_exits
exitCount = 0;
tempRoom = player.location;
if (tempRoom.n < 127) { validExits[exitCount] = 0; exitCount++; }
if (tempRoom.s < 127) { validExits[exitCount] = 1; exitCount++; }
if (tempRoom.e < 127) { validExits[exitCount] = 2; exitCount++; }
if (tempRoom.w < 127) { validExits[exitCount] = 3; exitCount++; }
if (tempRoom.ne < 127) { validExits[exitCount] = 4; exitCount++; }
if (tempRoom.nw < 127) { validExits[exitCount] = 5; exitCount++; }
if (tempRoom.se < 127) { validExits[exitCount] = 6; exitCount++; }
if (tempRoom.sw < 127) { validExits[exitCount] = 7; exitCount++; }
if (tempRoom.up < 127) { validExits[exitCount] = 8; exitCount++; }
if (tempRoom.down < 127) { validExits[exitCount] = 9; exitCount++; }
if (tempRoom.in < 127) { validExits[exitCount] = 10; exitCount++; }
if (tempRoom.out < 127) { validExits[exitCount] = 11; exitCount++; }
print_exits
if (exitCount == 0) { println("There are no obvious exits."); }
else {
exitIndex = 0; print("You can go ");
while (exitIndex < exitCount) {
if (validExits[exitIndex] == 0) print("North");
else if (validExits[exitIndex] == 1) print("South");
else if (validExits[exitIndex] == 2) print("East");
else if (validExits[exitIndex] == 3) print("West");
else if (validExits[exitIndex] == 4) print("Northeast");
else if (validExits[exitIndex] == 5) print("Northwest");
else if (validExits[exitIndex] == 6) print("Southeast");
else if (validExits[exitIndex] == 7) print("Southwest");
else if (validExits[exitIndex] == 8) print("Up");
else if (validExits[exitIndex] == 9) print("Down");
else if (validExits[exitIndex] == 10) print("In");
else if (validExits[exitIndex] == 11) print("Out");
if (exitCount == 2 && exitIndex == 0) print(" or ");
else if (exitCount > 2) {
if (exitIndex < exitCount - 2) print(", ");
else if (exitIndex == exitCount - 2) print(", or ");
}
exitIndex++;
}
println(".");
}
goN
prevRoom = player.location;
player.location = prevRoom.n;
check_exits();
if (tempRoom.s == prevRoom) facing = 0;
else if (tempRoom.n == prevRoom
&& prevRoom.n != tempRoom) facing = 1;
else if (tempRoom.w == prevRoom) facing = 2;
else if (tempRoom.e == prevRoom) facing = 3;
else if (tempRoom.sw == prevRoom) facing = 4;
else if (tempRoom.se == prevRoom) facing = 5;
else if (tempRoom.nw == prevRoom) facing = 6;
else if (tempRoom.ne == prevRoom) facing = 7;
print_exits();
status_output();
goS
prevRoom = player.location;
player.location = prevRoom.s;
check_exits();
if (tempRoom.s == prevRoom
&& prevRoom.s != tempRoom) facing = 0;
else if (tempRoom.n == prevRoom) facing = 1;
else if (tempRoom.w == prevRoom) facing = 2;
else if (tempRoom.e == prevRoom) facing = 3;
else if (tempRoom.sw == prevRoom) facing = 4;
else if (tempRoom.se == prevRoom) facing = 5;
else if (tempRoom.nw == prevRoom) facing = 6;
else if (tempRoom.ne == prevRoom) facing = 7;
print_exits();
status_output();
goE
prevRoom = player.location;
player.location = prevRoom.e;
check_exits();
if (tempRoom.s == prevRoom) facing = 0;
else if (tempRoom.n == prevRoom) facing = 1;
else if (tempRoom.w == prevRoom) facing = 2;
else if (tempRoom.e == prevRoom
&& prevRoom.e != tempRoom) facing = 3;
else if (tempRoom.sw == prevRoom) facing = 4;
else if (tempRoom.se == prevRoom) facing = 5;
else if (tempRoom.nw == prevRoom) facing = 6;
else if (tempRoom.ne == prevRoom) facing = 7;
print_exits();
status_output();
goW
prevRoom = player.location;
player.location = prevRoom.w;
check_exits();
if (tempRoom.s == prevRoom) facing = 0;
else if (tempRoom.n == prevRoom) facing = 1;
else if (tempRoom.w == prevRoom
&& prevRoom.w != tempRoom) facing = 2;
else if (tempRoom.e == prevRoom) facing = 3;
else if (tempRoom.sw == prevRoom) facing = 4;
else if (tempRoom.se == prevRoom) facing = 5;
else if (tempRoom.nw == prevRoom) facing = 6;
else if (tempRoom.ne == prevRoom) facing = 7;
print_exits();
status_output();
goNE
prevRoom = player.location;
player.location = prevRoom.ne;
if (tempRoom.s == prevRoom) facing = 0;
else if (tempRoom.n == prevRoom) facing = 1;
else if (tempRoom.w == prevRoom) facing = 2;
else if (tempRoom.e == prevRoom) facing = 3;
else if (tempRoom.sw == prevRoom) facing = 4;
else if (tempRoom.se == prevRoom) facing = 5;
else if (tempRoom.nw == prevRoom) facing = 6;
else if (tempRoom.ne == prevRoom
&& prevRoom.ne != tempRoom) facing = 8;
check_exits();
print_exits();
status_output();
goNW
prevRoom = player.location;
player.location = prevRoom.n;
check_exits();
if (tempRoom.s == prevRoom) facing = 0;
else if (tempRoom.n == prevRoom) facing = 1;
else if (tempRoom.w == prevRoom) facing = 2;
else if (tempRoom.e == prevRoom) facing = 3;
else if (tempRoom.sw == prevRoom) facing = 4;
else if (tempRoom.se == prevRoom) facing = 5;
else if (tempRoom.nw == prevRoom
&& prevRoom.nw != tempRoom) facing = 6;
else if (tempRoom.ne == prevRoom) facing = 7;
print_exits();
status_output();
goSE
prevRoom = player.location;
player.location = prevRoom.se;
check_exits();
if (tempRoom.s == prevRoom) facing = 0;
else if (tempRoom.n == prevRoom) facing = 1;
else if (tempRoom.w == prevRoom) facing = 2;
else if (tempRoom.e == prevRoom) facing = 3;
else if (tempRoom.sw == prevRoom) facing = 4;
else if (tempRoom.se == prevRoom
&& prevRoom.se != tempRoom) facing = 5;
else if (tempRoom.nw == prevRoom) facing = 6;
else if (tempRoom.ne == prevRoom) facing = 7;
print_exits();
status_output();
goSW
prevRoom = player.location;
player.location = prevRoom.sw;
check_exits();
if (tempRoom.s == prevRoom) facing = 0;
else if (tempRoom.n == prevRoom) facing = 1;
else if (tempRoom.w == prevRoom) facing = 2;
else if (tempRoom.e == prevRoom) facing = 3;
else if (tempRoom.sw == prevRoom
&& prevRoom.sw != tempRoom) facing = 4;
else if (tempRoom.se == prevRoom) facing = 5;
else if (tempRoom.nw == prevRoom) facing = 6;
else if (tempRoom.ne == prevRoom) facing = 7;
print_exits();
status_output();
goUp
prevRoom = player.location;
player.location = prevRoom.n;
check_exits();
print_exits();
status_output();
goDn
prevRoom = player.location;
player.location = prevRoom.n;
check_exits();
print_exits();
status_output();
goIn
prevRoom = player.location;
player.location = prevRoom.n;
check_exits();
print_exits();
status_output();
goOut
prevRoom = player.location;
player.location = prevRoom.n;
check_exits();
print_exits();
status_output();
sentences
(instead) n --->goN
(instead) s --->goS
(instead) e --->goE
(instead) w --->goW
(instead) ne --->goNE
(instead) nw --->goNW
(instead) se --->goSE
(instead) sw --->goSW
(instead) up --->goUp
(instead) down --->goDn
(instead) in --->goIn
(instead) out --->goOut
Which yields:
Test
Version 1.0
Me+ChatGPT 
You can go East.
You are facing North.
Entrance
The start.
e
You can go North, South, East, or West.
You are facing East.
w
You can go East.
You are facing West.
My next task is to convert the movement into relative directions 