FYI, here's the code for the subroutine in which the shooter aims and fires:
AimWeapon:
REM Determine which lane shooter is shooting in
ShooterPos = Shooter - INT((Shooter-1)/8) * 8
REM Determing if shooter will be shooting at 10m or 50m target
REM and set up object and camera
IF Event = 1 THEN LaneOffset = 40 ELSE LaneOffset = -220
POSITION OBJECT WeaponObjNo,ShooterPos*20+LaneOffset,16,0
MAKE CAMERA 1
POSITION CAMERA 1,ShooterPos*20+LaneOffset,16,-4
POINT CAMERA 1,ShooterPos*20+LaneOffset,16,100
SET CAMERA RANGE 1,0.1,800
SET CAMERA FOV 1,7
REM Shooter aims until trigger is pulled
REPEAT
JoyX# = JOYSTICK X() + 100 : XOffset# = JoyX# / (Skill(Shooter) * 150 + 3000)
JoyY# = JOYSTICK Y() + 300 : YOffset# = JoyY# / (Skill(Shooter) * 150 + 3000)
XRot# = JOYSTICK Z() - 100 : XAngle# = XRot# / (Skill(Shooter) * 15 + 300)
YRot# = JOYSTICK TWIST Z() - 25000: YAngle# = YRot# / (Skill(Shooter) * 400 + 10000)
POSITION OBJECT WeaponObjNo,ShooterPos*20+LaneOffset+XOffset#,16-YOffset#,0
ROTATE OBJECT WeaponObjNo,YAngle#,XAngle#,0
SYNC
IF JOYSTICK FIRE X(9) = 1 THEN END
UNTIL JOYSTICK FIRE X(4) = 1 OR JOYSTICK FIRE X(5) = 1
REM Play shooting sound
IF SOUND EXIST(1) = 1 THEN DELETE SOUND 1
LOAD SOUND "Fire.wav",1
POSITION SOUND 1,ShooterPos*20+LaneOffset,1.6,1
SET SOUND VOLUME 1,100
PLAY SOUND 1
DELETE CAMERA 1
RETURN