Yes I do SMD.
The code saves a .X file to a temporary directory set by g_TempFolder$ and then loads that object and copies the limb data from the object you want to the new object. The problem lays in the first limb needs to be setup differently. This was the only way I could get it to work. You then can apply any movements or rotations to the object and save out the .anim and .oca and be good. Let me know if this workaround works for you or if you have any questions.
function createAnimatedModel(obj)
newObj = createAnimatedObject()
EnAn_ObjRenameLimb newObj,0,"amodel"
limbIndex = 1
lastLimb = EnAn_ObjTotalLimbs(obj) - 1
tempObj = getFreeObject()
limb = 0
for i = 1 to lastLimb
if lower$(limb name$(obj,i)) <> "world"
make object from limb tempObj,obj,i,0
mesh = getFreeMesh()
make mesh from object mesh,tempObj
if limbIndex = 1
change mesh newObj,limbIndex,mesh
else
add limb newObj,limbIndex,mesh
endif
offX# = limb position x(obj,i)
offY# = limb position y(obj,i)
offZ# = limb position z(obj,i)
offset limb newObj,limbIndex,offX#,offY#,offZ#
texture limb newObj,limbIndex, limb texture(obj,i)
EnAn_ObjRenameLimb newObj,limbIndex, limb name$(obj,i)
delete mesh mesh
delete object tempObj
inc limbIndex
endif
next i
endfunction newObj
function createAnimatedObject()
oldDir$ = get dir$()
set dir g_TempFolder$
if file exist("temp.x") <> 0
delete file "temp.x"
endif
OPEN TO WRITE 1,"temp.x"
WRITE STRING 1, "xof 0302txt 0032"
WRITE STRING 1, "Header {1; 0; 1;}"
WRITE STRING 1, "Frame Group {"
WRITE STRING 1, " FrameTransformMatrix {"
WRITE STRING 1, " 1.00E+00, 0.00E+00, 0.00E+00, 0.00E+00,"
WRITE STRING 1, " 0.00E+00, 1.00E+00, 0.00E+00, 0.00E+00,"
WRITE STRING 1, " 0.00E+00, 0.00E+00, 1.00E+00, 0.00E+00,"
WRITE STRING 1, " 0.00E+00, 0.00E+00, 0.00E+00, 1.00E+00;;"
WRITE STRING 1, " }"
WRITE STRING 1, " Mesh Cube {"
WRITE STRING 1, " 8;"
WRITE STRING 1, " -5.00E-01; -5.00E-01; -5.00E-01;,"
WRITE STRING 1, " -5.00E-01; 5.00E-01; -5.00E-01;,"
WRITE STRING 1, " 5.00E-01; 5.00E-01; -5.00E-01;,"
WRITE STRING 1, " 5.00E-01; -5.00E-01; -5.00E-01;,"
WRITE STRING 1, " 5.00E-01; -5.00E-01; 5.00E-01;,"
WRITE STRING 1, " 5.00E-01; 5.00E-01; 5.00E-01;,"
WRITE STRING 1, " -5.00E-01; 5.00E-01; 5.00E-01;,"
WRITE STRING 1, " -5.00E-01; -5.00E-01; 5.00E-01;;"
WRITE STRING 1, " 6;"
WRITE STRING 1, " 4;0,1,2,3;,"
WRITE STRING 1, " 4;4,5,6,7;,"
WRITE STRING 1, " 4;3,2,5,4;,"
WRITE STRING 1, " 4;7,6,1,0;,"
WRITE STRING 1, " 4;1,6,5,2;,"
WRITE STRING 1, " 4;3,4,7,0;;"
WRITE STRING 1, " MeshNormals {"
WRITE STRING 1, " 6;"
WRITE STRING 1, " 0.00E+00; 0.00E+00; -1.00E+00;,"
WRITE STRING 1, " 0.00E+00; 0.00E+00; 1.00E+00;,"
WRITE STRING 1, " 1.00E+00; 0.00E+00; 0.00E+00;,"
WRITE STRING 1, " -1.00E+00; 0.00E+00; 0.00E+00;,"
WRITE STRING 1, " 0.00E+00; 1.00E+00; 0.00E+00;,"
WRITE STRING 1, " 0.00E+00; -1.00E+00; 0.00E+00;;"
WRITE STRING 1, " 6;"
WRITE STRING 1, " 4;0,0,0,0;,"
WRITE STRING 1, " 4;1,1,1,1;,"
WRITE STRING 1, " 4;2,2,2,2;,"
WRITE STRING 1, " 4;3,3,3,3;,"
WRITE STRING 1, " 4;4,4,4,4;,"
WRITE STRING 1, " 4;5,5,5,5;;"
WRITE STRING 1, " }"
WRITE STRING 1, " }"
WRITE STRING 1, "}"
WRITE STRING 1, "AnimationSet x3dc_0 {"
WRITE STRING 1, " Animation Group {"
WRITE STRING 1, " {Group}"
WRITE STRING 1, " AnimationOptions { 1; 0; }"
WRITE STRING 1, " AnimationKey {"
WRITE STRING 1, " 2;"
WRITE STRING 1, " 1;"
WRITE STRING 1, " 0; 3; 0.00E+00, 0.00E+00, 0.00E+00;;;"
WRITE STRING 1, " }"
WRITE STRING 1, " AnimationKey {"
WRITE STRING 1, " 0;"
WRITE STRING 1, " 1;"
WRITE STRING 1, " 0; 4; 1.00E+00, 0.00E+00, 0.00E+00, 0.00E+00;;;"
WRITE STRING 1, " }"
WRITE STRING 1, " }"
WRITE STRING 1, "}"
close file 1
obj = getFreeObject()
load object "temp.x",obj,1
delete file "temp.x"
set dir oldDir$
endfunction obj
function getFreeMesh()
mesh = 0
for i = 1 to 131072
if mesh exist(i) = 0
mesh = i
exit
endif
next i
ENDFUNCTION mesh
function getFreeObject()
obj = 0
for i = 1 to 262144
if object exist(i) = 0
obj = i
exit
endif
next i
ENDFUNCTION obj
Edit: oh ya call the createAnimatedModel() funtion it calls the rest. Remember to set g_TempFolder$ to a valid temporary path. This should not need any other plugins that the enhanced animation.
Edit2: You could also just use the created x file to load your objects limbs into, but i needed a stand alone code that creates the file every time and leaves no turds.