Here is my weapon positioner:
sync on
sync rate 10
autocam off
color backdrop rgb(0,0,0)
`Camera
global camD,camX,camY as float
camD=100
POINT CAMERA 0,45,0
load object "civ_gunner.x",1
load image "civ_gunner_D2.tga",1
texture object 1,1
yrotate object 1,270
set object frame 1,980
load object "Grenade Launcher.X",2
load image "grlncher.bmp",2
texture object 2,2
limb=GET LIMB BY NAME(1,"FIRESPOT")
glue_object_to_object(2,1,limb)
sc#=100.0
do
center text 320,0,"Move using WASD (Y plane), +/- (up/down)"
center text 320,20,str$(object position x(2))+"|"+str$(object position y(2))+"|"+str$(object position z(2))
center text 320,40,"Rotate using UP/LEFT/RIGHT"
center text 320,60,str$(object angle x(2))+"|"+str$(object angle y(2))+"|"+str$(object angle z(2))
center text 320,80,"Scale using O/P"
center text 320,100,str$(sc#)+"%"
if keystate(17) then position object 2,object position x(2),object position y(2),object position z(2)+.1
if keystate(31) then position object 2,object position x(2),object position y(2),object position z(2)-.1
if keystate(32) then position object 2,object position x(2)+.1,object position y(2),object position z(2)
if keystate(30) then position object 2,object position x(2)-.1,object position y(2),object position z(2)
if keystate(13) then position object 2,object position x(2),object position y(2)+.1,object position z(2)
if keystate(12) then position object 2,object position x(2),object position y(2)-.1,object position z(2)
if keystate(24)
sc#=sc#*.99
scale object 2,sc#,sc#,sc#
endif
if keystate(25)
sc#=sc#*1.01
scale object 2,sc#,sc#,sc#
endif
if upkey()
if shiftkey()=0
rotate object 2,object angle x(2)+5,object angle y(2),object angle z(2)
else
rotate object 2,object angle x(2)-5,object angle y(2),object angle z(2)
endif
endif
if rightkey()
if shiftkey()=0
rotate object 2,object angle x(2),object angle y(2)+5,object angle z(2)
else
rotate object 2,object angle x(2),object angle y(2)-5,object angle z(2)
endif
endif
if leftkey()
if shiftkey()=0
rotate object 2,object angle x(2),object angle y(2),object angle z(2)+5
else
rotate object 2,object angle x(2),object angle y(2),object angle z(2)-5
endif
endif
camD=camD+mousemovez()*.1
camX=camX-mousemovey()*.3
camY=camY-mousemovex()*.3
rotate camera camX,camY,0
position camera 0,45,0
move camera -camD
sync
loop
function glue_object_to_object(a,b,limb)
`get start and end point offsets
`start point
EZro_ObjFindOffsetFromPoint b, object position x(a),object position y(a),object position z(a)
x1#=EZro_GetOffsetX()
y1#=EZro_GetOffsetY()
z1#=EZro_GetOffsetZ()
`end point
move object a, 1
EZro_ObjFindOffsetFromPoint b, object position x(a),object position y(a),object position z(a)
x2#=EZro_GetOffsetX()
y2#=EZro_GetOffsetY()
z2#=EZro_GetOffsetZ()
move object a, 1
`position child
position object a, x1#,y1#,z1#
`point at end point
point object a, x2#,y2#,z2#
`glue to main limb
glue object to limb a, b, limb
endfunction
I use it to scale,rotate and position my weapons. One thing, you can use "shift" to rotate the weapon in the opposite direction.
Oh, and you'll have to manually edit the code for your own models/textures as I haven't put any loading code in yet!