You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
o3de/Tools/maxscript/CryAnimationTools.ms

2103 lines
62 KiB
Plaintext

-------------------------------------------------------------------------------
-- CryAnimationTools.ms
-- Version 2.2 External
-- by Christopher Evans
-------------------------------------------------------------------------------
global CryAnimationTools
(
if CryAnimationTools != undefined do ( closerolloutfloater CryAnimationTools )
CryAnimationTools = newrolloutfloater "CryAnimationTools" 190 800 --450
-------------------------------------------------------------------------------
-- GeneralTools
-------------------------------------------------------------------------------
rollout generalTools "Baking Animation"
(
group "CGA Prep"
(
button makeTCB "Change Rotation to TCB"
button makeTCBpos "Change Position to TCB"
)
button bakeMotion "Bake Motion to Keys"
group "Bake Rigid Objects to Character"
(
edittext simStart_txt "Start" fieldWidth:30
button bakeObjectsToCHR "Bake Objects" offset:[27,-23]
progressbar bakeToChr_prog color:red
)
on generalTools open do
(
simStart_txt.text = animationrange.start.frame as string
)
on makeTCB pressed do
(
for obj in selection do
(
obj.rotation.controller = tcb_rotation ()
)
)
on makeTCBpos pressed do
(
for obj in selection do
(
obj.position.controller = tcb_position ()
)
)
on bakeMotion pressed do
(
undo "bakeMotion" on
(
for t = animationrange.start to animationrange.end do
(
for obj in selection do
(
sliderTime = t
max set key on selected
)
)
)
)
on bakeObjectsToCHR pressed do
(
try
(
undo "bake to chr" on
(
--with redraw off
--(
animationRange = interval -1f animationRange.end
slidertime = -1
i = 0
macros.run "Modifier Stack" "Convert_to_Mesh"
meshObjs = selection as array
proxyObjs = #()
proxyObj = ""
offset = 0
simStart = (simStart_txt.text as float)
origPos = 0
origRot = 0
proxyObj = 0
maxops.cloneNodes selection cloneType:#copy newnodes:&copies
for obj in selection do
(
--crytools.objTrajectoryToSpline()
newPivot = [0,0,0]
with animate on
(
origPos = obj.pos
obj.pos = [0,0,0]
origRot = obj.rotation
obj.rotation = quat 0 0 0 1
bbox = (obj.max - obj.min)
newPivot = (obj.pivot - obj.min)
box length:bbox.y width:bbox.x height:bbox.z name:(obj.name + "_bprox")
offset += (20*(obj.max - obj.min).y)
)
proxyObj = (getnodebyname (obj.name + "_bprox"))
proxyObj.pivot = proxyObj.min + newPivot
proxyObj.pos += (obj.pivot - proxyObj.pivot)
proxyobj.xray = true
proxyObj.pos.controller = copy obj.pos.controller
proxyObj.rotation.controller = copy obj.rotation.controller
obj.pos.y = offset
--(getnodebyname (obj.name + "_bprox")).pos.x = ((i*200))
append proxyObjs proxyObj
proxyObj.pos.controller = tcb_position ()
with animate on
(
proxyObj.rotation = obj.rotation
proxyObj.pos = obj.pos
slidertime = 0
proxyObj.rotation = origRot
proxyObj.pos = origPos
)
slidertime = -1
deleteKeys obj #allkeys
i+=1
bakeToChr_prog.value += (100.0/selection.count)
)
--collapse all objs into one mesh
for obj in meshObjs do
(
if obj != meshObjs[1] then
(
attach meshObjs[1] obj
)
)
meshObjs[1].name = "ExportCHR"
--apply skin modifier to object
select $ExportCHR
slidertime = 0
modPanel.addModToSelection (Skin ()) ui:on
$ExportCHR.modifiers[#Skin].ref_frame = -1
slidertime = -1
if $root == undefined then
(
dummy name:"root" pos:[0,0,0] boxsize:[1,1,1]
)
for obj in proxyObjs do
(
skinOps.addBone $ExportCHR.modifiers[#Skin] obj 1
)
bakeToChr_prog.value = 0
bakeToChr_prog.color = blue
with redraw off
(
with animate on
(
for n = 1 to proxyObjs.count do
(
for i = 1 to proxyObjs[n].pos.controller.keys.count do
(
slidertime = proxyObjs[n].pos.controller.keys[i].time
proxyObjs[n].transform = copies[n].transform
)
bakeToChr_prog.value += (100.0/proxyObjs.count)
)
)
)
for obj in copies do
(
delete obj
)
slidertime = simStart
$root.pos = $ExportCHR.center
animationrange = (interval simStart animationrange.end)
for obj in proxyObjs do
(
obj.parent = $root
)
bakeToChr_prog.value = 0
bakeToChr_prog.color = red
--)
)
)catch()
)
)
-------------------------------------------------------------------------------
-- CryPlantKey
-------------------------------------------------------------------------------
rollout plantKey "CryPlantKey 1.4"
(
dropdownlist key_mode "Key Type:" items:#("Planted","Sliding", "Free")
checkbox existingOnly "Only for existing keys"
button begin_btn "Begin" offset:[-55,0]
button end_btn "End " offset:[-55,0]
editText begin_txt fieldWidth:30 offset:[43,-50]
editText end_txt fieldWidth:30 offset:[43,3]
button specific "Use Begin/End" align:#center offset:[0,5]
button range "Use Animation Range" align:#center
on begin_btn pressed do
(
escapeenable = true
begin_txt.text = (((currentTime as integer)/TicksPerFrame) as string)
)
on end_btn pressed do
(
end_txt.text = (((currentTime as integer)/TicksPerFrame) as string)
)
on range pressed do
(
undo "CryPlantKey" on
(
if existingOnly.checked == false then
(
if selection.count > 0 then
(
for t = animationrange.start to animationrange.end do
(
sliderTime = t
for i = 1 to selection.count do
(
try
(
case key_mode.selection of
(
1: biped.setPlantedKey selection[i]
2: biped.setSlidingKey selection[i]
3: biped.setFreeKey selection[i]
)
)
catch()
try
(
case key_mode.selection of
(
1: biped.setPlantedKey selection[i]
2: biped.setSlidingKey selection[i]
3: biped.setFreeKey selection[i]
)
)
catch()
)
)
)
)
)
if existingOnly.checked == true then
(
if selection.count > 0 then
(
undo "cryPlantKey" on
(
for obj in selection do
(
for i = 1 to obj.transform.controller.keys.count do
(
sliderTime = obj.transform.controller.keys[i].time
case key_mode.selection of
(
1: biped.setPlantedKey obj
2: biped.setSlidingKey obj
3: biped.setFreeKey obj
)
)
)
)
)
)
)
on specific pressed do
(
try
(
start = begin_txt.text as float
stop = end_txt.text as float
old_start = animationrange.start
old_stop = animationrange.end
animationrange = interval start stop
if selection.count > 0 then
(
if existingOnly.checked != true then
(
undo "cryPlantKey" on
(
for t = animationrange.start to animationrange.end do
(
sliderTime = t
for i = 1 to selection.count do
(
try
(
case key_mode.selection of
(
1: biped.setPlantedKey selection[i]
2: biped.setSlidingKey selection[i]
3: biped.setFreeKey selection[i]
)
)
catch()
try
(
case key_mode.selection of
(
1: biped.setPlantedKey selection[i]
2: biped.setSlidingKey selection[i]
3: biped.setFreeKey selection[i]
)
)
catch()
)
)
)
)
)
if existingOnly.checked == true then
(
if selection.count > 0 then
(
undo "cryPlantKey" on
(
for obj in selection do
(
for i = 1 to obj.transform.controller.keys.count do
(
sliderTime = obj.transform.controller.keys[i].time
case key_mode.selection of
(
1: biped.setPlantedKey obj
2: biped.setSlidingKey obj
3: biped.setFreeKey obj
)
)
)
)
)
)
animationrange = interval old_start old_stop
)catch()
)
-- on plantkey open
on plantkey open do
(
--get animation tools location
local tempVar = cryTools.inFromINI "CryTools" "anim_pos"
if tempVar == "" then tempVar = [0,77]
else
(
try
(
tempVar = execute tempVar
cryanimationtools.pos = tempVar
)
catch
(
cryTools.outToINI "CryTools" "anim_pos" "[0,77]"
cryanimationtools.pos = [0,77]
)
)
)
-- on plantkey closed
on plantkey close do
(
cryTools.outToINI "CryTools" "anim_pos" (cryanimationtools.pos as String)
)
)
-------------------------------------------------------------------------------
-- BipedTools
-------------------------------------------------------------------------------
rollout bipedtools "BipedTools 1.5"
(
dropdownlist bipSelect "" items:#("") width:130 offset:[-5,0]
button refreshBipTools "<" offset:[65,-27] tooltip:"Refresh"
button bipmotion "Bip Motion Menu" offset:[-35,0]
button LoadBIP "Load BIP" offset:[47,-26]
checkbutton figuremode "Figure Mode" offset:[-39,0]
checkbutton hidebiped "Hide Biped" offset:[39,-26]
checkbutton inplace "In Place Mode" offset:[-30,0]
checkbutton inplacex "X" offset:[29,-26]
checkbutton inplacey "Y" offset:[57,-26]
button selectAllBip "Select Only Biped Bones"
button clampTimeline "Clamp Timeline->" tooltip:"Clamp timeline at current key" offset:[-35,0]
button clampTimelineKey "At Last Key" tooltip:"Clamp timeline at last keyframe" offset:[50,-26]
button reverseAnim "Reverse Animation to FBX Skel"
spinner start "Start " range:[-10000,10000,0] type:#integer scale:1 fieldWidth:40 offset:[-80,0]
spinner end "End " range:[-10000,10000,100] type:#integer scale:1 fieldWidth:40 offset:[0,-20]
button FBXBIP "Attach Biped to FBX Skeleton"
button deleteFBX " Delete FBX Skeleton "
group "Collections"
(
button loadCollections "Load Pose Collections" enabled:false
checkbox getLatest "Latest (P4)" enabled:false
checkbox overwriteCollections "Overwrite" offset:[80,-20] enabled:false
)
-- on bipselect selected do
on bipSelect selected s do
(
print (bipSelect.items[s] + " selected.")
selectedBip = ("$'" + bips[s].name + "'")
global biped_ctrl = (execute (selectedBip + ".controller"))
)
--on refreshbiptools pressed
on refreshBipTools pressed do
(
try
(
global bips = (crytools.getBips())
global namearr = #()
for i=1 to bips.count do
(
append namearr bips[i].name
)
bipSelect.items = namearr
global selectedBip = ("$'" + bips[1].name + "'")
global biped_ctrl = (execute (selectedBip + ".controller"))
start.value = animationrange.start
end.value = animationrange.end
)catch()
)
-- on biped tools open
on bipedtools open do
(
if $bip01 != undefined then
(
bip_layer = LayerManager.getLayerFromName "Bip"
if bip_layer != undefined then
(
if bip_layer.ishidden == true then
(
hideBiped.checked = true
)
)
biped_ctrl=$bip01.controller
if biped_ctrl.figureMode == true then
(
figureMode.checked = true
)
else
(
figureMode.checked = false
)
)
overwritecollections.checked = true
getlatest.checked = true
--callbacks
figureSet = "if $bip01.controller.figureMode == true then (CryAnimationTools.rollouts[2].figureMode.checked = true) else (CryAnimationTools.rollouts[2].figureMode.checked = false)"
callbacks.addscript #filePostOpen figureSet id:#figureMode
BIPhideSet = "bip_layer = LayerManager.getLayerFromName \"Bip\" ; if bip_layer.ishidden == true then (CryAnimationTools.rollouts[2].hideBiped.checked = true) else (CryAnimationTools.rollouts[2].hideBiped.checked = false)"
callbacks.addscript #filePostOpen BIPhideSet id:#bipHide
--get bips
if $Bip01 != undefined then
(
global bips = (crytools.getBips())
namearr = #()
for i=1 to bips.count do
(
append namearr bips[i].name
)
bipSelect.items = namearr
global selectedBip = ("$'" + bips[1].name + "'")
global biped_ctrl = (execute (selectedBip + ".controller"))
)
start.value = animationrange.start
end.value = animationrange.end
)
-- load bip
on LoadBIP pressed do
(
LoadBIP_file = getOpenFileName types:"BIP(*.bip)"
if LoadBIP_file == undefined then
(
return undefined
)
animationrange = (interval 0f 1f)
biped_ctrl= (execute (selectedBip + ".controller"))
biped.loadBipFile biped_ctrl LoadBIP_file
)
-- bip motion menu button
on bipMotion pressed do
(
try
(
select (execute (selectedBip))
max motion mode
)
catch
(
messageBox "Please load a biped." title:"Error"
return undefined
)
)
-- figure mode button
on figureMode changed state do
(
try
if (figureMode.checked == true) then
(
biped_ctrl=(execute (selectedBip + ".controller"))
biped_ctrl.figureMode = true
)
else
(
biped_ctrl=(execute (selectedBip + ".controller"))
biped_ctrl.figureMode = false
)
catch
(
messageBox "Please load a biped." title:"Error"
figuremode.Checked = false
return undefined
)
)
-- hide biped button
on hideBiped changed state do
(
try
(
if (hideBiped.checked == true) then
(
bip_layer = LayerManager.getLayerFromName "Bip"
bip_layer.ishidden = true
)
else
(
bip_layer = LayerManager.getLayerFromName "Bip"
bip_layer.ishidden = false
)
)
catch
(
messageBox "Cannot find 'Biped' layer." title:"Error"
return undefined
)
)
-- in place mode button
on inPlace changed state do
(
try
if (inPlace.checked == true) then
(
biped_ctrl=(execute (selectedBip + ".controller"))
biped_ctrl.inPlaceMode = true
)
else
(
biped_ctrl=(execute (selectedBip + ".controller"))
biped_ctrl.inPlaceMode = false
biped_ctrl.inplacexmode = false
biped_ctrl.inplaceymode = false
inplacex.checked = false
inplacey.checked = false
)
catch
(
messageBox "Please load a biped, or take the biped out of figure mode." title:"Error"
return undefined
)
)
on inplacex changed state do
(
try
(
if (inPlacex.checked == true) then
(
if inplace.checked == false then
(
inplace.checked = true
)
if inplacey.checked == true then
(
inplacey.checked = false
)
biped_ctrl=(execute (selectedBip + ".controller"))
biped_ctrl.inPlacexMode = true
)
else
(
biped_ctrl=(execute (selectedBip + ".controller"))
biped_ctrl.inPlacexMode = false
if inplace.checked == true then
(
biped_ctrl=(execute (selectedBip + ".controller"))
biped_ctrl.inPlaceMode = true
)
)
)catch()
)
on inplacey changed state do
(
try
(
if (inPlacey.checked == true) then
(
if inplace.checked == false then
(
inplace.checked = true
)
if inplacex.checked == true then
(
inplacex.checked = false
)
biped_ctrl=(execute (selectedBip + ".controller"))
biped_ctrl.inPlaceyMode = true
)
else
(
biped_ctrl=(execute (selectedBip + ".controller"))
biped_ctrl.inPlaceyMode = false
if inplace.checked == true then
(
biped_ctrl=(execute (selectedBip + ".controller"))
biped_ctrl.inPlaceMode = true
)
)
)catch()
)
-- select all biped bones
on selectAllBIP pressed do
(
try
(
if selectedBip != "$'Bip01'" then
(
messagebox "sorry, only works with bip01 for now!"
return undefined
)
select $Bip01
selectmore $'Bip01 Pelvis'
selectmore $'Bip01 L Thigh'
selectmore $'Bip01 L Calf'
selectmore $'Bip01 L Foot'
selectmore $'Bip01 L Toe0'
selectmore $_Bip01LToeHelper
selectmore $'Bip01 R Thigh'
selectmore $'Bip01 R Calf'
selectmore $'Bip01 R Foot'
selectmore $'Bip01 R Toe0'
selectmore $_Bip01RToeHelper
selectmore $'Bip01 Spine'
selectmore $'Bip01 Spine1'
selectmore $'Bip01 Spine2'
selectmore $'Bip01 Spine3'
selectmore $'Bip01 Neck'
selectmore $'Bip01 Head'
selectmore $'Bip01 L Clavicle'
selectmore $'Bip01 L UpperArm'
selectmore $'Bip01 L Forearm'
selectmore $'Bip01 L Hand'
selectmore $'Bip01 L Finger0'
selectmore $'Bip01 L Finger01'
selectmore $'Bip01 L Finger02'
selectmore $'_Bip01 L Finger0Nub'
selectmore $'Bip01 L Finger1'
selectmore $'Bip01 L Finger11'
selectmore $'Bip01 L Finger12'
selectmore $'_Bip01 L Finger1Nub'
selectmore $'Bip01 L Finger2'
selectmore $'Bip01 L Finger21'
selectmore $'Bip01 L Finger22'
selectmore $'_Bip01 L Finger2Nub'
selectmore $'Bip01 L Finger3'
selectmore $'Bip01 L Finger31'
selectmore $'Bip01 L Finger32'
selectmore $'_Bip01 L Finger3Nub'
selectmore $'Bip01 L Finger4'
selectmore $'Bip01 L Finger41'
selectmore $'Bip01 L Finger42'
selectmore $'_Bip01 L Finger4Nub'
selectmore $'Bip01 L ForeTwist'
selectmore $'Bip01 L ForeTwist1'
selectmore $'Bip01 L ForeTwist2'
selectmore $'Bip01 R Clavicle'
selectmore $'Bip01 R UpperArm'
selectmore $'Bip01 R Forearm'
selectmore $'Bip01 R Hand'
selectmore $'Bip01 R Finger0'
selectmore $'Bip01 R Finger01'
selectmore $'Bip01 R Finger02'
selectmore $'_Bip01 R Finger0Nub'
selectmore $'Bip01 R Finger1'
selectmore $'Bip01 R Finger11'
selectmore $'Bip01 R Finger12'
selectmore $'_Bip01 R Finger1Nub'
selectmore $'Bip01 R Finger2'
selectmore $'Bip01 R Finger21'
selectmore $'Bip01 R Finger22'
selectmore $'_Bip01 R Finger2Nub'
selectmore $'Bip01 R Finger3'
selectmore $'Bip01 R Finger31'
selectmore $'Bip01 R Finger32'
selectmore $'_Bip01 R Finger3Nub'
selectmore $'Bip01 R Finger4'
selectmore $'Bip01 R Finger41'
selectmore $'Bip01 R Finger42'
selectmore $'_Bip01 R Finger4Nub'
selectmore $'Bip01 R ForeTwist'
selectmore $'Bip01 R ForeTwist1'
selectmore $'Bip01 R ForeTwist2'
selectmore $'_Bip01 HeadNub'
)catch()
)
-- on clampTimeline pressed
on clampTimeline pressed do
(
try ( animationrange = interval animationrange.start slidertime ) catch()
)
-- clampTimelineKey
on clampTimelineKey pressed do
(
if $ != undefined then
(
try
(
animationrange = interval animationrange.start $.controller.keys[$.controller.keys.count].time
)
catch
(
messagebox "Max returned a -1 value and Biped does not support this.\nPlease select another object."
)
)
else
(
messagebox "select an animated object"
)
)
-- FBX to BIP
on FBXBIP pressed do
(
filein (crytools.BuildPathFull + "Tools\\maxscript\\FBX_Bones_to_Bip.ms")
)
on loadCollections pressed do
(
if getLatest.checked == true then
(
p4Update = ("p4 sync J:\\" + crytools.project_name + "_Production\\Art\\Animation\\Human\\Resources\\poses\\...")
crytools.scmd p4Update true
)
try
(
if $bip01 != undefined then
(
biped_ctrl = (execute (selectedBip + ".controller"))
if overwritecollections.checked == true then
(
biped.deleteallcopycollections biped_ctrl
)
biped.loadCopyPasteFile biped_ctrl "J:/Game02_Production/Art/Animation/Human/Resources/poses/crysis_male.cpy"
biped.loadCopyPasteFile biped_ctrl "J:/Game02_Production/Art/Animation/Human/Resources/poses/crysis_female.cpy"
biped.loadCopyPasteFile biped_ctrl "J:/Game02_Production/Art/Animation/Human/Resources/poses/crysis_male_combat.cpy"
biped.loadCopyPasteFile biped_ctrl "J:/Game02_Production/Art/Animation/Human/Resources/poses/crysis_male_crouch.cpy"
biped.loadCopyPasteFile biped_ctrl "J:/Game02_Production/Art/Animation/Human/Resources/poses/crysis_male_prone.cpy"
biped.loadCopyPasteFile biped_ctrl "J:/Game02_Production/Art/Animation/Human/Resources/poses/crysis_male_relaxed.cpy"
biped.loadCopyPasteFile biped_ctrl "J:/Game02_Production/Art/Animation/Human/Resources/poses/crysis_male_stealth.cpy"
)
)
catch
(
messagebox "Cannot locate pose files"
)
)
on reverseAnim pressed do
(
try
(
original = #()
newBones =#()
disablesceneredraw()
select (execute (selectedBip))
biped_ctrl = $.controller
if biped_ctrl.figureMode == true then
(
messagebox "Please leave FigureMode"
)
select (execute (selectedBip + "...*"))
selectionSets ["original"] = selection
for i in selection do
(
append original i
b = snapshot i name:("_" + (i.name as string))
b.parent = undefined
b.transform = i.transform
b.position.track = bezier_position()
b.rotation.track = euler_xyz()
append newBones b
)
selectionSets ["newBones"] = newBones
for i in 1 to newBones.count do
(
newBones[i].position.track = bezier_position()
newBones[i].rotation.track = euler_xyz()
)
animate on
undo "match animation" on
(
for t in start.value to end.value do at time t
(
for i in 1 to newBones.count do
(
newBones[i].transform = original[i].transform
--reverseTime newBones[i].transform.controller start.value end.value #incLeft #incRight
--scaleTime newBones[i].transform.controller start.value end.value -1
--movekeys newBones[i].transform.controller ((animationrange.end) - (animationrange.start))
--newBones[i].transform.controller.keys.time += ((start.value) - (end.value))
)
)
for i in 1 to newBones.count do
(
scaleTime newBones[i].transform.controller start.value end.value -1
movekeys newBones[i].transform.controller ((animationrange.end) - (animationrange.start))
)
)
/*undo "reparent" on
(
for i in 1 to newBones.count do
(
try
(
newBones[i].parent = execute ("$'_" + original[i].parent.name + "'")
)
catch()
)
)*/
enablesceneredraw()
redrawviews()
)catch()
)
on deleteFBX pressed do
(
try
(
undo "remove FBX skel" on
(
for i in 1 to selectionSets[#newbones].count do
(
selectmore selectionSets[#newbones][i]
--max delete
)
max delete
)
)catch()
)
on bipedTools close do
(
callbacks.removescripts #filePostOpen id:#figureMode
callbacks.removescripts #filePostOpen id:#bipHide
)
)
-------------------------------------------------------------------------------
-- Rig Navigator
-------------------------------------------------------------------------------
rollout bipSelect "Crysis Rig Navigator"
(
activeXControl crysisBipHtml "http://www.crytek.com" width:168 height:430 pos:[2,3]
on bipSelect open do
(
crysisBipHtml.navigate (crytools.BuildPathFull + "Tools\\maxscript\\bipSelect\\bipselect.html")
)
on crysisBipHtml titlechange txt do
(
case txt of
(
"Bip01 Head":( try (select (biped.getNode biped_ctrl 11 link:1)) ; catch() )
"Bip01 L ForeArm":( try (select ( biped.getNode biped_ctrl 1 link:3 )) ; catch() )
"Bip01 R Forearm": (select ( biped.getNode biped_ctrl 2 link:3)) --; catch() )
"Bip01 R UpperArm":( try (select ( biped.getNode biped_ctrl 2 link:2)) ; catch() )
"Bip01 L Thigh":( try (select ( biped.getNode biped_ctrl 5)) ; catch() )
"Bip01 R Thigh":( try (select ( biped.getNode biped_ctrl 6 )) ; catch() )
"Bip01 R Knee":( try (select $'Bip01 R Knee') ; catch() )
"Bip01 L Knee":( try (select $'Bip01 L Knee') ; catch() )
"Bip01":( try (select (execute(selectedBip))) ; catch() )
"Bip01 Pelvis":( try (select ( biped.getNode biped_ctrl 12)) ; catch() )
"Bip01 L UpperArm":( try (select ( biped.getNode biped_ctrl 1 link:2 ) ) ; catch() )
"Bip01 Spine":( try (select (biped.getNode biped_ctrl 9 link:1)) ; catch() )
"Bip01 Spine3":( try (select (biped.getNode biped_ctrl 9 link:4)) ; catch() )
"Bip01 Spine1":( try (select (biped.getNode biped_ctrl 9 link:2)) ; catch() )
"Bip01 R Calf":( try (select ( biped.getNode biped_ctrl 6 link:2)) ; catch() )
"Bip01 L Calf":( try (select ( biped.getNode biped_ctrl 5 link:2)) ; catch() )
"weapon_bone":( try (select $'weapon_bone') ; catch() )
"alt_weapon_bone01":( try (select $'alt_weapon_bone01') ; catch() )
"Bip01 Spine2":( try (select (biped.getNode biped_ctrl 9 link:3)) ; catch() )
"Bip01 L Foot":( try (select ( biped.getNode biped_ctrl 5 link:3)) ; catch() )
"Bip01 R Foot":( try (select ( biped.getNode biped_ctrl 6 link:3)) ; catch() )
"Bip01 L Hand":( try (select ( biped.getNode biped_ctrl 1 link:4 )) ; catch() )
"Bip01 R Hand":( try (select ( biped.getNode biped_ctrl 2 link:4)) ; catch() )
"Bip01 R clavicular deltoid01":( try (select $'Bip01 R clavicular deltoid01') ; catch() )
"Bip01 L clavicular deltoid01":( try (select $'Bip01 L clavicular deltoid01') ; catch() )
)
)
)
-------------------------------------------------------------------------------
-- RangeView
-------------------------------------------------------------------------------
rollout rangeview "RangeView 1.6"
(
dropdownlist range_sel "Sub Range:" items:#("No tagged ranges found!") height:25
on rangeview open do
(
global ntags = FrameTagManager.GetTagCount()
global tagNameArray = #()
if ntags == 0 then
(
tagNameArray = #("No tagged ranges found!")
range_sel.enabled = false
)
else
(
for i = 1 to ntags do
(
id = FrameTagManager.GetTagID i
name_ = FrameTagManager.GetNameByID id
get_ = filterstring name_ "_"
if get_[get_.count] == "start" do
(
tagName = #(FrameTagManager.GetNameByID id)
join tagNameArray tagName
)
)
all_add = #("All Frames")
join tagNameArray all_add
)
range_sel.items = tagNameArray
)
on range_sel selected n do
(
if n == (tagNameArray.count) then
(
animationRange = interval (FrameTagManager.GetTimeByID 1) (FrameTagManager.GetTimeByID ntags)
)
else
(
for i = 1 to ntags do
(
if tagNameArray[n] == (FrameTagManager.GetNameByID i) then
(
animationRange = interval (FrameTagManager.GetTimeByID i) (FrameTagManager.GetTimeByID (i+1))
)
)
)
)
)
-------------------------------------------------------------------------------
-- MirrorArms
-------------------------------------------------------------------------------
rollout mirrorarms "MirrorArms 1.4"
(
dropdownlist mirrorRL "Mirror Animated Arms:" items:#("Right Arm Anim to Left", "Left Arm Anim to Right") height:25
checkbox new_root "copy\mirror root anim" pos:[25,50] checked:true
progressbar mirror_prog color:red
button mirrorarmsbtn " Mirror "
on mirrorarmsbtn pressed do
(
try
(
if mirrorRL.selection == 2 do
(
-- Define left and right arms
left_arm = #($upperarm_NEW_L, $rootL, $upperarm_L, $forearm_L, $hand_L, $thumb_L01, $thumb_L02, $thumb_L03, $thumb_L04, $indexfinger_L01, $indexfinger_L02, $indexfinger_L03, $indexfinger_L04, $middlefinger_L01, $middlefinger_L02, $middlefinger_L03, $middlefinger_L04, $ringfinger_L01, $ringfinger_L02, $ringfinger_L03, $ringfinger_L04, $pinky_L01, $pinky_L02, $pinky_L03, $pinky_L04)
right_arm = #($upperarm_NEW_R, $rootR, $upperarm_R, $forearm_R, $hand_R, $thumb_R01, $thumb_R02, $thumb_R03, $thumb_R04, $indexfinger_R01, $indexfinger_R02, $indexfinger_R03, $indexfinger_R04, $middlefinger_R01, $middlefinger_R02, $middlefinger_R03, $middlefinger_R04, $ringfinger_R01, $ringfinger_R02, $ringfinger_R03, $ringfinger_R04, $pinky_R01, $pinky_R02, $pinky_R03, $pinky_R04)
left_arm_only_rot = #($forearm_L, $hand_L, $thumb_L01, $thumb_L02, $thumb_L03, $thumb_L04, $indexfinger_L01, $indexfinger_L02, $indexfinger_L03, $indexfinger_L04, $middlefinger_L01, $middlefinger_L02, $middlefinger_L03, $middlefinger_L04, $ringfinger_L01, $ringfinger_L02, $ringfinger_L03, $ringfinger_L04, $pinky_L01, $pinky_L02, $pinky_L03, $pinky_L04)
right_arm_only_rot = #($forearm_R, $hand_R, $thumb_R01, $thumb_R02, $thumb_R03, $thumb_R04, $indexfinger_R01, $indexfinger_R02, $indexfinger_R03, $indexfinger_R04, $middlefinger_R01, $middlefinger_R02, $middlefinger_R03, $middlefinger_R04, $ringfinger_R01, $ringfinger_R02, $ringfinger_R03, $ringfinger_R04, $pinky_R01, $pinky_R02, $pinky_R03, $pinky_R04)
if new_root.checked == true then
(
dummy name:"new_root" pos:($root.pos) boxsize:[1,1,1]
$new_root.rotation = $root.rotation
$new_root.rotation.controller = tcb_rotation ()
$root.rotation.controller = tcb_rotation ()
for i = 1 to $root.rotation.controller.keys.count do
(
with animate on
(
slidertime = $root.rotation.controller.keys[i].time
$new_root.pos.x = -$root.pos.x
$new_root.pos.y = $root.pos.y
$new_root.pos.z = $root.pos.z
$new_root.dir = ([-1,1,1] * $root.dir)
rot_90 = eulerangles 0 0 -90
in coordsys local rotate $new_root rot_90
)
)
)
-- Remove right arm keys, copy over the controller info, and set TCB (quaternion) rotations
for i=1 to right_arm.count do
(
deleteKeys right_arm[i].rotation.controller.keys #allkeys
deleteKeys right_arm[i].position.controller.keys #allkeys
deleteKeys right_arm[i].scale.controller.keys #allkeys
right_arm[i].position.controller = copy right_arm[i].position.controller
right_arm[i].rotation.controller = copy right_arm[i].rotation.controller
right_arm[i].rotation.controller = tcb_rotation ()
left_arm[i].rotation.controller = tcb_rotation ()
)
-- Mirror rotation data L->R
for i=1 to right_arm.count do
(
for r = 1 to left_arm[i].rotation.controller.keys.count do
(
with animate on
(
slidertime = left_arm[i].rotation.controller.keys[r].time
crytools.MirrorObjs right_arm[i] left_arm[i] $root #x #x
in coordsys local rotate right_arm[i] (angleaxis 180 [0,1,0])
)
--right_arm[i].rotation.controller.keys[r].tension = left_arm[i].rotation.controller.keys[r].tension
--right_arm[i].rotation.controller.keys[r].continuity = left_arm[i].rotation.controller.keys[r].continuity
--right_arm[i].rotation.controller.keys[r].bias = left_arm[i].rotation.controller.keys[r].bias
)
mirror_prog.value = 100.*i/right_arm.count
)
)
if mirrorRL.selection == 1 do
(
-- Define left and right arms
left_arm = #($upperarm_NEW_L, $rootL, $upperarm_L, $forearm_L, $hand_L, $thumb_L01, $thumb_L02, $thumb_L03, $thumb_L04, $indexfinger_L01, $indexfinger_L02, $indexfinger_L03, $indexfinger_L04, $middlefinger_L01, $middlefinger_L02, $middlefinger_L03, $middlefinger_L04, $ringfinger_L01, $ringfinger_L02, $ringfinger_L03, $ringfinger_L04, $pinky_L01, $pinky_L02, $pinky_L03, $pinky_L04)
right_arm = #($upperarm_NEW_R, $rootR, $upperarm_R, $forearm_R, $hand_R, $thumb_R01, $thumb_R02, $thumb_R03, $thumb_R04, $indexfinger_R01, $indexfinger_R02, $indexfinger_R03, $indexfinger_R04, $middlefinger_R01, $middlefinger_R02, $middlefinger_R03, $middlefinger_R04, $ringfinger_R01, $ringfinger_R02, $ringfinger_R03, $ringfinger_R04, $pinky_R01, $pinky_R02, $pinky_R03, $pinky_R04)
left_arm_only_rot = #($forearm_L, $hand_L, $thumb_L01, $thumb_L02, $thumb_L03, $thumb_L04, $indexfinger_L01, $indexfinger_L02, $indexfinger_L03, $indexfinger_L04, $middlefinger_L01, $middlefinger_L02, $middlefinger_L03, $middlefinger_L04, $ringfinger_L01, $ringfinger_L02, $ringfinger_L03, $ringfinger_L04, $pinky_L01, $pinky_L02, $pinky_L03, $pinky_L04)
right_arm_only_rot = #($forearm_R, $hand_R, $thumb_R01, $thumb_R02, $thumb_R03, $thumb_R04, $indexfinger_R01, $indexfinger_R02, $indexfinger_R03, $indexfinger_R04, $middlefinger_R01, $middlefinger_R02, $middlefinger_R03, $middlefinger_R04, $ringfinger_R01, $ringfinger_R02, $ringfinger_R03, $ringfinger_R04, $pinky_R01, $pinky_R02, $pinky_R03, $pinky_R04)
if new_root.checked == true then
(
dummy name:"new_root" pos:($root.pos) boxsize:[1,1,1]
$new_root.rotation = $root.rotation
$new_root.rotation.controller = tcb_rotation ()
$root.rotation.controller = tcb_rotation ()
for i = 1 to $root.rotation.controller.keys.count do
(
with animate on
(
slidertime = $root.rotation.controller.keys[i].time
$new_root.pos.x = -$root.pos.x
$new_root.pos.y = $root.pos.y
$new_root.pos.z = $root.pos.z
$new_root.dir = ([-1,1,1] * $root.dir)
rot_90 = eulerangles 0 0 -90
in coordsys local rotate $new_root rot_90
)
)
)
-- Remove left arm keys, copy over the controller info, and set TCB (quaternion) rotations
for i=1 to left_arm.count do
(
deleteKeys left_arm[i].rotation.controller.keys #allkeys
deleteKeys left_arm[i].position.controller.keys #allkeys
deleteKeys left_arm[i].scale.controller.keys #allkeys
left_arm[i].position.controller = copy right_arm[i].position.controller
left_arm[i].rotation.controller = copy right_arm[i].rotation.controller
right_arm[i].rotation.controller = tcb_rotation ()
left_arm[i].rotation.controller = tcb_rotation ()
)
-- Mirror rotation data R->L
for i=1 to left_arm.count do
(
for r = 1 to right_arm[i].rotation.controller.keys.count do
(
with animate on
(
slidertime = right_arm[i].rotation.controller.keys[r].time
crytools.MirrorObjs left_arm[i] right_arm[i] $root #x #x
in coordsys local rotate left_arm[i] (angleaxis 180 [0,1,0])
)
left_arm[i].rotation.controller.keys[r].tension = right_arm[i].rotation.controller.keys[r].tension
left_arm[i].rotation.controller.keys[r].continuity = right_arm[i].rotation.controller.keys[r].continuity
left_arm[i].rotation.controller.keys[r].bias = right_arm[i].rotation.controller.keys[r].bias
)
mirror_prog.value = 100.*i/left_arm.count
)
mirror_prog.value = 0
-- Remove left arm keys, copy over the controller info, and set TCB (quaternion) rotations
for i=1 to left_arm_only_rot.count do
(
deleteKeys left_arm_only_rot[i].position.controller.keys #allkeys
deleteKeys left_arm_only_rot[i].scale.controller.keys #allkeys
)
)
)catch()
)
)
-------------------------------------------------------------------------------
-- BIP Batch Exporter
-------------------------------------------------------------------------------
rollout batchBIP "Batch Export 2.0"
(
fn safeTime =
(
time_string = localTime
while True do
(
a = findString time_string "/"
if a == undefined then
exit
time_string = replace time_string a 1 "-"
)
while True do
(
a = findString time_string ":"
if a == undefined then
exit
time_string = replace time_string a 1 "."
)
return time_string
)
fn endframe =
(
animEnd = (animationrange.end as string)
animEndArray = filterString animEnd "f"
return (animEndArray[1] as float)
)
group "specify modes"
(
checkbutton BIPmode "BIP Files" offset:[-45,0] enabled:false
checkbutton XAFmode "XAF Files" offset:[20,-26] enabled:false
dropdownlist character "" items:#("trooper","hunter","scout","fp_hands") enabled:false
)
group "batch"
(
button batchpath "Batch Folder" pos:[10,110]
button savepath "Save Folder " pos:[10,140]
button addlist "Add to List" pos:[10,170] enabled:false
label batchfolderTXT "NONE" align:#left pos:[90,115]
label savefolderTXT "NONE" align:#left pos:[90,144]
label addlistTXT "DISABLED" align:#left pos:[90,174] enabled:false
checkbox multiFolder "Multiple folders " pos:[10,195]
checkbox createCAL "Generate CAL " pos:[10,215] checked:true
checkbox createLOG "Log To File" pos:[10,235] checked:true
checkbox flipAnimY "Flip Animations on Z axis" pos:[10,255] checked:false
checkbox rawCAF "Export RAW CAF data" pos:[10,275] checked:false
checkbox saveBIP "Save BIP/XAF Files" pos:[10,295] enabled:false
checkbox onlySaveBIP "Only Save, No Export" offset:[5,0] enabled:false
button dobatch "-- No Files to Process --" enabled:false
progressbar doit_prog color:red
listbox exportlist "Folders to Process in List:" fieldWidth:152 height:10 offset:[-1,0] enabled:false
button savelist "Save" enabled:true offset:[-30,0]
button loadlist "Load" enabled:true offset:[25,-26]
)
on batchBIP open do
(
global oldsavepath = crytools.BuildPathFull
global oldloadpath = crytools.BuildPathFull
BIPmode.checked = true
hiddenFolderArray = #()
feedIn = #()
selectArray = #()
hiddenFolderArray = #()
)
on XAFmode changed state do
(
BIPmode.checked = false
character.enabled = true
)
on BIPmode changed state do
(
XAFmode.checked = false
character.enabled = false
)
on saveBIP changed state do
(
if saveBIP.checked == true then
(
onlySaveBip.enabled = true
)
else
(
onlySaveBip.enabled = false
onlySaveBip.checked = false
)
)
-- multiple folders checkbox
-------------------------------------------------------------------------------
on multiFolder changed state do
(
if multiFolder.checked == true then
(
exportlist.enabled = true
addlist.enabled = true
--saveQue.enabled = true
--loadQue.enabled = true
addlistTXT.enabled = true
addlistTXT.text = ""
)
else
(
addlist.enabled = false
exportlist.enabled = false
addlistTXT.enabled = false
saveQue.enabled = false
loadQue.enabled = false
addlistTXT.text = "QUE DISABLED"
)
)
-- Get batch path
-------------------------------------------------------------------------------
on batchpath pressed do
(
global oldloadpath
global batch_folder = getSavePath initialDir:oldloadpath caption:"Please select a folder of BIP files\nto be batch processed:"
if batch_folder == undefined do (return undefined)
oldloadpath = batch_folder
if BIPmode.checked == true then
(
global batch_files = getFiles (batch_folder + "\\*.bip")
)
if XAFmode.checked == true then
(
global batch_files = getFiles (batch_folder + "\\*.xaf")
)
global batch_folder_name = (getFilenameFile batch_folder)
global numfiles = batch_files.count
if numfiles == 0 then
(
messageBox "There are no BIP/XAF files in the selected folder." title:"Error: No BIP/XAF Files Found!"
)
else
(
dobatch.enabled = true
)
batchfolderTXT.text = batch_folder_name
savefolderTXT.text = batch_folder_name
if BIPmode.checked == true then
(
dobatch.text = ("Export " + (numfiles as string) + " BIPs from \\" + batch_folder_name)
)
if XAFmode.checked == true then
(
dobatch.text = ("Export " + (numfiles as string) + " XAFs from \\" + batch_folder_name)
)
global save_folder = batch_folder
global save_folder_name = (getFilenameFile save_folder)
global oldsavepath = batch_folder
)
-- Get save path
-------------------------------------------------------------------------------
on savepath pressed do
(
global save_folder = getSavePath initialDir:oldsavepath caption:"Please select a folder to save the CAF files:"
if save_folder == undefined do (return undefined)
oldsavepath = save_folder
save_folder_name = (getFilenameFile save_folder)
print save_folder
savefolderTXT.text = save_folder_name
)
-- add to que button
-------------------------------------------------------------------------------
on addlist pressed do
(
save_folder_array = #(batch_folder_name)
if exportlist.items == undefined then
(
exportlist.items = save_folder_array
)
temp = (join exportlist.items save_folder_array)
exportlist.items = temp
feed = #((batch_folder as string),(save_folder as string))
if feedIN == undefined then
(
feedIN = #()
)
feedIN = feed
--execme = (batch_folder_name + " = #()")
--execute execme
if hiddenFolderArray == undefined then
(
hiddenFolderArray = feedIn
)
else
(
append hiddenFolderArray feedin
)
--execme = (batch_folder_name + " = feedIn")
--execute execme
addlistTXT.text = ((exportlist.items.count as string) + " Folders")
)
on exportlist selected m do
(
--selectArray = hiddenFolderArray[m]
batch_folder = hiddenFolderArray[m][1]
save_folder = hiddenFolderArray[m][2]
batchfolderTXT.text = (getFilenameFile batch_folder)
savefolderTXT.text = (getFilenameFile save_folder)
)
on exportlist doubleClicked itm do
(
temp = exportlist.items
deleteItem temp itm
deleteitem hiddenFolderArray itm
exportlist.items = temp
addlistTXT.text = ((exportlist.items.count as string) + " Folders")
)
-- Save/load the folder que
-------------------------------------------------------------------------------
-- save the list
on savelist pressed do
(
folderQue = getSaveFileName types:"Que(*.que)|*.que" initialDir:save_folder
outputQUE = createFile folderQue
outputQUE = openFile folderQue mode:"w"
format ((hiddenFolderArray as string) + "*" + (exportlist.items as string)) to: outputQUE
close
)
-- import the list
on loadlist pressed do
(
dobatch.enabled = true
dobatch.text = "Batch Loaded Folders"
import_queFile = getOpenFileName getSaveFileName types:"Que(*.que)|*.que" initialDir:crytools.BuildPathFull
import_que = openFile import_queFile mode:"r"
while not eof import_que do
(
importedList = readline import_que
importedListBreak = (filterstring importedList "*")
)
close import_que
--exportlist.items = (("\"" + importedlistbreak[2] as array))
execme = ("cryanimationtools.rollouts[6].exportlist.items = " + importedlistbreak[2])
execute execme
execme = ("hiddenFolderArray = " + importedlistbreak[1])
print execme
execute execme
)
-- Process batch export
-------------------------------------------------------------------------------
on dobatch pressed do
(
undo off
(
-- allow esc to break from batching
escapeenable = true
-- check to make sure the twist bones are parented correctly
if $'Bip01 R ForeTwist' != undefined then
(
try
(
if $'Bip01 R ForeTwist'.parent.name != "Bip01 R Forearm" then
(
$'Bip01 R ForeTwist'.parent = $'Bip01 R Forearm'
print "Forearms reparented!"
)
)
catch
(
$'Bip01 R ForeTwist'.parent = $'Bip01 R Forearm'
print "Forearms reparented!"
)
)
--log to file
--test = localtime
--timeArray = (filterstring test "/ :")
logfilename = ("BIP_export_" + batch_folder_name + "_" + safeTime())
try ( biped_ctrl=$bip01.controller )
catch
(
messageBox "I cannot find a biped in the scene." title:"Error: No Biped Found!"
return undefined
)
biped_ctrl.figureMode = false
fileList = undefined
if multiFolder.checked == false then
fileList = numfiles
else
fileList = exportlist.items.count
for i = 1 to fileList do
(
animationrange = interval 0 1
utilitypanel.openutility csexport
caf_name = (getFilenameFile batch_files[i])
print ("Exporting " + caf_name)
biped_ctrl=$bip01.controller
checkImport = biped.LoadBipFile biped_ctrl batch_files[i]
while (checkImport != true) do ()
-- rotate 180 deg on Z
if flipAnimY.checked == true then
(
Dummy name: "rot_help" pos:[0,0,0] isSelected:off
$Bip01.parent = $rot_help
rot = eulerangles 0 0 180
rotate $rot_help rot
select $Bip01
max unlink
select $rot_help
max delete
)
if saveBIP.checked = true then
biped.SaveBipFile biped_ctrl batch_files[i]
-- Export
if rawCAF.checked == true then
checkExport = csexport.export.export_anim (save_folder + "\\" + caf_name + ".ivo")
else
checkExport = csexport.export.export_anim (save_folder + "\\" + caf_name + ".caf")
while (checkExport != OK) do ()
-- create logfile
if createLOG.checked == true then
(
if ( outputLOG = openFile (save_folder + "\\" + logfilename + ".log") mode:"a" ) == undefined then
(
outputLOG = createFile (save_folder + "\\" + logfilename + ".log")
outputLOG = openFile (save_folder + "\\" + logfilename + ".log") mode:"a"
format "#filepath = animations\human\male\n\n" to: outputCAL
--format (localTime + " --- BATCH EXPORTER STARTED PARSING FOLDER " + batch_folder + "\n") to: outputLOG
)
format (localTime + " --- Exporting " + caf_name + "\n") to: outputLOG
close outputLOG
)
-- create CAL file
if createCAL.checked == true then
(
if ( outputCAL = openFile (save_folder + "\\" + batch_folder_name + "_export_test.cal") mode:"a" ) == undefined then
(
outputCAL = createFile (save_folder + "\\" + batch_folder_name + "_export_test.cal")
outputCAL = openFile (save_folder + "\\" + batch_folder_name + "_export_test.cal") mode:"a"
)
format (caf_name + " = " + caf_name +".caf\n") to: outputCAL
close outputCAL
)
doit_prog.value = 100.*i/numfiles
gc()
)
doit_prog.value = 0
)
)
)
-------------------------------------------------------------------------------
-- INTERNAL TOOLS
-------------------------------------------------------------------------------
rollout internalTools "Internal Tools/Fixes"
(
group "Animation Setup"
(
dropdownlist chooseWeapon items:#("none","pistol","rifle","mg","law")
)
button addTrooperWeapon "Add Trooper Weapon Bone"
group "XAF Import/Export"
(
button exportXAF "Export XAF (Trooper)" enabled:false
checkbox animTracks "animTracks" enabled:false
checkbox constraints "constraints" enabled:false offset:[80,-20]
checkbox keyable "keyableTracks" offset:[35,0] enabled:false
checkbox XAFuseRange "use current time range" enabled:false
dropdownlist XAFcharacterExport "" items:#("trooper", "hunter","scout","fp_arms") enabled:false
button importXAF "Import XAF (Trooper)" enabled:false
checkbox XAFrelative "Relative" enabled:false
checkbox XAFinsert "Insert" offset:[65,-20] enabled:false
dropdownlist XAFcharacterImport "" items:#("trooper", "hunter","scout","fp_arms") enabled:false
)
on internalTools open do
(
if $bip01 != undefined then
(
undo "import_weapons" on
(
if $hurricane_tp == undefined then
(
if (doesfileexist (crytools.BuildPathFull + "\\tools\\maxscript\\ref\\weapon_positions.max")) != false then
(
mergeMAXfile (crytools.BuildPathFull + "\\tools\\maxscript\\ref\\weapon_positions.max") #("hurricane_tp","scar_L-C_tp","law_tp","socom_tp") #alwaysReparent
)
else
(
messagebox ("Cannot find " + crytools.BuildPathFull + "\\tools\\maxscript\\ref\\weapon_positions.max")
)
)
)
)
animTracks.checked = true
--constraints.enabled = true
constraints.checked = true
XAFuseRange.checked = true
)
on chooseWeapon selected sel do
(
undo "select_weapon_setup" on
(
biped_ctrl=$bip01.controller
if biped_ctrl.figureMode == true then
(
messagebox "Please leave figure mode first"
return default
)
case sel of
(
1:
(
hateMaxRots= (in coordsys world $weapon_bone.pos)
in coordsys parent (about $weapon_bone $weapon_bone.rotation = (quat -0.0298008 -0.00344252 0.731658 -0.681011))
$weapon_bone.pos = hateMaxRots
hide $socom_tp
hide $hurricane_tp
hide $'scar_L-C_tp'
hide $law_tp
)
2:
(
hateMaxRots= (in coordsys world $weapon_bone.pos)
in coordsys parent (about $weapon_bone $weapon_bone.rotation = (quat -0.0298008 -0.00344252 0.731658 -0.681011))
$weapon_bone.pos = hateMaxRots
unhide $socom_tp
hide $hurricane_tp
hide $'scar_L-C_tp'
hide $law_tp
)
3:
(
hateMaxRots= (in coordsys world $weapon_bone.pos)
in coordsys parent (about $weapon_bone $weapon_bone.rotation = (quat -0.0298008 -0.00344252 0.731658 -0.681011))
$weapon_bone.pos = hateMaxRots
unhide $'scar_L-C_tp'
hide $hurricane_tp
hide $socom_tp
hide $law_tp
)
4:
(
hateMaxRots = (in coordsys world $weapon_bone.pos)
in coordsys parent (about $weapon_bone $weapon_bone.rotation = (quat -0.251497 0.143304 0.510626 -0.809614))
$weapon_bone.pos = hateMaxRots
unhide $hurricane_tp
hide $'scar_L-C_tp'
hide $socom_tp
hide $law_tp
)
5:
(
hateMaxRots= (in coordsys world $weapon_bone.pos)
in coordsys parent (about $weapon_bone $weapon_bone.rotation = (quat 0.681166 -0.400702 0.386398 -0.475549))
$weapon_bone.pos = hateMaxRots
unhide $law_tp
hide $socom_tp
hide $hurricane_tp
hide $socom_tp
)
)
)
)
on addTrooperWeapon pressed do
(
if (doesfileexist (crytools.BuildPathFull + "Game\\Objects\\Characters\\alien\\trooper\\trooper.max")) != false then
(
mergeMAXfile (crytools.BuildPathFull + "Game\\Objects\\Characters\\alien\\trooper\\trooper.max") #("weapon_bone") #alwaysReparent
)
else
(
messagebox ("Cannot find " + crytools.BuildPathFull + "Game\\Objects\\Characters\\alien\\trooper\\trooper.max")
)
)
on XAFcharacterExport selected sel do
(
case sel of
(
1: exportXAF.text = "Export XAF (Trooper)"
2: exportXAF.text = "Export XAF (Hunter)"
)
)
on XAFcharacterImport selected sel do
(
case sel of
(
1: importXAF.text = "Import XAF (Trooper)"
2: importXAF.text = "import XAF (Hunter)"
)
)
-- animated tracks changed state
on animTracks changed state do
(
if animTracks.checked == true then
(
constraints.enabled = true
)
else
(
constraints.checked = false
constraints.enabled = false
)
)
on exportXAF pressed do
(
outputNameArr = (filterstring maxFilename ".")
outputName = outputNameArr[1]
XAFoldsavepath = crytools.BuildPathFull
global XAFsave_file = getSaveFileName initialDir:XAFoldsavepath filename:outputname caption:"Please select a folder to save the XAF file in:"
if XAFsave_file == undefined do
(
return undefined
)
XAFoldsavepath = XAFsave_file
-- trooper export
if XAFcharacterExport.selection == 1 then
(
if $R_rear_hand03 == undefined then
(
messagebox "There is no trooper in the scene."
return undefined
)
select $MASTER
if $R_mid_tent_spik02 != undefined then
(
$R_mid_tent_spik02.name = "_R_mid_tent_spik02"
$R_mid_tent_spik03.name = "_R_mid_tent_spik03"
$R_mid_tent_spik04.name = "_R_mid_tent_spik04"
$L_mid_tent_spik04.name = "_L_mid_tent_spik04"
$L_mid_tent_spik03.name = "_L_mid_tent_spik03"
$L_mid_tent_spik02.name = "_L_mid_tent_spik02"
$R_rear_tent_spik02.name = "_R_rear_tent_spik02"
$R_rear_tent_spik03.name = "_R_rear_tent_spik03"
$R_rear_tent_spik04.name = "_R_rear_tent_spik04"
$L_rear_tent_spik04.name = "_L_rear_tent_spik04"
$L_rear_tent_spik03.name = "_L_rear_tent_spik03"
$L_rear_tent_spik02.name = "_L_rear_tent_spik02"
$L_rear_tent_stretch.name = "R_rear_tent_stretch"
)
selectmore $_R_mid_tent_spik02
selectmore $_R_mid_tent_spik03
selectmore $_R_mid_tent_spik04
selectmore $_L_mid_tent_spik04
selectmore $_L_mid_tent_spik03
selectmore $_L_mid_tent_spik02
selectmore $_R_rear_tent_spik02
selectmore $_R_rear_tent_spik03
selectmore $_R_rear_tent_spik04
selectmore $_L_rear_tent_spik04
selectmore $_L_rear_tent_spik03
selectmore $_L_rear_tent_spik02
selectmore $root
selectmore $spine01
selectmore $spine02
selectmore $spine03
selectmore $pelvis
selectmore $null_rope03_connect
selectmore $'Rope3 Seg01'
selectmore $'Rope3 Seg02'
selectmore $'Rope3 Seg03'
selectmore $'Rope3 Seg04'
selectmore $'Rope3 Seg05'
selectmore $'Rope3 Seg06'
selectmore $'Rope3 Seg07'
selectmore $'Rope3 Seg08'
selectmore $'Rope3 Seg09'
selectmore $R_rear_hand01
selectmore $R_rear_hand01_end
selectmore $R_rear_hand02
selectmore $R_rear_hand02_end
selectmore $R_rear_hand03
selectmore $R_rear_hand03_end
selectmore $null_rope04_connect
selectmore $'Rope4 Seg01'
selectmore $'Rope4 Seg02'
selectmore $'Rope4 Seg03'
selectmore $'Rope4 Seg04'
selectmore $'Rope4 Seg05'
selectmore $'Rope4 Seg06'
selectmore $'Rope4 Seg07'
selectmore $'Rope4 Seg08'
selectmore $'Rope4 Seg09'
selectmore $L_rear_hand01
selectmore $L_rear_hand01_end
selectmore $L_rear_hand02
selectmore $L_rear_hand02_end
selectmore $L_rear_hand03
selectmore $L_rear_hand03_end
selectmore $R_rear_tent_spik01
selectmore $L_rear_tent_spik01
selectmore $R_mid_tent01
selectmore $null_rope02_connect
selectmore $'Rope2 Seg01'
selectmore $'Rope2 Seg02'
selectmore $'Rope2 Seg03'
selectmore $'Rope2 Seg04'
selectmore $'Rope2 Seg05'
selectmore $'Rope2 Seg06'
selectmore $'Rope2 Seg07'
selectmore $'Rope2 Seg09'
selectmore $R_mid_hand01
selectmore $R_mid_hand01_end
selectmore $R_mid_hand02
selectmore $R_mid_hand02_end
selectmore $R_mid_hand03
selectmore $R_mid_hand03_end
selectmore $R_mid_tent_spik01
selectmore $L_mid_tent01
selectmore $null_rope01_connect
selectmore $'Rope1 Seg01'
selectmore $'Rope1 Seg02'
selectmore $'Rope1 Seg03'
selectmore $'Rope1 Seg04'
selectmore $'Rope1 Seg05'
selectmore $'Rope1 Seg06'
selectmore $'Rope1 Seg07'
selectmore $'Rope1 Seg09'
selectmore $L_mid_hand01
selectmore $L_mid_hand01_end
selectmore $L_mid_hand02
selectmore $L_mid_hand02_end
selectmore $L_mid_hand03
selectmore $L_mid_hand03_end
selectmore $L_mid_tent_spik01
selectmore $chest
selectmore $R_humerus
selectmore $R_forearm
selectmore $R_front_hand
selectmore $R_front_hand01_01
selectmore $R_front_hand01_02
selectmore $R_front_hand01_02_end
selectmore $R_front_hand02_01
selectmore $R_front_hand02_02
selectmore $R_front_hand02_02_end
selectmore $R_front_hand03_01
selectmore $R_front_hand03_02
selectmore $R_front_hand03_02_end
selectmore $R_weapon_bone
selectmore $L_humerus
selectmore $L_forearm
selectmore $L_front_hand
selectmore $L_front_hand01_01
selectmore $L_front_hand01_02
selectmore $L_front_hand01_02_end
selectmore $L_front_hand02_01
selectmore $L_front_hand02_02
selectmore $L_front_hand02_02_end
selectmore $L_front_hand03_01
selectmore $L_front_hand03_02
selectmore $L_front_hand03_02_end
selectmore $L_weapon_bone
selectmore $L_booster
selectmore $L_booster_end
selectmore $R_booster
selectmore $R_booster_end
selectmore $'Bip01 Neck'
selectmore $'Bip01 Head'
selectmore $eye_left_bone
selectmore $eye_right_bone
selectmore $Slider01
selectmore $Slider02
selectmore $Slider03
selectmore $Slider04
selectmore $Slider05
selectmore $Slider06
selectmore $Slider07
selectmore $Slider08
selectmore $L_front_tent_stretch
selectmore $R_front_tent_stretch
selectmore $L_rear_tent_stretch
selectmore $R_rear_tent_stretch
XAFnodeExport = (selection as array)
)
-- save the XAF file
if XAFuseRange.checked == true then
(
loadsaveanimation.saveanimation (XAFsave_file + ".xaf") XAFnodeExport #() #() animatedTracks:animTracks.checked includeConstraints:constraints.checked keyableTracks:keyable.checked savesegment:true segInterval:animationrange
)
else
(
loadsaveanimation.saveanimation (XAFsave_file + ".xaf") XAFnodeExport #() #() animatedTracks:animTracks.checked includeConstraints:constraints.checked keyableTracks:keyable.checked
)
)
-- import trooper
on importXAF pressed do
(
if XAFoldsavepath == undefined then
(
XAFoldsavepath = crytools.BuildPathFull
)
global XAFopen_file = getOpenFileName initialDir:XAFoldsavepath caption:"Please select a folder to save the XAF file in:"
if XAFopen_file == undefined do
(
return undefined
)
XAFoldsavepath = XAFopen_file
-- trooper export
if XAFcharacterImport.selection == 1 then
(
if $R_rear_hand03 == undefined then
(
messagebox "There is no trooper in the scene."
return undefined
)
select $MASTER
if $R_mid_tent_spik02 != undefined then
(
$R_mid_tent_spik02.name = "_R_mid_tent_spik02"
$R_mid_tent_spik03.name = "_R_mid_tent_spik03"
$R_mid_tent_spik04.name = "_R_mid_tent_spik04"
$L_mid_tent_spik04.name = "_L_mid_tent_spik04"
$L_mid_tent_spik03.name = "_L_mid_tent_spik03"
$L_mid_tent_spik02.name = "_L_mid_tent_spik02"
$R_rear_tent_spik02.name = "_R_rear_tent_spik02"
$R_rear_tent_spik03.name = "_R_rear_tent_spik03"
$R_rear_tent_spik04.name = "_R_rear_tent_spik04"
$L_rear_tent_spik04.name = "_L_rear_tent_spik04"
$L_rear_tent_spik03.name = "_L_rear_tent_spik03"
$L_rear_tent_spik02.name = "_L_rear_tent_spik02"
$L_rear_tent_stretch.name = "R_rear_tent_stretch"
)
selectmore $_R_mid_tent_spik02
selectmore $_R_mid_tent_spik03
selectmore $_R_mid_tent_spik04
selectmore $_L_mid_tent_spik04
selectmore $_L_mid_tent_spik03
selectmore $_L_mid_tent_spik02
selectmore $_R_rear_tent_spik02
selectmore $_R_rear_tent_spik03
selectmore $_R_rear_tent_spik04
selectmore $_L_rear_tent_spik04
selectmore $_L_rear_tent_spik03
selectmore $_L_rear_tent_spik02
selectmore $root
selectmore $spine01
selectmore $spine02
selectmore $spine03
selectmore $pelvis
selectmore $null_rope03_connect
selectmore $'Rope3 Seg01'
selectmore $'Rope3 Seg02'
selectmore $'Rope3 Seg03'
selectmore $'Rope3 Seg04'
selectmore $'Rope3 Seg05'
selectmore $'Rope3 Seg06'
selectmore $'Rope3 Seg07'
selectmore $'Rope3 Seg08'
selectmore $'Rope3 Seg09'
selectmore $R_rear_hand01
selectmore $R_rear_hand01_end
selectmore $R_rear_hand02
selectmore $R_rear_hand02_end
selectmore $R_rear_hand03
selectmore $R_rear_hand03_end
selectmore $null_rope04_connect
selectmore $'Rope4 Seg01'
selectmore $'Rope4 Seg02'
selectmore $'Rope4 Seg03'
selectmore $'Rope4 Seg04'
selectmore $'Rope4 Seg05'
selectmore $'Rope4 Seg06'
selectmore $'Rope4 Seg07'
selectmore $'Rope4 Seg08'
selectmore $'Rope4 Seg09'
selectmore $L_rear_hand01
selectmore $L_rear_hand01_end
selectmore $L_rear_hand02
selectmore $L_rear_hand02_end
selectmore $L_rear_hand03
selectmore $L_rear_hand03_end
selectmore $R_rear_tent_spik01
selectmore $L_rear_tent_spik01
selectmore $R_mid_tent01
selectmore $null_rope02_connect
selectmore $'Rope2 Seg01'
selectmore $'Rope2 Seg02'
selectmore $'Rope2 Seg03'
selectmore $'Rope2 Seg04'
selectmore $'Rope2 Seg05'
selectmore $'Rope2 Seg06'
selectmore $'Rope2 Seg07'
selectmore $'Rope2 Seg09'
selectmore $R_mid_hand01
selectmore $R_mid_hand01_end
selectmore $R_mid_hand02
selectmore $R_mid_hand02_end
selectmore $R_mid_hand03
selectmore $R_mid_hand03_end
selectmore $R_mid_tent_spik01
selectmore $L_mid_tent01
selectmore $null_rope01_connect
selectmore $'Rope1 Seg01'
selectmore $'Rope1 Seg02'
selectmore $'Rope1 Seg03'
selectmore $'Rope1 Seg04'
selectmore $'Rope1 Seg05'
selectmore $'Rope1 Seg06'
selectmore $'Rope1 Seg07'
selectmore $'Rope1 Seg09'
selectmore $L_mid_hand01
selectmore $L_mid_hand01_end
selectmore $L_mid_hand02
selectmore $L_mid_hand02_end
selectmore $L_mid_hand03
selectmore $L_mid_hand03_end
selectmore $L_mid_tent_spik01
selectmore $chest
selectmore $R_humerus
selectmore $R_forearm
selectmore $R_front_hand
selectmore $R_front_hand01_01
selectmore $R_front_hand01_02
selectmore $R_front_hand01_02_end
selectmore $R_front_hand02_01
selectmore $R_front_hand02_02
selectmore $R_front_hand02_02_end
selectmore $R_front_hand03_01
selectmore $R_front_hand03_02
selectmore $R_front_hand03_02_end
selectmore $R_weapon_bone
selectmore $L_humerus
selectmore $L_forearm
selectmore $L_front_hand
selectmore $L_front_hand01_01
selectmore $L_front_hand01_02
selectmore $L_front_hand01_02_end
selectmore $L_front_hand02_01
selectmore $L_front_hand02_02
selectmore $L_front_hand02_02_end
selectmore $L_front_hand03_01
selectmore $L_front_hand03_02
selectmore $L_front_hand03_02_end
selectmore $L_weapon_bone
selectmore $L_booster
selectmore $L_booster_end
selectmore $R_booster
selectmore $R_booster_end
selectmore $'Bip01 Neck'
selectmore $'Bip01 Head'
selectmore $eye_left_bone
selectmore $eye_right_bone
selectmore $Slider01
selectmore $Slider02
selectmore $Slider03
selectmore $Slider04
selectmore $Slider05
selectmore $Slider06
selectmore $Slider07
selectmore $Slider08
selectmore $L_front_tent_stretch
selectmore $R_front_tent_stretch
selectmore $L_rear_tent_stretch
selectmore $R_rear_tent_stretch
XAFnodeImport = (selection as array)
)
-- save the XAF file
loadsaveanimation.loadanimation XAFopen_file XAFnodeImport relative:XAFrelative.checked insert:XAFinsert.checked
)
)
addRollout plantKey CryAnimationTools
addRollout bipedtools CryAnimationTools
addRollout bipSelect CryAnimationTools rolledup:true
--addRollout internalTools CryAnimationTools
addRollout generalTools CryAnimationTools rolledup: true
addRollout rangeview CryAnimationTools rolledup:true
addRollout mirrorarms CryAnimationTools rolledup:true
addRollout batchBIP CryAnimationTools rolledup:true
) --End roulloutfloater