Hallo.. instead of locking the object, we can move slightly the gun to be in front of the camera, and then apply to the gun and camera, same rotations.
autocam off:hide mouse
create bitmap 1,50,50:for i= 1 to 1550:ink rgb(30,255,55),0:line rnd(60),i,i,rnd(130)
next i:blur bitmap 1,6:get image 1,10,10,50,50:delete bitmap 1
sync on
arma=20 //gun
bala=21 //bullet
make object box 1,3000,1,3000
texture object 1,1
scale object texture 1,3,3
make object box arma,1,1,10
make mesh from object 1,arma
make object cylinder 100,20
make mesh from object 2,100
delete object 100
add limb arma,1,1:offset limb arma,1,0,0,-8:scale limb arma,1,150,150,60
add limb arma,2,2:scale limb arma,2,12,50,7:rotate limb arma,2,90,0,0:offset limb arma,2,0,0,-10
color object arma,rgb(10,10,10)
make object box bala,1,1,20:color object bala,rgb(200,0,0):hide object bala
make object sphere 3,30
position object 3,600,20,600
do
gosub _controla_camara
gosub bala
if object collision(bala,3)=1 then position object 3,300+rnd(1000),10,300+rnd(1000)
sync
loop
_controla_camara:
`player controls (camera)
if upkey()=1 then x#=newxvalue(x#,a#,1) : z#=newzvalue(z#,a#,1)
if downkey()=1 then x#=newxvalue(x#,a#,-1) : z#=newzvalue(z#,a#,-1)
if leftkey()=1 THEN x#=NEWXVALUE(x#,a#-90,1)
if leftkey()=1 then z#=NEWZVALUE(z#,a#-90,1)
if rightkey()=1 THEN x#=NEWXVALUE(x#,a#-90,-1)
if rightkey()=1 then z#=NEWZVALUE(z#,a#-90,-1)
a#=wrapvalue(a#+mousemovex())
cam#=wrapvalue(cam#+mousemovey())
`camera limits
if cam#<=290 and cam#>180 then cam#=290
if cam#>=70 and cam#<180 then cam#=70
`updating camera, gun and bullets positions
position camera x#,145,z#
position object arma,x#,145,z#
position object bala,x#,145,z#
rotate object arma,cam#,a#,0
rotate object bala,cam#,a#,0
`moving slightly the gun to its correct position (aprox.)
move object arma,15
move object right arma,3
move object down arma,3
move object bala,15
move object right bala,3
move object down bala,3
rotate camera cam#,a#,0
return
bala:
set cursor 310,235:ink rgb(255,0,0),0
print " +"
`-------------------------------------------------------------
`making bullet shoot where the gun ends
if dispara=0
set object to object orientation bala,arma
endif
if mouseclick() and dispara=0
dispara=1
show object bala
endif
if dispara=1
la=la+10
run=run+1
move object bala,la
endif
if run>200
run=0
la=0
dispara=0
hide object bala
endif
return
`--------------------------------------------------------
oh my god