[ GoSub i j k df movewith thedir old_loc; if (second ~= 0 && second notin Compass && ObjectIsUntouchable(second)) return; old_loc = location; movewith=0; i=parent(player); if ((location~=thedark && i~=location) || (location==thedark && i~=real_location)) { j=location; if (location==thedark) location=real_location; k=RunRoutines(i,before); if (k~=3) location=j; if (k==1) { movewith=i; i=parent(i); } else { if (k==0) L__M(##Go,1,i); rtrue; } } thedir=noun.door_dir; if (ZRegion(thedir)==2) thedir=RunRoutines(noun,door_dir); j=i.thedir; k=ZRegion(j); if (k==3) { print (string) j; new_line; rfalse; } if (k==2) { j=RunRoutines(i,thedir); if (j==1) rtrue; } if (k==0 || j==0) { if (i.cant_go ~= 0) PrintOrRun(i, cant_go); rfalse; } if (j has door) { if (j has concealed) return L__M(##Go,2); if (j hasnt open) { if (noun==u_obj) return L__M(##Go,3,j); if (noun==d_obj) return L__M(##Go,4,j); return L__M(##Go,5,j); } k=RunRoutines(j,door_to); if (k==0) return L__M(##Go,6,j); if (k==1) rtrue; j = k; } if (movewith==0) move player to j; else move movewith to j; location=j; MoveFloatingObjects(); df=OffersLight(j); if (df~=0) { location=j; real_location=j; lightflag=1; } else { if (old_loc == thedark) { DarkToDark(); if (deadflag~=0) rtrue; } real_location=j; location=thedark; lightflag=0; } if (AfterRoutines()==1) rtrue; if (keep_silent==1) rtrue; LookSub(1); ];