Try this utility that I made for myself in order to inspect object limbs (it will work with .x and .dbo)
cheers
Once exe is compiled you can use it as a standalone everywhere in your object folders
____________TOP_______________:
Rem * Title : Limb Inspector
Rem * Author : Scorpyo
Rem * Date : January 2012
rem ===============================================
set display mode 1024,768,32
autocam off
set global collision off
red=50:green=50:blu=200
color backdrop rgb(red,green,blu)
backdrop on
rem set text opaque
set ambient light 80
sync on
sync rate 60
hideflag=0
global x#,h#,a#,cx#,cz#,numberoflimbs,limbtexture$,size#,sizex#,sizey#,sizez#,tf
global dirnum,objnum,totalbjects,objcount,totalfiles,dircount,subdir,tempname$,stage
global rotangle#,offsetx#,offsety#,offsetz#,cax#
hideflag=0:loaded=0:tf=0:loaded=0:numberoflimbs=0:l=0:totalfiles=0:objcount=0
objnum=0:dirnum=0:dircount=0:subdir=0:hideflag=0:stage=0
cax#=0:ca#=0:camrot=0
t=0:l=0:numberoflimbs=0
red=0:green=0:blu=0
x#=0:h#=0:z#=0:a#=0:cx#=0:cz#=-300
anispeed=160
dim dirname$(300):dirnum=0:totaldirs=0
dim objname$(300):objnum=0:totalfiles=0
dim objcount(300)
path$=get dir$()
rem stage=1
gosub makebarimg
gosub make_matrix
red=50:green=50:blu=200
color backdrop rgb(red,green,blu)
stage=3
_________DO__LOOP__________:
do
if stage=1 then cd path$:gosub countdirs
if stage=2 then gosub selectdir:wait 100
if stage=3 then gosub countobjects
if stage=4 then gosub selectobject:wait 100
if stage=5 then gosub checklimbs
if stage=6
if inkey$()="l"
if hideflag=0 then gosub hidelimbs
hide limb 1,l
gosub showlimb:wait 500
endif
if inkey$()="i" then anispeed=anispeed+10:set object speed 1,anispeed
if inkey$()="o" then anispeed=anispeed-10:set object speed 1,anispeed
if inkey$()="p" then loop object 1
if inkey$()="u" then stop object 1:set object frame 1,0
if inkey$()="t" then gosub settransparency
if inkey$()="r" then gosub resetobj
if mouseclick()=4 then gosub resetobj
if inkey$()="s" then gosub showobject
if inkey$()="a" then gosub showlimbs
if shiftkey()=1 then delete object 1:gosub resetvalues:stage=1
if controlkey()=1 then delete object 1:gosub resetvalues:stage=3
if inkey$()="d" then save object objectname$+".dbo",1:wait 500
if inkey$()="k" then gosub keysinfo
if inkey$()="f" then sync rate 0
if inkey$()="F" then sync rate 60
gosub rotlimb
gosub offset_limb
gosub update_camera
gosub printdata
endif
gosub changecolor
if inkey$()="ò" then gosub resetscreencolor
sync
loop
______SELECTION_ROUTINES___:
resetvalues:
loaded=0:numberoflimbs=0:l=0:totalfiles=0:totaldirs=0:objcount=0
objnum=0:dirnum=0:dircount=0:hideflag=0:yspan=0
return
rem stage 1
countdirs:
subdir=0
perform checklist for files
totalfiles=checklist quantity()
find first
filetype=get file type()
if filetype=1
tempname$=get file name$()
if left$(tempname$,1)<>"." then dircount=1:dirname$(dircount)=get file name$()
endif
for d=2 to totalfiles
find next
filetype=get file type()
if filetype=1
tempname$=get file name$()
if left$(tempname$,1)<>"." then dircount=dircount+1:dirname$(dircount)=get file name$()
spritecount=dircount
endif
next d
if dircount=0
gosub resetvalues
text 300,200,"NO SUB-DIRECTORIES IN THIS DIRECTORY"
sync:wait 1000
stage=1
return
endif
gosub makesprites
stage=2
return
rem stage 2
selectdir:
subdir=0
selection=0
back1a:
set cursor 0,20
mousexpos=mousex():mouseypos=mousey()
dirnum=int(mouseypos/15)
if dirnum>0 and dirnum<=spritecount
for n=1 to spritecount
if dirnum<>n then set sprite alpha n,70
if dirnum=n then set sprite alpha dirnum,50
next n
endif
if dirnum=0 or dirnum>spritecount
for n=1 to spritecount
set sprite alpha n,70
next n
endif
for f=1 to dircount
print " ",f;" - ";dirname$(f)
next f
text 400,10,"SELECT DIRECTORY"
sync
if mouseclick()=1 and mousexpos<300
if dirnum>0 and dirnum<=dircount then selection=1
endif
if selection=1
cd dirname$(dirnum):subdir=1
stage=3
gosub deletesprites
return
endif
if selection=0 then goto back1a
return
rem stage 3
countobjects:
cls:sync
subdir=1
perform checklist for files
totalfiles=checklist quantity()
for f=1 to totalfiles
objname$(f)=checklist string$(f)
next f
back1b:
objcount=0
set cursor 0,20
for f=1 to totalfiles
if right$(objname$(f),2)=".x" or right$(objname$(f),4)=".dbo"
objcount=objcount+1:objname$(objcount)=objname$(f)
endif
next f
spritecount=objcount:gosub makesprites
if objcount=0
gosub resetvalues
text 400,200,"NO OBJECTS IN THIS DIRECTORY"
sync:wait 1000
stage=1
return
endif
stage=4
return
rem stage 4
selectobject:
selection=0:subdir=1
back1b:
set cursor 0,20
mousexpos=mousex():mouseypos=mousey()
objnum=int(mouseypos/15)
if objnum>0 and objnum<=spritecount
for n=1 to spritecount
if objnum<>n then set sprite alpha n,70
if objnum=n then set sprite alpha objnum,50
next n
endif
if objnum=0 or objnum>spritecount
for n=1 to spritecount
set sprite alpha n,70
next n
endif
for f=1 to objcount
print " ",f;" - ";objname$(f)
next f
text 400,10,"SELECT OBJECT"
sync
if mouseclick()=1 and mousexpos<300
if objnum>0 and objnum<=objcount then selection=1
endif
if shiftkey()=1 then gosub resetvalues:stage=1:return
if selection=0 then goto back1b
if selection=1
load object objname$(objnum),1
endif
objectname$=objname$(objnum)
fsize=file size(objectname$)
set object speed 1,anispeed
set object 1,1,1,0,1,1,1,1
set object transparency 1,tf
position object 1,x#,h#,z#
objnum=0:loaded=1
size#=object size(1)
sizex#=object size x(1)
sizey#=object size y(1)
sizez#=object size z(1)
stage=5
gosub deletesprites
gosub resetcam
return
_______LIMBS_ROUTINES_______:
rem stage 5
checklimbs:
rem Find out how many limbs the object has
perform checklist for object limbs 1
numberoflimbs=checklist quantity()
dim limbs$(numberoflimbs+1)
for n=1 to numberoflimbs
limbs$(n)=checklist string$(n)
next n
stage=6
return
showlimb:
rem Scroll through object limbs
if l=numberoflimbs-1 then l=-1
l=l+1
rem Clear the screen
cls
limbtexture$=limb texture name(1,l)
rem Show each limb as it is viewed
show limb 1,l
return
rotlimb:
if object exist(1)
if inkey$()="1" then rotangle#=wrapvalue(rotangle#+1.0):rotate limb 1,l,rotangle#,0.0,0.0
if inkey$()="2" then rotangle#=wrapvalue(rotangle#+1.0):rotate limb 1,l,0.0,rotangle#,0.0
if inkey$()="3" then rotangle#=wrapvalue(rotangle#+1.0):rotate limb 1,l,0.0,0.0,rotangle#
if inkey$()="0" then rotangle#=0.0:rotate limb 1,l,rotangle#,rotangle#,rotangle#:wait 10
endif
return
offset_limb:
if object exist(1)
if inkey$()="4" then offsetx#=offsetx#+1.0
if inkey$()="5" then offsetx#=offsetx#-1.0
if inkey$()="6" then offsety#=offsety#+1.0
if inkey$()="7" then offsety#=offsety#-1.0
if inkey$()="8" then offsetz#=offsetz#+1.0
if inkey$()="9" then offsetz#=offsetz#-1.0
if inkey$()="0" then offsetx#=0.0:offsety#=0.0:offsetz#=0.0
offset limb 1,l,offsetx#,offsety#,offsetz#:wait 10
endif
return
showobject:
cls
hideflag=0
for t=0 to numberoflimbs-1
show limb 1,t
set cursor 0,0
print " "
set cursor 0,0
print t
next t
l=0
return
showlimbs:
cls
hideflag=0
for t=0 to numberoflimbs-1
show limb 1,t
set cursor 0,0
print " "
set cursor 0,0
print t
next t
return
hidelimbs:
cls
hideflag=1
for t=0 to numberoflimbs-1
hide limb 1,t
set cursor 0,0
print " "
set cursor 0,0
print t
next t
return
_______PRINT__ROUTINES______:
printdata:
if scancode()=37 then return
rem Print information about object
set cursor 0,0
print " FPS = ",screen fps()
print " polys = ",statistic(1)-800
print " RootDir ",path$
print " --------------------"
print " Object name = ",objectname$
print " Object size = ",size#
print " file size = ",fsize
print " --------------------"
print " Total Limbs: ";numberoflimbs
print " Active Limb Number: ";l
print " Active Limb Name: ",limbs$(l+1)
print " Active Limb Texture: ",limbtexture$
print " -------------------"
if object exist(1)
print " limb offset x = ";limb offset x(1,l)
print " limb offset y = ";limb offset y(1,l)
print " limb offset z = ";limb offset z(1,l)
print " limb angle x = ";limb angle x(1,l)
print " limb angle y = ";limb angle y(1,l)
print " limb angle z = ";limb angle z(1,l)
print " limb world position x = ";limb position x(1,l)
print " limb world position y = ";limb position y(1,l)
print " limb world position z = ";limb position z(1,l)
endif
print " -----------------"
print " transparency mode = ",tf
print " -----------------"
print " l = browse limbs"
print " s = show full object"
print " SHIFT = select new object dir"
print " CTRL = load next object"
print " p = play object"
print " t for transparency settings"
print " -------------------------"
print " 1 = x rotate current limb"
print " 2 = y rotate current limb"
print " 3 = z rotate current limb"
print " 0 to reset limb offsets/rotations"
print " ---------------------------"
print " 4,5 = x offset current limb"
print " 6,7 = y offset current limb"
print " 8,9 = z offset current limb"
print " 0 to reset limb offsets/rotations"
print " a to see all limbs keeping current"
print " ---------------------------"
print
print " Press k for keyboard usage"
print " r or mousewheel click = RESET ALL"
return
keysinfo:
set cursor 0,20
print " Left mouse + Move mouse x for camera turn"
print " Right mouse + Mousewheel for camera pitch"
print " Mousewheel or > + mousewheel = camera distance"
print " Mousewheel + z = camera height"
print " up/down arrow = move forward / backwards"
print " left/right arrow = turn camera"
print " Space = Camdist 0"
print " r = RESET CAMERA AND OBJECT/LIMBS POSITION AND ANGLES"
print
print " i and o to increase/decrease animation speed"
print
print " Press f to unlock screen framerate"
print " Press F to reset framerate to 60"
print
print " change screen color - rgb "
print " keys ' and ì = red +/-"
print " keys è and + = green +/-"
print " keys à and ù = blu +/-"
print " Press ò to reset default color"
print
print " red=",red," green=",green," blu=",blu
return
______SCREEN_COLORS________:
changecolor:
if inkey$()="'" and red<250 then red=red+20:color backdrop rgb(red,green,blu):wait 200
if inkey$()="ì" and red>0 then red=red-20:color backdrop rgb(red,green,blu):wait 200
if inkey$()="è" and green<250 then green=green+20:color backdrop rgb(red,green,blu):wait 200
if inkey$()="+" and green>0 then green=green-20:color backdrop rgb(red,green,blu):wait 200
if inkey$()="à" and blu<250 then blu=blu+20:color backdrop rgb(red,green,blu):wait 200
if inkey$()="ù" and blu>0 then blu=blu-20:color backdrop rgb(red,green,blu):wait 200
return
__________CAMERA____________:
update_camera:
if spacekey()=1 then camdist#=0.0
if upkey()=1
s#=s#+2.0
x#=newxvalue(x#,a#,s#)
z#=newzvalue(z#,a#,s#)
endif
if downkey()=1
s#=s#-2.0
x#=newxvalue(x#,a#,s#)
z#=newzvalue(z#,a#,s#)
endif
if upkey()=0 and downkey()=0 then s#=0.0
if leftkey()=1 then a#=wrapvalue(a#-1.0)
if rightkey()=1 then a#=wrapvalue(a#+1.0)
if mouseclick()=1
mymousex=mousemovex()
if mymousex>0 then a#=wrapvalue(a#+3.0)
if mymousex<0 then a#=wrapvalue(a#-3.0)
endif
if mouseclick()=2
mymousey=mousemovey()
if mymousey>0 then cax#=wrapvalue(cax#+2.0)
if mymousey<0 then cax#=wrapvalue(cax#-2.0)
endif
if mouseclick()=0
mymousez=mousemovez()
if mymousez>0 and scancode()=44 then camhgt#=camhgt#+(sizey#*0.1):rem z
if mymousez<0 and scancode()=44 then camhgt#=camhgt#-(sizey#*0.1)
if mymousez>0 and scancode()=0 then camdist#=camdist#+(sizez#*0.2)
if mymousez<0 and scancode()=0 then camdist#=camdist#-(sizez#*0.2)
if mymousez>0 and scancode()=86 then camdist#=camdist#+5.0:rem <
if mymousez<0 and scancode()=86 then camdist#=camdist#-5.0
endif
cx#=newxvalue(x#,a#,camdist#)
cz#=newzvalue(z#,a#,camdist#)
position camera cx#,cy#+camhgt#,cz#
ca#=wrapvalue(a#+camrot)
yrotate camera ca#
xrotate camera cax#
rem Point camera at object
rem point camera x#,cy#+camhgt#,z#
return
resetcam:
set camera range 1,50000
if object exist(1)
size#=object size(1)
sizex#=object size x(1)
sizey#=object size y(1)
sizez#=object size z(1)
endif
cy#=sizey#/2
if sizez#<sizey# then camdist#=-sizey#*1.4
if sizey#<sizez# then camdist#=-sizez#*1.4
camrot=0:a#=0.0:ca#=0.0:camhgt#=0.0:x#=0.0:z#=0.0
ca#=wrapvalue(ca#+camrot)
cx#=newxvalue(x#,ca#,camdist#)
cz#=newzvalue(z#,ca#,camdist#)
position camera cx#,cy#+camhgt#,cz#
yrotate camera ca#
cax#=0.0:xrotate camera cax#
return
_______OBJECT_HANDLING_____:
resetobj:
offsetx#=0.0:offsety#=0.0:offsetz#=0.0:rotangle#=0.0
for t=0 to numberoflimbs-1
offset limb 1,t,offsetx#,offsety#,offsetz#
rotate limb 1,t,rotangle#,rotangle#,rotangle#
next t
gosub showobject
objay#=0.0:yrotate object 1,objay#
objax#=0.0:xrotate object 1,objax#
stop object 1
set object frame 1,0
gosub resetcam
return
settransparency:
if tf<7 then tf=tf+1
if tf>6 then tf=0
set object transparency 1,tf
wait 200
return
________SPRITES___________:
makesprites:
yspan=0
for n=1 to spritecount
sprite n,0,20+yspan,1
set sprite alpha n,70
yspan=yspan+15
next n
return
deletesprites:
for n=1 to spritecount
delete sprite n
next n
return
makebarimg:
cls rgb(240,240,0)
get image 1,0,0,300,14
return
__________OTHER___________:
resetscreencolor:
red=50:green=50:blu=200
color backdrop rgb(red,green,blu)
return
make_matrix:
rem 800 polygons
make matrix 1,5000,5000,20,20
position matrix 1,-2500,0,-2500
return
end