gsd: There is nothing wrong with the code you've written syntactically, but you might benefit from a few simple tried and tested methods in the long run. You'll see the benefits when your code starts to grow. To emphasise the point, the 2 snippets below do the same, but which would you rather try to debug...
DO:X = UPKEY()
IF OBJECT PLAYING(1)=1 AND X = 0 THEN STOP OBJECT 1:IF X = 1 AND SOUND PLAYING(CARPETSLOW)=0 THEN PLAY SOUND CARPETSLOW:IF OBJECT PLAYING(MAN1)=0 THEN SET OBJECT FRAME MAN1,0:IF OBJECT PLAYING(MAN1)=0 AND X = 1 THEN GOSUB _subroutine
IF X = 1 THEN MOVE OBJECT 1,0.05
A=OBJECT POSITION X(MAN1):B=OBJECT POSITION Y(MAN1):C=OBJECT POSITION Z(MAN1)
POINT CAMERA 1,A,B,C:LOOP
DO
X = UPKEY()
IF OBJECT PLAYING(1)=1 AND X = 0 THEN STOP OBJECT 1
IF X = 1 AND SOUND PLAYING(CARPETSLOW)=0 THEN PLAY SOUND CARPETSLOW
IF OBJECT PLAYING(MAN1)=0
SET OBJECT FRAME MAN1,0
IF X = 1
GOSUB _subroutine
MOVE OBJECT 1,0.05
ENDIF
ENDIF
A=OBJECT POSITION X(MAN1)
B=OBJECT POSITION Y(MAN1)
C=OBJECT POSITION Z(MAN1)
POINT CAMERA 1,A,B,C
LOOP