This should work:
Don’t use “any room”; explicitly add rooms to scope and those landmarks that are visible. Have “go” correspond to the same action for both cases, but dispatch to landmark-navigating if the noun is a landmark. Or, if it works out, leave them the same action with a separate Carry out navigating to a room:
and Carry out navigating to a landmark:
.
A landmark is a kind of thing.
Navigating to is an action applying to one visible thing.
landmark-navigating to is an action applying to one visible thing.
Understand the command "go" as something new.
Understand "go to/-- [landmark]" as navigating to.
Understand "go to/-- [room]" as navigating to.
before navigating to a landmark, instead try landmark-navigating to the noun.
The Tree House is a room.
The Shattered Tree is a landmark.
The Bridge is a room.
The Rock is a landmark.
After deciding the scope of the player:
repeat with r running through rooms begin;
place r in scope;
end repeat;
place the shattered tree in scope;
carry out navigating to: say "navigate to [noun].".
carry out landmark-navigating to: say "landmark-navigate to [noun].".
Possibly you’ll want a Does the player mean navigating to a landmark: it is likely.
but I think just listing the landmark-case’s Understand line first will take care of it.