Integrating latest 47acbe8

This commit is contained in:
alexpete
2021-03-25 13:57:57 -07:00
parent 448c549698
commit 75dc720198
10312 changed files with 2711566 additions and 671451 deletions
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+68
View File
@@ -0,0 +1,68 @@
-------------------------------------------------------------------------------
-- cryInfoFloater.ms
-- Version 1.2
-- by Christopher Evans
-------------------------------------------------------------------------------
if cryInfoFloater != undefined do ( destroydialog cryInfoFloater )
rollout cryInfoFloater "cryInfo 1.4"
(
edittext cryInfo_txt text:"cryInfo" fieldWidth:390 height:260 pos:[1,3]
button saveinfo_txt "Save Updated Info" pos:[3,269]
button runEmbed "Run Embedded Scripts" pos:[115,269] enabled:false
-- on cryinfo open
on cryInfoFloater open do
(
if $cryInfo != undefined then
(
cryInfo_txt.text = (getUserPropBuffer $cryInfo)
)
if $cryInfo == undefined then
(
cryInfo_txt.text = "There is no cryInfo node present.\nType info in here and press \"Save Updated Info\" to save cryInfo in this file."
)
if $cryEmbed == undefined then
(
runEmbed.enabled = false
)
else
(
runEmbed.enabled = true
)
)
-- on save info pressed
on saveinfo_txt pressed do
(
if $cryInfo == undefined then
(
dummy name:"cryInfo" pos:[0,0,0] boxsize:[1,1,1]
)
setUserPropBuffer $cryInfo cryInfo_txt.text
)
-- on runembed pressed
on runEmbed pressed do
(
runme = (getUserPropBuffer $cryEmbed)
execute runme
)
-- on resized do
on cryInfoFloater resized size do
(
size1 = size as string
size2 = filterstring size1 "[],"
cryInfo_txt.width = ((size2[1] as float) - 10)
cryInfo_txt.height = ((size2[2] as float) - 35)
saveinfo_txt.pos = [4, (cryInfoFloater.height - 26)]
)
)
createDialog cryInfoFloater 400 295 bgcolor:black fgcolor:white style:#(#style_resizing, #style_titlebar, #style_border, #style_sysmenu)
+76
View File
@@ -0,0 +1,76 @@
-------------------------------------------------------------------------------
-- cryInfoLoader.ms
-- This checks for cryinfo on load of every file.
-- Version 1.2
-- by Christopher Evans
-------------------------------------------------------------------------------
if cryInfoFloater != undefined do ( destroydialog cryInfoFloater )
if $cryInfo == undefined then
(
print "No cryInfo detected"
)
else
(
rollout cryInfoFloater "cryInfo 1.4"
(
edittext cryInfo_txt text:"cryInfo" fieldWidth:390 height:260 pos:[1,3]
button saveinfo_txt "Save Updated Info" pos:[3,269]
button runEmbed "Run Embedded Scripts" pos:[115,269] enabled:false
-- on cryinfo open
on cryInfoFloater open do
(
if $cryInfo != undefined then
(
cryInfo_txt.text = (getUserPropBuffer $cryInfo)
)
if $cryInfo == undefined then
(
cryInfo_txt.text = "There is no cryInfo node present.\nType info in here and press \"Save Updated Info\" to save cryInfo in this file."
)
if $cryEmbed == undefined then
(
runEmbed.enabled = false
)
else
(
runEmbed.enabled = true
)
)
-- on save info pressed
on saveinfo_txt pressed do
(
if $cryInfo == undefined then
(
dummy name:"cryInfo" pos:[0,0,0] boxsize:[1,1,1]
)
setUserPropBuffer $cryInfo cryInfo_txt.text
)
-- on runembed pressed
on runEmbed pressed do
(
runme = (getUserPropBuffer $cryEmbed)
execute runme
)
-- on resized do
on cryInfoFloater resized size do
(
size1 = size as string
size2 = filterstring size1 "[],"
cryInfo_txt.width = ((size2[1] as float) - 10)
cryInfo_txt.height = ((size2[2] as float) - 35)
saveinfo_txt.pos = [4, (cryInfoFloater.height - 26)]
)
)
createDialog cryInfoFloater 400 295 bgcolor:black fgcolor:white style:#(#style_resizing, #style_titlebar, #style_border, #style_sysmenu)
)
+150
View File
@@ -0,0 +1,150 @@
function createBlendFromMaxMat obj idx =
(
local blendShader = ""
local msg = ""
global buildPathFull_crytools
if buildPathFull_crytools == undefined then (
local scriptPath = getSourceFileName()
scriptPath = substituteString scriptPath "\\CryMakeBlendShader.ms" ""
print scriptPath
blendShader = (scriptPath + "\\fx\\cryBlendShader.fx")
) else (
blendShader = (buildPathFull_crytools + "Tools\\maxscript\\fx\\cryBlendShader.fx")
)
--local obj = $
local mat = obj.material
local numSubMats = getNumSubMtls mat
local matSlotOrig = (idx * 2) - 1
setMeditMaterial matSlotOrig mat
if (numSubMats > 0) then
(
local newMat = multiMaterial()
newMat.numsubs = numSubMats
newMat.name = (mat.name + "_DX")
local newSlot = matSlotOrig+1
setMeditMaterial newSlot newMat
activeMeditSlot = newSlot
print ("New MultiMaterial: "+newMat.name)
msg = ("Created mat: "+newMat.name+" in slot "+(newSlot as string))
local subMats = mat.materialList
for i = 1 to numSubMats do
(
newMat.materialList[i] = DirectX_9_Shader ()
newMat.materialList[i].effectFile = blendShader
newMat.materialList[i].name = mat.materialList[i].name
newMat.names[i] = mat.materialList[i].name
if (isValidObj mat.materialList[i].diffuseMap) then
(
print ("Creating submat "+mat.materialList[i].name+"...")
local bmFilename = mat.materialList[i].diffuseMap.fileName
if (doesFileExist(bmFilename)) then
(
local bm = openBitMap bmFilename
newMat.materialList[i].diffuseTexture1 = bm
) else (
print ("WARNING: File Not Found: "+bmFilename)
)
)
if (isValidObj mat.materialList[i].bumpMap) then
(
local bmFilename = mat.materialList[i].bumpMap.fileName
if (doesFileExist(bmFilename)) then
(
local bm = openBitMap bmFilename
newMat.materialList[i].normalMap = bm
) else (
print ("WARNING: File Not Found: "+bmFilename)
)
)
)
) else (
local newMat = Material()
newMat.name = (mat.name + "_DX")
local newSlot = matSlotOrig+1
setMeditMaterial newSlot newMat
activeMeditSlot = newSlot
print ("New Material: "+newMat.name)
msg = ("Created mat: "+newMat.name+" in slot "+(newSlot as string))
newMat = DirectX_9_Shader ()
newMat.effectFile = blendShader
if (isValidObj mat.diffuseMap) then
(
local bmFilename = mat.diffuseMap.fileName
if (doesFileExist(bmFilename)) then
(
local bm = openBitMap bmFilename
newMat.diffuseTexture1 = bm
) else (
print ("WARNING: File Not Found: "+bmFilename)
)
)
if (isValidObj mat.bumpMap) then
(
local bmFilename = mat.bumpMap.fileName
if (doesFileExist(bmFilename)) then
(
local bm = openBitMap bmFilename
newMat.normalMap = bm
) else (
print ("WARNING: File Not Found: "+bmFilename)
)
)
)
msg = (msg + "\n\nNow pick Dirt textures and apply new material to your object.")
MatEditor.Open()
messageBox msg title:"Cry Make Blend Shader"
)
try(destroyDialog CryBlendShader_rollout)catch()
rollout CryBlendShader_rollout "CryMakeBlendShader" width:200
(
button cryMakeBlend_button "Create Blend Shader" toolTip:"Create a DirectX Blend shader from the selected object's Max material(s)"
label cryMakeBlendMsg1 "Select an object, and press button"
label cryMakeBlendMsg2 "to create Blend Shader."
on cryMakeBlend_button pressed do
(
if ($ == undefined) then
(
cryMakeBlendMsg1.text = "You must select an object first"
) else (
for i=1 to selection.count do
(
createBlendFromMaxMat selection[i] i
)
)
)
)
createDialog CryBlendShader_rollout
+432
View File
@@ -0,0 +1,432 @@
struct CModelling(
GetNrstEdg, NxtEdg, IsSameLoop, SelLimELoop, NxtEdgRing, IsSameRing, SelLimERing, VertsInSameLoop, SelVertLoop,
SelVertRing, IsQuadPoly, SelPolyLoop
)
CryModelling = cmodelling()
-------------------------Limited Edge Loop---------------------------
CryModelling.GetNrstEdg = fn GetNrstEdg Edg1 Edg2 Target =
(
Edg1Vrts = (polyop.getvertsusingedge $ Edg1) as array
Edg2Vrts = (polyop.getvertsusingedge $ Edg2) as array
TrgtVrts = (polyop.getvertsusingedge $ Target) as array
mP1 = (((polyop.getvert $ Edg1Vrts[1]) + (polyop.getvert $ Edg1Vrts[2]))/2)
mP2 = (((polyop.getvert $ Edg2Vrts[1]) + (polyop.getvert $ Edg2Vrts[2]))/2)
TmP = (((polyop.getvert $ TrgtVrts[1]) + (polyop.getvert $ TrgtVrts[2]))/2)
if (distance Tmp mP1) > (distance Tmp mP2) then Edg2 else Edg1
)
CryModelling.NxtEdg = fn NxtEdg edg trg =
(
EdgsSel = polyop.getedgeselection $
Verts = (polyop.getEdgeVerts $ edg) as array
Tmp = #()
NEdg = #()
VEdgs = undefined
for vert in Verts do
(
VEdgs = (((polyop.getedgesUsingVert $ vert) - #{edg}) * EdgsSel) as array
--print VEdgs
for x in VEdgs do
(
append Tmp x
)
)
--print Tmp.count
if Tmp.count == 1 then append NEdg Tmp[1]
else
(
append NEdg (CryModelling.GetNrstEdg Tmp[1] Tmp[2] trg)
)
NEdg[1]
)
CryModelling.IsSameLoop = fn IsSameLoop =
(
with undo off
(
EdgSel = (polyop.getedgeselection $) as array
polyop.setEdgeSelection $ EdgSel[1]
$.buttonOp #selectEdgeLoop
NSel = polyop.getedgeselection $
polyop.setEdgeSelection $ EdgSel
if ((NSel * (EdgSel as bitarray)) as array).count != 2 then false else true
)
)
CryModelling.SelLimELoop = fn SelLimELoop =
(
try
(
EdgeSel = (polyop.getEdgeSelection $) as array
if CryModelling.IsSameLoop() == true then
(
with undo on
(
with redraw off
(
TargEdg = EdgeSel[2]
SEdg = EdgeSel[1]
NEdg = EdgeSel[1]
FinalSel = #(EdgeSel[1], EdgeSel[2])
$.buttonOp #selectEdgeLoop
while NEdg != EdgeSel[2] do
(
Edg = CryModelling.NxtEdg NEdg TargEdg
append FinalSel Edg
NEdg = Edg
)
)
)
polyop.setEdgeSelection $ FinalSel
)
else
(
$.buttonOp #selectEdgeLoop
)
)
catch (print "The tool works only on EditablePoly Objects.")
)
-------------------------Limited Edge Ring---------------------------
CryModelling.NxtEdgRing = fn NxtEdgRing edg trg =
(
EdgsSel = polyop.getedgeselection $
Verts = polyop.getEdgeVerts $ edg
Edg1 = polyop.getedgesusingvert $ Verts[1]
Edg2 = polyop.getedgesusingvert $ Verts[2]
EdgFaces = (polyop.getEdgeFaces $ edg) as array
NEdgs = #()
if EdgFaces.count == 1 then
(
Edgs = polyop.getFaceEdges $ EdgFaces[1] as bitarray
if Edgs.numberset == 4 do
(
(((Edgs - Edg1) - Edg2) as array)[1]
)
)
else
(
FEdgs1 = (polyop.getFaceEdges $ EdgFaces[1]) as bitarray
FEdgs2 = (polyop.getFaceEdges $ EdgFaces[2]) as bitarray
if FEdgs1.numberset == 4 do
(
append NEdgs (((FEdgs1 - Edg1) - Edg2) as array)[1]
)
if FEdgs2.numberset == 4 do
(
append NEdgs (((FEdgs2 - Edg1) - Edg2) as array)[1]
)
CryModelling.GetNrstEdg NEdgs[1] NEdgs[2] trg
)
)
CryModelling.IsSameRing = fn IsSameRing =
(
with undo off
(
EdgSel = (polyop.getedgeselection $) as array
polyop.setEdgeSelection $ EdgSel[1]
$.buttonOp #selectEdgeRing
NSel = polyop.getedgeselection $
polyop.setEdgeSelection $ EdgSel
if ((NSel * (EdgSel as bitarray)) as array).count != 2 then false else true
)
)
CryModelling.SelLimERing = fn SelLimERing =
(
try
(
EdgeSel = (polyop.getEdgeSelection $) as array
if CryModelling.IsSameRing() == true then
(
with undo on
(
with redraw off
(
TargEdg = EdgeSel[2]
SEdg = EdgeSel[1]
NEdg = EdgeSel[1]
FinalSel = #(EdgeSel[1], EdgeSel[2])
$.buttonOp #selectEdgeRing
while NEdg != EdgeSel[2] do
(
Edg = CryModelling.NxtEdgRing NEdg TargEdg
append FinalSel Edg
NEdg = Edg
)
)
)
polyop.setEdgeSelection $ FinalSel
)
else
(
$.buttonOp #selectEdgeRing
)
)
catch (print "The tool works only on EditablePoly Objects.")
)
-------------------------Limited Vert Loop----------------------------
CryModelling.VertsInSameLoop = fn VertsInSameLoop =
(
Verts = polyop.GetVertSelection $
Edgs = #()
for x in Verts do
(
Edges = polyop.GetEdgesUsingVert $ x
polyop.setEdgeSelection $ Edges
$.ButtonOp #SelectEdgeLoop
Tmp = polyop.GetEdgeSelection $
append Edgs Tmp
)
if (Edgs[1]*Edgs[2]).numberset != 0 then true else false
)
CryModelling.SelVertLoop = fn SelVertLoop =
(
try
(
if CryModelling.VertsInSameLoop() == true then
(
with undo on
(
with redraw off
(
Verts = polyop.GetVertSelection $
Edgs = #()
for x in Verts do
(
Edges = polyop.GetEdgesUsingVert $ x
polyop.setEdgeSelection $ Edges
$.ButtonOp #SelectEdgeLoop
Tmp = polyop.GetEdgeSelection $
append Edgs Tmp
)
LoopEdgs = Edgs[1]*Edgs[2]
V1Edges = (polyop.GetEdgesUsingVert $ (Verts as array)[1]) * LoopEdgs
V2Edges = (polyop.GetEdgesUsingVert $ (Verts as array)[2]) * LoopEdgs
LoopArr = #()
for i = 1 to 2 do
(
VEdgs = polyop.setEdgeSelection $ #{(V1Edges as array)[i], (V2Edges as array)[i]}
CryModelling.SelLimELoop()
append LoopArr (polyop.getEdgeSelection $)
)
FEdgs = LoopArr[1]*LoopArr[2]
FVerts = #{}
for x in FEdgs do
(
FVerts = FVerts + (polyop.GetVertsUsingEdge $ x)
)
polyop.setVertSelection $ FVerts
)
redrawViews()
)
)
else
(
print "Verts are not in the same loop!"
)
)
catch (print "The tool works only on EditablePoly Objects.")
)
-------------------------Limited Vert Ring------------------------------
CryModelling.SelVertRing = fn SelVertRing =
(
try
(
with undo on
(
with redraw off
(
VertSel = polyop.GetVertSelection $
UserEdgs = polyop.GetEdgeSelection $
Edgs = #{}
FEdgs = #{}
for v in VertSel do
(
Vedgs = polyop.GetEdgesUsingVert $ v
if Edgs.numberset != 0 then
(
Inter = Edgs * Vedgs
if Inter.numberset != 0 then
(
FEdgs = FEdgs + Inter
)
else
(
Edgs = Edgs + Vedgs
)
)
else
(
Edgs = Edgs + Vedgs
)
)
polyop.SetEdgeSelection $ FEdgs
SelLimERing()
ESel = polyop.GetEdgeSelection $
FVerts = #{}
for edg in ESel do
(
FVerts = FVerts + (polyop.GetVertsUsingEdge $ edg)
)
polyop.setEdgeSelection $ UserEdgs
polyop.setVertSelection $ FVerts
)
redrawviews()
)
)
catch (print "The tool works only on EditablePoly Objects.")
)
-------------------------Limited Poly Loop------------------------------
CryModelling.IsQuadPoly = fn IsQuadPoly =
(
Arr = #()
for x in $.selectedfaces do
(
a = (polyop.getFaceEdges $ x.index) as array
if a.count == 4 then
(
append Arr x
)
)
if Arr.count == $.selectedfaces.count then true else false
)
CryModelling.SelPolyLoop = fn SelPolyLoop =
(
try
(
if CryModelling.IsQuadPoly() == true then
(
EdgeCount = #{}
for x in $.selectedFaces do
(
a = (polyop.GetFaceEdges $ x.index) as array
for x in a do
(
append EdgeCount x
)
)
if (EdgeCount as array).count == ($.selectedFaces.count * 4) then
(
if $.selectedFaces.count == 1 then
(
with undo on
(
with redraw off
(
Sel = #{}
dg = polyop.SetEdgeSelection $ ((polyop.GetFaceEdges $ $.selectedFaces[1].index) as array)
$.buttonOp #selectEdgeRing
for x in $.selectedEdges do
(
a = (polyop.getEdgeFaces $ x.index) as array
for x in a do
(
if ((polyop.getFaceEdges $ x)as array).count == 4 then
(
append Sel x
)
)
)
polyop.SetFaceSelection $ Sel
)
redrawviews()
)
)
else
(
with undo on
(
with redraw off
(
Face1 = $.selectedFaces[1].index
Face2 = $.selectedFaces[2].index
Edgs1 = polyop.GetEdgesUsingFace $ Face1
Edgs2 = polyop.GetEdgesUsingFace $ Face2
UserSel = polyop.getedgeselection $
polyop.setEdgeSelection $ Edgs1
$.ButtonOp #SelectEdgeRing
NSel = (polyop.GetEdgeSelection $) - Edgs1
CrosSel = NSel * Edgs2
if CrosSel.numberset != 0 then
(
polyop.setEdgeSelection $ CrosSel
$.ButtonOp #SelectEdgeRing
NSel = (polyop.GetEdgeSelection $) - Edgs2
CrosSel2 = NSel * Edgs1
FinalEdgs = #{}
for i = 1 to 2 do
(
SelEdg = polyop.setEdgeSelection $ #((CrosSel as array)[i], (CrosSel2 as array)[i])
CryModelling.SelLimERing ()
FinalEdgs = FinalEdgs + (polyop.getedgeselection $)
)
polyop.setEdgeSelection $ UserSel
FinalFaces = #{}
for x in FinalEdgs do
(
Faces = polyop.getFacesUsingEdge $ x
for f in Faces do
(
if ((polyop.GetEdgesUsingFace $ f)*FinalEdgs).numberset == 2 then
(
append FinalFaces f
)
)
)
polyop.setFaceSelection $ FinalFaces
)
redrawViews()
)
)
)
)
else
(
if $.selectedFaces.count == 2 then
(
with undo on
(
with redraw off
(
Ar1 = #()
for x in $.selectedFaces do
(
Edg = polyop.getEdgesUsingFace $ x.index
append Ar1 Edg
)
FEdg = (Ar1[1]*Ar1[2])
polyop.setedgeselection $ FEdg
$.buttonOp #selectEdgeRing
Sel = #{}
for x in $.selectededges do
(
a = (polyop.getEdgeFaces $ x.index) as array
for x in a do
(
if ((polyop.getFaceEdges $ x)as array).count == 4 then
(
append Sel x
)
)
)
polyop.SetFaceSelection $ Sel
)
redrawviews ()
)
)
)
)
)
catch (print "The tool works only on EditablePoly Objects.")
)
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+682
View File
@@ -0,0 +1,682 @@
-------------------------------------------------------------------------------
-- Diagnostics.ms
-- Version 2.5
-- General cryTools control panel
-------------------------------------------------------------------------------
if diagnostics != undefined then
(
destroydialog diagnostics
)
rollout diagnostics "cryTools Control Panel 2.5"
(
group "Art"
(
checkbox warnMatsCheck "Check for Crytek shader at export"
checkbox reparentTwistCheck "Re-parent biped twist bones at export"
)
group "Animation"
(
checkbox loadOldAnimTools "Load Old Animation Tools"
checkbox noUnparentWeapons "Do not unparent $weapon_bone children at export"
--checkbox updateCollectionsCheck "Auto-update pose collections on max file open" --enabled:false
--checkbox syncCollectionsAtLoad "Sync pose collections at max start (P4)" --enabled:false
)
Group "Misc"
(
checkbox checkBeforeExport "Check before Export" checked:true
checkbox suppressWarningsCheck "Suppress all export warnings"
checkbox showSplashCheck "Show splash screen"
)
Group "Update/Uninstall/Rollback"
(
button update_btn " Reload/Install Updates From Your Local Build " align:#center enabled:false
button update_btnAB "Retrieve Latest Tools\Sync" align:#left enabled:false
checkbox BuildOn "LAN" offset:[150,-22] enabled:false
checkBox PerfOn "PerForce" offset:[195,-20] checked:true enabled:false
checkbox HTTPOn "CryHTTP" offset:[262,-20] enabled:false
checkbutton rollback_exporter "Rollback Exporter" offset:[-112,0] enabled:false
button uninstall_tools "Uninstall CryTools" offset:[-7,-26] enabled:false
label current_exportTXT "LOCAL BUILD: Cannot find Code_Changes.txt" align:#center enabled:false
)
button dumpCryToolsGlobals "dump crytools global vars" offset:[-100,0]
button callbackList "dump callbacks" offset:[18,-26]
button callbackRemove "remove callbacks" offset:[117,-26] tooltip:"right click to activate" enabled:true
--checkbox weaponChild "Remove $weapon_bone children (anim assets)" enabled:false
--label spacer01 ""
label maxVersionNum_crytools_LBL "MAX VERSION:" align:#left
label maxDirTxt_LBL "MAX PATH:" align:#left
label project_name_crytools_LBL "PROJECT: " align:#left
edittext projectEnter text:"NONE" offset:[60,-20] fieldWidth:180 --enabled:false
button pickProject "PICK" offset:[105,-21] height:15 --enabled:false
button setProject "SET" offset:[148,-21] height:15 --enabled:false
label domain_LBL "DOMAIN: " align:#left
label BuildPathFull_LBL "BUILD PATH: " align:#left
label cryINI_LBL "CRYEXPORT.INI PATH:" align:#left
label cryToolsINI_LBL "CRYTOOLS.INI PATH:" align:#left
label editorpath_LBL "EDITOR PATH:" align:#left
label cbaPath_LBL "CBA PATH: UNDEFINED" align:#left
label rollback_status_LBL "ROLLBACK STATUS:" align:#left
label localBuildNumber_crytools_LBL "LOCAL BUILD #: " align:#left
label latestbuildnumber_crytools_LBL "LATEST BUILD #:" align:#left
label latest_build_crytools_LBL "LATEST BUILD ON SERVER: " align:#left
--button refresh "REFRESH" offset:[140,-20]
--button getPoses "Get latest (P4)" offset:[120,-493] --enabled:false
on diagnostics open do
(
mat_dump = #("true","false","crytools.warnmats:")
--warn mats set
if crytools.warnmats == true then
(
warnMatsCheck.checked = true
)
else
(
warnMatsCheck.checked = false
)
--reparent twist set
if crytools.reparenttwist == true then
(
reparenttwistcheck.checked = true
)
else
(
reparenttwistcheck.checked = false
)
--check before export
if crytools.checkbeforeexport == true then
(
checkBeforeExport.checked = true
)
else
(
checkBeforeExport.checked = false
)
--suppress warnings set
if crytools.suppresswarnings == true then
(
suppressWarningsCheck.checked = true
)
else
(
suppressWarningsCheck.checked = false
)
--do not unparent weapon_bone children
if crytools.nounparentw == true then
(
noUnparentWeapons.checked = true
)
else
(
noUnparentWeapons.checked = false
)
--ActivateAnimTools
if crytools.loadoldanimtools == true then
(
loadOldAnimTools.checked = true
)
else
(
loadOldAnimTools.checked = false
)
--show splash
if crytools.showSplash == true then
(
showSplashCheck.checked = true
)
else
(
showSplashCheck.checked = false
)
/*
--update collections
if crytools.updateCollections == true then
(
updateCollectionsCheck.checked = true
)
else
(
updateCollectionsCheck.checked = false
)
*/
/*
--sync collections
if crytools.syncCollections == true then
(
syncCollectionsAtLoad.checked = true
)
else
(
syncCollectionsAtLoad.checked = false
)
*/
maxDirTxt_LBL.text = ("MAX PATH: " + crytools.maxDirTxt)
maxVersionNum_crytools_LBL.text = ("MAX VERSION: " + crytools.maxVersionNum as string)
--crytools.rollback_status
if crytools.rollback_status == undefined then
(
rollback_status_LBL.text = ("ROLLBACK STATUS: UNDEFINED")
)
else
(
rollback_status_LBL.text = ("ROLLBACK STATUS: " + crytools.rollback_status)
)
--crytools.project_name
/*if crytools.project_name == undefined then
(
project_name_crytools_LBL.text = ("PROJECT: UNDEFINED")
)
else
(
project_name_crytools_LBL.text = ("PROJECT: " + crytools.project_name)
)*/
/*
if crytools.project_name == undefined then
(
projectEnter.text = NONE
)
else
(
projectEnter.text = crytools.project_name
)
*/
if crytools.BuildPathFull == undefined then
projectEnter.text = "NONE"
else
projectEnter.text = crytools.BuildPathFull
--DOMAIN
if crytools.DOMAIN == undefined then
(
domain_LBL.text = ("DOMAIN: UNDEFINED")
)
else
(
domain_LBL.text = ("DOMAIN: " + crytools.DOMAIN)
)
cryINI_LBL.text = ("CRYEXPORT.INI PATH: " + crytools.cryINI)
cryToolsINI_LBL.text = ("CRYTOOLS.INI PATH: " + (sysInfo.tempDir + "cry_temp\\crytools.ini"))
editorpath_LBL.text = ("EDITOR PATH: " + crytools.editorPath)
cbaPath_LBL.text = ("CBA PATH: " + crytools.cbaPath)
--crytools.BuildPathFull
if crytools.BuildPathFull ==undefined then
(
BuildPathFull_LBL.text = ("BUILD PATH: UNDEFINED")
)
else
(
BuildPathFull_LBL.text = ("BUILD PATH: " + crytools.BuildPathFull)
)
if crytools.latest_build != undefined then
(
localBuildNumber_crytools_LBL.text = ("LOCAL BUILD #: " + crytools.localBuildNumber as string)
latestbuildnumber_crytools_LBL.text = ("LATEST BUILD #: " + crytools.latestbuildnumber as string)
latest_build_crytools_LBL.text = ("LATEST BUILD ON SERVER: " + crytools.latest_build)
)
-- in from updateTools
current_exportTXT.text = ("LOCAL BUILD: " + crytools.localBuildNumber as String+ " LATEST BUILD: " + crytools.latestbuildnumber as String)
if crytools.rollback_status == "true" do (rollback_exporter.checked = true)
if crytools.rollback_status == "false" do (rollback_exporter.checked = false)
)
on getPoses pressed do
(
p4Update = ("p4 sync " + crytools.BuildPathFull + "_Production\\Art\\Animation\\Human\\Resources\\poses\\...")
crytools.scmd p4Update true
)
on dumpCryToolsGlobals pressed do
(
print (apropos "crytools")
)
on callbacklist pressed do
(
print (callbacks.show())
)
on callbackRemove rightclick do
(
callbacks.removescripts()
)
--warn mats checked
on warnMatsCheck changed state do
(
cryTools.outToINI "CryTools" "warnmats" (state as String)
crytools.warnmats = state
)
--reparent checked
on reparentTwistCheck changed state do
(
cryTools.outToINI "CryTools" "reparent" (state as String)
crytools.reparenttwist = state
)
--no unparent $weapon_bone checked
on noUnparentWeapons changed state do
(
cryTools.outToINI "CryTools" "no_unparent_weapons" (state as String)
crytools.nounparentw = state
)
--Activate Anim Tools
on loadOldAnimTools changed state do
(
cryTools.outToINI "CryTools" "loadOld_animTools" (state as String)
if loadOldAnimTools.checked == false then
(
try closeRolloutfloater CryAnimationTools catch()
try
(
filein (crytools.BuildPathFull + "Tools\\maxscript\\cryAnim\\load.ms")
)
catch ( print "No load.ms in cryAnim found" )
)
else
(
if cryTools.cryAnim != undefined then
(
cryTools.cryAnim.base.killCryAnim()
filein (crytools.BuildPathFull + "Tools\\maxscript\\CryAnimationTools.ms")
)
)
cryTools.loadoldanimtools = state
crytools.generateMenu()
)
--check before export
on checkBeforeExport changed state do
(
cryTools.outToINI "CryTools" "checkExport" (state as String)
crytools.checkbeforeexport = state
)
--suppress warnings checked
on suppressWarningsCheck changed state do
(
cryTools.outToINI "CryTools" "suppress" (state as String)
crytools.suppresswarnings = state
)
--show splash checked
on showSplashCheck changed state do
(
cryTools.outToINI "CryTools" "splash" (state as String)
crytools.showSplash = state
)
/*
--auto update collections
on updateCollectionsCheck changed state do
(
if updateCollectionsCheck.checked == false then
(
oldData = (crytools.inFromINI (sysInfo.tempDir + "cry_temp\\crytools.ini") false)
oldData[11] = "UPDATE_COLLECTIONS:false"
crytools.outtoini oldData (sysInfo.tempDir + "cry_temp\\crytools.ini") false
crytools.updateCollections = false
callbacks.removescripts #filePostOpen id:#updateCollections
)
else
(
oldData = (crytools.inFromINI (sysInfo.tempDir + "cry_temp\\crytools.ini") false)
oldData[11] = "UPDATE_COLLECTIONS:true"
crytools.outtoini oldData (sysInfo.tempDir + "cry_temp\\crytools.ini") false
crytools.updateCollections = true
txt = "if $bip01 != undefined then (\n"
txt += "biped_ctrl = $bip01.controller\n"
txt += "biped.deleteallcopycollections biped_ctrl\n"
txt += "try(\n"
txt += "biped.loadCopyPasteFile biped_ctrl \"J:/Game02_Production/Art/Animation/Human/Resources/poses/crysis_male.cpy\"\n"
txt += "biped.loadCopyPasteFile biped_ctrl \"J:/Game02_Production/Art/Animation/Human/Resources/poses/crysis_female.cpy\"\n"
txt += "biped.loadCopyPasteFile biped_ctrl \"J:/Game02_Production/Art/Animation/Human/Resources/poses/crysis_male_combat.cpy\"\n"
txt += "biped.loadCopyPasteFile biped_ctrl \"J:/Game02_Production/Art/Animation/Human/Resources/poses/crysis_male_crouch.cpy\"\n"
txt += "biped.loadCopyPasteFile biped_ctrl \"J:/Game02_Production/Art/Animation/Human/Resources/poses/crysis_male_prone.cpy\"\n"
txt += "biped.loadCopyPasteFile biped_ctrl \"J:/Game02_Production/Art/Animation/Human/Resources/poses/crysis_male_relaxed.cpy\"\n"
txt += "biped.loadCopyPasteFile biped_ctrl \"J:/Game02_Production/Art/Animation/Human/Resources/poses/crysis_male_stealth.cpy\")\n"
txt += "catch (messagebox \"Cannot locate pose files\"))"
callbacks.addscript #filePostOpen txt id:#updateCollections
)
)
*/
/*
on syncCollectionsAtLoad changed state do
(
if syncCollectionsAtLoad.checked == false then
(
oldData = (crytools.inFromINI (sysInfo.tempDir + "cry_temp\\crytools.ini") false)
oldData[12] = "SYNC_COLLECTIONS:false"
crytools.outtoini oldData (sysInfo.tempDir + "cry_temp\\crytools.ini") false
crytools.syncCollections = false
)
else
(
oldData = (crytools.inFromINI (sysInfo.tempDir + "cry_temp\\crytools.ini") false)
oldData[12] = "SYNC_COLLECTIONS:true"
crytools.outtoini oldData (sysInfo.tempDir + "cry_temp\\crytools.ini") false
crytools.syncCollections = true
)
)
*/
on pickProject pressed do
(
local tempVar = (getSavePath caption:"Project Directory" initialDir:crytools.BuildPathFull)
if tempVar != undefined then
(
if tempVar[tempVar.count] != "\\" then
append tempVar "\\"
--crytools.BuildPathFull = tempVar
projectEnter.text = tempVar
)
)
on setProject pressed do
(
local buildPathNew = ""
local buildPathFilter = filterString projectEnter.text "\\"
for i = 1 to (buildPathFilter.count - 1) do
buildPathNew += buildPathFilter[i] + "\\"
buildPathNew += buildPathFilter[buildPathFilter.count]
if (queryBox ("Changing your project path to a bad location can render yout tools unusable.\nThis effects not only CryTools, but CryTif and others.\n\nAre you sure you would like to change your path to:\n" + buildPathNew) title:"Tread Carefullly.." beep:true) == true then
(
if crytools.maxversionnum >= 10 then
(
registry.openKey HKEY_CURRENT_USER "Software\\Crytek\\Settings\\" accessRights:#all key:&key1
registry.setValue key1 "RootPath" #REG_SZ buildPathNew
)
else
(
messagebox "The ability to edit the registry has been limited to versions of Max10 and later.\nWe used to dynamically generate, execute, and delete VBScripts to accomplish this.\nWindows Vista does not like this, and it was a hack anyway."
return undefined
)
)
else
(
return undefined
)
local animlistPathNew = buildPathNew + "Game\Animations\Animations.cba"
local folderArray = getDirectories (buildPathNew + "*")
local folderArrayNew = #()
if folderArray.count > 0 then
(
for i = 1 to folderArray.count do
(
tempArray = #(folderArray[i])
--// Add subFolderFiles to list
join tempArray (getDirectories (folderArray[i] + "*" ))
join folderArrayNew tempArray
)
)
local RCPath = ""
for i = 1 to folderArrayNew.count do
(
local tempArray = getFiles (folderArrayNew[i] + "*.*")
for f = 1 to tempArray.count do
(
if (findString tempArray[f] "rc.exe") != undefined then
(
RCPath = folderArrayNew[i]
exit
)
if RCPath != "" then
exit
)
)
local editorPathNew = ""
if RCPath != "" then
(
editorPathFilter = filterString RCPath "\\"
for i = 1 to (editorPathFilter.count - 1) do
editorPathNew += editorPathFilter[i] + "\\"
editorPathNew += "Editor.exe"
)
/*setINISetting (getDir #maxroot + "Plugins\\CryExport.ini") "SandBox" "path" editorPathNew
cryTools.editorPath = editorPathNew
setINISetting (getDir #maxroot + "Plugins\\CryExport.ini") "SandBox" "buildPath" buildPathNew
cryTools.buildPathFull = buildPathNew
setINISetting (getDir #maxroot + "Plugins\\CryExport.ini") "SandBox" "animlistpath" animlistPathNew
cryTools.cbapath = animlistPathNew*/
fileIn (getDir #maxroot + "scripts\\startup\\loadCryTools.ms")
)
--------------------------------------------------------------------------
-- UPDATE / UNINSTALL / ROLLBACK
--------------------------------------------------------------------------
on BuildOn changed state do
(
if BuildOn.checked == true then
(
PerfOn.checked = false
HTTPOn.checked = false
)
)
on PerfOn changed state do
(
if PerfOn.checked == true then
(
BuildOn.checked = false
HTTPOn.checked = false
)
)
on HTTPOn changed state do
(
if HTTPOn.checked == true then
(
PerfOn.checked = false
BuildOn.checked = false
)
)
on update_btn pressed do
(
filein (crytools.BuildPathFull + "Tools\\maxscript\\AddCryTools.ms")
current_exportTXT.text = ("LOCAL BUILD: " + crytools.localBuildNumber + " LATEST BUILD: " + crytools.latestbuildnumber)
print ("Build updated from " + crytools.BuildPathFull)
--destroyDialog checkForUpdate
)
-- Get Latest From AB and Latest Build
-------------------------------------------------------------------------------
on update_btnAB pressed do
(
try
(
if crytools.BuildPathFull == "J:\\Game04\\" then
(
messagebox "You are on Game04"
return undefined
)
-- AB Stuff
if HTTPOn.checked == true then
(
rollout httpSock "httpSock" width:0 height:0
(
activeXControl port "Microsoft.XMLHTTP" setupEvents:false releaseOnClose:false
);
createDialog httpSock pos:[-100,-100];
destroyDialog httpSock;
httpSock.port.open "GET" "http://www.crytek.com/index.htm" false;
httpSock.port.setrequestheader "If-Modified-Since" "Sat, 1 Jan 1900 00:00:00 GMT";
httpSock.port.send();
print (httpSock.port.responsetext);
)
-- P4 stuff
if perfOn.checked == true then
(
p4Update = ("p4 sync " + crytools.BuildPathFull + "Tools\...")
crytools.scmd p4Update true
)
if BuildOn.checked == true then
(
-- Latest Build Stuff
rollback_check = openFile (sysInfo.tempDir + "cry_temp\\crytools.rollback_status.ini")
if rollback_check == undefined then (crytools.rollback_status = "false")
crytools.rollback_status = "false"
latestCryExport = (crytools.md5 ("\\\\Storage\\builds\\" + crytools.latest_build + "\\Tools\\CryExport8.dlu"))
if crytools.md5 (crytools.maxDirTxt + "plugins\\CryExport8.dlu") != latestCryExport then
(
if crytools.existfile ("\\\\storage\\builds\\" + crytools.latest_build + "\\Tools\\CryExport8.dlu") == false then
(
messageBox ("There is no exporter on the build server in the latest folder [" + crytools.latest_build + "]") title: "No Exporter Found!"
)
else
(
messageBox ("There is a new exporter available in build " + crytools.latestbuildnumber) title: "New Exporter Found!"
crytools.scmd (("copy /Y \\\\storage\\builds\\" + crytools.latest_build + "\\Tools\\CryExport8.dlu ") + (crytools.BuildPathFull + "Tools\\")) true
)
)
)
)
catch
(
messageBox "Either cannot locate the build server [\\\\Storage\\], or you do not have crytools.alienBrain correctly installed." title: "Something is wrong!"
)
messageBox ("CryTools has checked Build [" + crytools.latestbuildnumber + "] for updates.\nPlease click the \"Check/Install Updates From Your Latest Build\" button to install any updates it found.") title: ("Checked Build \\Tools (" + localTime + ") - Checked Plugins From Build #" + crytools.latestbuildnumber)
)
-- Rollback Exporter
-------------------------------------------------------------------------------
on rollback_exporter changed state do
(
try
if (rollback_exporter.checked == true) then
(
crytools.rollback_status = "true"
crytools.scmd ("mkdir \"" + sysInfo.tempDir + "cry_temp\\bad\\\"") true
crytools.scmd ("move /Y " + ("\"" + crytools.maxDirTxt + "plugins\\CryExport8.dlu\"") + " " + (sysInfo.tempDir + "cry_temp\\bad\\")) true
crytools.scmd ("move /Y " + ("\"" +sysInfo.tempDir + "cry_temp\\CryExport8.dlu\"") + " " + (crytools.maxDirTxt + "plugins\\")) true
print "CryExport8.dlu has been rolled back to the previous version."
output_rollbackINI = openfile (sysInfo.tempDir + "\\cry_temp\\crytools.rollback_status.ini") mode:"w"
format crytools.rollback_status to: output_rollbackINI
close output_rollbackINI
messageBox "CryExport8.dlu has been rolled back to the previous version.\nTo get a newer exporter later you must click \"Get Latest Tools From crytools.alienBrain/Current Build\", or update your build." title: "CryExport8.dlu Rolled Back!"
)
else
(
crytools.rollback_status = "false"
output_rollbackINI = openfile (sysInfo.tempDir + "\\cry_temp\\crytools.rollback_status.ini") mode:"w"
format crytools.rollback_status to: output_rollbackINI
close output_rollbackINI
messageBox "You are no longer in rollback mode.\nTo get a newer exporter later you must click \"Get Latest Tools From crytools.alienBrain/Current Build\", or update your build." title: "CryExport8.dlu No Longer Rolled Back!"
)
catch
(
messageBox "Rollback error 1442." title:"Error!"
return undefined
)
)
-- Uninstall
-------------------------------------------------------------------------------
on uninstall_tools pressed do
(
rollout areYouSure "CryTools Uninstallation"
(
label doyouwant "Are you sure you want to completely remove CryTools?" align:#center
button uninstallNow "Yes" pos:[110,25]
button donotuninstall "No" pos:[150,25]
on donotuninstall pressed do
(
destroyDialog areYouSure
)
on uninstallNow pressed do
(
subMenu = menuMan.findMenu "CryTools"
menuMan.unRegisterMenu subMenu
deleteFile "$UI\\MacroScripts\\CryTools-UpdateTools.mcr"
deleteFile "$UI\\MacroScripts\\CryTools-CryRigging.mcr"
deleteFile "$UI\\MacroScripts\\CryTools-CryMorphManager.mcr"
deleteFile "$UI\\MacroScripts\\CryTools-CryAnimation.mcr"
deleteFile "$UI\\MacroScripts\\CryTools-SceneBrowser.mcr"
deleteFile "$UI\\MacroScripts\\CryTools-help.mcr"
deleteFile "$UI\\MacroScripts\\CryTools-CryMorphManager.mcr"
deleteFile "$UI\\MacroScripts\\CryTools-CryInfoLoader.mcr"
deleteFile "$UI\\MacroScripts\\CryTools-CryInfo.mcr"
deleteFile "$UI\\MacroScripts\\CryTools-CryArtistTools.mcr"
deleteFile "$UI\\MacroScripts\\CryTools-ControlPanel.mcr"
deleteFile "$UI\\MacroScripts\\CryKeys-UVscaleUniform.mcr"
deleteFile "$UI\\MacroScripts\\CryKeys-UVcollapseVertical.mcr"
deleteFile "$UI\\MacroScripts\\CryKeys-CryKeys-UVcollapseHorizontal.mcr"
deleteFile "$UI\\MacroScripts\\CryKeys-showVertexColors.mcr"
deleteFile "$UI\\MacroScripts\\CryKeys-resetXformCollapse.mcr"
deleteFile "$UI\\MacroScripts\\CryKeys-preserveUV.mcr"
deleteFile "$UI\\MacroScripts\\CryKeys-exportNodes.mcr"
deleteFile "$UI\\MacroScripts\\CryKeys-exportAnim.mcr"
deleteFile "$UI\\MacroScripts\\CryKeys-changeRefCoordSys.mcr"
deleteFile "$UI\\MacroScripts\\CryKeys-CenterPivot.mcr"
deleteFile "$UI\\MacroScripts\\CryKeys-showHideVertexColors.mcr"
deleteFile "$UI\\MacroScripts\\CryKeys-UVcollapseHorizontal.mcr"
crytools.maxDirTxt = (getdir #maxroot)
crytools.minusr (crytools.maxDirTxt + "scripts\\startup\\LoadCryTools.ms")
sleep 1
deleteFile (crytools.maxDirTxt + "scripts\\startup\\LoadCryTools.ms")
print (sysInfo.username + " has uninstalled CryTools.")
destroyDialog areYouSure
--destroyDialog checkForUpdate
messageBox ("CryExport8.dlu is still in your plugins folder because it is in use.\n" + sysInfo.username + ", cryTools has been uninstalled.") title: "Uninstallation complete!"
)
)
createDialog areYouSure 300 60 bgcolor:black fgcolor:white
)
/*on button refresh pressed do
(
filein (crytools.BuildPathFull + "tools\\maxscript\\Diagnostics.ms")
)*/
)
createDialog diagnostics 350 600 style:#(#style_resizing,#style_titlebar,#style_minimizebox,#style_sunkenedge,#style_sysmenu)
+227
View File
@@ -0,0 +1,227 @@
/*
[DESCRIPTION]
FBX to Bip conversion script.
[USAGE]
With a merged in FBX bone structure and a matching biped in the scene run this script.
It will go frame by frame and align the Bip structure to the Bone structure.
One limitation, the script is hardcoded to work with the Bone structure names with "_Bip01" as a prefix and the matching bip being named "Bip01"
This will be adressed in the future.
[CREATION INFO]
Author:Paul Hormis
Last Updated: July 17, 2006
[VERSION HISTORY]
v1.00 Created
Copyright (C) 2006 Paul Hormis
*/
Global FBXtoBipXFer, AnimXferProgress
Struct FBXtoBipXFerStruct
(
PelvisRef = undefined,
PelvisRot = undefined,
PelvisRotFinal = undefined,
LThighRef = undefined,
RThighRef = undefined,
BipPartStep = 100.0 / 51.0,
function DoCreatePointAtPivot ObjectForNull: =
(
try
(
tempRet = undefined
for MSobj in ObjectForNull do
with animate off
(
PivotPointHelper = Point pos:(MSobj.transform.pos) isSelected:off size:3 centermarker:off axistripod:off cross:on Box:off constantscreensize:off drawontop:off wirecolor:yellow
PivotPointHelper.name = ((MSobj.name as string) + "_PivotPoint")
in coordsys world PivotPointHelper.rotation = inverse(MSobj.transform.rotationPart)
in coordsys world PivotPointHelper.pos = MSobj.transform.pos
tempRet = PivotPointHelper
)
return tempRet
)catch()
),
function DoPosRotConst SelectedObj PARENTOBJ =
(
SelectedObj.position.controller = position_constraint()
SelectedObj.rotation.controller = orientation_constraint()
SelectedObj.position.controller.appendTarget PARENTOBJ 100
SelectedObj.rotation.controller.appendTarget PARENTOBJ 100
SelectedObj.position.controller.relative = false
SelectedObj.rotation.controller.relative = false
),
fn DoRotConst SelectedObj PARENTOBJ =
(
SelectedObj.rotation.controller = orientation_constraint()
SelectedObj.rotation.controller.appendTarget PARENTOBJ 100
SelectedObj.rotation.controller.relative = false
),
function SetBipPosAndRot BipTarget: BoneSource: step: =
(
biped.setTransform BipTarget #pos BoneSource.pos true
biped.setTransform BipTarget #rotation BoneSource.transform.rotation true
),
function SetBipRot BipTarget: BoneSource: step: =
(
biped.setTransform BipTarget #rotation BoneSource.transform.rotation true
),
function SetBipPos BipTarget: BoneSource: step: =
(
biped.setTransform BipTarget #pos BoneSource.pos true
),
function DoFBXtoBipXFer =
(
FBXtoBipXFer.LThighRef = (FBXtoBipXFerStruct.DoCreatePointAtPivot ObjectForNull:#($'_Bip01 L Thigh'))
FBXtoBipXFer.RThighRef = (FBXtoBipXFerStruct.DoCreatePointAtPivot ObjectForNull:#($'_Bip01 R Thigh'))
FBXtoBipXFer.LThighRef.parent = $'_Bip01 L Thigh'
FBXtoBipXFer.RThighRef.parent = $'_Bip01 R Thigh'
FBXtoBipXFer.PelvisRef = point name:"PelvisReferenceLocation" size:3
FBXtoBipXFerStruct.DoPosRotConst FBXtoBipXFer.PelvisRef FBXtoBipXFer.LThighRef
FBXtoBipXFerStruct.DoPosRotConst FBXtoBipXFer.PelvisRef FBXtoBipXFer.RThighRef
FBXtoBipXFer.PelvisRot = point pos:(FBXtoBipXFer.PelvisRef.transform.pos) name:"PelvisReferenceRotation" size:3 isSlected:off cross:off box:on
FBXtoBipXFer.PelvisRot.parent = FBXtoBipXFer.PelvisRef
FBXtoBipXFerStruct.DoRotConst FBXtoBipXFer.PelvisRot $'_Bip01 Pelvis'
FBXtoBipXFer.PelvisRotFinal = (FBXtoBipXFerStruct.DoCreatePointAtPivot ObjectForNull:FBXtoBipXFer.PelvisRot)
in coordsys local rotate FBXtoBipXFer.PelvisRotFinal (angleaxis 90 [0,1,0])
in coordsys local rotate FBXtoBipXFer.PelvisRotFinal (angleaxis 90 [0,0,1])
FBXtoBipXFer.PelvisRotFinal.parent = FBXtoBipXFer.PelvisRot
setCommandPanelTaskMode mode:#create -- Sets the command panel to create. Motion panel slows down processing.
cui.commandPanelOpen = false -- hides the command panel
clearSelection() -- clears the selection
if (viewport.getlayout()) != #layout_1 do (max tool maximize) -- If the viewport is not maximized then it will do so.
StartFrame = animationRange.start.frame as integer
EndFrame = animationRange.end.frame as integer
frameCount = EndFrame - StartFrame
progressFrameSteps = undefined
progressFrameSteps = 100.0 / frameCount
rollout AnimXferProgress "AnimationTransfer Progress" width:525 height:32
(
label ProgressInfo "Processing Animation Transfer" pos:[10,2] width:300 height:15
label CurrentFrameLabel "Frame:" pos:[400,2] width:35 height:15
label CurrentFrame "" pos:[440,2] width:80 height:15
progressBar SubProgress "" pos:[10,17] width:505 height:7 color:blue
progressBar MainProgress "" pos:[10,23] width:505 height:7 color:green
)
createdialog AnimXferProgress
animButtonState = true
for x = 0 to frameCount do
with redraw off
(
slidertime = (StartFrame + x)
AnimXferProgress.CurrentFrame.text = (slidertime.frame as integer) as string
AnimXferProgress.MainProgress.value = (progressFrameSteps * x + 1) -- I commented this out for speed
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01' BoneSource:FBXtoBipXFer.PelvisRotFinal
biped.setTransform $'Bip01 Pelvis' #rotation $'Bip01 Pelvis'.transform.rotation true
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 Spine' BoneSource:$'_Bip01 Spine' step:2
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 Spine1' BoneSource:$'_Bip01 Spine1' step:3
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 Spine2' BoneSource:$'_Bip01 Spine2' step:3
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 Spine3' BoneSource:$'_Bip01 Spine3' step:3
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 Neck' BoneSource:$'_Bip01 Neck' step:4
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 Head' BoneSource:$'_Bip01 Head' step:5
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Clavicle' BoneSource:$'_Bip01 L Clavicle' step:6
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L UpperArm' BoneSource:$'_Bip01 L UpperArm' step:7
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Forearm' BoneSource:$'_Bip01 L Forearm' step:8
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Hand' BoneSource:$'_Bip01 L Hand' step:9
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Finger0' BoneSource:$'_Bip01 L Finger0' step:10
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Finger01' BoneSource:$'_Bip01 L Finger01' step:11
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Finger02' BoneSource:$'_Bip01 L Finger02' step:12
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Finger1' BoneSource:$'_Bip01 L Finger1' step:13
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Finger11' BoneSource:$'_Bip01 L Finger11' step:14
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Finger12' BoneSource:$'_Bip01 L Finger12' step:15
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Finger2' BoneSource:$'_Bip01 L Finger2' step:16
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Finger21' BoneSource:$'_Bip01 L Finger21' step:17
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Finger22' BoneSource:$'_Bip01 L Finger22' step:18
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Finger3' BoneSource:$'_Bip01 L Finger3' step:19
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Finger31' BoneSource:$'_Bip01 L Finger31' step:20
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Finger32' BoneSource:$'_Bip01 L Finger32' step:21
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Finger4' BoneSource:$'_Bip01 L Finger4' step:22
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Finger41' BoneSource:$'_Bip01 L Finger41' step:23
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Finger42' BoneSource:$'_Bip01 L Finger42' step:24
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Clavicle' BoneSource:$'_Bip01 R Clavicle' step:25
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R UpperArm' BoneSource:$'_Bip01 R UpperArm' step:26
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Forearm' BoneSource:$'_Bip01 R Forearm' step:27
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Hand' BoneSource:$'_Bip01 R Hand' step:28
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Finger0' BoneSource:$'_Bip01 R Finger0' step:29
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Finger01' BoneSource:$'_Bip01 R Finger01' step:30
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Finger02' BoneSource:$'_Bip01 R Finger02' step:31
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Finger1' BoneSource:$'_Bip01 R Finger1' step:31
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Finger11' BoneSource:$'_Bip01 R Finger11' step:33
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Finger12' BoneSource:$'_Bip01 R Finger12' step:34
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Finger2' BoneSource:$'_Bip01 R Finger2' step:35
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Finger21' BoneSource:$'_Bip01 R Finger21' step:36
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Finger22' BoneSource:$'_Bip01 R Finger22' step:37
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Finger3' BoneSource:$'_Bip01 R Finger3' step:38
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Finger31' BoneSource:$'_Bip01 R Finger31' step:39
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Finger32' BoneSource:$'_Bip01 R Finger32' step:40
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Finger4' BoneSource:$'_Bip01 R Finger4' step:41
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Finger41' BoneSource:$'_Bip01 R Finger41' step:42
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Finger42' BoneSource:$'_Bip01 R Finger42' step:43
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Thigh' BoneSource:$'_Bip01 L Thigh' step:44
--FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Calf' BoneSource:$'_Bip01 L Calf' step:45
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Foot' BoneSource:$'_Bip01 L Foot' step:46
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 L Toe0' BoneSource:$'_Bip01 L Toe0' step:47
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Thigh' BoneSource:$'_Bip01 R Thigh' step:48
--FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Calf' BoneSource:$'_Bip01 R Calf' step:49
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Foot' BoneSource:$'_Bip01 R Foot' step:50
FBXtoBipXFer.SetBipPosAndRot BipTarget:$'Bip01 R Toe0' BoneSource:$'_Bip01 R Toe0' step:51
gc() -- I added this garbage collection to try to speed up the script.
)
delete FBXtoBipXFer.PelvisRef
delete FBXtoBipXFer.PelvisRot
delete FBXtoBipXFer.PelvisRotFinal
delete FBXtoBipXFer.LThighRef
delete FBXtoBipXFer.RThighRef
animButtonState = false
destroyDialog AnimXferProgress
cui.commandPanelOpen = true
)
)
FBXtoBipXFer = FBXtoBipXFerStruct()
FBXtoBipXFer.DoFBXtoBipXFer()
+61
View File
@@ -0,0 +1,61 @@
-------------------------------------------------------------------------------
-- LoadCryTools.ms
-- Version 2.2 External
-- By: Christopher Evans
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
-- Get The Build Dirs
-------------------------------------------------------------------------------
-- Local Build Dir
if csexport != undefined then
(
global maxDirTxt_crytools = (getdir #maxroot)
global cryINI_crytools = (getdir #maxroot + "plugins\\CryExport.ini")
errorFound = false
try ( global buildPathFull_crytools = csexport.get_root_path() + "\\" )
catch
(
global buildPathFull_crytools = getINISetting cryINI_crytools "SandBox" "buildPath"
if buildPathFull_crytools == "" then
(
messageBox "Incompatible version of CryTools and CryExport" title:"Error loading CryTools"
errorFound = true
)
else
print "Loading CryTools from INI file"
)
if (doesfileexist(buildPathFull_crytools + "Bin64vc141\\Editor.exe") == true then
global editorPath_crytools = buildPathFull_crytools + "Bin64vc141\\Editor.exe"
else if (doesfileexist(buildPathFull_crytools + "Bin64vc140\\Editor.exe") == true then
global editorPath_crytools = buildPathFull_crytools + "Bin64vc140\\Editor.exe"
else
messagebox("I cannot find Editor.exe")
-- Load CryTools
-------------------------------------------------------------------------------
if errorFound == false then
(
if buildPathFull_crytools != "" then
(
if (doesfileexist (BuildPathFull_crytools + "Tools\\maxscript\\AddCryTools.ms")) == true then
FileIn (BuildPathFull_crytools + "Tools\\maxscript\\AddCryTools.ms")
else
messagebox ("I cannot find" + (BuildPathFull_crytools + "Tools\\maxscript\\AddCryTools.ms"))
)
else
messageBox "Can't find local Build from cryExport.ini" title:"Error loading CryTools"
)
)
else
messageBox "Error initialising CryTools: CryExport plugin not found"
+268
View File
@@ -0,0 +1,268 @@
--sceneView . Christopher Evans . Crytek
if sceneView != undefined then
(
destroyDialog sceneView
)
ilTv = dotNetObject "System.Windows.Forms.ImageList"
ilTv.imageSize = dotNetObject "System.Drawing.Size" 16 15
rollout sceneView "SceneView v.001"
(
fn getIconFromBitmap thePath number iconFileName =
(
theFileName = getDir #image +"\\icon_"+ iconFileName +".bmp"
if not doesFileExist theFileName do
(
tempBmp = openBitmap thePath
iconBmp = bitmap 16 15
for v = 0 to 14 do
setPixels iconBmp [0,v] (getPixels tempBmp [(number-1)*16, v] 16)
iconBmp.filename = theFileName
save iconBmp
close iconBmp
close tempBmp
)
img = dotNetClass "System.Drawing.Image" --create an image
ilTv.images.add (img.fromFile theFileName) --add to the list
)
fn initTreeView tv =
(
tv.Indent= 28
tv.CheckBoxes = true --same as in ActiveX
tv.labelEdit = true
tv.Indent = 15
tv.Scrollable = true
colorTest = dotNetClass "System.Drawing.Color"
tv.BackColor = colorTest.FromArgb 255 196 196 196
iconDir = (getDir #ui) + "\\icons\\"
--We call our function for each icon, this time also passing a
--third argument with the icon name suffix.
getIconFromBitmap (iconDir + "Standard_16i.bmp") 2 "Sphere"
getIconFromBitmap (iconDir + "Standard_16i.bmp") 1 "Box"
getIconFromBitmap (iconDir + "Lights_16i.bmp") 3 "Light"
getIconFromBitmap (iconDir + "Cameras_16i.bmp") 2 "Camera"
getIconFromBitmap (iconDir + "Helpers_16i.bmp") 1 "Helper"
getIconFromBitmap (iconDir + "Splines_16i.bmp") 2 "Shape"
getIconFromBitmap (iconDir + "Systems_16i.bmp") 1 "Bone"
--At the end, we assign the ImageList to the TreeView.
tv.imageList = ilTv
)
fn addChildren theNode theChildren =
(
for c in theChildren do
(
newNode = theNode.Nodes.add c.name c.name
newNode.tag = dotNetMXSValue c
--newNode.count = c.handle
--By default, all nodes will use icon 0 (the first one) unless
--specified otherwise via the .iconIndex and .selectedIconIndex
--properties. We set both of them to the icon corresponding to
--the superclass of the scene object:
newNode.imageIndex = newNode.selectedImageIndex = case superclassof c of
(
Default: 1
GeometryClass:
(
case (c.classid[1]) of
(
Default: 1
683634317: 6 -- bones
37157: 6 -- biped objects
)
)
Light: 2
Camera: 3
Helper: 4
)
newNode.checked = not c.isHidden --same as in ActiveX
--For the color, we create a DotNet color class from the
--wirecolor of the object and assign to the .forecolor of
--the TreeView node:
--newNode.forecolor = (dotNetClass "System.Drawing.Color").fromARGB c.wirecolor.r c.wirecolor.g c.wirecolor.b
addChildren newNode c.children
)
)
--Since every node uses icon with index 0 unless specified otherwise
--the Root Node will use the first icon by default.
fn fillInTreeView tv =
(
theRoot = sceneview.tv.Nodes.add "WORLD" "WORLD"
rootNodes = for o in objects where o.parent == undefined collect o
sceneview.addChildren theRoot rootNodes
)
fn refresh =
(
sceneview.tv.nodes.clear()
sceneview.fillInTreeView tv
sceneview.tv.topnode.expand()
)
fn getSelectedNode =
(
try
(
if selection[1] != undefined then
(
--print selection[1].name
sceneview.tv.SelectedNode = (sceneview.tv.nodes.Find selection[1].name true)[1]
sceneview.tv.SelectedNode.EnsureVisible()
colorTest = dotNetClass "System.Drawing.Color"
sceneview.tv.selectednode.backColor = colorTest.FromArgb 255 221 221 221
sceneview.tv.refresh()
)
)
catch -- for undo
(
refresh()
if selection[1] != undefined then
(
sceneview.tv.SelectedNode = (sceneview.tv.nodes.Find selection[1].name true)[1]
sceneview.tv.SelectedNode.EnsureVisible()
colorTest = dotNetClass "System.Drawing.Color"
sceneview.tv.selectednode.backColor = colorTest.FromArgb 255 221 221 221
)
)
)
fn hideNode =
(
if selection != undefined then
(
for obj in selection do
(
sceneview.tv.SelectedNode = (sceneview.tv.nodes.Find obj.name true)[1]
sceneview.tv.selectednode.checked = false
)
)
)
fn unhideNode =
(
if selection != undefined then
(
for obj in selection do
(
sceneview.tv.SelectedNode = (sceneview.tv.nodes.Find obj.name true)[1]
sceneview.tv.selectednode.checked = true
)
)
)
dotNetControl tv "TreeView" width:290 height:565 align:#center
button layerM "Layer Manager" offset:[-9,0] Align:#left
label info " (X) + all (C/V) +- children" offset:[5,-22]
on layerM pressed do
(
macros.run "layers" "layermanager"
)
on tv Click arg do
(
hitNode = tv.GetNodeAt (dotNetObject "System.Drawing.Point" arg.x arg.y)
if hitNode != undefined do
try(select hitNode.tag.value) catch(max select none)
)
on tv AfterCheck arg do
(
try (arg.node.tag.value.isHidden = not arg.node.checked)catch()
)
on tv AfterLabelEdit arg do
(
if arg.label != undefined then
(
arg.node.tag.value.name = arg.label
)
)
on tv keyUp arg do
(
--print arg.keyValue
case arg.keyValue of
(
67: tv.selectedNode.collapse() -- c key
88: tv.expandAll() -- x key
86: tv.selectedNode.ExpandAll() -- v key
13: tv.selectedNode.beginEdit() -- enter key
113: tv.selectedNode.beginEdit() -- F2
116: refresh() -- F5
)
)
fn OnClick sender args =
(
--print sender.Text
case sender.Text of
(
"Expand branches": if tv.selectedNode != undefined then tv.selectedNode.ExpandAll()
)
)
on tv beforeSelect arg do
(
colorTest = dotNetClass "System.Drawing.Color"
try (sceneview.tv.selectednode.backColor = colorTest.FromArgb 255 196 196 196) catch()
)
on tv nodeMouseClick arg do
(
if arg.button == tv.mousebuttons.right then
(
contextMenu = dotNetObject "System.Windows.Forms.ContextMenu"
contextMenu.MenuItems.Clear()
dotnet.addeventhandler (contextMenu.MenuItems.Add("Select all children")) "Click" OnClick
dotnet.addeventhandler (contextMenu.MenuItems.Add("Expand branches")) "Click" OnClick
pointTest = (dotNetObject "System.Drawing.Point" arg.x arg.y)
contextmenu.Show tv pointTest
)
)
on sceneView open do
(
initTreeView tv
fillInTreeView tv
tv.topnode.expand()
callbacks.addScript #nodeCreated "sceneView.refresh()" id:#upDateSceneView
callbacks.addScript #nodePostDelete "sceneView.refresh()" id:#upDateSceneView
callbacks.addScript #nodeRenamed "sceneView.refresh()" id:#upDateSceneView
callbacks.addScript #postNodesCloned "sceneView.refresh()" id:#upDateSceneView
callbacks.addScript #postMirrorNodes "sceneView.refresh()" id:#upDateSceneView
callbacks.addScript #selectionSetChanged "sceneView.getSelectedNode()" id:#upDateSceneView
callbacks.addScript #nodeHide "sceneView.hideNode()" id:#upDateSceneView
--callbacks.addScript #nodeUnhide "sceneView.unhideNode()" id:#upDateSceneView
callbacks.addScript #sceneUndo "sceneView.refresh()" id:#upDateSceneView
callbacks.addScript #sceneRedo "sceneView.refresh()" id:#upDateSceneView
)
on sceneView close do
(
callbacks.removeScripts id:#upDateSceneView
)
on sceneView resized size do
(
size1 = size as string
size2 = filterstring size1 "[],"
layerM.pos = [4, (sceneView.height - 26)]
info.pos = [100, (sceneView.height - 23)]
tv.height = ((size2[2] as float) - 35)
tv.width = ((size2[1] as float) - 10)
)
)
createDialog sceneView 300 600 style:#(#style_resizing, #style_titlebar, #style_border, #style_sysmenu)
@@ -0,0 +1,992 @@
--
-- This is a modified copy of ui\usermacros\Macro_SkinTools.mcr from 3DS MAX 2011 package.
--
/*
Skin Operations Macro Script File
Created: Aug 6 2000
Author : Peter Watje
Version: 3ds max 6
12 dec 2003, Pierre-Felix Breton,
added product switcher: this macro file can be shared with all Discreet products
*/
--***********************************************************************************************
-- MODIFY THIS AT YOUR OWN RISK
--
fn getSkinOps = (
try (
if(crySkinOps.isCrySkin(modPanel.GetcurrentObject())) then
(crySkinOps)
else
(skinOps)
)
catch (
(skinOps)
)
)
MacroScript SkinLoopSelection
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Loop Selection"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Loop Selection (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).loopSelection (modPanel.GetcurrentObject())
)
)
MacroScript SkinRingSelection
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Ring Selection"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Ring Selection (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).ringSelection (modPanel.GetcurrentObject())
)
)
MacroScript SkinGrowSelection
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Grow Selection"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Grow Selection (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).growSelection (modPanel.GetcurrentObject())
)
)
MacroScript SkinShrinkSelection
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Shrink Selection"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Shrink Selection (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).shrinkSelection (modPanel.GetcurrentObject())
)
)
MacroScript SkinSelectVerticesByBone
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Select Vertices By Bone"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Select Vertices By Bone (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).selectVerticesByBone (modPanel.GetcurrentObject())
)
)
MacroScript WeightTable_Dialog
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Weight Table Dialog"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Weight Table Dialog (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isChecked return
(
if (classof(modPanel.GetcurrentObject())) == Skin then
(
((getSkinOps()).isWeightTableOpen (modPanel.GetcurrentObject()) != 0)
)
else
(
false
)
)
on closeDialogs do
(
(getSkinOps()).closeWeightTable (modPanel.GetcurrentObject())
)
on execute do
(
(getSkinOps()).WeightTable (modPanel.GetcurrentObject())
)
)
MacroScript BlendWeights
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Blend Weights"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Blend Weights (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).blendSelected (modPanel.GetcurrentObject())
)
)
MacroScript RemoveZeroWeights
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Remove Zero Weights"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Remove Zero Weights (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).RemoveZeroWeights (modPanel.GetcurrentObject())
)
)
MacroScript WeightTool_Dialog
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Weight Tool Dialog"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Weight Tool Dialog (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isChecked return
(
if (classof(modPanel.GetcurrentObject())) == Skin then
(
((getSkinOps()).isWeightToolOpen (modPanel.GetcurrentObject()) != 0)
)
else
(
false
)
)
on closeDialogs do
(
(getSkinOps()).closeWeightTool (modPanel.GetcurrentObject())
)
on execute do
(
(getSkinOps()).WeightTool (modPanel.GetcurrentObject())
)
)
MacroScript SetWeight_00
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Set Weight To 0.0"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Set Weight To 0.0 (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).SetWeight (modPanel.GetcurrentObject()) 0.0
)
)
MacroScript SetWeight_01
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Set Weight To 0.10"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Set Weight To 0.10 (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).SetWeight (modPanel.GetcurrentObject()) 0.1
)
)
MacroScript SetWeight_25
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Set Weight To 0.25"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Set Weight To 0.25 (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).SetWeight (modPanel.GetcurrentObject()) 0.25
)
)
MacroScript SetWeight_50
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Set Weight To 0.50"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Set Weight To 0.5 (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).SetWeight (modPanel.GetcurrentObject()) 0.5
)
)
MacroScript SetWeight_75
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Set Weight To 0.75"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Set Weight To 0.75 (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).SetWeight (modPanel.GetcurrentObject()) 0.75
)
)
MacroScript SetWeight_90
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Set Weight To 0.90"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Set Weight To 0.90 (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).SetWeight (modPanel.GetcurrentObject()) 0.90
)
)
MacroScript SetWeight_100
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Set Weight To 1.0"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Set Weight To 1.0 (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).SetWeight (modPanel.GetcurrentObject()) 1.0
)
)
MacroScript SetWeight_Custom
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Set Weight Custom"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Set Weight Custom (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
tmod = modPanel.GetcurrentObject()
v = tmod.weightTool_weight
(getSkinOps()).SetWeight (modPanel.GetcurrentObject()) v
)
)
MacroScript AddWeight
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Add Weight"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Add Weight (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).AddWeight (modPanel.GetcurrentObject()) 0.05
)
)
MacroScript SubtractWeight
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Subtract Weight"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Subtract Weight (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).AddWeight (modPanel.GetcurrentObject()) -0.05
)
)
MacroScript ScaleWeight_Custom
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Scale Weight Custom"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Scale Weight Custom (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
tmod = modPanel.GetcurrentObject()
v = tmod.weightTool_scale
(getSkinOps()).ScaleWeight (modPanel.GetcurrentObject()) v
)
)
MacroScript ScaleWeight_Up
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Scale Weight Up"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Scale Weight Up (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).ScaleWeight (modPanel.GetcurrentObject()) 1.05
)
)
MacroScript ScaleWeight_Down
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Scale Weight Down"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Scale Weight Down (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).ScaleWeight (modPanel.GetcurrentObject()) 0.95
)
)
MacroScript CopyWeights
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Copy Weights"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Copy Weights (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).CopyWeights (modPanel.GetcurrentObject())
)
)
MacroScript PasteWeights
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Paste Weights"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Paste Weights (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).PasteWeights (modPanel.GetcurrentObject())
)
)
MacroScript PasteWeightsByPos
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Paste Weights By Pos"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Paste Weights By Pos(Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
tmod = modPanel.GetcurrentObject()
v = tmod.weightTool_tolerance
(getSkinOps()).pasteWeightsByPos (modPanel.GetcurrentObject()) v
)
)
MacroScript selectParent
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Parent Bone"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Select Parent Bone (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).SelectParent (modPanel.GetcurrentObject())
)
)
MacroScript selectChild
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Child Bone"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Select Child Bone (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).SelectChild (modPanel.GetcurrentObject())
)
)
MacroScript selectNextSibling
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Sibling Next"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Select Next Sibling Bone (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).SelectNextSibling (modPanel.GetcurrentObject())
)
)
MacroScript selectPreviousSibling
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Sibling Previous"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Select Previous Sibling Bone (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).SelectPreviousSibling (modPanel.GetcurrentObject())
)
)
MacroScript backFaceCullVertices
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Backface Cull Vertices"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Backface Cull Vertices (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on isChecked return
(
if (classof(modPanel.GetcurrentObject())) == Skin then (
(modPanel.GetcurrentObject()).backfacecull
)
else (
false
)
)
on execute do
(
if (modPanel.GetcurrentObject()).backfacecull then
(modPanel.GetcurrentObject()).backfacecull = false
else (modPanel.GetcurrentObject()).backfacecull = true
)
)
MacroScript AddBonesFromView
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Add Bones"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Add Bones (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
pushprompt "-- Click object to add as Bone"
(getSkinOps()).AddBoneFromViewStart (modPanel.GetcurrentObject())
)
)
MacroScript multiRemove
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Remove Bones"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Remove Multiple Bones (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).MultiRemove (modPanel.GetcurrentObject())
)
)
MacroScript selectPrevious
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Previous Bone"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Select Previous Bone (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).SelectPreviousBone (modPanel.GetcurrentObject())
)
)
MacroScript selectNext
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Next Bone"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Select Next Bone (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).SelectNextBone (modPanel.GetcurrentObject())
)
)
MacroScript zoomToBone
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Zoom To Bone"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Zoom To Selected Bone (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).ZoomToBone (modPanel.GetcurrentObject()) FALSE
)
)
MacroScript zoomToGizmo
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Zoom To Gizmo"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Zoom To Selected Gizmo (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).ZoomToGizmo (modPanel.GetcurrentObject()) FALSE
)
)
MacroScript selectEndPoint
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Select End Point"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Select End Point (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on Execute do
(
(getSkinOps()).SelectEndPoint (modPanel.GetcurrentObject())
)
)
MacroScript selectStartPoint
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Select Start Point"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Select Start Point (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on Execute do
(
(getSkinOps()).SelectStartPoint (modPanel.GetcurrentObject())
)
)
MacroScript filterVertices
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Select Vertices"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Filter Vertices (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isChecked return
(
if (classof(modPanel.GetcurrentObject())) == Skin then (
(modPanel.GetcurrentObject()).filter_vertices
)
else (
false
)
)
on execute do
(
if (modPanel.GetcurrentObject()).filter_vertices then
(modPanel.GetcurrentObject()).filter_vertices = FALSE
else (modPanel.GetcurrentObject()).filter_vertices = TRUE
)
)
MacroScript filterEnvelopes
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Select Cross Sections"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Filter Cross Sections (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isChecked return
(
if (classof(modPanel.GetcurrentObject())) == Skin then (
(modPanel.GetcurrentObject()).filter_cross_sections
)
else (
false
)
)
on execute do
(
if (modPanel.GetcurrentObject()).filter_cross_sections then
(modPanel.GetcurrentObject()).filter_cross_sections = FALSE
else (modPanel.GetcurrentObject()).filter_cross_sections = TRUE
)
)
MacroScript filterCrossSections
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Select Envelopes"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Filter Envelopes (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isChecked return
(
if (classof(modPanel.GetcurrentObject())) == Skin then (
(modPanel.GetcurrentObject()).filter_envelopes
)
else (
false
)
)
on execute do
(
if (modPanel.GetcurrentObject()).filter_envelopes then
(modPanel.GetcurrentObject()).filter_envelopes = false
else (modPanel.GetcurrentObject()).filter_envelopes = true
)
)
MacroScript excludeVerts
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Exclude Verts"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Exclude Verts (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on Execute do
(
(getSkinOps()).ButtonExclude (modPanel.GetcurrentObject())
)
)
MacroScript includeVerts
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Include Verts"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Include Verts (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on Execute do
(
(getSkinOps()).ButtonInclude (modPanel.GetcurrentObject())
)
)
MacroScript selectIncludeVerts
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Select Excluded Verts"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Select Excluded Verts (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).ButtonSelectExcluded (modPanel.GetcurrentObject())
)
)
-- Added August 27 2000 Fred Ruff
MacroScript CopySelectedBone
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Copy Envelope"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Copy Envelope (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).copySelectedBone (modPanel.GetcurrentObject())
)
)
MacroScript PasteToSelectedBone
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Paste Envelope"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Paste Envelope (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).PasteToSelectedBone (modPanel.GetcurrentObject())
)
)
MacroScript PasteToAllBones
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Paste to All Envelope"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Paste To All Envelopes (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).PasteToAllBones (modPanel.GetcurrentObject())
)
)
MacroScript AddCrossSection
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Add Cross Section"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Add Cross Section (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).ButtonAddCrossSection (modPanel.GetcurrentObject())
)
)
MacroScript RemoveCrossSection
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Remove Cross Section"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Remove Cross Section (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).ButtonRemoveCrossSection (modPanel.GetcurrentObject())
)
)
MacroScript DrawEnvelopeOnTop
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Envelope On Top"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Draw Envelope On Top (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on isChecked return
(
if (classof(modPanel.GetcurrentObject())) == Skin then (
(modPanel.GetcurrentObject()).envelopesAlwaysOnTop
)
else
(
false
)
)
on execute do
(
if Selection[1].modifiers[#Skin].envelopesAlwaysOnTop then
Selection[1].modifiers[#Skin].envelopesAlwaysOnTop = FALSE
else Selection[1].modifiers[#Skin].envelopesAlwaysOnTop = TRUE
)
)
MacroScript DrawCrossSectionsOnTop
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"CrossSections On Top"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Draw CrossSections On Top (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on isChecked return
(
if (classof(modPanel.GetcurrentObject())) == Skin then
(
(modPanel.GetcurrentObject()).crossSectionsAlwaysOnTop
)
else
(
false
)
)
on execute do
(
if (modPanel.GetcurrentObject()).crossSectionsAlwaysOnTop then
(modPanel.GetcurrentObject()).crossSectionsAlwaysOnTop = false
else (modPanel.GetcurrentObject()).crossSectionsAlwaysOnTop = true
)
)
MacroScript GizmoResetRotationPlane
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:"Gizmo Reset Reset Rotation Plane"
Category:"Skin Modifier"
internalCategory:"Skin Modifier"
Tooltip:"Gizmo Reset Reset Rotation Plane (Skin)"
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ( (classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).GizmoResetRotationPlane (modPanel.GetcurrentObject())
)
)
@@ -0,0 +1,992 @@
--
-- This is a modified copy of ui\usermacros\Macro_SkinTools.mcr from 3DS MAX 2012 package.
--
/*
Skin Operations Macro Script File
Created: Aug 6 2000
Author : Peter Watje
Version: 3ds max 6
12 dec 2003, Pierre-Felix Breton,
added product switcher: this macro file can be shared with all Discreet products
*/
--***********************************************************************************************
-- MODIFY THIS AT YOUR OWN RISK
--
fn getSkinOps = (
try (
if(crySkinOps.isCrySkin(modPanel.GetcurrentObject())) then
(crySkinOps)
else
(skinOps)
)
catch (
(skinOps)
)
)
MacroScript SkinLoopSelection
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~SKINLOOPSELECTION_BUTTONTEXT~
Category:~SKINLOOPSELECTION_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~SKINLOOPSELECTION_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).loopSelection (modPanel.GetcurrentObject())
)
)
MacroScript SkinRingSelection
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~SKINRINGSELECTION_BUTTONTEXT~
Category:~SKINRINGSELECTION_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~SKINRINGSELECTION_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).ringSelection (modPanel.GetcurrentObject())
)
)
MacroScript SkinGrowSelection
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~SKINGROWSELECTION_BUTTONTEXT~
Category:~SKINGROWSELECTION_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~SKINGROWSELECTION_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).growSelection (modPanel.GetcurrentObject())
)
)
MacroScript SkinShrinkSelection
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~SKINSHRINKSELECTION_BUTTONTEXT~
Category:~SKINSHRINKSELECTION_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~SKINSHRINKSELECTION_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).shrinkSelection (modPanel.GetcurrentObject())
)
)
MacroScript SkinSelectVerticesByBone
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~SKINSELECTVERTICESBYBONE_BUTTONTEXT~
Category:~SKINSELECTVERTICESBYBONE_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~SKINSELECTVERTICESBYBONE_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).selectVerticesByBone (modPanel.GetcurrentObject())
)
)
MacroScript WeightTable_Dialog
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~WEIGHTTABLE_DIALOG_BUTTONTEXT~
Category:~WEIGHTTABLE_DIALOG_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~WEIGHTTABLE_DIALOG_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isChecked return
(
if (classof(modPanel.GetcurrentObject())) == Skin then
(
((getSkinOps()).isWeightTableOpen (modPanel.GetcurrentObject()) != 0)
)
else
(
false
)
)
on closeDialogs do
(
(getSkinOps()).closeWeightTable (modPanel.GetcurrentObject())
)
on execute do
(
(getSkinOps()).WeightTable (modPanel.GetcurrentObject())
)
)
MacroScript BlendWeights
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~BLENDWEIGHTS_BUTTONTEXT~
Category:~BLENDWEIGHTS_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~BLENDWEIGHTS_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).blendSelected (modPanel.GetcurrentObject())
)
)
MacroScript RemoveZeroWeights
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~REMOVEZEROWEIGHTS_BUTTONTEXT~
Category:~REMOVEZEROWEIGHTS_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~REMOVEZEROWEIGHTS_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).RemoveZeroWeights (modPanel.GetcurrentObject())
)
)
MacroScript WeightTool_Dialog
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~WEIGHTTOOL_DIALOG_BUTTONTEXT~
Category:~WEIGHTTOOL_DIALOG_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~WEIGHTTOOL_DIALOG_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isChecked return
(
if (classof(modPanel.GetcurrentObject())) == Skin then
(
((getSkinOps()).isWeightToolOpen (modPanel.GetcurrentObject()) != 0)
)
else
(
false
)
)
on closeDialogs do
(
(getSkinOps()).closeWeightTool (modPanel.GetcurrentObject())
)
on execute do
(
(getSkinOps()).WeightTool (modPanel.GetcurrentObject())
)
)
MacroScript SetWeight_00
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~SETWEIGHT_00_BUTTONTEXT~
Category:~SETWEIGHT_00_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~SETWEIGHT_00_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).SetWeight (modPanel.GetcurrentObject()) 0.0
)
)
MacroScript SetWeight_01
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~SETWEIGHT_01_BUTTONTEXT~
Category:~SETWEIGHT_01_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~SETWEIGHT_01_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).SetWeight (modPanel.GetcurrentObject()) 0.1
)
)
MacroScript SetWeight_25
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~SETWEIGHT_25_BUTTONTEXT~
Category:~SETWEIGHT_25_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~SETWEIGHT_25_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).SetWeight (modPanel.GetcurrentObject()) 0.25
)
)
MacroScript SetWeight_50
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~SETWEIGHT_50_BUTTONTEXT~
Category:~SETWEIGHT_50_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~SETWEIGHT_50_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).SetWeight (modPanel.GetcurrentObject()) 0.5
)
)
MacroScript SetWeight_75
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~SETWEIGHT_75_BUTTONTEXT~
Category:~SETWEIGHT_75_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~SETWEIGHT_75_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).SetWeight (modPanel.GetcurrentObject()) 0.75
)
)
MacroScript SetWeight_90
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~SETWEIGHT_90_BUTTONTEXT~
Category:~SETWEIGHT_90_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~SETWEIGHT_90_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).SetWeight (modPanel.GetcurrentObject()) 0.90
)
)
MacroScript SetWeight_100
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~SETWEIGHT_100_BUTTONTEXT~
Category:~SETWEIGHT_100_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~SETWEIGHT_100_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).SetWeight (modPanel.GetcurrentObject()) 1.0
)
)
MacroScript SetWeight_Custom
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~SETWEIGHT_CUSTOM_BUTTONTEXT~
Category:~SETWEIGHT_CUSTOM_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~SETWEIGHT_CUSTOM_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
tmod = modPanel.GetcurrentObject()
v = tmod.weightTool_weight
(getSkinOps()).SetWeight (modPanel.GetcurrentObject()) v
)
)
MacroScript AddWeight
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~ADDWEIGHT_BUTTONTEXT~
Category:~ADDWEIGHT_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~ADDWEIGHT_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).AddWeight (modPanel.GetcurrentObject()) 0.05
)
)
MacroScript SubtractWeight
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~SUBTRACTWEIGHT_BUTTONTEXT~
Category:~SUBTRACTWEIGHT_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~SUBTRACTWEIGHT_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).AddWeight (modPanel.GetcurrentObject()) -0.05
)
)
MacroScript ScaleWeight_Custom
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~SCALEWEIGHT_CUSTOM_BUTTONTEXT~
Category:~SCALEWEIGHT_CUSTOM_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~SCALEWEIGHT_CUSTOM_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
tmod = modPanel.GetcurrentObject()
v = tmod.weightTool_scale
(getSkinOps()).ScaleWeight (modPanel.GetcurrentObject()) v
)
)
MacroScript ScaleWeight_Up
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~SCALEWEIGHT_UP_BUTTONTEXT~
Category:~SCALEWEIGHT_UP_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~SCALEWEIGHT_UP_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).ScaleWeight (modPanel.GetcurrentObject()) 1.05
)
)
MacroScript ScaleWeight_Down
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~SCALEWEIGHT_DOWN_BUTTONTEXT~
Category:~SCALEWEIGHT_DOWN_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~SCALEWEIGHT_DOWN_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).ScaleWeight (modPanel.GetcurrentObject()) 0.95
)
)
MacroScript CopyWeights
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~COPYWEIGHTS_BUTTONTEXT~
Category:~COPYWEIGHTS_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~COPYWEIGHTS_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).CopyWeights (modPanel.GetcurrentObject())
)
)
MacroScript PasteWeights
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~PASTEWEIGHTS_BUTTONTEXT~
Category:~PASTEWEIGHTS_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~PASTEWEIGHTS_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).PasteWeights (modPanel.GetcurrentObject())
)
)
MacroScript PasteWeightsByPos
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~PASTEWEIGHTSBYPOS_BUTTONTEXT~
Category:~PASTEWEIGHTSBYPOS_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~PASTEWEIGHTSBYPOS_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
tmod = modPanel.GetcurrentObject()
v = tmod.weightTool_tolerance
(getSkinOps()).pasteWeightsByPos (modPanel.GetcurrentObject()) v
)
)
MacroScript selectParent
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~SELECTPARENT_BUTTONTEXT~
Category:~SELECTPARENT_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~SELECTPARENT_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).SelectParent (modPanel.GetcurrentObject())
)
)
MacroScript selectChild
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~SELECTCHILD_BUTTONTEXT~
Category:~SELECTCHILD_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~SELECTCHILD_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).SelectChild (modPanel.GetcurrentObject())
)
)
MacroScript selectNextSibling
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~SELECTNEXTSIBLING_BUTTONTEXT~
Category:~SELECTNEXTSIBLING_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~SELECTNEXTSIBLING_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).SelectNextSibling (modPanel.GetcurrentObject())
)
)
MacroScript selectPreviousSibling
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~SELECTPREVIOUSSIBLING_BUTTONTEXT~
Category:~SELECTPREVIOUSSIBLING_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~SELECTPREVIOUSSIBLING_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).SelectPreviousSibling (modPanel.GetcurrentObject())
)
)
MacroScript backFaceCullVertices
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~BACKFACECULLVERTICES_BUTTONTEXT~
Category:~BACKFACECULLVERTICES_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~BACKFACECULLVERTICES_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on isChecked return
(
if (classof(modPanel.GetcurrentObject())) == Skin then (
(modPanel.GetcurrentObject()).backfacecull
)
else (
false
)
)
on execute do
(
if (modPanel.GetcurrentObject()).backfacecull then
(modPanel.GetcurrentObject()).backfacecull = false
else (modPanel.GetcurrentObject()).backfacecull = true
)
)
MacroScript AddBonesFromView
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~ADDBONESFROMVIEW_BUTTONTEXT~
Category:~ADDBONESFROMVIEW_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~ADDBONESFROMVIEW_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
pushprompt ~ADDBONESFROMVIEW_PUSHPROMPT_CAPTION~
(getSkinOps()).AddBoneFromViewStart (modPanel.GetcurrentObject())
)
)
MacroScript multiRemove
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~MULTIREMOVE_BUTTONTEXT~
Category:~MULTIREMOVE_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~MULTIREMOVE_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).MultiRemove (modPanel.GetcurrentObject())
)
)
MacroScript selectPrevious
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~SELECTPREVIOUS_BUTTONTEXT~
Category:~SELECTPREVIOUS_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~SELECTPREVIOUS_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).SelectPreviousBone (modPanel.GetcurrentObject())
)
)
MacroScript selectNext
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~SELECTNEXT_BUTTONTEXT~
Category:~SELECTNEXT_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~SELECTNEXT_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).SelectNextBone (modPanel.GetcurrentObject())
)
)
MacroScript zoomToBone
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~ZOOMTOBONE_BUTTONTEXT~
Category:~ZOOMTOBONE_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~ZOOMTOBONE_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).ZoomToBone (modPanel.GetcurrentObject()) FALSE
)
)
MacroScript zoomToGizmo
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~ZOOMTOGIZMO_BUTTONTEXT~
Category:~ZOOMTOGIZMO_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~ZOOMTOGIZMO_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).ZoomToGizmo (modPanel.GetcurrentObject()) FALSE
)
)
MacroScript selectEndPoint
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~SELECTENDPOINT_BUTTONTEXT~
Category:~SELECTENDPOINT_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~SELECTENDPOINT_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on Execute do
(
(getSkinOps()).SelectEndPoint (modPanel.GetcurrentObject())
)
)
MacroScript selectStartPoint
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~SELECTSTARTPOINT_BUTTONTEXT~
Category:~SELECTSTARTPOINT_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~SELECTSTARTPOINT_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on Execute do
(
(getSkinOps()).SelectStartPoint (modPanel.GetcurrentObject())
)
)
MacroScript filterVertices
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~FILTERVERTICES_BUTTONTEXT~
Category:~FILTERVERTICES_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~FILTERVERTICES_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isChecked return
(
if (classof(modPanel.GetcurrentObject())) == Skin then (
(modPanel.GetcurrentObject()).filter_vertices
)
else (
false
)
)
on execute do
(
if (modPanel.GetcurrentObject()).filter_vertices then
(modPanel.GetcurrentObject()).filter_vertices = FALSE
else (modPanel.GetcurrentObject()).filter_vertices = TRUE
)
)
MacroScript filterEnvelopes
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~FILTERENVELOPES_BUTTONTEXT~
Category:~FILTERENVELOPES_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~FILTERENVELOPES_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isChecked return
(
if (classof(modPanel.GetcurrentObject())) == Skin then (
(modPanel.GetcurrentObject()).filter_cross_sections
)
else (
false
)
)
on execute do
(
if (modPanel.GetcurrentObject()).filter_cross_sections then
(modPanel.GetcurrentObject()).filter_cross_sections = FALSE
else (modPanel.GetcurrentObject()).filter_cross_sections = TRUE
)
)
MacroScript filterCrossSections
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~FILTERCROSSSECTIONS_BUTTONTEXT~
Category:~FILTERCROSSSECTIONS_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~FILTERCROSSSECTIONS_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isChecked return
(
if (classof(modPanel.GetcurrentObject())) == Skin then (
(modPanel.GetcurrentObject()).filter_envelopes
)
else (
false
)
)
on execute do
(
if (modPanel.GetcurrentObject()).filter_envelopes then
(modPanel.GetcurrentObject()).filter_envelopes = false
else (modPanel.GetcurrentObject()).filter_envelopes = true
)
)
MacroScript excludeVerts
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~EXCLUDEVERTS_BUTTONTEXT~
Category:~EXCLUDEVERTS_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~EXCLUDEVERTS_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on Execute do
(
(getSkinOps()).ButtonExclude (modPanel.GetcurrentObject())
)
)
MacroScript includeVerts
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~INCLUDEVERTS_BUTTONTEXT~
Category:~INCLUDEVERTS_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~INCLUDEVERTS_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on Execute do
(
(getSkinOps()).ButtonInclude (modPanel.GetcurrentObject())
)
)
MacroScript selectIncludeVerts
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~SELECTINCLUDEVERTS_BUTTONTEXT~
Category:~SELECTINCLUDEVERTS_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~SELECTINCLUDEVERTS_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).ButtonSelectExcluded (modPanel.GetcurrentObject())
)
)
-- Added August 27 2000 Fred Ruff
MacroScript CopySelectedBone
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~COPYSELECTEDBONE_BUTTONTEXT~
Category:~COPYSELECTEDBONE_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~COPYSELECTEDBONE_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).copySelectedBone (modPanel.GetcurrentObject())
)
)
MacroScript PasteToSelectedBone
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~PASTETOSELECTEDBONE_BUTTONTEXT~
Category:~PASTETOSELECTEDBONE_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~PASTETOSELECTEDBONE_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).PasteToSelectedBone (modPanel.GetcurrentObject())
)
)
MacroScript PasteToAllBones
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~PASTETOALLBONES_BUTTONTEXT~
Category:~PASTETOALLBONES_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~PASTETOALLBONES_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).PasteToAllBones (modPanel.GetcurrentObject())
)
)
MacroScript AddCrossSection
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~ADDCROSSSECTION_BUTTONTEXT~
Category:~ADDCROSSSECTION_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~ADDCROSSSECTION_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).ButtonAddCrossSection (modPanel.GetcurrentObject())
)
)
MacroScript RemoveCrossSection
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~REMOVECROSSSECTION_BUTTONTEXT~
Category:~REMOVECROSSSECTION_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~REMOVECROSSSECTION_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).ButtonRemoveCrossSection (modPanel.GetcurrentObject())
)
)
MacroScript DrawEnvelopeOnTop
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~DRAWENVELOPEONTOP_BUTTONTEXT~
Category:~DRAWENVELOPEONTOP_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~DRAWENVELOPEONTOP_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on isChecked return
(
if (classof(modPanel.GetcurrentObject())) == Skin then (
(modPanel.GetcurrentObject()).envelopesAlwaysOnTop
)
else
(
false
)
)
on execute do
(
if Selection[1].modifiers[#Skin].envelopesAlwaysOnTop then
Selection[1].modifiers[#Skin].envelopesAlwaysOnTop = FALSE
else Selection[1].modifiers[#Skin].envelopesAlwaysOnTop = TRUE
)
)
MacroScript DrawCrossSectionsOnTop
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~DRAWCROSSSECTIONSONTOP_BUTTONTEXT~
Category:~DRAWCROSSSECTIONSONTOP_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~DRAWCROSSSECTIONSONTOP_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ((classof(modPanel.GetcurrentObject())) == Skin)
on isChecked return
(
if (classof(modPanel.GetcurrentObject())) == Skin then
(
(modPanel.GetcurrentObject()).crossSectionsAlwaysOnTop
)
else
(
false
)
)
on execute do
(
if (modPanel.GetcurrentObject()).crossSectionsAlwaysOnTop then
(modPanel.GetcurrentObject()).crossSectionsAlwaysOnTop = false
else (modPanel.GetcurrentObject()).crossSectionsAlwaysOnTop = true
)
)
MacroScript GizmoResetRotationPlane
enabledIn:#("max") --pfb: 2003.12.12 added product switch
ButtonText:~GIZMORESETROTATIONPLANE_BUTTONTEXT~
Category:~GIZMORESETROTATIONPLANE_CATEGORY~
internalCategory:"Skin Modifier"
Tooltip:~GIZMORESETROTATIONPLANE_TOOLTIP~
-- Needs Icon
(
on isVisible return ( (classof(modPanel.GetcurrentObject())) == Skin)
on isEnabled return ( (classof(modPanel.GetcurrentObject())) == Skin)
on execute do
(
(getSkinOps()).GizmoResetRotationPlane (modPanel.GetcurrentObject())
)
)
+244
View File
@@ -0,0 +1,244 @@
-------------------------------------------------------------------------------
-- UpdateTools.ms
-- Version 2.0
-- Updates local CryTools files
-------------------------------------------------------------------------------
version_ = "CryToolsUpdate 2.2"
-------------------------------------------------------------------------------
-- Get The Build Dirs
-------------------------------------------------------------------------------
-- Write Latest Builds on S:\_Builds to Local File
print "Retrieving list of latest builds from \\\\Storage\\builds"
DOScommand ("DIR \\\\storage\\builds\\procedurally_generated_builds\\ /B /O-D > \"" + sysInfo.tempDir + "cry_temp\\latest_build_crytoolss.txt\"")
if doesfileexist "\\\\storage\\builds\\procedurally_generated_builds\\" == false then
(
messageBox "Cannot locate \\\\Storage\\builds\\procedurally_generated_builds\nYou may need to contact SYSTEM_SUPPORT." title: "S Drive not found!"
return undefined
)
-- Gets the latest build number and build name
if crytools.existFile (sysInfo.tempDir + "cry_temp\\latest_build_crytoolss.txt") != false then
(
if doesfileexist "\\\\storage\\builds\\procedurally_generated_builds" != true then
(
messagebox "Cannot find \\\\storage\\builds\\procedurally_generated_builds\\"
return undefined
)
latest_build_crytools_list = openFile (sysInfo.tempDir + "cry_temp\\latest_build_crytoolss.txt")
crytools.latest_build = (readline latest_build_crytools_list)
if crytools.latest_build == "TempBuildCopy" then
(
skipToNextLine latest_build_crytools_list
crytools.latest_build = (readline latest_build_crytools_list)
)
buildnumberArray = filterstring crytools.latest_build "()"
crytools.latestbuildnumber = buildnumberArray[2]
close latest_build_crytools_list
)
-- Get the local build number
print crytools.BuildPathFull
if crytools.existfile ((crytools.BuildPathFull + "Code_Changes.txt")) == false then
(
messageBox "Code_Changes.txt cannot be found in your build directory, have you removed it?" title: "Error!"
)
else
(
perf_path = (crytools.BuildPathFull + "Code_Changes.txt")
perf_changes = openFile perf_path
skipToString perf_changes "in Build "
local_build_line = (readLine perf_changes)
local_buildArray = (filterString local_build_line "-")
crytools.localBuildNumber = local_buildArray[1]
)
-- Get The Project Name
buildpatharray2 = filterstring crytools.BuildPathFull "\\"
crytools.project_name = buildpatharray2[2]
print (crytools.project_name + " is set as current project.")
-- Check For Rollback
rollback_check = openFile (sysInfo.tempDir + "cry_temp\\crytools.rollback_status.ini")
if crytools.rollback_status == undefined then
(
crytools.rollback_status = "false"
output_rollbackINI = createfile (sysInfo.tempDir + "\\cry_temp\\crytools.rollback_status.ini")
format crytools.rollback_status to: output_rollbackINI
close output_rollbackINI
)
if rollback_check != undefined then
(
crytools.rollback_status = (readline rollback_check)
)
-------------------------------------------------------------------------------
-- UpdateUI
-------------------------------------------------------------------------------
print (sysInfo.username + " is requesting an update.")
rollout checkForUpdate version_
(
label tools_version "" align:#center
button update_btn " Check/Install Updates From Your Latest Build"
button update_btnAB "Retrieve Latest Tools\Sync"
checkbox BuildOn "Current Build" offset:[0,-4]
checkBox PerfOn "PerForce" offset:[84,-20] checked:true
checkbox HTTPOn "CryHTTP" offset:[151,-20]
checkbutton rollback_exporter "Rollback Exporter" offset:[-55,0]
button uninstall_tools "Uninstall CryTools" offset:[55,-26]
label current_exportTXT "LOCAL BUILD: Cannot find Code_Changes.txt" align:#center
on checkForUpdate open do
(
current_exportTXT.text = ("LOCAL BUILD: " + crytools.localBuildNumber + " LATEST BUILD: " + crytools.latestbuildnumber)
tools_version.text = version_
if crytools.rollback_status == "true" do (rollback_exporter.checked = true)
if crytools.rollback_status == "false" do (rollback_exporter.checked = false)
)
on update_btn pressed do
(
filein (crytools.BuildPathFull + "Tools\\maxscript\\AddCryTools.ms")
current_exportTXT.text = ("LOCAL BUILD: " + crytools.localBuildNumber + " LATEST BUILD: " + crytools.latestbuildnumber)
print ("Build updated from " + crytools.BuildPathFull)
--destroyDialog checkForUpdate
)
-- Get Latest From AB and Latest Build
-------------------------------------------------------------------------------
on update_btnAB pressed do
(
try
(
if crytools.BuildPathFull == "J:\\Game04\\" then
(
messagebox "You are on Game04"
return undefined
)
-- AB Stuff
if HTTPOn.checked == true then
(
rollout httpSock "httpSock" width:0 height:0
(
activeXControl port "Microsoft.XMLHTTP" setupEvents:false releaseOnClose:false
);
createDialog httpSock pos:[-100,-100];
destroyDialog httpSock;
httpSock.port.open "GET" "http://www.crytek.com/index.htm" false;
httpSock.port.setrequestheader "If-Modified-Since" "Sat, 1 Jan 1900 00:00:00 GMT";
httpSock.port.send();
print (httpSock.port.responsetext);
)
-- P4 stuff
if perfOn.checked == true then
(
p4Update = ("p4 sync " + crytools.BuildPathFull + "Tools\...")
DOScommand p4Update
)
if BuildOn.checked == true then
(
-- Latest Build Stuff
rollback_check = openFile (sysInfo.tempDir + "cry_temp\\crytools.rollback_status.ini")
if rollback_check == undefined then (crytools.rollback_status = "false")
crytools.rollback_status = "false"
latestCryExport = (crytools.md5 ("\\\\Storage\\builds\\" + crytools.latest_build + "\\Tools\\CryExport8.dlu"))
if crytools.md5 (crytools.maxDirTxt + "plugins\\CryExport8.dlu") != latestCryExport then
(
if crytools.existfile ("\\\\storage\\builds\\" + crytools.latest_build + "\\Tools\\CryExport8.dlu") == false then
(
messageBox ("There is no exporter on the build server in the latest folder [" + crytools.latest_build + "]") title: "No Exporter Found!"
)
else
(
messageBox ("There is a new exporter available in build " + crytools.latestbuildnumber) title: "New Exporter Found!"
DOScommand (("copy /Y \\\\storage\\builds\\" + crytools.latest_build + "\\Tools\\CryExport8.dlu ") + (crytools.BuildPathFull + "Tools\\"))
)
)
)
)
catch
(
messageBox "Either cannot locate the build server [\\\\Storage\\], or you do not have crytools.alienBrain correctly installed." title: "Something is wrong!"
)
messageBox ("CryTools has checked Build [" + crytools.latestbuildnumber + "] for updates.\nPlease click the \"Check/Install Updates From Your Latest Build\" button to install any updates it found.") title: ("Checked Build \\Tools (" + localTime + ") - Checked Plugins From Build #" + crytools.latestbuildnumber)
)
-- Rollback Exporter
-------------------------------------------------------------------------------
on rollback_exporter changed state do
(
try
if (rollback_exporter.checked == true) then
(
crytools.rollback_status = "true"
DOScommand ("mkdir \"" + sysInfo.tempDir + "cry_temp\\bad\\\"")
DOScommand ("move /Y " + ("\"" + crytools.maxDirTxt + "plugins\\CryExport8.dlu\"") + " " + (sysInfo.tempDir + "cry_temp\\bad\\"))
DOScommand ("move /Y " + ("\"" +sysInfo.tempDir + "cry_temp\\CryExport8.dlu\"") + " " + (crytools.maxDirTxt + "plugins\\"))
print "CryExport8.dlu has been rolled back to the previous version."
output_rollbackINI = openfile (sysInfo.tempDir + "\\cry_temp\\crytools.rollback_status.ini") mode:"w"
format crytools.rollback_status to: output_rollbackINI
close output_rollbackINI
messageBox "CryExport8.dlu has been rolled back to the previous version.\nTo get a newer exporter later you must click \"Get Latest Tools From crytools.alienBrain/Current Build\", or update your build." title: "CryExport8.dlu Rolled Back!"
)
else
(
crytools.rollback_status = "false"
output_rollbackINI = openfile (sysInfo.tempDir+ "\\cry_temp\\crytools.rollback_status.ini") mode:"w"
format crytools.rollback_status to: output_rollbackINI
close output_rollbackINI
messageBox "You are no longer in rollback mode.\nTo get a newer exporter later you must click \"Get Latest Tools From crytools.alienBrain/Current Build\", or update your build." title: "CryExport8.dlu No Longer Rolled Back!"
)
catch
(
messageBox "Rollback error 1442." title:"Error!"
return undefined
)
)
-- Uninstall
-------------------------------------------------------------------------------
on uninstall_tools pressed do
(
rollout areYouSure "CryTools Uninstallation"
(
label doyouwant "Are you sure you want to completely remove CryTools?" align:#center
button uninstallNow "Yes" pos:[110,25]
button donotuninstall "No" pos:[150,25]
on donotuninstall pressed do
(
destroyDialog areYouSure
)
on uninstallNow pressed do
(
subMenu = menuMan.findMenu "CryTools"
menuMan.unRegisterMenu subMenu
deleteFile "$UI\\MacroScripts\\CryTools-UpdateTools.mcr"
deleteFile "$UI\\MacroScripts\\CryTools-CryRigging.mcr"
deleteFile "$UI\\MacroScripts\\CryTools-CryMorphManager.mcr"
deleteFile "$UI\\MacroScripts\\CryTools-CryAnimation.mcr"
crytools.maxDirTxt = (getdir #maxroot)
doscommand ("attrib -r \"" + crytools.maxDirTxt + "scripts\\startup\\LoadCryTools.ms\"")
doscommand ("del \"" + crytools.maxDirTxt + "scripts\\startup\\LoadCryTools.ms\"")
print (sysInfo.username + " has uninstalled CryTools.")
destroyDialog areYouSure
destroyDialog checkForUpdate
messageBox ("CryTools has been uninstalled. CryExport8.dlu is still installed, " + "sorry " + sysInfo.username) title: "Uninstallation complete!"
)
)
createDialog areYouSure 300 60 bgcolor:black fgcolor:white
)
)
createDialog checkForUpdate 250 137 bgcolor:black fgcolor:white
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3ea367bc6f5d4f9f3331c57229ecfaa15c4ff3edddcba1618889d39f7bc00f02
size 17361
+3
View File
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a1963f8897dae90853082dbb6961cc916eef0bf3b3dee4759d964c8010496686
size 17124
+3
View File
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3679794cce0eefa383c495b8eac5573e3040f2e256770c3aab78d429cb77a801
size 17249
+3
View File
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9da74c3e57d522f866e3e3f77a22b1075a5e7d5f7e7616f8514ccab5f46b7926
size 17259
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:1dab772dfacb5dcc9f342e4e6d38ff1816f0a337a882174162d6312a38f117fa
size 17330
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:1fa2f8345128ad353ea1163ec6fd09217cfca657b27680f5e74cbec24e62be45
size 17407
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:955089a9c5f018ca1f9ab2077c1ca9e5b8f6d6cb470b06916375adb41fe2255a
size 17293
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:e05dc8a8f2aeec820daa6d68f2cb2920104e30ad4a478a4f223c383aaabc469f
size 17330
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:4e477bc06b3e189ca7033fa4a1b4ee53b13069b5b0e3237a1df3b360c8f375e0
size 17332
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:cf9293599559578b0e0573b727abd7489c21558854e4eca2fee6937694d7f8ad
size 17476
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:e5479f540088fc5b71e4e63ed106cc88a9c91a32d4bc1bc47d9445cbe7ec2a51
size 17608
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b73a7b502c67cd8d387aded0949563aa08003da1a23b769bb86e0c2588d32498
size 17346
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c7115caa10fbbdd27ca72ba6058be36a5f8d71070477dff48360f092845ef80e
size 17291
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:75e0afdc6255832ea2b53bcb3d492aeece9ee883bb3407de8694552ff14ef8d0
size 17310
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3920068a05e0575dd1e5dc19950d7a7ab9627b71504248e769dd69b73d11c5a4
size 17386
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a22e94851a802c1e19a731172805339b32e7338839adf9c9ecbab88020d6d9de
size 17212
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:0e57897bcaae23de73b33e7131863e1957c1d22460389bd97fae491251372ace
size 17333
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9c9ca7dc9a0021ab407982b86561964577dd4516d6008d316e8b5c78c37a8bb1
size 17323
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:97caba63c6d217237df08621378e21afc986570b726ee2ac54fdd669297c03df
size 17315
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:1dda267e18bb18c95672f9826e2319a193afa37c8d022f8460430b9287fc106b
size 17338
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d689d1e960b5287a4530e328f8b943ede29fbba2d9ad8bfac4cb5fdde6e20617
size 17350
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3d005e65fd844e38be4779cbc7cb2a447a171e08d836231bc8046abd9a30be43
size 17320
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d5e33c3fb3c790e7aaced3acf63d4b528cfd04436382de5424f714aaca1390c2
size 17045
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:bdd976b74e6fb0db92f0b035425ff3ff14edd4a59bedaea2ecf40ad46a564c6f
size 17323
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7361dec9be5df77ffd730a9724466343c99e6dc6e435be2b7d38a8a739fd2938
size 17345
+225
View File
@@ -0,0 +1,225 @@
<html>
<title>CrysisRig</title>
<body bgcolor="#505050" topmargin=0 leftmargin=0 rightmargin=0 bottommargin=0>
<img border="0" src="bip.gif" name="bipedImage" usemap="#biped">
<map name="biped">
<area shape="poly"
alt="Bip01 Head"
COORDS="67,29, 73,9, 86,6, 100,11, 106,30, 99,57, 77,57"
href="javascript: void(0);"
onmouseover="document.bipedImage.src = 'bip01_head.gif'"
onmouseout="document.bipedImage.src = 'bip.gif'"
onclick="document.title='Bip01 Head'"
>
<area shape="poly"
alt="Bip01 L ForeArm"
COORDS="129,149, 155,141, 160,189, 146,192"
href="javascript: void(0);"
onmouseover="document.bipedImage.src = 'bip01_l_forearm.gif'"
onmouseout="document.bipedImage.src = 'bip.gif'"
onclick="document.title='Bip01 L ForeArm'"
>
<area shape="poly"
alt="Bip01 R Forearm"
COORDS="20,142, 46,147, 30,193, 14,190"
href="javascript: void(0);"
onmouseover="document.bipedImage.src = 'bip01_r_forearm.gif'"
onmouseout="document.bipedImage.src = 'bip.gif'"
onclick="document.title='Bip01 R Forearm'"
>
<area shape="poly"
alt="Bip01 R UpperArm"
COORDS="29,101, 46,91, 49,137, 46,147, 21,142"
href="javascript: void(0);"
onmouseover="document.bipedImage.src = 'bip01_r_upperarm.gif'"
onmouseout="document.bipedImage.src = 'bip.gif'"
onclick="document.title='Bip01 R UpperArm'"
>
<area shape="poly"
alt="Bip01 L Thigh"
COORDS="90,187, 127,185, 130,272, 100,274"
href="javascript: void(0);"
onmouseover="document.bipedImage.src = 'bip01_l_thigh.gif'"
onmouseout="document.bipedImage.src = 'bip.gif'"
onclick="document.title='Bip01 L Thigh'"
>
<area shape="poly"
alt="Bip01 R Thigh"
COORDS="47,184, 82,186, 71,275, 43,273"
href="javascript: void(0);"
onmouseover="document.bipedImage.src = 'bip01_r_thigh.gif'"
onmouseout="document.bipedImage.src = 'bip.gif'"
onclick="document.title='Bip01 R Thigh'"
>
<area shape="poly"
alt="Bip01 R Knee"
COORDS="43,273, 73,275, 73,287, 44,287"
href="javascript: void(0);"
onmouseover="document.bipedImage.src = 'bip01_r_knee.gif'"
onmouseout="document.bipedImage.src = 'bip.gif'"
onclick="document.title='Bip01 R Knee'"
>
<area shape="poly"
alt="Bip01 L Knee"
COORDS="100,274, 130,272, 129,286, 100,286"
href="javascript: void(0);"
onmouseover="document.bipedImage.src = 'bip01_l_knee.gif'"
onmouseout="document.bipedImage.src = 'bip.gif'"
onclick="document.title='Bip01 L Knee'"
>
<area shape="poly"
alt="Bip01"
COORDS="85,172, 95,179, 88,189, 78,182"
href="javascript: void(0);"
onmouseover="document.bipedImage.src = 'bip01.gif'"
onmouseout="document.bipedImage.src = 'bip.gif'"
onclick="document.title='Bip01'"
>
<area shape="poly"
alt="Bip01 Pelvis"
COORDS="53,163, 119,163, 123,199, 49,199"
href="javascript: void(0);"
onmouseover="document.bipedImage.src = 'bip01_pelvis.gif'"
onmouseout="document.bipedImage.src = 'bip.gif'"
onclick="document.title='Bip01 Pelvis'"
>
<area shape="poly"
alt="Bip01 L UpperArm"
COORDS="127,100, 143,102, 152,141, 129,148, 123,127"
href="javascript: void(0);"
onmouseover="document.bipedImage.src = 'bip01_l_upperarm.gif'"
onmouseout="document.bipedImage.src = 'bip.gif'"
onclick="document.title='Bip01 L UpperArm'"
>
<area shape="poly"
alt="Bip01 Spine"
COORDS="55,138, 119,138, 120,162, 53,162"
href="javascript: void(0);"
onmouseover="document.bipedImage.src = 'bip01_spine.gif'"
onmouseout="document.bipedImage.src = 'bip.gif'"
onclick="document.title='Bip01 Spine'"
>
<area shape="poly"
alt="Bip01 Spine3"
COORDS="87,68, 95,76, 87,85, 78,76"
href="javascript: void(0);"
onmouseover="document.bipedImage.src = 'bip01_spine3.gif'"
onmouseout="document.bipedImage.src = 'bip.gif'"
onclick="document.title='Bip01 Spine3'"
>
<area shape="poly"
alt="Bip01 Spine2"
COORDS="87,91, 95,99, 87,108, 78,99"
href="javascript: void(0);"
onmouseover="document.bipedImage.src = 'bip01_spine2.gif'"
onmouseout="document.bipedImage.src = 'bip.gif'"
onclick="document.title='Bip01 Spine2'"
>
<area shape="poly"
alt="Bip01 Spine1"
COORDS="49,137, 125,137, 128,65, 45,65"
href="javascript: void(0);"
onmouseover="document.bipedImage.src = 'bip01_spine1.gif'"
onmouseout="document.bipedImage.src = 'bip.gif'"
onclick="document.title='Bip01 Spine1'"
>
<area shape="poly"
alt="Bip01 R Calf"
COORDS="44,287, 73,287, 73,306, 60,369, 46,369, 36,308"
href="javascript: void(0);"
onmouseover="document.bipedImage.src = 'bip01_r_calf.gif'"
onmouseout="document.bipedImage.src = 'bip.gif'"
onclick="document.title='Bip01 R Calf'"
>
<area shape="poly"
alt="Bip01 L Calf"
COORDS="129,286, 136,310, 127,367, 113,367, 100,303, 100,286"
href="javascript: void(0);"
onmouseover="document.bipedImage.src = 'bip01_l_calf.gif'"
onmouseout="document.bipedImage.src = 'bip.gif'"
onclick="document.title='Bip01 L Calf'"
>
<area shape="poly"
alt="weapon_bone"
COORDS="35,214, 43,222, 35,231, 26,222"
href="javascript: void(0);"
onmouseover="document.bipedImage.src = 'weapon_bone.gif'"
onmouseout="document.bipedImage.src = 'bip.gif'"
onclick="document.title='weapon_bone'"
>
<area shape="poly"
alt="alt_weapon_bone01"
COORDS="139,214, 147,222, 139,231, 130,222"
href="javascript: void(0);"
onmouseover="document.bipedImage.src = 'alt_weapon_bone01.gif'"
onmouseout="document.bipedImage.src = 'bip.gif'"
onclick="document.title='alt_weapon_bone01'"
>
<area shape="poly"
alt="Bip01 L Foot"
COORDS="104,369, 132,369, 150,379, 142,394, 104,394"
href="javascript: void(0);"
onmouseover="document.bipedImage.src = 'bip01_l_foot.gif'"
onmouseout="document.bipedImage.src = 'bip.gif'"
onclick="document.title='Bip01 L Foot'"
>
<area shape="poly"
alt="Bip01 R Foot"
COORDS="69,369, 36,369, 18,379, 26,394, 69,394"
href="javascript: void(0);"
onmouseover="document.bipedImage.src = 'bip01_r_foot.gif'"
onmouseout="document.bipedImage.src = 'bip.gif'"
onclick="document.title='Bip01 R Foot'"
>
<area shape="poly"
alt="Bip01 L Foot"
COORDS="104,369, 132,369, 150,379, 142,394, 104,394"
href="javascript: void(0);"
onmouseover="document.bipedImage.src = 'bip01_l_foot.gif'"
onmouseout="document.bipedImage.src = 'bip.gif'"
onclick="document.title='Bip01 L Foot'"
>
<area shape="poly"
alt="Bip01 L Hand"
COORDS="146,192, 160,189, 163,217, 153,216"
href="javascript: void(0);"
onmouseover="document.bipedImage.src = 'bip01_l_hand.gif'"
onmouseout="document.bipedImage.src = 'bip.gif'"
onclick="document.title='Bip01 L Hand'"
>
<area shape="poly"
alt="Bip01 R Hand"
COORDS="14,190, 30,193, 19,216, 9,216"
href="javascript: void(0);"
onmouseover="document.bipedImage.src = 'bip01_r_hand.gif'"
onmouseout="document.bipedImage.src = 'bip.gif'"
onclick="document.title='Bip01 R Hand'"
>
<area shape="rect"
alt="Bip01 R clavicular deltoid01"
COORDS="13,12,56,25"
href="javascript: void(0);"
onmouseover="document.bipedImage.src = 'bip01_r_clavicular_deltoid.gif'"
onmouseout="document.bipedImage.src = 'bip.gif'"
onclick="document.title='Bip01 R clavicular deltoid01'"
>
<area shape="rect"
alt="Bip01 L clavicular deltoid01"
COORDS="115,12,158,25"
href="javascript: void(0);"
onmouseover="document.bipedImage.src = 'bip01_l_clavicular_deltoid.gif'"
onmouseout="document.bipedImage.src = 'bip.gif'"
onclick="document.title='Bip01 L clavicular deltoid01'"
>
</map>
</body>
<html>
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7b421353a3b25558a926f5b700561712d8332c55a0fe2b74f67c78043377ae09
size 17318
+161
View File
@@ -0,0 +1,161 @@
fn saveOutChr =
(
if $ == undefined then
(
messagebox "Select meshes.."
return undefined
)
nodes = selection as array
max modify mode
--check that all objs have skin
for obj in nodes do
(
if obj.modifiers[#Skin] == undefined then
(
messagebox (obj.name + " has no Skin modifier")
return undefined
)
)
modPanel.setCurrentObject nodes[1].modifiers[#Skin]
root = (crytools.findroot (skinOps.GetBoneName nodes[1].modifiers[#Skin] 1 0))
--check that they all use the same skeleton
for obj in nodes do
(
if (crytools.findroot (skinOps.GetBoneName obj.modifiers[#Skin] 1 0)) != root then
(
messagebox "hierarchy mismatch!"
)
)
savePath = getSavePath initialDir:crytools.buildPathFull caption:"Please select a folder to dump character data:"
if savePath == undefined then
(
return undefined
)
savePath += "\\"
print ("Saving to " + savePath)
global savePathCHR_crytools = savePath
--save out envelopes
for obj in nodes do
(
modPanel.setCurrentObject obj.modifiers[#Skin]
skinOps.SaveEnvelope obj.modifiers[#Skin] (savePath + obj.name + ".env")
)
--save out bone list
for obj in nodes do
(
boneList = #()
for i=1 to (skinOps.getNumberBones obj.skin) do
(
append boneList (skinOps.GetBoneName obj.modifiers[#Skin] i 1)
)
crytools.writeOUT boneList (savePath + obj.name + ".bones")
)
--save out node list
nodeNames = #()
for obj in nodes do (append nodeNames obj.name)
crytools.writeOUT nodenames (savePath + "nodes.txt")
--save out OBJ files
for obj in nodes do
(
select obj
exportFile (savePath + obj.name + ".obj") #noPrompt selectedOnly:true using:Wavefront_ObjectExporterPlugin
)
)
--saveOutChr()
fn readInChr =
(
nodes = #()
if savePathCHR_crytools != undefined then
(
savePath = getSavePath initialDir:savePathCHR_crytools caption:"Please select a folder to load character data:"
)
else
(
savePath = getSavePath initialDir:savePathCHR_crytools caption:"Please select a folder to load character data:"
)
if savePath == undefined then
(
return undefined
)
savePath += "\\"
print ("Loading from " + savePath)
nodenames = crytools.readIN (savePath + "nodes.txt")
for name in nodenames do
(
file = importFile (savePath + name + ".obj") #noPrompt
$.name = name
)
for name in nodenames do (append nodes (getnodebyname name))
for obj in nodes do
(
addModifier obj (Skin ())
)
)
--readInChr()
fn addBones savePath =
(
nodes = #()
nodenames = crytools.readIN (savePath + "nodes.txt")
for name in nodenames do (append nodes (getnodebyname name))
print nodes
if crytools.maxversionnum >= 9 then
(
DialogMonitorOPS.RegisterNotification ANoon_EnvelopeCallbackFunction ID:#ANoon_Envelopes
DialogMonitorOPS.Enabled = true
)
for obj in nodes do
(
boneNames = crytools.readIN (savePath + obj.name + ".bones")
bones = #()
for name in boneNames do (append bones (getnodebyname name))
max modify mode
modPanel.setCurrentObject obj.modifiers[#Skin]
for bone in bones do
(
skinOps.addbone obj.modifiers[#Skin] bone 1
)
skinOps.LoadEnvelope obj.modifiers[#Skin] (savePath + obj.name + ".env")
skinOps.LoadEnvelope obj.modifiers[#Skin] (savePath + obj.name + ".env")
)
if crytools.maxversionnum >= 9 then
(
DialogMonitorOPS.Enabled = false
DialogMonitorOPS.UnRegisterNotification ID:#ANoon_Envelopes
)
)
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,81 @@
try
(
if cryTools.cryAnim.UI.batchProcess._v.exportFiles[cryTools.cryAnim.UI.batchProcess._v.selectedFile].subRanges.count == 0 then
cryTools.cryAnim.UI.batchProcess.dialog.rollouts[2].btnImportANM.pressed()
local listEntries = cryTools.cryAnim.UI.batchProcess._v.exportFiles[cryTools.cryAnim.UI.batchProcess._v.selectedFile]
local tempStatus = ""
local tempCheckBeforeExport = cryTools.checkbeforeexport
local tempSuppressWarnings = cryTools.suppresswarnings
cryTools.checkbeforeexport = false
cryTools.suppresswarnings = true
UtilityPanel.OpenUtility CryEngine2_Exporter
local tempRange = animationRange
if listEntries.subRanges.count == 0 then
tempStatus = "Error: No Sub-Ranges found"
else
(
for i = 1 to listEntries.subRanges.count do
(
if listEntries.subRanges[i].range.start.frame == listEntries.subRanges[i].range.end.frame then
(
tempStatus = listEntries.subRanges[i].export + " has wrong animation range"
continue
)
else
(
if listEntries.subRanges[i].range.start.frame > listEntries.subRanges[i].range.end.frame then
(
local tempTime = listEntries.subRanges[i].range.start
listEntries.subRanges[i].range.start = listEntries.subRanges[i].range.end
listEntries.subRanges[i].range.end = tempTime
cryTools.cryAnim.UI.batchProcess._f.subRangeUpdateList()
tempStatus += "Switched Start and Stop of " + listEntries.subRanges[i].export
)
)
animationRange = listEntries.subRanges[i].range
saveMaxFile (maxFilePath + listEntries.subRangePrefix + "_" + listEntries.subRanges[i].export + ".max") quiet:true
local newObjects = #()
for f = 1 to listEntries.subRanges[i].objects.count do
(
if (local tempNode = getNodeByName listEntries.subRanges[i].objects[f]) != undefined then
newObjects[f] = tempNode
else
tempStatus += "; Can't find " + listEntries.subRanges[i].objects[f]
)
if newObjects.count > 0 then
(
csexport.set_node_list newObjects
csexport.export_nodes()
)
else
tempStatus += "; No Node Found"
deleteFile (maxFilePath + maxFileName)
)
)
animationRange = tempRange
cryTools.checkbeforeexport = tempCheckBeforeExport
cryTools.suppresswarnings = tempSuppressWarnings
cryTools.cryAnim.UI.batchProcess._v.customScriptStatus = tempStatus
)
catch()
@@ -0,0 +1,271 @@
struct autoLocStruct
(
setCon,
getChildExtent,
getMaxValue,
setBodyMass,
calcLoc,
setLoc
)
autoLoc = autoLocStruct()
autoLoc.setCon = function setCon node time =
(
try
(
for i = 1 to node.controller.keys.count do
(
try
(
tempKey = biped.getKey node.controller i
if tempKey.time == time then
(
tempKey.continuity = 0
)
)
catch()
)
)
catch()
)
setCon = undefined
autoLoc.calcLoc = function calcLoc =
(
cycleLoc = true
rotateLoc = #none
posChange = false
startLoc = #none
locoCycle = false
at time animationRange.start
(
startRot = $Bip01.transform.rotation as eulerangles
startPos = $Bip01.transform.pos
startLFootPos = $'Bip01 L Toe0'.transform.pos
startRFootPos = $'Bip01 R Toe0'.transform.pos
)
at time animationRange.end
(
endRot = $Bip01.transform.rotation as eulerangles
endPos = $Bip01.transform.pos
)
at time ((animationRange.start + animationRange.end) / 2)
midRot = $Bip01.transform.rotation as eulerangles
at time 2f
(
startMidPos = $Bip01.transform.pos
startMidLFootPos = $'Bip01 L Toe0'.transform.pos
startMidRFootPos = $'Bip01 R Toe0'.transform.pos
)
at time (animationRange.end - 2)
endMidPos = $Bip01.transform.pos
diffRot = #(endRot.x, endRot.y, endRot.z)
diffRot[1] -= startRot.x
diffRot[2] -= startRot.y
diffRot[3] -= startRot.z
diffMidRot = #(midRot.x, midRot.y, midRot.z)
diffMidRot[1] -= startRot.x
diffMidRot[2] -= startRot.y
diffMidRot[3] -= startRot.z
diffPos = endPos - startPos
diffStartPos = startMidPos - startPos
diffEndPos = endPos - endMidPos
diffLFootPos = startLFootPos - startMidLFootPos
diffRFootPos = startRFootPos - startMidRFootPos
diffRotPositiv = copy diffRot #noMap
for i = 1 to 3 do
(
if diffPos[i] < 0 then diffPos[i] *= -1
if diffPos[i] > 10 then posChange = true
if diffRotPositiv[i] < 0 then diffRotPositiv[i] *= -1
if diffRotPositiv[i] > 2 then cycleLoc = false
--if diffMidRot[i] < 0 then diffMidRot[i] *= -1
if diffLFootPos[i] < 0 then diffLFootPos[i] *= -1
if diffLFootPos[i] > 10 then locoCycle = true
if diffRFootPos[i] < 0 then diffRFootPos[i] *= -1
if diffRFootPos[i] > 10 then locoCycle = true
)
if cycleLoc == false then locoCycle = false
diffStartPos = distance startPos startMidPos
diffEndPos = distance endMidPos endPos
if diffStartPos < 5 and diffStartPos > 0.4 then
(
if locoCycle == false then
startLoc = #start
)
if diffStartPos > 4 and diffEndPos < 2 then
if locoCycle == false then
if cycleLoc == false then
startLoc = #stop
if diffRot[3] < 140 and diffRot[3] > 80 then
rotateLoc = #left
if diffRot[3] < -40 and diffRot[3] > -100 then
rotateLoc = #right
if diffMidRot[3] > -220 and diffMidRot[3] < -140 then
(
if diffRot[3] < -140 and diffRot[3] > -180 then
rotateLoc = #revL
)
if diffMidRot[3] > -140 and diffMidRot[3] < -60 then
(
if diffRot[3] < -130 and diffRot[3] > -170 then
rotateLoc = #revR
)
-- print ("diffMidRot = " + diffMidRot as String)
-- print ("diffRot = " + diffRot as String)
-- print ("diffEndPos = " + diffEndPos as String)
-- print ("diffStartPos = " + diffStartPos as String)
-- print ("diffLFootPos = " + diffLFootPos as String)
-- print ("diffRFootPos = " + diffRFootPos as String)
-- print ("startLoc = " + startLoc as String)
-- print ("rotateLoc = " + rotateLoc as String)
-- print ("cycleLoc = " + cycleLoc as String)
-- print ("posChange = " + posChange as String)
-- print ("locoCycle = " + locoCycle as String)
struct locStruct ( start, rotate, cycle, position )
local tempValue = locStruct start:startLoc rotate:rotateLoc cycle:cycleLoc position:posChange
-- print tempValue
return tempValue
)
calcLoc = undefined
autoLoc.setLoc = function setLoc =
(
analyseLoc = autoLoc.calcLoc()
cryTools.cryAnim._f.resetLocator()
cryTools.cryAnim._f.moveToBodyMass()
if analyseLoc.rotate != #none then
(
at time 10f
(
biped.setTransform $Locator_Locomotion #pos $Locator_Locomotion.transform.pos true
autoLoc.setCon $Locator_Locomotion 10f
)
at time animationRange.end
cryTools.cryAnim._f.moveToBodyMass()
with animate on
(
at time 16f
(
case analyseLoc.rotate of
(
#left: rotate $Locator_Locomotion (eulerangles 0 0 89)
#right: rotate $Locator_Locomotion (eulerangles 0 0 -89)
#revL: rotate $Locator_Locomotion (eulerangles 0 0 179)
#revR: rotate $Locator_Locomotion (eulerangles 0 0 -179)
)
autoLoc.setCon $Locator_Locomotion 16f
)
at time animationRange.end
(
case analyseLoc.rotate of
(
#left: rotate $Locator_Locomotion (eulerangles 0 0 89)
#right: rotate $Locator_Locomotion (eulerangles 0 0 -89)
#revL: rotate $Locator_Locomotion (eulerangles 0 0 179)
#revR: rotate $Locator_Locomotion (eulerangles 0 0 -179)
)
)
)
)
else
(
if analyseLoc.position == true then
(
if analyseLoc.start == #start then
(
at time 10f
(
biped.setTransform $Locator_Locomotion #pos $Locator_Locomotion.transform.pos true
autoLoc.setCon $Locator_Locomotion 10f
)
at time animationRange.end
cryTools.cryAnim._f.moveToBodyMass()
)
else
(
at time animationRange.end
cryTools.cryAnim._f.moveToBodyMass()
)
)
else
(
if analyseLoc.start == #start then
at time animationRange.end
cryTools.cryAnim._f.moveToBodyMass()
)
)
sliderTime = animationRange.start + 1
sliderTime = animationRange.start
)
setLoc = undefined
try
autoLoc.setLoc()
catch
cryTools.cryAnim.UI.batchProcess._v.customScriptStatus = "Error: Auto-Loc"
@@ -0,0 +1,10 @@
try
(
tempVar = (cryTools.cryAnim.UI.main._f.getUI "Settings" "radExportPrompt").state
(cryTools.cryAnim.UI.main._f.getUI "Settings" "radExportPrompt").state = 2
(cryTools.cryAnim.UI.main._f.getUI "Load / Save / Export" "Export").pressed()
(cryTools.cryAnim.UI.main._f.getUI "Settings" "radSaveExportPrompt").state = tempVar
tempVar = undefined
)
catch ( cryTools.cryAnim.UI.batchProcess._v.customScriptStatus = "Error: Failed to Export" )
@@ -0,0 +1,10 @@
try
(
tempVar = (cryTools.cryAnim.UI.main._f.getUI "Settings" "radSavePrompt").state
(cryTools.cryAnim.UI.main._f.getUI "Settings" "radSavePrompt").state = 2
(cryTools.cryAnim.UI.main._f.getUI "Load / Save / Export" "Save").pressed()
(cryTools.cryAnim.UI.main._f.getUI "Settings" "radSavePrompt").state = tempVar
tempVar = undefined
)
catch ( cryTools.cryAnim.UI.batchProcess._v.customScriptStatus = "Error: Failed to Save" )
@@ -0,0 +1,10 @@
try
(
tempVar = (cryTools.cryAnim.UI.main._f.getUI "Settings" "radSaveExportPrompt").state
(cryTools.cryAnim.UI.main._f.getUI "Settings" "radSaveExportPrompt").state = 2
(cryTools.cryAnim.UI.main._f.getUI "Load / Save / Export" "Save / Export").pressed()
(cryTools.cryAnim.UI.main._f.getUI "Settings" "radSaveExportPrompt").state = tempVar
tempVar = undefined
)
catch ( cryTools.cryAnim.UI.batchProcess._v.customScriptStatus = "Error: Failed to Save/Export" )
@@ -0,0 +1,16 @@
try
(
if selection.count > 0 then
local selArray = selection as Array
else
local selArray = Objects as Array
for obj in selArray do
(
obj.controller.position.controller = TCB_Position()
obj.controller.rotation.controller = TCB_Rotation()
obj.controller.scale.controller = TCB_Scale()
)
)
catch
cryTools.cryAnim.UI.batchProcess._v.customScriptStatus = "Error: Setting TCB"
@@ -0,0 +1,10 @@
try
(
tempVar = (cryTools.cryAnim.UI.main._f.getUI "Settings" "radExportPrompt").state
(cryTools.cryAnim.UI.main._f.getUI "Settings" "radExportPrompt").state = 2
(cryTools.cryAnim.UI.main._f.getUI "Load / Save / Export" "Export").pressed()
(cryTools.cryAnim.UI.main._f.getUI "Settings" "radSaveExportPrompt").state = tempVar
tempVar = undefined
)
catch ( cryTools.cryAnim.UI.batchProcess._v.customScriptStatus = "Error: Failed to Export" )
@@ -0,0 +1,7 @@
with undo off
(
try
cryTools.cryAnim._f.rotateAnim 180 range:true
catch
cryTools.cryAnim.UI.batchProcess._v.customScriptStatus = "Error: Rotating 180"
)
+951
View File
@@ -0,0 +1,951 @@
-------------------------------------------------------------------------------
-- batch8.ms #for 3DSMax v.8
-- Version 2.4 Internal
-- Batch Exporter for .bip and .fbx with upper body detection for upper body animations used in cryEngine
-- By: Mathias Lindner
-- eMail: devsupport@crytek.com
-------------------------------------------------------------------------------
--###############################################################################
--// creates the dialog to customize the scripts
--###############################################################################
cryTools.cryAnim.UI.batchProcess._f.createScriptDialog = function createScriptDialog dialogTitle =
(
try
(
--// rollout with edit option for the script which will be execute before exporting or at the end of check
rollout batchProcessScriptCustomize dialogTitle
(
--// script container
--edittext edScript "" pos:[2,4] height:360 width:392
edittext edScript "" pos:[2,4] height:360 fieldWidth:392
--// applies the script to the current scene
button btnPreview "Preview" pos:[6,372] width:50 height:20 toolTip:"Executes the script on the current scene"
--// applies the script to the current scene
button btnClear "Clear" pos:[77,372] width:50 height:20 toolTip:"Clears the script in the edit box"
--// imports other scripts
button btnImport "Import" pos:[150,372] width:50 height:20 toolTip:"Opens a dialog to import .ms script files"
--// saves the script and destroys dialog
button btnCache "Cache" pos:[260,372] width:50 height:20 toolTip:"Stores the custom script in the memory"
--// saves the script and destroys dialog
button btnSaveAs "Save As" pos:[205,372] width:50 height:20 toolTip:"Saves the custom script in the edit box into a specific file"
--// destroys dialog without saving
button btnCancel "Cancel" pos:[345,372] width:50 height:20 toolTip:"Aborts the custom script generation"
on batchProcessScriptCustomize open do
(
case cryTools.cryAnim.UI.batchProcess.customizeScript.title of
(
"First Script Customization": local tempVarScript = cryTools.cryAnim.UI.batchProcess._v.firstScript
"Second Script Customization": local tempVarScript = cryTools.cryAnim.UI.batchProcess._v.secondScript
)
--// if there is a defined script already
if tempVarScript != "" then
--// set text of the script container to the already defined script
edScript.text = tempVarScript
)
on btnPreview pressed do
(
try
(
--// tries executing the script
tempString = execute( edScript.text )
--print tempString
)
catch
(
--// if an error occured, print the error message
format "*** % ***\n" (getCurrentException())
)
)
on btnClear pressed do
(
edScript.text = ""
)
on btnImport pressed do
(
ret = "\r\n"
local tempVar = getOpenFileName caption:"First Script Import" filename:(getDir #scripts + "\\*.ms") types:"Script Files (*.ms)|*.ms"
if tempVar != undefined then
(
cryTools.cryAnim.UI.batchProcess.customizeScript.edScript.text += ret + ret + ret +" -- Imported from " + tempVar + ret + ret
local tempStream = openFile tempVar mode:"r"
while (eof tempStream) != true do
cryTools.cryAnim.UI.batchProcess.customizeScript.edScript.text += readLine tempStream + ret
close tempStream
)
)
on btnCache pressed do
(
local tempVar = ""
case cryTools.cryAnim.UI.batchProcess.customizeScript.title of
(
"First Script Customization": ( cryTools.cryAnim.UI.batchProcess._v.firstScript = edScript.text ; tempVar = "First" )
"Second Script Customization": ( cryTools.cryAnim.UI.batchProcess._v.secondScript = edScript.text ; tempVar = "Second" )
)
cryTools.cryAnim.UI.batchProcess._f.updateScriptLists scriptUpdate:tempVar
--// destroys the dialog
destroyDialog cryTools.cryAnim.UI.batchProcess.customizeScript
)
on btnSaveAs pressed do
(
local tempString = ""
case cryTools.cryAnim.UI.batchProcess.customizeScript.title of
(
"First Script Customization": tempString = "First"
"Second Script Customization": tempString = "Second"
)
local tempVar = getSaveFileName caption:"First Script Import" filename:(cryTools.buildPathFull + "Tools\\maxscript\\cryAnim\\ui\\batch\\" + tempString + "Script\\*.ms") types:"Script Files (*.ms)|*.ms"
if tempVar != undefined then
(
local tempStream = openFile tempVar mode:"w"
format edScript.text to:tempStream
close tempStream
local tempFilter = filterString tempVar "\\"
local tempString = (filterString tempFilter[tempFilter.count] ".")[1]
case cryTools.cryAnim.UI.batchProcess.customizeScript.title of
(
"First Script Customization": tempVar = "First|" + tempString
"Second Script Customization": tempVar = "Second|" + tempString
)
cryTools.cryAnim.UI.batchProcess._f.updateScriptLists scriptUpdate:tempVar
destroyDialog cryTools.cryAnim.UI.batchProcess.customizeScript
)
)
on btnCancel pressed do
(
cryTools.cryAnim.UI.batchProcess._f.updateScriptLists scriptUpdate:"None"
--// destroys the dialog
destroyDialog cryTools.cryAnim.UI.batchProcess.customizeScript
)
)
--// creates the dialog
cryTools.cryAnim.UI.batchProcess.customizeScript = batchProcessScriptCustomize
batchProcessScriptCustomize = undefined
createDialog cryTools.cryAnim.UI.batchProcess.customizeScript 400 400
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess._f.createScriptDialog" )
)
createScriptDialog = undefined
logOutput "> Created cryTools.cryAnim.UI.batchProcess._f.createScriptDialog function"
--###############################################################################
--// creates the batchProcess dialog
--###############################################################################
cryTools.cryAnim.UI.batchProcess._f.callDialog = function callDialog =
(
try
(
--// if batchProcess is already opened, close the rollout floater
try ( closeRolloutFloater cryTools.cryAnim.UI.batchProcess.dialog ) catch()
--// create new batchProcess rollout floater
cryTools.cryAnim.UI.batchProcess.dialog = newRolloutFloater "CryAnim Batch Process v2.7" 600 422
--// rollout with file and folder list
rollout fileStatusRO "File Status" height:200
(
--// files list
activeXControl lbFiles "MSComctlLib.ListViewCtrl" pos:[140,8] height:185 width:440
--// sub folders list
activeXControl lbSubFolders "MSComctlLib.TreeCtrl" pos:[8,8] height:185 width:120
on fileStatusRO open do
(
try
(
--// initialise
lbFiles.GridLines = true
lbFiles.MousePointer = #ccArrow
lbFiles.AllowColumnReorder = true
lbFiles.view = #lvwReport
lbFiles.LabelEdit = #lvwManual
lbFiles.LabelWrap = true
lbFiles.MultiSelect = true
lbFiles.FullRowSelect = true
lbSubFolders.LineStyle = #tvwTreeLines
lbSubFolders.Style = #tvwTreelinesPlusMinusText
lbSubFolders.sorted = true
lbSubFolders.checkboxes = true
lbSubFolders.Indentation = 50
--// adds columns
lbFiles.columnHeaders.Add text:"Filename"
lbFiles.columnHeaders.Add text:"Bone"
lbFiles.columnHeaders.Add text:"Export"
lbFiles.columnHeaders.Add text:"Ext"
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.fileStatusRO.open" )
)
on lbFiles Click do
(
try
(
--// gets the cursor position of the active rollout part
screenPos = getCursorPos lbFiles
--// applies a hit test of the current mouse position
tempItem = lbFiles.hittest ((screenPos.x-2)*15) ((screenPos.y-2)*15)
--// if nothing is selected
if tempItem == undefined then
(
--// go through the files list and deselect every entry
for i = 1 to lbFiles.ListItems.count do
lbFiles.ListItems[i].selected = false
)
--// if an item is selected
else
(
--// if a folder is selected, deselect it
if tempItem.ListSubItems[3].text == "folder" then
tempItem.selected = false
)
--// update the files counter
cryTools.cryAnim.UI.batchProcess._f.updateCounter()
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.fileStatusRO.lbFiles.click" )
)
on lbSubFolders NodeCheck checkedNode do
(
try
(
if cryTools.cryAnim._v.various[120] != true then
(
--// if a state changes in the sub folders list, update the whole dialog
cryTools.cryAnim.UI.batchProcess._v.flags[1] = true
cryTools.cryAnim.UI.batchProcess._f.updateDialog()
cryTools.cryAnim.UI.batchProcess._f.updateSubFolderSelection #set
)
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.fileStatusRO.lbSubFolders.nodeCheck" )
)
on lbFiles DblClick do
(
try
(
--// gets the cursor position of the active rollout part
screenPos = getCursorPos lbFiles
--// applies a hit test of the current mouse position
tempItem = lbFiles.hittest ((screenPos.x-2)*15) ((screenPos.y-2)*15)
--// if an item is selected
if tempItem != undefined then
(
--// if a folder is selected
if tempItem.ListSubItems[3].text == "folder" then
(
--// deselect the folder
tempItem.selected = false
--// go through the files list and select every on-coming entry (without folders) until another folder is reached
for i = (tempItem.index + 1) to lbFiles.ListItems.count do
(
if lbFiles.ListItems[i].ListSubItems[3].text != "folder" then
lbFiles.ListItems[i].selected = true
else
exit
)
)
--// if no folder is selected
else
(
--// go through the list and select every entry without folders
for i = 1 to lbFiles.ListItems.count do
if lbFiles.ListItems[i].ListSubItems[3].text != "folder" then
lbFiles.ListItems[i].selected = true
)
)
--// update the files counter
cryTools.cryAnim.UI.batchProcess._f.updateCounter()
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.fileStatusRO.lbFiles.dblClick" )
)
)
logOutput "> Created fileStatusRO rollout"
--// rollout with paths, file mask and pre export script
rollout inputOutputRO "Input / Output" height:50
(
--// source folder
button btnSourceFolder "Source" pos:[8,5] width:60 height:20 toolTip:"Opens a dialog to choose the source folder"
label labSourceFolder "No Folder selected" pos:[80,7] width:300
--// output folder
button btnExportFolder "Export" pos:[8,27] width:60 height:20 toolTip:"Opens a dialog to choose the export folder"
label labExportFolder "No Folder selected" pos:[80,29] width:300
--// file mask
label labFileMask "File Mask" pos:[16,52]
edittext etFileMask "" text:"" pos:[75,50] fieldWidth:300
groupbox gbScripts " Process Templates " pos:[400,5] width:180 height:62
label labFirstOp "1." pos:[408,24]
dropdownlist ddFirstOp "" pos:[425,21] width:150
label labSecondOp "2." pos:[408,46]
dropdownlist ddSecondOp "" pos:[425,42] width:150
on inputOutputRO open do
(
try
(
--// if a source path is already set
if cryTools.cryAnim.UI.batchProcess._v.sourcePath != undefined then
--// set text to the old source path
labSourceFolder.text = cryTools.cryAnim.UI.batchProcess._v.sourcePath
--// if the ini setting for the file extension is found
if (local tempText = cryTools.cryAnim.base.iniFile #get #batchProcessExt) != "" then
--// set file mask to the ini setting
etFileMask.text = tempText
--// if the ini setting for the source path is found
if (tempText = cryTools.cryAnim.base.iniFile #get #batchProcessSourcePath) != "" then
(
--// set source string to the ini setting
labSourceFolder.text = tempText
cryTools.cryAnim.UI.batchProcess._v.sourcePath = tempText
)
else
--// otherwise to the default string
labSourceFolder.text = "No Source Folder selected"
--// if the ini setting for the export path is found
if (tempText = cryTools.cryAnim.base.iniFile #get #batchProcessExportPath) != "" then
(
--// set export string to the ini setting
labexportFolder.text = tempText
cryTools.cryAnim.UI.batchProcess._v.exportPath = tempText
)
else
--// otherwise to the default string
labexportFolder.text = "No Export Folder selected"
--// updates the first and second scripts from the folders
cryTools.cryAnim.UI.batchProcess._f.updateScriptLists()
--// fills the sub folders list
cryTools.cryAnim.UI.batchProcess._f.updateSubFolders()
cryTools.cryAnim.UI.batchProcess._f.updateSubFolderSelection #get
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.inputOutputRO.open" )
)
on btnSourceFolder pressed do
(
try
(
local tempPath = ""
--// if a source path is defined
if cryTools.cryAnim.UI.batchProcess._v.sourcePath != undefined then
--// set temporary path to the source path
tempPath = cryTools.cryAnim.UI.batchProcess._v.sourcePath
else
--// otherwise get new directory from an input dialog
tempPath = (cryTools.cryAnim.base.perforce cryTools.cryAnim.UI.main._v.bipSavePath #getDirectory)
--// temporary string gets open directory input for source path
tempString = (getSavePath caption:"Select Source Folder" initialDir:tempPath)
--// if a folder is selected by the open directory
if tempString != undefined then
(
--// source path is the new folder with "\"
cryTools.cryAnim.UI.batchProcess._v.sourcePath = tempString + (if (filterString tempString "\\").count > 1 then "\\" else "")
--// updates the export path with the converted path to the project directory
cryTools.cryAnim.UI.batchProcess._v.exportPath = (cryTools.cryAnim.base.perforce (cryTools.cryAnim.UI.main._f.checkExport #ProductionToGame cryTools.cryAnim.UI.batchProcess._v.sourcePath) #getDirectory)
--// update export folder text
labExportFolder.text = cryTools.cryAnim.UI.batchProcess._v.exportPath
--// update source folder text
labSourceFolder.text = cryTools.cryAnim.UI.batchProcess._v.sourcePath
--// set ini setting for the source path
cryTools.cryAnim.base.iniFile #set #batchProcessSourcePath value:labSourceFolder.text
cryTools.cryAnim.base.iniFile #set #batchProcessExportPath value:labExportFolder.text
if (findString labSourceFolder.text "\\") != undefined then
(
--// clears and fills sub folders
cryTools.cryAnim.UI.batchProcess._f.updateSubFolders()
(cryTools.cryAnim.UI.batchProcess.dialog.rollouts[1].lbSubFolders.Nodes.item 0).checked = true
--// clears and fills the file list
cryTools.cryAnim.UI.batchProcess._f.updateDialog()
)
)
--// if no folder is selected
else
(
--// if no export path is set before
if cryTools.cryAnim.UI.batchProcess._v.sourcepath == undefined then
(
--// enable statistic button as it can be used without exporting
cryTools.cryAnim.UI.batchProcess.dialog.rollouts[3].btnProcess.enabled = true
)
)
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.inputOutputRO.btnSourceFolder.pressed" )
)
on btnExportFolder pressed do
(
try
(
--// temporary string gets open directory input for export path
tempString = (getSavePath caption:"Select Export Folder" initialDir:cryTools.cryAnim.UI.batchProcess._v.exportPath)
--// if a folder is selected by the open directory
if tempString != undefined then
(
--// set export path to the new folder path
cryTools.cryAnim.UI.batchProcess._v.exportPath = tempString + "\\"
--// update exportFolder text
labExportFolder.text = tempString + "\\"
--// set ini setting for the export path
cryTools.cryAnim.base.iniFile #set #batchProcessExportPath value:labExportFolder.text
)
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.inputOutputRO.btnExportFolder.pressed" )
)
on ddFirstOp selected value do
(
try
(
if ddFirstOp.selection == ddFirstOp.items.count then
cryTools.cryAnim.UI.batchProcess._f.createScriptDialog "First Script Customization"
else
cryTools.cryAnim._v.various[33] = ddFirstOp.items[ddFirstOp.selection]
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.inputOutputRO.ddFirstOp.selected" )
)
on ddSecondOp selected value do
(
try
(
if ddSecondOp.selection == ddSecondOp.items.count then
cryTools.cryAnim.UI.batchProcess._f.createScriptDialog "Second Script Customization"
else
cryTools.cryAnim._v.various[34] = ddSecondOp.items[ddSecondOp.selection]
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.inputOutputRO.ddSecondOp.selected" )
)
on etFileMask entered value do
(
try
(
--// set ini setting with changed file mask
cryTools.cryAnim.base.iniFile #set #batchProcessExt value:etFileMask.text
--// update whole dialog with new changes
cryTools.cryAnim.UI.batchProcess._v.flags[1] = true
cryTools.cryAnim.UI.batchProcess._f.updateDialog()
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.inputOutputRO.etFileMask.entered" )
)
)
logOutput "> Created inputOutputRO rollout"
--// rollout with all config options and check or export button
rollout checkExportRO "Check / Export" height:60
(
--// files / folders groub
label labFilesFolders "Files / Folders :" pos:[10,11]
groupBox gbFilesFolders "" pos:[100,-1] height:32 width:230
--// keep the sub folder structure when exporting
label labKeepSubFolders "Keep Sub Folders" pos:[210,11]
checkBox chkKeepSubFolders "" pos:[300,11] checked:true
--// counter for selected and maximumm files
label labCount "Count :" pos:[130,11]
--// bone detection for exporting specific body parts for specific file string parts
label labBoneDetection "Bone Detection :" pos:[10,42]
groupBox gbBoneDetection "" pos:[100,30] height:32 width:230
--// config bone detection, manage sets of bone detections
button btnConfig "Config" pos:[110,41] height:17 width:70 toolTip:"Opens a dialog to configure filename/bone detection"
--// activate automatic file detection
label labDetect "Detect" pos:[195,43]
checkBox chkDetect "" pos:[235,42] checked:true
--// only files which are detected will be shown
label labOnlyBoneDetection " + " pos:[255,43]
checkBox chkOnlyBoneDetection "" pos:[270,42]
--// only files which are not detected will be shown
label labNoBoneDetection " - " pos:[290,43]
checkBox chkNoBoneDetection "" pos:[300,42]
--// executes the whole export process with pre export script, but without real exporting
button btnProcess "P R O C E S S" pos:[345,8] height:50 width:230 enabled:false toolTip:"Processes the files/selection in the list (executes scripts)"
on checkExportRO open do
(
try
(
--// clears the file list
cryTools.cryAnim.UI.batchProcess._v.exportFiles = #()
try
(
local tempSubFilter = cryTools.cryAnim.base.iniFile #get #batchProcessSubFolderSelection
tempSubFilter = filterString tempSubFilter "#"
if tempSubFilter.count == 0 then
(cryTools.cryAnim.UI.batchProcess.dialog.rollouts[1].lbSubFolders.Nodes.item 0).checked = true
) catch()
try cryTools.cryAnim.UI.batchProcess.dialog.rollouts[3].chkKeepSubFolders.checked = cryTools.cryAnim.base.iniFile #get #batchProcessSubFolders catch()
--// if a source path is internal defined
if cryTools.cryAnim.UI.batchProcess._v.sourcePath != undefined then
(
--// enable check and export button
cryTools.cryAnim.UI.batchProcess.dialog.rollouts[3].btnProcess.enabled = true
)
--// get bone detection set up
local tempBoneArray = cryTools.cryAnim.base.iniFile #get #bones
--// if a bone setup is found
if tempBoneArray != undefined then
(
tempListArray = #()
--// goes through the bone list
for i = 1 to tempBoneArray.count do
--// if an entry is found
if tempBoneArray[i].name != "" then
--// add the entry to the list
append tempListArray tempBoneArray[i]
--// set new bone list
cryTools.cryAnim.UI.batchProcess._v.boneList = tempBoneArray
)
--// update whole dialog
cryTools.cryAnim.UI.batchProcess._v.flags[1] = true
cryTools.cryAnim.UI.batchProcess._f.updateDialog()
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.checkExportRO.open" )
)
on chkKeepSubFolders changed value do
(
try
cryTools.cryAnim.base.iniFile #set #batchProcessSubFolders value:value
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.checkExportRO.chkKeepSubFolder.changed" )
)
on btnProcess pressed do
(
try
--// process all used files without export
cryTools.cryAnim.UI.batchProcess._f.processFiles #statistic
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.checkExportRO.btnProcess.pressed" )
)
on chkOnlyBoneDetection changed value do
(
try
(
--// if only bone detection is activated
if cryTools.cryAnim.UI.batchProcess.dialog.rollouts[3].chkOnlyBoneDetection.checked == true then
--// no bone detection is deactivated
cryTools.cryAnim.UI.batchProcess.dialog.rollouts[3].chkNoBoneDetection.checked = false
--// updates whole dialog
cryTools.cryAnim.UI.batchProcess._v.flags[1] = true
cryTools.cryAnim.UI.batchProcess._f.updateDialog()
cryTools.cryAnim.UI.batchProcess._v.flags[1] = false
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.checkExportRO.chkOnlyBoneDetection.changed" )
)
on chkNoBoneDetection changed value do
(
try
(
--// if no bone detection is activated
if cryTools.cryAnim.UI.batchProcess.dialog.rollouts[3].chkNoBoneDetection.checked == true then
--// only bone detections is deactivated
cryTools.cryAnim.UI.batchProcess.dialog.rollouts[3].chkOnlyBoneDetection.checked = false
--// updates whole dialog
cryTools.cryAnim.UI.batchProcess._v.flags[1] = true
cryTools.cryAnim.UI.batchProcess._f.updateDialog()
cryTools.cryAnim.UI.batchProcess._v.flags[1] = false
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.checkExportRO.chkNoBoneDetection.changed" )
)
on btnConfig pressed do
(
try
(
--// rollout to edit the bone list entry
rollout entryDetailsRO "Entry Details"
(
label labName "Name :" pos:[8,10]
label labExternal "External :" pos:[8,30]
label labBones "Bones :" pos:[8,50]
--// sets the name, file detection and bones column
edittext edName "" text:(cryTools.cryAnim.UI.batchProcess.editBoneList.lbList.FocusedItem.SubItems.item 0).text pos:[70,10] fieldWidth:300
edittext edExternal "" text:(cryTools.cryAnim.UI.batchProcess.editBoneList.lbList.FocusedItem.SubItems.item 1).text pos:[70,30] fieldWidth:300
edittext edBones "" text:(cryTools.cryAnim.UI.batchProcess.editBoneList.lbList.FocusedItem.SubItems.item 2).text pos:[70,50] fieldWidth:245
--// button to pick specific bones in the scene
button btnPickBones "Pick" pos:[323,50] height:17 width:50 toolTip:"Opens dialog to select the bone associated to the filename detection"
--// save the entry or cancel
button btnSave "Save" pos:[100,80] height:20 width:80 toolTip:"Saves filename/bone detection"
button btnCancel "Cancel" pos:[200,80] height:20 width:80 toolTip:"Aborts filename/bone detection"
on btnSave pressed do
(
--// get currently selected item
local tempItem = cryTools.cryAnim.UI.batchProcess.editBoneList.lbList.FocusedItem
--// set new name
(tempItem.SubItems.item 0).text = edName.text
--// set new file detection
(tempItem.SubItems.item 1).text = edExternal.text
--// set new bone list
(tempItem.SubItems.item 2).text = edBones.text
local tempListArray = #()
cryTools.cryAnim.UI.batchProcess._f.updateExtent()
--// kills bone edit dialog
destroyDialog cryTools.cryAnim.UI.batchProcess.entryDetails
)
on btnCancel pressed do
(
--// kills bone edit dialog
destroyDialog cryTools.cryAnim.UI.batchProcess.entryDetails
)
on btnPickBones pressed do
(
local tempString = ""
--// pick node from the scene
objArray = selectByName title:("Select Nodes") showHidden:true
--// if a node is selected
if objArray != undefined then
(
--// goes through the nodes
for i = 1 to objArray.count do
--// adds the name of the node with a ";" as seperator
tempString += objArray[i].name + (if i != objArray.count then ";" else "")
--// set the new bone list
edBones.text = tempString
)
)
)
cryTools.cryAnim.UI.batchProcess.entryDetails = entryDetailsRO
entryDetailsRO = undefined
--// rollout to edit the bone detection list
rollout editBoneListRO "Edit Bone List"
(
--// list of all bone setups
activeXControl lbList "MSComctlLib.ListViewCtrl" pos:[1,1] height:185 width:440
--// save current setup
button btnSave "Save" pos:[8,195] height:20 width:80 toolTip:"Saves selected filename/bone detection entry"
button btnDelete "Delete" pos:[150,195] height:20 width:60 toolTip:"Deletes selected entry"
button btnDeleteAll "Delete All" pos:[220,195] height:20 width:60 toolTip:"Clears whole list"
button btnCancel "Cancel" pos:[350,195] height:20 width:80 toolTip:"Abort filename/bone detection"
on editBoneListRO open do
(
lbList.GridLines = true
lbList.MousePointer = #ccArrow
lbList.AllowColumnReorder = true
lbList.view = #lvwReport
lbList.LabelEdit = #lvwManual
lbList.Sorted = true
lbList.FullRowSelect = true
lbList.Checkboxes = true
--// adds columns
lbList.columnHeaders.Add text:"Name"
lbList.columnHeaders.Add text:"External"
lbList.columnHeaders.Add text:"Bones"
--// goes through the bone list
for i = 1 to cryTools.cryAnim.UI.batchProcess._v.boneList.count do
(
--// adds a new entry
local lbListEntry = lbList.listItems.Add text:cryTools.cryAnim.UI.batchProcess._v.boneList[i].name
--// if entry is active
if cryTools.cryAnim.UI.batchProcess._v.boneList[i].active == "true" then
--// set list entry active
lbListEntry.checked = true
--// if entry is not active
if cryTools.cryAnim.UI.batchProcess._v.boneList[i].active == "false" then
--// set list entry not active
lbListEntry.checked = false
--// add external entry
lbListEntry.listSubItems.Add text:cryTools.cryAnim.UI.batchProcess._v.boneList[i].external
--// add bone entry
lbListEntry.listSubItems.Add text:cryTools.cryAnim.UI.batchProcess._v.boneList[i].bones
)
)
on lbList DblClick do
(
--// gets the bone list position
screenPos = getCursorPos lbList
--// hit test the cursor position
tempItem = lbList.hittest ((screenPos.x-2)*15) ((screenPos.y-2)*15)
--// if an item is selected
if tempItem != undefined then
(
--// creates bone entry edit
createDialog cryTools.cryAnim.UI.batchProcess.entryDetails 385 110
)
--// if no item is selected
else
(
--// empty boneStruct
tempStringArray = (boneStruct name:"" external:"" bones:"")
tempArray = #()
--// get nodes to be added
objArray = selectByName title:("Select Nodes to be added") showHidden:true
--// if a node is selected
if objArray != undefined then
(
--// goes through node list
for obj in objArray do
--// add the nodes via boneStruct to a seperate list
append tempArray (boneStruct name:obj.name external:obj.name bones:obj.name)
--// goes through the node list
for i = 1 to tempArray.count do
(
--// adds name(s) of the node(s)
tempStringArray.name += tempArray[i].name + (if i != tempArray.count then ";" else "")
--// adds file detection(s)
tempStringArray.external += tempArray[i].external + (if i != tempArray.count then ";" else "")
--// adds bone(s) list
tempStringArray.bones += tempArray[i].bones + (if i != tempArray.count then ";" else "")
)
--// adds entry to the bone list
local lbListEntry = lbList.ListItems.Add text:tempStringArray.name
lbListEntry.checked = true
lbListEntry.ListSubItems.Add text:tempStringArray.external
lbListEntry.ListSubItems.Add text:tempStringArray.bones
)
)
)
on btnSave pressed do
(
local tempArray = #()
local tempList = #()
--// goes through the bone list
for i = 1 to lbList.ListItems.count do
(
local tempItemArray = #()
local tempItem = lbList.ListItems[i]
--// save checked state
tempItemArray[1] = tempItem.checked as String
--// if nothing is typed in, the entry will have " " to filter correctly
if tempItem.text != "" then tempItemArray[2] = tempItem.text else tempItemArray[2] = " "
if tempItem.ListSubItems[1].text != "" then tempItemArray[3] = tempItem.ListSubItems[1].text else tempItemArray[3] = " "
if tempItem.ListSubItems[2].text != "" then tempItemArray[4] = tempItem.ListSubItems[2].text else tempItemArray[4] = " "
--// adds the entries to a seperate list
append tempArray (boneStruct active:tempItemArray[1] name:tempItemArray[2] external:tempItemArray[3] bones:tempItemArray[4])
)
--// sets ini setting
cryTools.cryAnim.base.iniFile #set #bones value:tempArray
--// sets new bone list
cryTools.cryAnim.UI.batchProcess._v.boneList = tempArray
--// updates whole dialog
cryTools.cryAnim.UI.batchProcess._f.updateDialog()
--// kills bone list edit dialog
destroyDialog cryTools.cryAnim.UI.batchProcess.editBoneList
)
on btnDelete pressed do
(
--// goes through the bone list
for i = 1 to lbList.ListItems.count do
(
--// tries to delete the selected entry
try
(
if lbList.ListItems[i].selected == true then
lbList.ListItems.Remove i
)
catch()
)
)
on btnDeleteAll pressed do
(
--// clears whole list
lbList.ListItems.clear()
)
on btnCancel pressed do
(
--// kills bone list edit dialog
destroyDialog cryTools.cryAnim.UI.batchProcess.editBoneList
)
)
cryTools.cryAnim.UI.batchProcess.editBoneList = editBoneListRO
editBoneListRO = undefined
--// creates bone list edit dialog
createDialog cryTools.cryAnim.UI.batchProcess.editBoneList 443 220
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.checkExportRO.btnConfig.pressed" )
)
)
logOutput "> Created checkExportRO rollout"
--// adds all rollouts to the UI
addRollout fileStatusRO cryTools.cryAnim.UI.batchProcess.dialog
addRollout inputOutputRO cryTools.cryAnim.UI.batchProcess.dialog
addRollout checkExportRO cryTools.cryAnim.UI.batchProcess.dialog
fileStatusRO = undefined
inputOutputRO = undefined
checkExportRO = undefined
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess._f.callDialog" )
)
callDialog = undefined
logOutput "> Created cryTools.cryAnim.UI.batchProcess._f.callDialog function"
logOutput ">> batch8.ms loaded"
File diff suppressed because it is too large Load Diff
+230
View File
@@ -0,0 +1,230 @@
--###############################################################################
--// rollout with elements to control the locator
--###############################################################################
rollout locatorRO "Locator"
(
button btnCreate "Create" pos:[8,8] width:70 height:20 toolTip:"Creates Locator_Locomotion biped prop"
button btnDelete "Delete" pos:[80,8] width:70 height:20 toolTip:"Deletes Locator_Locomotion"
button btnAutoLoc "Auto-Locator" pos:[8,35] width:142 height:20 toolTip:"Animates the Locator_Locomotion contextual of the animation"
button btnResetLocator "Reset Locator" pos:[8,55] width:142 height:20 toolTip:"Resets Locator_Locomotion to the origin facing in the direction the character faces"
button btnSetToBodyMass "Move to Body Mass" pos:[8,75] width:142 height:20 toolTip:"Moves the Locator_Locomotion to the calculated body mass of Bip01"
on locatorRO open do
(
try
(
if (cryTools.cryAnim.base.iniFile #get #rolloutStates) == true then
(cryTools.cryAnim.UI.main._f.getUI "Locator" "").open = cryTools.cryAnim.base.iniFile #get #locatorRO
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.locatorRO.open" )
)
on locatorRO rolledUp value do
(
try
(
if (cryTools.cryAnim.base.iniFile #get #locatorRO) != value then
cryTools.cryAnim.base.iniFile #set #locatorRO
local lolStream = createFile "C:\\Yeah.txt"
cryTools.cryAnim.UI.main._f.updateDialog()
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.locatorRO.rolledUp" )
)
on btnCreate pressed do
(
try
(
if $Bip01 != undefined then
(
if queryBox "Create Locator_Locomotion?" title:"Locator_Locomotion" == true then
(
undo "create Locator_Locomotion" on
(
try
(
local locVertArray = #([-2.60474,5.627,0], [-2.60474,5.627,5.306], [-2.60501,-5.627,5.306], [-2.60501,-5.627,2.40557e-006], [2.60475,5.627,0], [2.60475,5.627,5.306], [2.60499,-5.627,5.306], [2.605,-5.627,1.88326e-007], [-5.71044,-5.62699,5.306], [-5.71044,-5.62699,3.72612e-006], [5.71043,-5.62701,-1.24204e-006], [5.71043,-5.62701,5.306], [-9.4768e-006,-11.63,-1.24204e-006], [-9.48043e-006,-11.63,5.306])
$Bip01.controller.figureMode = true
$Bip01.controller.prop1Exists = false
tempSaveRot = $Bip01.transform.rotation
tempBipRot = $Bip01.transform.rotation as eulerangles
if tempBipRot.z > 0 and tempBipRot.z < 180 then
tempBipRot.z = -90
biped.setTransform $Bip01 #rotation tempBipRot false
$Bip01.controller.prop1Exists = true
tempSel = biped.getNode $Bip01 20
tempSel.name = "Locator_Locomotion"
select tempSel
cryTools.cryAnim._f.resetLocator forceDir:true
tempPanel = getCommandPanelTaskMode()
setCommandPanelTaskMode #modify
addModifier tempSel (Edit_Poly())
tempBit = #{1..(polyOp.getNumVerts tempSel)}
tempSel.modifiers[1].setSelection 1 tempBit
tempSel.modifiers[1].setOperation #DeleteVertex
tempSel.modifiers[1].commit()
for i = 1 to locVertArray.count do
(
tempSel.modifiers[1].CreateVertex [0,0,0]
)
tempSel.modifiers[1].commit()
tempSel.modifiers[1].SetEPolySelLevel #Vertex
for i = 1 to locVertArray.count do
(
tempSel.modifiers[1].SetSelection #Vertex #{}
tempSel.modifiers[1].Select #Vertex #{i}
tempSel.modifiers[1].Commit()
tempSel.modifiers[1].moveSelection locVertArray[i]
tempSel.modifiers[1].Commit()
)
tempSel.modifiers[1].CreateFace #(6,5,1)
tempSel.modifiers[1].CreateFace #(6,1,2)
tempSel.modifiers[1].CreateFace #(7,6,2)
tempSel.modifiers[1].CreateFace #(2,3,7)
tempSel.modifiers[1].CreateFace #(8,5,6)
tempSel.modifiers[1].CreateFace #(6,7,8)
tempSel.modifiers[1].CreateFace #(1,4,3)
tempSel.modifiers[1].CreateFace #(3,2,1)
tempSel.modifiers[1].CreateFace #(1, 4,5)
tempSel.modifiers[1].CreateFace #(4,5, 8)
tempSel.modifiers[1].CreateFace #(11,8,7)
tempSel.modifiers[1].CreateFace #(7,12,11)
tempSel.modifiers[1].CreateFace #(3,4, 10)
tempSel.modifiers[1].CreateFace #(3, 9,10)
tempSel.modifiers[1].CreateFace #(9,14,12)
tempSel.modifiers[1].CreateFace #(11,12,14)
tempSel.modifiers[1].CreateFace #(14,13,11)
tempSel.modifiers[1].CreateFace #(10,13,14)
tempSel.modifiers[1].CreateFace #(10,14,9)
tempSel.modifiers[1].CreateFace #(10,13,11)
tempSel.modifiers[1].SetSelection #Vertex #{}
tempSel.modifiers[1].SetEPolySelLevel #Object
tempSel.wireColor = (color 255 0 0)
tempSel.modifiers[1].Commit()
biped.setTransform $Bip01 #rotation tempSaveRot true
$Bip01.controller.figureMode = false
setCommandPanelTaskMode tempPanel
cryTools.cryAnim._f.resetLocator()
redrawviews()
)catch (print "Error Creating Locator_Locomotion")
)
)
)
else
messageBox "No Biped in Scene." title:"Error Creating Locator_Locomotion"
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.locatorRO.btnCreate.pressed" )
)
on btnDelete pressed do
(
try
(
if $Bip01 != undefined then
(
if queryBox "Delete Locator_Locomotion?" title:"Locator_Locomotion" == true then
(
undo "delete Locator_Locomotion" on
(
try
(
$Bip01.controller.figureMode = true
$Bip01.controller.prop1Exists = false
$Bip01.controller.figureMode = false
) catch ( print "Error Deleting Locatot_Locomtion" )
)
)
)
else
messageBox "No Biped in Scene." title:"Error Deleting Locator_Locomotion"
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.locatorRO.btnDelete.pressed" )
)
on btnResetLocator pressed do
(
try
(
if $Locator_Locomotion != undefined then
undo "Reset Locator" on
cryTools.cryAnim._f.resetLocator()
else print "No Locator in Scene."
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.locatorRO.btnResetLocator.pressed" )
)
on btnAutoLoc pressed do
(
try
(
if $Locator_Locomotion != undefined then
undo "Auto Locator" on
try ( fileIn (cryTools.buildPathFull + "Tools\\maxscript\\cryAnim\\ui\\batch\\Scripts\\AutoLoc.ms") ) catch()
else print "No Locator in Scene."
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.locatorRO.btnAutoLoc.pressed" )
)
on btnSetToBodyMass pressed do
(
try
(
if $Locator_Locomotion != undefined then
undo "Move to BodyMass" on
try ( cryTools.cryAnim._f.moveToBodyMass() ) catch( print "Can't execute: Move to Body Mass")
else print "No Locator in Scene."
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.locatorRO.btnSetToBodyMass.pressed" )
)
)
logOutput "> Created locatorRO rollout"
try
(
if cryTools.cryAnim.base.iniFile #get #multiRow == true then
addSubRollout cryTools.cryAnim.UI.main.dialog.row2 locatorRO
else
addSubRollout cryTools.cryAnim.UI.main.dialog.row1 locatorRO
)
catch ( logOutput "!!> Error adding locatorRO to main dialog" )
locatorRO = undefined
logOutput ">> locator.ms loaded"
@@ -0,0 +1,651 @@
--###############################################################################
--// rollout with elements to control models and items
--###############################################################################
rollout modelsRO "Models"
(
button btnLoadModel "Load Model" pos:[8,8] width:142 height:20 toolTip:"Loads often used models and shows dialog to edit them"
groupBox gbItems " Items " pos:[2,35] width:153 height:50
dropDownList ddItemSelect "" pos:[8,55] width:142 height:21
on modelsRO open do
(
try
(
try ( if (cryTools.cryAnim.base.iniFile #get #rolloutStates) == true then (cryTools.cryAnim.UI.main._f.getUI "Models" "").open = cryTools.cryAnim.base.iniFile #get #modelsRO) catch()
cryTools.cryAnim.UI.main.models._v.itemList = cryTools.cryAnim.UI.main.models._f.selectItem "" #getList
local tempListArray = cryTools.cryAnim.UI.main.models._v.itemList
local tempListArray2 = #()
for i = 1 to tempListArray.count do
tempListArray2[i] = tempListArray[i].name
join tempListArray2 #("-------------------------------------------", "Edit Entries")
ddItemSelect.items = tempListArray2
if (local tempVar = cryTools.cryAnim.UI.main.models._f.selectItem "" #getIndex) != 0 then
ddItemSelect.selection = tempVar
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.modelsRO.open" )
)
on modelsRO rolledUp value do
(
try
(
if (cryTools.cryAnim.base.iniFile #get #modelsRO) != value then
cryTools.cryAnim.base.iniFile #set #modelsRO
cryTools.cryAnim.UI.main._f.updateDialog()
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.modelsRO.rolledUp" )
)
on ddItemSelect selected value do
(
try
(
if value < (ddItemSelect.items.count - 1) then
(
local tempVar = cryTools.cryAnim.UI.main.models._f.selectItem value #set
if tempVar == false then
ddItemSelect.selection = 1
)
else
ddItemSelect.selection = ddItemSelect.items.count
if ddItemSelect.selection == ddItemSelect.items.count then
(
try ( destroyDialog cryTools.cryAnim.UI.main.models.editItemList ) catch()
rollout editItemListRO "Edit Item List"
(
activeXControl lbItems "MSComctlLib.ListViewCtrl" pos:[1,1] height:185 width:440
button btnSave "Save" pos:[8,195] height:20 width:80 toolTip:"Save item list"
button btnAdd "Add" pos:[120,195] height:20 width:60 toolTip:"Adds new entry"
button btnDelete "Delete" pos:[190,195] height:20 width:60 toolTip:"Deletes selected entry"
button btnDeleteAll "Delete All" pos:[260,195] height:20 width:60 toolTip:"Clears whole list"
button btnCancel "Cancel" pos:[350,195] height:20 width:80 toolTip:"Aborts dialog to edit item list"
on editItemListRO open do
(
lbItems.GridLines = true
lbItems.MousePointer = #ccArrow
lbItems.AllowColumnReorder = true
lbItems.view = #lvwReport
lbItems.LabelEdit = #lvwManual
lbItems.Sorted = true
lbItems.FullRowSelect = true
lbItems.columnHeaders.Add text:"ID"
lbItems.columnHeaders.Add text:"Name"
lbItems.columnHeaders.Add text:"External"
lbItems.columnHeaders.Add text:"Model"
lbItems.columnHeaders.Add text:"Reference"
lbItems.columnHeaders.Add text:"Parent"
lbItems.columnHeaders.Add text:"Rotation"
lbItems.columnHeaders.Add text:"Position"
lbItems.columnHeaders[1].width = 600
for i = 1 to cryTools.cryAnim.UI.main.models._v.itemList.count do
(
local lbItemsEntry = lbItems.listItems.Add text:(i as String)
lbItemsEntry.listSubItems.Add text:cryTools.cryAnim.UI.main.models._v.itemList[i].name
lbItemsEntry.listSubItems.Add text:cryTools.cryAnim.UI.main.models._v.itemList[i].external
local maxCount = cryTools.cryAnim.UI.main.models._v.itemList[i].model.count
tempStringArray = #("","","","","")
for f = 1 to maxCount do
(
tempStringArray[1] += cryTools.cryAnim.UI.main.models._v.itemList[i].model[f] + (if f < maxCount then ";" else "")
tempStringArray[2] += cryTools.cryAnim.UI.main.models._v.itemList[i].reference[f] + (if f < maxCount then ";" else "")
tempStringArray[3] += cryTools.cryAnim.UI.main.models._v.itemList[i].parent[f] + (if f < maxCount then ";" else "")
tempStringArray[4] += cryTools.cryAnim.UI.main.models._v.itemList[i].rotation[f] as String + (if f < maxCount then ";" else "")
tempStringArray[5] += cryTools.cryAnim.UI.main.models._v.itemList[i].position[f] as String + (if f < maxCount then ";" else "")
)
lbItemsEntry.listSubItems.Add text:tempStringArray[1]
lbItemsEntry.listSubItems.Add text:tempStringArray[2]
lbItemsEntry.listSubItems.Add text:tempStringArray[3]
lbItemsEntry.listSubItems.Add text:tempStringArray[4]
lbItemsEntry.listSubItems.Add text:tempStringArray[5]
)
cryTools.cryAnim.UI.main.models._f.sortList()
)
on lbItems DblClick do
(
screenPos = getCursorPos lbItems
tempItem = lbItems.hittest ((screenPos.x-2)*15) ((screenPos.y-2)*15)
if tempItem != undefined then
(
try ( destroyDialog cryTools.cryAnim.UI.main.models.editDetails ) catch()
rollout entryDetailsRO "Entry Details"
(
label labID "ID :" pos:[8,10]
label labName "Name :" pos:[8,30]
label labExternal "External :" pos:[8,50]
label labModel "Model :" pos:[8,70]
label labReference "Reference :" pos:[8,90]
label labParent "Parent :" pos:[8,110]
label labRotation "Rotation :" pos:[8,130]
label labPosition "Position :" pos:[8,150]
edittext edID "" text:(cryTools.cryAnim.UI.main.models.editItemList.lbItems.SelectedItem.index as String) pos:[70,10] fieldWidth:300
edittext edName "" text:cryTools.cryAnim.UI.main.models.editItemList.lbItems.SelectedItem.ListSubItems[1].text pos:[70,30] fieldWidth:300
edittext edExternal "" text:cryTools.cryAnim.UI.main.models.editItemList.lbItems.SelectedItem.ListSubItems[2].text pos:[70,50] fieldWidth:300
edittext edModel "" text:cryTools.cryAnim.UI.main.models.editItemList.lbItems.SelectedItem.ListSubItems[3].text pos:[70,70] fieldWidth:300
edittext edReference "" text:cryTools.cryAnim.UI.main.models.editItemList.lbItems.SelectedItem.ListSubItems[4].text pos:[70,90] fieldWidth:300
edittext edParent "" text:cryTools.cryAnim.UI.main.models.editItemList.lbItems.SelectedItem.ListSubItems[5].text pos:[70,110] fieldWidth:300
edittext edRotation "" text:cryTools.cryAnim.UI.main.models.editItemList.lbItems.SelectedItem.ListSubItems[6].text pos:[70,130] fieldWidth:300
edittext edPosition "" text:cryTools.cryAnim.UI.main.models.editItemList.lbItems.SelectedItem.ListSubItems[7].text pos:[70,150] fieldWidth:300
button btnSave "Save" pos:[40,180] height:20 width:80 toolTip:"Save item to item list"
button btnSetOffset "Set Offset" pos:[150,180] height:20 width:80 toolTip:"Generates new offset of the selected item"
button btnCancel "Cancel" pos:[260,180] height:20 width:80 toolTip:"Aborts edit dialog for the selected item"
on btnSave pressed do
(
local tempItem = cryTools.cryAnim.UI.main.models.editItemList.lbItems.SelectedItem
tempItem.text = edID.text
tempItem.ListSubItems[1].text = edName.text
tempItem.ListSubItems[2].text = edExternal.text
tempItem.ListSubItems[3].text = edModel.text
tempItem.ListSubItems[4].text = edReference.text
tempItem.ListSubItems[5].text = edParent.text
tempItem.ListSubItems[6].text = edRotation.text
tempItem.ListSubItems[7].text = edPosition.text
cryTools.cryAnim.UI.main.models._f.sortList()
destroyDialog cryTools.cryAnim.UI.main.models.entryDetails
)
on btnSetOffset pressed do
(
local tempItem = cryTools.cryAnim.UI.main.models.editItemList.lbItems.SelectedItem
if tempItem != undefined then
(
local refArray = filterString tempItem.ListSubItems[4].text ";"
local parentArray = filterString tempItem.ListSubItems[5].text ";"
local rotString = ""
local posString = ""
for i = 1 to refArray.count do
(
local tempObj = (cryTools.cryAnim._f.createSnapshot object:(getNodeByName refArray[i]))[1]
local tempParent = getNodeByName parentArray[i]
if (tempObj != undefined) and (tempParent != undefined) then
(
if tempParent.classID[1] != 37157 then
(
rotString += (in coordsys tempObj tempParent.rotation) as String + (if i < refArray.count then ";" else "")
posString += (in coordsys tempObj tempParent.pos) as String + (if i < refArray.count then ";" else "")
)
)
try (delete tempObj)catch()
)
edRotation.text = rotString
edPosition.text = posString
)
else
(
messageBox "No Item selected." title:"Reset Offset"
)
index = undefined
)
on btnCancel pressed do
(
destroyDialog cryTools.cryAnim.UI.main.models.entryDetails
)
)
cryTools.cryAnim.UI.main.models.entryDetails = entryDetailsRO
entryDetailsRO = undefined
createDialog cryTools.cryAnim.UI.main.models.entryDetails 385 210
)
)
on btnAdd pressed do
(
local tempStringArray = (itemStruct name:"" external:"" model:"" reference:"" parent:"" rotation:"" position:"")
local tempArray = #()
local objArray = selectByName title:("Select Nodes to be added") showHidden:true filter:cryTools.cryAnim.UI.main.models._f.selectByNameFilterNode
if objArray != undefined then
(
local objLink = #()
for obj in objArray do
(
global tempObj = obj
objLink = selectByName title:("Select " + obj.name + " Reference") showHidden:true single:true filter:cryTools.cryAnim.UI.main.models._f.selectByNameFilterParent
if objLink != undefined then
(
objRotation = (in coordsys objLink obj.rotation) as String
objPosition = (in coordsys objLink obj.position) as String
objLink = objLink.name
)
else
(
objLink = ""
objRotation = ""
objPosition = ""
)
if obj.parent != undefined then
objParent = obj.parent.name
else
objParent = ""
append tempArray (itemStruct name:obj.name model:obj.name external:obj.name parent:objParent reference:objLink rotation:objRotation position:objPosition )
)
tempObj = undefined
)
if tempArray.count > 0 then
(
tempStringArray.name = tempArray[1].name
tempStringArray.external = tempArray[1].external
for i = 1 to tempArray.count do
(
tempStringArray.model += tempArray[i].model + (if i != tempArray.count then ";" else "")
tempStringArray.reference += tempArray[i].reference as String + (if i != tempArray.count then ";" else "")
tempStringArray.parent += tempArray[i].parent as String + (if i != tempArray.count then ";" else "")
tempStringArray.rotation += tempArray[i].rotation as String + (if i != tempArray.count then ";" else "")
tempStringArray.position += tempArray[i].position as String + (if i != tempArray.count then ";" else "")
)
local lbItemsEntry = lbItems.ListItems.Add text:((lbItems.ListItems.count + 1) as String)
lbItemsEntry.ListSubItems.Add text:tempStringArray.name
lbItemsEntry.ListSubItems.Add text:tempStringArray.external
lbItemsEntry.ListSubItems.Add text:tempStringArray.model
lbItemsEntry.ListSubItems.Add text:tempStringArray.reference
lbItemsEntry.ListSubItems.Add text:tempStringArray.parent
lbItemsEntry.ListSubItems.Add text:tempStringArray.rotation
lbItemsEntry.ListSubItems.Add text:tempStringArray.position
cryTools.cryAnim.UI.main.models._f.sortList()
)
)
on btnSave pressed do
(
local tempArray = #()
local tempList = #()
for i = 1 to lbItems.ListItems.count do
(
local tempItemArray = #()
local tempItem = lbItems.ListItems[i]
for d = 1 to tempItem.ListSubItems.count do
(
if tempItem.ListSubItems[d].text != "" then tempItemArray[d] = tempItem.ListSubItems[d].text else tempItemArray[d] = " "
)
append tempArray (itemStruct name:tempItemArray[1] external:tempItemArray[2] model:(filterString tempItemArray[3] ";") reference:(filterString tempItemArray[4] ";") parent:(filterString tempItemArray[5] ";") rotation:(filterString tempItemArray[6] ";") position:(filterString tempItemArray[7] ";"))
for f = 1 to tempArray[tempArray.count].model.count do
(
tempArray[tempArray.count].rotation[f] = execute (tempArray[tempArray.count].rotation[f])
tempArray[tempArray.count].position[f] = execute (tempArray[tempArray.count].position[f])
)
)
cryTools.cryAnim.base.iniFile #set #items value:tempArray
cryTools.cryAnim.UI.main.models._v.itemList = tempArray
for i = 1 to cryTools.cryAnim.UI.main.models._v.itemList.count do
append tempList cryTools.cryAnim.UI.main.models._v.itemList[i].name
join tempList #("-------------------------------------------", "Edit Entries")
(cryTools.cryAnim.UI.main._f.getUI "Models" "ddItemSelect").items = tempList
destroyDialog cryTools.cryAnim.UI.main.models.editItemList
)
on btnDelete pressed do
(
deleteIndex = 0
for i = 1 to lbItems.ListItems.count do
(
try
(
if lbItems.ListItems[i].selected == true then
lbItems.ListItems.Remove i
)
catch()
)
cryTools.cryAnim.UI.main.models._f.sortList()
)
on btnDeleteAll pressed do
(
lbItems.ListItems.clear()
)
on btnCancel pressed do
(
destroyDialog cryTools.cryAnim.UI.main.models.editItemList
)
on editItemListRO close do
(
local tempVar = cryTools.cryAnim.UI.main.models._f.selectItem "" #getIndex
if tempVar != 0 then
(cryTools.cryAnim.UI.main._f.getUI "Models" "ddItemSelect").selection = tempVar
)
)
cryTools.cryAnim.UI.main.models.editItemList = editItemListRO
editItemListRO = undefined
createDialog cryTools.cryAnim.UI.main.models.editItemList 443 220
)
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.modelsRO.ddItemSelect.selected" )
)
on btnLoadModel pressed do
(
try
(
rcmenu loadModelRC
(
menUItem mi1 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 1))
menUItem mi2 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 2))
menUItem mi3 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 3))
menUItem mi4 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 4))
menUItem mi5 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 5))
menUItem mi6 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 6))
menUItem mi7 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 7))
menUItem mi8 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 8))
menUItem mi9 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 9))
menUItem mi10 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 10))
menUItem mi11 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 11))
menUItem mi12 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 12))
menUItem mi13 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 13))
menUItem mi14 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 14))
menUItem mi15 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 15))
menUItem mi16 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 16))
menUItem mi17 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 17))
menUItem mi18 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 18))
menUItem mi19 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 19))
menUItem mi20 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 20))
seperator miSep checked:false
menUItem miEdit "Edit Entries" checked:false
on loadModelRC open do
(
local tempPathArray = #()
local tempArray = cryTools.cryAnim.base.iniFile #get #models
if tempArray != "" and tempArray != undefined then
(
mi1.text = cryTools.cryAnim.UI.main.models._f.getEntries 1 tempArray
mi2.text = cryTools.cryAnim.UI.main.models._f.getEntries 2 tempArray
mi3.text = cryTools.cryAnim.UI.main.models._f.getEntries 3 tempArray
mi4.text = cryTools.cryAnim.UI.main.models._f.getEntries 4 tempArray
mi5.text = cryTools.cryAnim.UI.main.models._f.getEntries 5 tempArray
mi6.text = cryTools.cryAnim.UI.main.models._f.getEntries 6 tempArray
mi7.text = cryTools.cryAnim.UI.main.models._f.getEntries 7 tempArray
mi8.text = cryTools.cryAnim.UI.main.models._f.getEntries 8 tempArray
mi9.text = cryTools.cryAnim.UI.main.models._f.getEntries 9 tempArray
mi10.text = cryTools.cryAnim.UI.main.models._f.getEntries 10 tempArray
mi11.text = cryTools.cryAnim.UI.main.models._f.getEntries 11 tempArray
mi12.text = cryTools.cryAnim.UI.main.models._f.getEntries 12 tempArray
mi13.text = cryTools.cryAnim.UI.main.models._f.getEntries 13 tempArray
mi14.text = cryTools.cryAnim.UI.main.models._f.getEntries 14 tempArray
mi15.text = cryTools.cryAnim.UI.main.models._f.getEntries 15 tempArray
mi16.text = cryTools.cryAnim.UI.main.models._f.getEntries 16 tempArray
mi17.text = cryTools.cryAnim.UI.main.models._f.getEntries 17 tempArray
mi18.text = cryTools.cryAnim.UI.main.models._f.getEntries 18 tempArray
mi19.text = cryTools.cryAnim.UI.main.models._f.getEntries 19 tempArray
mi20.text = cryTools.cryAnim.UI.main.models._f.getEntries 20 tempArray
)
cryTools.cryAnim._v.various[17] = tempArray
)
on mi1 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][1])
on mi2 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][2])
on mi3 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][3])
on mi4 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][4])
on mi5 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][5])
on mi6 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][6])
on mi7 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][7])
on mi8 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][8])
on mi9 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][9])
on mi10 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][10])
on mi11 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][11])
on mi12 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][12])
on mi13 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][13])
on mi14 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][14])
on mi15 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][15])
on mi16 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][16])
on mi17 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][17])
on mi18 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][18])
on mi19 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][19])
on mi20 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][20])
on miEdit picked do
(
rollout editModelListRO "Edit Model List"
(
activeXControl lbModels "MSComctlLib.ListViewCtrl" pos:[1,1] height:185 width:440
button btnSave "Save" pos:[8,195] height:20 width:80 toolTip:"Save model list"
button btnDelete "Delete" pos:[150,195] height:20 width:60 toolTip:"Deletes selected entry"
button btnDeleteAll "Delete All" pos:[220,195] height:20 width:60 toolTip:"Clears whole list"
button btnCancel "Cancel" pos:[350,195] height:20 width:80 toolTip:"Aborts dialog to edit model list"
on editModelListRO open do
(
lbModels.GridLines = true
lbModels.MousePointer = #ccArrow
lbModels.AllowColumnReorder = true
lbModels.view = #lvwReport
lbModels.LabelEdit = #lvwAutomatic
lbModels.Sorted = true
lbModels.FullRowSelect = true
tempArray = cryTools.cryAnim.base.iniFile #get #models
if tempArray != "" and tempArray != undefined then
(
for i = 1 to tempArray.count do
(
local lbModelsEntry = lbModels.listItems.Add text:tempArray[i].name
lbModelsEntry.listSubItems.Add text:tempArray[i].path
)
)
lbModels.columnHeaders.Add text:"Name"
lbModels.columnHeaders.Add text:"Path"
)
on lbModels DblClick do
(
screenPos = getCursorPos lbModels
tempItem = lbModels.hittest ((screenPos.x-2)*15) ((screenPos.y-2)*15)
if tempItem != undefined then
(
for i = 1 to lbModels.ListItems.count do
(
if lbModels.listItems[i].selected == true then
(
tempValue = getOpenFileName caption:"Select Model to open" filename:lbModels.ListItems[i].listSubItems[1].text types:"3ds max (*.max)|*.max"
if (tempValue != false) and (tempValue != undefined) then
(
lbModels.ListItems[i].listSubItems[1].text = tempValue
lbModels.ListItems[i].text = cryTools.cryAnim.base.perforce tempValue #getFilename
)
)
)
)
else
(
lastIndex = lbModels.ListItems.count
if lbModels.ListItems.count > 0 then
tempPath = lbModels.ListItems[lastIndex].listSubItems[1].text
else
tempPath = maxFilePath + maxFileName
tempValue = getOpenFileName caption:"Select Model to open" filename:tempPath types:"3ds max (*.max)|*.max"
if (tempValue != false) and (tempValue != undefined) then
(
local tempEntry = lbModels.ListItems.Add text:(cryTools.cryAnim.base.perforce tempValue #getFilename)
tempEntry.ListSubItems.Add text:tempValue
)
)
)
on btnSave pressed do
(
local tempArray = #()
for i = 1 to lbModels.ListItems.count do
append tempArray (modelPathStruct name:lbModels.ListItems[i].text path:lbModels.ListItems[i].ListSubItems[1].text)
cryTools.cryAnim.base.iniFile #set #models value:tempArray
destroyDialog cryTools.cryAnim.UI.main.models.editModelList
)
on btnDelete pressed do
(
deleteIndex = 0
for i = 1 to lbModels.ListItems.count do
(
try
(
if lbModels.ListItems[i].selected == true then
lbModels.ListItems.Remove i
)
catch()
)
)
on btnDeleteAll pressed do
(
lbModels.ListItems.clear()
)
on btnCancel pressed do
(
destroyDialog cryTools.cryAnim.UI.main.models.editModelList
)
on lbModels BeforeLabelEdit cancel do
(
enableAccelerators = false
)
on lbModels AfterLabelEdit cancel newString do
(
enableAccelerators = true
)
)
cryTools.cryAnim.UI.main.models.editModelList = editModelListRO
editModelListRO = undefined
createDialog cryTools.cryAnim.UI.main.models.editModelList 443 220
)
)
cryTools.cryAnim.UI.main.models.loadModelRC = loadModelRC
loadModelRC = undefined
registerRightClickMenu cryTools.cryAnim.UI.main.models.loadModelRC
popUpMenu cryTools.cryAnim.UI.main.models.loadModelRC pos:[(mouse.screenpos[1] - 10), (mouse.screenpos[2] - 10)]
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.modelsRO.btnLoadModel.pressed" )
)
)
logOutput "> Created modelsRO rollout"
try
(
if cryTools.cryAnim.base.iniFile #get #multiRow == true then
addSubRollout cryTools.cryAnim.UI.main.dialog.row1 modelsRO
else
addSubRollout cryTools.cryAnim.UI.main.dialog.row1 modelsRO
)
catch ( logOutput "!!> Error adding modelsRO to main dialog" )
modelsRO = undefined
logOutput ">> models8.ms loaded"
@@ -0,0 +1,641 @@
--###############################################################################
--// rollout with elements to control models and items
--###############################################################################
rollout modelsRO "Models"
(
button btnLoadModel "Load Model" pos:[8,8] width:142 height:20 toolTip:"Loads often used models and shows dialog to edit them"
groupBox gbItems " Items " pos:[2,35] width:153 height:50
dropDownList ddItemSelect "" pos:[8,55] width:142 height:21
on modelsRO open do
(
try
(
try ( if (cryTools.cryAnim.base.iniFile #get #rolloutStates) == true then (cryTools.cryAnim.UI.main._f.getUI "Models" "").open = cryTools.cryAnim.base.iniFile #get #modelsRO) catch()
cryTools.cryAnim.UI.main.models._v.itemList = cryTools.cryAnim.UI.main.models._f.selectItem "" #getList
local tempListArray = cryTools.cryAnim.UI.main.models._v.itemList
local tempListArray2 = #()
for i = 1 to tempListArray.count do
tempListArray2[i] = tempListArray[i].name
join tempListArray2 #("-------------------------------------------", "Edit Entries")
ddItemSelect.items = tempListArray2
if (local tempVar = cryTools.cryAnim.UI.main.models._f.selectItem "" #getIndex) != 0 then
ddItemSelect.selection = tempVar
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.modelsRO.open" )
)
on modelsRO rolledUp value do
(
try
(
if (cryTools.cryAnim.base.iniFile #get #modelsRO) != value then
cryTools.cryAnim.base.iniFile #set #modelsRO
cryTools.cryAnim.UI.main._f.updateDialog()
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.modelsRO.rolledUp" )
)
on ddItemSelect selected value do
(
try
(
if value < (ddItemSelect.items.count - 1) then
(
local tempVar = cryTools.cryAnim.UI.main.models._f.selectItem value #set
if tempVar == false then
ddItemSelect.selection = 1
)
else
ddItemSelect.selection = ddItemSelect.items.count
if ddItemSelect.selection == ddItemSelect.items.count then
(
try ( destroyDialog cryTools.cryAnim.UI.main.models.editItemList ) catch()
rollout editItemListRO "Edit Item List"
(
dotNetControl lbItems "System.Windows.Forms.ListView" pos:[1,1] height:185 width:440
button btnSave "Save" pos:[8,195] height:20 width:80 toolTip:"Save item list"
button btnAdd "Add" pos:[120,195] height:20 width:60 toolTip:"Adds new entry"
button btnDelete "Delete" pos:[190,195] height:20 width:60 toolTip:"Deletes selected entry"
button btnDeleteAll "Delete All" pos:[260,195] height:20 width:60 toolTip:"Clears whole list"
button btnCancel "Cancel" pos:[350,195] height:20 width:80 toolTip:"Aborts dialog to edit item list"
on editItemListRO open do
(
lbItems.GridLines = true
lbItems.AllowColumnReorder = true
lbItems.View = lbItems.View.Details
lbItems.LabelEdit = false
lbItems.LabelWrap = true
lbItems.FullRowSelect = true
lbItems.HideSelection = false
lbItems.Sorting = lbItems.Sorting.Ascending
lbItems.Columns.Add "ID"
lbItems.Columns.Add "Name"
lbItems.Columns.Add "External"
lbItems.Columns.Add "Model"
lbItems.Columns.Add "Reference"
lbItems.Columns.Add "Parent"
lbItems.Columns.Add "Rotation"
lbItems.Columns.Add "Position"
for i = 1 to cryTools.cryAnim.UI.main.models._v.itemList.count do
(
local lbItemsEntry = lbItems.Items.Add (i as String)
lbItemsEntry.SubItems.Add cryTools.cryAnim.UI.main.models._v.itemList[i].name
lbItemsEntry.SubItems.Add cryTools.cryAnim.UI.main.models._v.itemList[i].external
local maxCount = cryTools.cryAnim.UI.main.models._v.itemList[i].model.count
tempStringArray = #("","","","","")
for f = 1 to maxCount do
(
tempStringArray[1] += cryTools.cryAnim.UI.main.models._v.itemList[i].model[f] + (if f < maxCount then ";" else "")
tempStringArray[2] += cryTools.cryAnim.UI.main.models._v.itemList[i].reference[f] + (if f < maxCount then ";" else "")
tempStringArray[3] += cryTools.cryAnim.UI.main.models._v.itemList[i].parent[f] + (if f < maxCount then ";" else "")
tempStringArray[4] += cryTools.cryAnim.UI.main.models._v.itemList[i].rotation[f] as String + (if f < maxCount then ";" else "")
tempStringArray[5] += cryTools.cryAnim.UI.main.models._v.itemList[i].position[f] as String + (if f < maxCount then ";" else "")
)
lbItemsEntry.SubItems.Add tempStringArray[1]
lbItemsEntry.SubItems.Add tempStringArray[2]
lbItemsEntry.SubItems.Add tempStringArray[3]
lbItemsEntry.SubItems.Add tempStringArray[4]
lbItemsEntry.SubItems.Add tempStringArray[5]
)
cryTools.cryAnim.UI.main.models._f.updateExtent()
cryTools.cryAnim.UI.main.models._f.sortList()
)
on lbItems DoubleClick do
(
tempItem = lbItems.FocusedItem
tempItem.checked = not tempItem.checked
if tempItem != undefined then
(
try ( destroyDialog cryTools.cryAnim.UI.main.models.editDetails ) catch()
rollout entryDetailsRO "Entry Details"
(
label labID "ID :" pos:[8,10]
label labName "Name :" pos:[8,30]
label labExternal "External :" pos:[8,50]
label labModel "Model :" pos:[8,70]
label labReference "Reference :" pos:[8,90]
label labParent "Parent :" pos:[8,110]
label labRotation "Rotation :" pos:[8,130]
label labPosition "Position :" pos:[8,150]
edittext edID "" text:cryTools.cryAnim.UI.main.models.editItemList.lbItems.FocusedItem.text pos:[70,10] fieldWidth:300
edittext edName "" text:(cryTools.cryAnim.UI.main.models.editItemList.lbItems.FocusedItem.SubItems.item 1).text pos:[70,30] fieldWidth:300
edittext edExternal "" text:(cryTools.cryAnim.UI.main.models.editItemList.lbItems.FocusedItem.SubItems.item 2).text pos:[70,50] fieldWidth:300
edittext edModel "" text:(cryTools.cryAnim.UI.main.models.editItemList.lbItems.FocusedItem.SubItems.item 3).text pos:[70,70] fieldWidth:300
edittext edReference "" text:(cryTools.cryAnim.UI.main.models.editItemList.lbItems.FocusedItem.SubItems.item 4).text pos:[70,90] fieldWidth:300
edittext edParent "" text:(cryTools.cryAnim.UI.main.models.editItemList.lbItems.FocusedItem.SubItems.item 5).text pos:[70,110] fieldWidth:300
edittext edRotation "" text:(cryTools.cryAnim.UI.main.models.editItemList.lbItems.FocusedItem.SubItems.item 6).text pos:[70,130] fieldWidth:300
edittext edPosition "" text:(cryTools.cryAnim.UI.main.models.editItemList.lbItems.FocusedItem.SubItems.item 7).text pos:[70,150] fieldWidth:300
button btnSave "Save" pos:[40,180] height:20 width:80 toolTip:"Save item to item list"
button btnSetOffset "Set Offset" pos:[150,180] height:20 width:80 toolTip:"Generates new offset of the selected item"
button btnCancel "Cancel" pos:[260,180] height:20 width:80 toolTip:"Aborts edit dialog for the selected item"
on btnSave pressed do
(
local tempItem = cryTools.cryAnim.UI.main.models.editItemList.lbItems.FocusedItem
tempItem.text = edID.text
(tempItem.SubItems.item 1).text = edName.text
(tempItem.SubItems.item 2).text = edExternal.text
(tempItem.SubItems.item 3).text = edModel.text
(tempItem.SubItems.item 4).text = edReference.text
(tempItem.SubItems.item 5).text = edParent.text
(tempItem.SubItems.item 6).text = edRotation.text
(tempItem.SubItems.item 7).text = edPosition.text
cryTools.cryAnim.UI.main.models._f.updateExtent()
cryTools.cryAnim.UI.main.models._f.sortList()
destroyDialog cryTools.cryAnim.UI.main.models.entryDetails
)
on btnSetOffset pressed do
(
local tempItem = cryTools.cryAnim.UI.main.models.editItemList.lbItems.FocusedItem
if tempItem != undefined then
(
local refArray = filterString (tempItem.SubItems.item 4).text ";"
local parentArray = filterString (tempItem.SubItems.item 5).text ";"
local rotString = ""
local posString = ""
for i = 1 to refArray.count do
(
local tempObj = (cryTools.cryAnim._f.createSnapshot object:(getNodeByName refArray[i]))[1]
local tempParent = getNodeByName parentArray[i]
if (tempObj != undefined) and (tempParent != undefined) then
(
if tempParent.classID[1] != 37157 then
(
rotString += (in coordsys tempObj tempParent.rotation) as String + (if i < refArray.count then ";" else "")
posString += (in coordsys tempObj tempParent.pos) as String + (if i < refArray.count then ";" else "")
)
)
try (delete tempObj)catch()
)
edRotation.text = rotString
edPosition.text = posString
)
else
(
messageBox "No Item selected." title:"Reset Offset"
)
index = undefined
)
on btnCancel pressed do
(
destroyDialog cryTools.cryAnim.UI.main.models.entryDetails
)
)
cryTools.cryAnim.UI.main.models.entryDetails = entryDetailsRO
entryDetailsRO = undefined
createDialog cryTools.cryAnim.UI.main.models.entryDetails 385 210
)
tempItem = undefined
)
on btnAdd pressed do
(
local tempStringArray = (itemStruct name:"" external:"" model:"" reference:"" parent:"" rotation:"" position:"")
local tempArray = #()
local objArray = selectByName title:("Select Nodes to be added") showHidden:true filter:cryTools.cryAnim.UI.main.models._f.selectByNameFilterNode
if objArray != undefined then
(
local objLink = #()
for obj in objArray do
(
global tempObj = obj
objLink = selectByName title:("Select " + obj.name + " Reference") showHidden:true single:true filter:cryTools.cryAnim.UI.main.models._f.selectByNameFilterParent
if objLink != undefined then
(
objRotation = (in coordsys objLink obj.rotation) as String
objPosition = (in coordsys objLink obj.position) as String
objLink = objLink.name
)
else
(
objLink = ""
objRotation = ""
objPosition = ""
)
if obj.parent != undefined then
objParent = obj.parent.name
else
objParent = ""
append tempArray (itemStruct name:obj.name model:obj.name external:obj.name parent:objParent reference:objLink rotation:objRotation position:objPosition )
)
tempObj = undefined
)
if tempArray.count > 0 then
(
tempStringArray.name = tempArray[1].name
tempStringArray.external = tempArray[1].external
for i = 1 to tempArray.count do
(
tempStringArray.model += tempArray[i].model + (if i != tempArray.count then ";" else "")
tempStringArray.reference += tempArray[i].reference as String + (if i != tempArray.count then ";" else "")
tempStringArray.parent += tempArray[i].parent as String + (if i != tempArray.count then ";" else "")
tempStringArray.rotation += tempArray[i].rotation as String + (if i != tempArray.count then ";" else "")
tempStringArray.position += tempArray[i].position as String + (if i != tempArray.count then ";" else "")
)
local lbItemsEntry = lbItems.Items.Add ((lbItems.Items.count + 1) as String)
lbItemsEntry.SubItems.Add tempStringArray.name
lbItemsEntry.SubItems.Add tempStringArray.external
lbItemsEntry.SubItems.Add tempStringArray.model
lbItemsEntry.SubItems.Add tempStringArray.reference
lbItemsEntry.SubItems.Add tempStringArray.parent
lbItemsEntry.SubItems.Add tempStringArray.rotation
lbItemsEntry.SubItems.Add tempStringArray.position
cryTools.cryAnim.UI.main.models._f.updateExtent()
cryTools.cryAnim.UI.main.models._f.sortList()
)
)
on btnSave pressed do
(
local tempArray = #()
local tempList = #()
for i = 0 to (lbItems.Items.count - 1) do
(
local tempItemArray = #()
local tempItem = lbItems.Items.item i
for d = 1 to (tempItem.SubItems.count - 1) do
(
if (tempItem.SubItems.item d).text != "" then tempItemArray[d] = (tempItem.SubItems.item d).text else tempItemArray[d] = " "
)
append tempArray (itemStruct name:tempItemArray[1] external:tempItemArray[2] model:(filterString tempItemArray[3] ";") reference:(filterString tempItemArray[4] ";") parent:(filterString tempItemArray[5] ";") rotation:(filterString tempItemArray[6] ";") position:(filterString tempItemArray[7] ";"))
for f = 1 to tempArray[tempArray.count].model.count do
(
tempArray[tempArray.count].rotation[f] = execute (tempArray[tempArray.count].rotation[f])
tempArray[tempArray.count].position[f] = execute (tempArray[tempArray.count].position[f])
)
)
cryTools.cryAnim.base.iniFile #set #items value:tempArray
cryTools.cryAnim.UI.main.models._v.itemList = tempArray
for i = 1 to cryTools.cryAnim.UI.main.models._v.itemList.count do
append tempList cryTools.cryAnim.UI.main.models._v.itemList[i].name
join tempList #("-------------------------------------------", "Edit Entries")
(cryTools.cryAnim.UI.main._f.getUI "Models" "ddItemSelect").items = tempList
destroyDialog cryTools.cryAnim.UI.main.models.editItemList
)
on btnDelete pressed do
(
if lbItems.FocusedItem != undefined then
lbItems.FocusedItem.remove()
cryTools.cryAnim.UI.main.models._f.updateExtent()
cryTools.cryAnim.UI.main.models._f.sortList()
)
on btnDeleteAll pressed do
(
lbItems.Items.clear()
)
on btnCancel pressed do
(
(cryTools.cryAnim.UI.main._f.getUI "Models" "ddItemSelect").selection = (cryTools.cryAnim.UI.main._f.getUI "Models" "ddItemSelect").items.count - 1
destroyDialog cryTools.cryAnim.UI.main.models.editItemList
)
on editItemListRO close do
(
try
(
local tempVar = cryTools.cryAnim.UI.main.models._f.selectItem "" #getIndex
if tempVar != 0 then
(cryTools.cryAnim.UI.main._f.getUI "Models" "ddItemSelect").selection = tempVar
)catch()
)
)
cryTools.cryAnim.UI.main.models.editItemList = editItemListRO
editItemListRO = undefined
createDialog cryTools.cryAnim.UI.main.models.editItemList 443 220
)
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.modelsRO.ddItemSelect.selected" )
)
on btnLoadModel pressed do
(
try
(
rcmenu loadModelRC
(
menUItem mi1 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 1))
menUItem mi2 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 2))
menUItem mi3 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 3))
menUItem mi4 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 4))
menUItem mi5 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 5))
menUItem mi6 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 6))
menUItem mi7 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 7))
menUItem mi8 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 8))
menUItem mi9 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 9))
menUItem mi10 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 10))
menUItem mi11 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 11))
menUItem mi12 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 12))
menUItem mi13 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 13))
menUItem mi14 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 14))
menUItem mi15 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 15))
menUItem mi16 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 16))
menUItem mi17 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 17))
menUItem mi18 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 18))
menUItem mi19 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 19))
menUItem mi20 "None" checked:false filter:(fn temp = (cryTools.cryAnim.UI.main.models._f.setVisible 20))
seperator miSep checked:false
menUItem miEdit "Edit Entries" checked:false
on loadModelRC open do
(
tempPathArray = #()
tempArray = cryTools.cryAnim.base.iniFile #get #models
if tempArray != "" and tempArray != undefined then
(
mi1.text = cryTools.cryAnim.UI.main.models._f.getEntries 1 tempArray
mi2.text = cryTools.cryAnim.UI.main.models._f.getEntries 2 tempArray
mi3.text = cryTools.cryAnim.UI.main.models._f.getEntries 3 tempArray
mi4.text = cryTools.cryAnim.UI.main.models._f.getEntries 4 tempArray
mi5.text = cryTools.cryAnim.UI.main.models._f.getEntries 5 tempArray
mi6.text = cryTools.cryAnim.UI.main.models._f.getEntries 6 tempArray
mi7.text = cryTools.cryAnim.UI.main.models._f.getEntries 7 tempArray
mi8.text = cryTools.cryAnim.UI.main.models._f.getEntries 8 tempArray
mi9.text = cryTools.cryAnim.UI.main.models._f.getEntries 9 tempArray
mi10.text = cryTools.cryAnim.UI.main.models._f.getEntries 10 tempArray
mi11.text = cryTools.cryAnim.UI.main.models._f.getEntries 11 tempArray
mi12.text = cryTools.cryAnim.UI.main.models._f.getEntries 12 tempArray
mi13.text = cryTools.cryAnim.UI.main.models._f.getEntries 13 tempArray
mi14.text = cryTools.cryAnim.UI.main.models._f.getEntries 14 tempArray
mi15.text = cryTools.cryAnim.UI.main.models._f.getEntries 15 tempArray
mi16.text = cryTools.cryAnim.UI.main.models._f.getEntries 16 tempArray
mi17.text = cryTools.cryAnim.UI.main.models._f.getEntries 17 tempArray
mi18.text = cryTools.cryAnim.UI.main.models._f.getEntries 18 tempArray
mi19.text = cryTools.cryAnim.UI.main.models._f.getEntries 19 tempArray
mi20.text = cryTools.cryAnim.UI.main.models._f.getEntries 20 tempArray
)
cryTools.cryAnim._v.various[17] = tempArray
)
on mi1 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][1])
on mi2 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][2])
on mi3 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][3])
on mi4 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][4])
on mi5 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][5])
on mi6 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][6])
on mi7 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][7])
on mi8 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][8])
on mi9 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][9])
on mi10 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][10])
on mi11 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][11])
on mi12 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][12])
on mi13 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][13])
on mi14 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][14])
on mi15 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][15])
on mi16 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][16])
on mi17 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][17])
on mi18 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][18])
on mi19 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][19])
on mi20 picked do (cryTools.cryAnim.UI.main.models._f.loadModel cryTools.cryAnim._v.various[17][20])
on miEdit picked do
(
rollout editModelListRO "Edit Model List"
(
dotNetControl lbModels "System.Windows.Forms.ListView" pos:[1,1] height:185 width:440
button btnSave "Save" pos:[8,195] height:20 width:80 toolTip:"Save model list"
button btnAdd "Add" pos:[120,195] height:20 width:60 toolTip:"Add new entry"
button btnDelete "Delete" pos:[190,195] height:20 width:60 toolTip:"Deletes selected entry"
button btnDeleteAll "Delete All" pos:[260,195] height:20 width:60 toolTip:"Clears whole list"
button btnCancel "Cancel" pos:[350,195] height:20 width:80 toolTip:"Aborts dialog to edit model list"
on editModelListRO open do
(
lbModels.GridLines = true
lbModels.AllowColumnReorder = true
lbModels.View = lbModels.View.Details
lbModels.LabelEdit = true
lbModels.LabelWrap = true
lbModels.FullRowSelect = true
lbModels.HideSelection = false
lbModels.Sorting = lbModels.Sorting.Ascending
tempArray = cryTools.cryAnim.base.iniFile #get #models
if tempArray != "" and tempArray != undefined then
(
for i = 1 to tempArray.count do
(
local lbModelsEntry = lbModels.Items.Add tempArray[i].name
lbModelsEntry.SubItems.Add tempArray[i].path
)
)
lbModels.Columns.Add "Name"
lbModels.Columns.Add "Path"
cryTools.cryAnim.UI.main.models._f.updateExtentModel()
)
on lbModels DoubleClick do
(
tempItem = lbModels.FocusedItem
if tempItem != undefined then
(
tempValue = getOpenFileName caption:"Select Model to open" filename:(lbModels.FocusedItem.SubItems.item 1).text types:"3ds max (*.max)|*.max"
if (tempValue != false) and (tempValue != undefined) then
(
(lbModels.FocusedItem.SubItems.item 1).text = tempValue
lbModels.FocusedItem.text = cryTools.cryAnim.base.perforce tempValue #getFilename
)
)
else
(
lastIndex = lbModels.ListItems.count
if lbModels.ListItems.count > 0 then
tempPath = lbModels.ListItems[lastIndex].listSubItems[1].text
else
tempPath = maxFilePath + maxFileName
tempValue = getOpenFileName caption:"Select Model to open" filename:tempPath types:"3ds max (*.max)|*.max"
if (tempValue != false) and (tempValue != undefined) then
(
local tempEntry = lbModels.ListItems.Add text:(cryTools.cryAnim.base.perforce tempValue #getFilename)
tempEntry.ListSubItems.Add text:tempValue
)
)
cryTools.cryAnim.UI.main.models._f.updateExtentModel()
)
on btnAdd pressed do
(
lastIndex = (lbModels.Items.count - 1)
if lbModels.Items.count > 0 then
tempPath = ((lbModels.Items.item lastIndex).SubItems.item 1).text
else
tempPath = maxFilePath + maxFileName
tempValue = getOpenFileName caption:"Select Model to open" filename:tempPath types:"3ds max (*.max)|*.max"
if (tempValue != false) and (tempValue != undefined) then
(
local tempEntry = lbModels.Items.Add (cryTools.cryAnim.base.perforce tempValue #getFilename)
tempEntry.SubItems.Add tempValue
)
cryTools.cryAnim.UI.main.models._f.updateExtentModel()
)
on btnSave pressed do
(
local tempArray = #()
for i = 0 to (lbModels.Items.count - 1) do
append tempArray (modelPathStruct name:(lbModels.Items.item i).text path:((lbModels.Items.item i).SubItems.item 1).text)
cryTools.cryAnim.base.iniFile #set #models value:tempArray
destroyDialog cryTools.cryAnim.UI.main.models.editModelList
)
on btnDelete pressed do
(
if lbModels.FocusedItem != undefined then
lbModels.FocusedItem.remove()
)
on btnDeleteAll pressed do
(
lbModels.Items.clear()
)
on btnCancel pressed do
(
destroyDialog cryTools.cryAnim.UI.main.models.editModelList
)
)
cryTools.cryAnim.UI.main.models.editModelList = editModelListRO
editModelListRO = undefined
createDialog cryTools.cryAnim.UI.main.models.editModelList 443 220
)
)
cryTools.cryAnim.UI.main.models.loadModelRC = loadModelRC
loadModelRC = undefined
registerRightClickMenu cryTools.cryAnim.UI.main.models.loadModelRC
popUpMenu cryTools.cryAnim.UI.main.models.loadModelRC pos:[(mouse.screenpos[1] - 10), (mouse.screenpos[2] - 10)]
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.modelsRO.btnLoadModel.pressed" )
)
)
logOutput "> Created modelsRO rollout"
--try
(
if cryTools.cryAnim.base.iniFile #get #multiRow == true then
addSubRollout cryTools.cryAnim.UI.main.dialog.row1 modelsRO
else
addSubRollout cryTools.cryAnim.UI.main.dialog.row1 modelsRO
)
--catch ( logOutput "!!> Error adding modelsRO to main dialog" )
modelsRO = undefined
logOutput ">> models9.ms loaded"
+263
View File
@@ -0,0 +1,263 @@
--###############################################################################
--// rollout with elements to control models, weapons and other things like nanoMuscles
--###############################################################################
rollout musclesRO "Muscles"
(
groupBox gbMuscles " Muscles " pos:[2,2] width:153 height:62
checkBox chkAutomateMuscles "Auto-Muscles" pos:[8,18] width:90 height:20 checked:true fieldWidth:0
checkBox chkUseMusclesKeys "Use Keys" pos:[8,38] width:90 height:20 enabled:false fieldWidth:0
button btnCreateMuscles "Create" pos:[100,16] width:50 height:20 toolTip:"Creates the nano muscles rig on Bip01"
button btnBakeMuscles "Bake" pos:[100,36] width:50 height:20 toolTip:"Bakes down all keys of the muscle bones"
on musclesRO open do
(
try
(
try ( if (cryTools.cryAnim.base.iniFile #get #rolloutStates) == true then (cryTools.cryAnim.UI.main._f.getUI "Muscles" "").open = cryTools.cryAnim.base.iniFile #get #musclesRO) catch()
global automateAnimateMuscles = undefined
global useMuscleKeys = undefined
nanoConPosArray = #("_Bip01 L rear deltoid01_Con", "_Bip01 L rear deltoid02_Con", "_Bip01 L clavicular deltoid01_Con", "_Bip01 R rear deltoid01_Con", "_Bip01 R rear deltoid02_Con", "_Bip01 R clavicular deltoid01_Con")
nanoConRotArray = #("_Bip01 L knee_Con", "_Bip01 R knee_Con")
errorOutput = undefined
for i = 1 to nanoConPosArray.count do
if (getNodeByName nanoConPosArray[i]) == undefined then
errorOutput = true
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.musclesRO.open" )
)
on musclesRO rolledUp value do
(
try
(
if (cryTools.cryAnim.base.iniFile #get #muscles) != value then
cryTools.cryAnim.base.iniFile #set #muscles
cryTools.cryAnim.UI.main._f.updateDialog()
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.musclesRO.rolledUp" )
)
on chkAutomateMuscles changed value do
(
try
(
if chkAutomateMuscles.checked == true then
global automateAnimateMuscles = undefined
else
global automateAnimateMuscles = false
chkUseMusclesKeys.enabled = not chkAutomateMuscles.checked
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.musclesRO.chkAutomateMuscles.changed" )
)
on chkUseMusclesKeys changed value do
(
try
(
if chkUseMusclesKeys.checked == true then
global useMuscleKeys = true
else
global useMuscleKeys = undefined
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.musclesRO.chkUseMusclesKeys.changed" )
)
on btnBakeMuscles pressed do
(
try
(
if $'_Bip01 L clavicular deltoid01_LA' != undefined then
(
if (queryBox "Bake all Muscle Bones?" title:"Muscle Rig") == true then
cryTools.cryAnim.UI.main.loadSave._f.bakeMuscleBones()
)
else
messageBox "No Muscle Rig on Bip01" title:"Muscle Rig"
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.musclesRO.btnBakeMuscles.pressed" )
)
on btnCreateMuscles pressed do
(
try
(
if $Bip01 != undefined then
(
if (queryBox "Create MuscleRig for Bip01?" title:"Muscle Rig") == true then
(
undo "createMuscleRig" on
(
$Bip01.controller.figureMode = true
completeRedraw()
saveSelection = getCurrentSelection()
saveSliderTime = sliderTime
clearSelection()
with redraw off
(
Bip01_R_rear_deltoid02_LA = dummy name:"_Bip01 R rear deltoid02_LA" boxsize:[2,2,2]
Bip01_R_clavicular_deltoid01_LA = dummy name:"_Bip01 R clavicular deltoid01_LA" boxsize:[2,2,2]
Bip01_R_rear_deltoid01_LA = dummy name:"_Bip01 R rear deltoid01_LA" boxsize:[2,2,2]
Bip01_L_rear_deltoid02_LA = dummy name:"_Bip01 L rear deltoid02_LA" boxsize:[2,2,2]
Bip01_L_clavicular_deltoid01_LA = dummy name:"_Bip01 L clavicular deltoid01_LA" boxsize:[2,2,2]
Bip01_L_rear_deltoid01_LA = dummy name:"_Bip01 L rear deltoid01_LA" boxsize:[2,2,2]
Bip01_R_Clavicle_Con = dummy name:"_Bip01 R Clavicle_Con" pos:$'Bip01 R UpperArm'.transform.pos boxsize:[6,6,6]
Bip01_L_Clavicle_Con = dummy name:"_Bip01 L Clavicle_Con" pos:$'Bip01 L UpperArm'.transform.pos boxsize:[6,6,6]
Bip01_R_Clavicle_Con.parent = $'Bip01 R Clavicle'
Bip01_L_Clavicle_Con.parent = $'Bip01 L Clavicle'
Bip01_R_knee_rotDif = dummy name:"_Bip01 R knee_rotDif" rotation:(inverse($'Bip01 R Calf'.transform.rotation)) pos:$'Bip01 R Calf'.transform.pos boxsize:[3,3,3]
Bip01_L_knee_rotDif = dummy name:"_Bip01 L knee_rotDif" rotation:$'Bip01 L Calf'.transform.rotation pos:$'Bip01 L Calf'.transform.pos boxsize:[3,3,3]
Bip01_R_knee_rotDif.parent = $'Bip01 R Calf'
Bip01_L_knee_rotDif.parent = $'Bip01 L Calf'
Bip01_R_knee_Con = dummy name:"_Bip01 R knee_Con" pos:$'Bip01 R Thigh'.transform.pos boxsize:[3,3,3]
Bip01_L_knee_Con = dummy name:"_Bip01 L knee_Con" pos:$'Bip01 L Thigh'.transform.pos boxsize:[3,3,3]
Bip01_R_knee_Con.parent = $'Bip01 R Thigh'
Bip01_L_knee_Con.parent = $'Bip01 L Thigh'
Bip01_R_rear_deltoid01_Con = dummy name:"_Bip01 R rear deltoid01_Con" boxsize:[3,3,3]
Bip01_R_rear_deltoid02_Con = dummy name:"_Bip01 R rear deltoid02_Con" boxsize:[3,3,3]
Bip01_R_clavicular_deltoid01_Con = dummy name:"_Bip01 R clavicular deltoid01_Con" boxsize:[3,3,3]
Bip01_L_rear_deltoid01_Con = dummy name:"_Bip01 L rear deltoid01_Con" boxsize:[3,3,3]
Bip01_L_rear_deltoid02_Con = dummy name:"_Bip01 L rear deltoid02_Con" boxsize:[3,3,3]
Bip01_L_clavicular_deltoid01_Con = dummy name:"_Bip01 L clavicular deltoid01_Con" boxsize:[3,3,3]
Bip01_R_rear_deltoid01_Con.position.controller = position_script() ; Bip01_R_rear_deltoid01_Con.position.controller.script = "RRear01 = (getVert $NanoSUIt 4068) if automateAnimateMuscles == undefined then ( with animate off $'_Bip01 R rear deltoid01_LA'.pos = RRear01 ) else ( if useMuscleKeys == undefined then ( with animate on $'_Bip01 R rear deltoid01_LA'.pos = RRear01 ) else RRear01 )"
Bip01_R_rear_deltoid02_Con.position.controller = position_script() ; Bip01_R_rear_deltoid02_Con.position.controller.script = "RRear02 = (getVert $NanoSUIt 4221) if automateAnimateMuscles == undefined then ( with animate off $'_Bip01 R rear deltoid02_LA'.pos = RRear02 ) else ( if useMuscleKeys == undefined then ( with animate on $'_Bip01 R rear deltoid02_LA'.pos = RRear02 ) else RRear02 )"
Bip01_R_clavicular_deltoid01_Con.position.controller = position_script() ; Bip01_R_clavicular_deltoid01_Con.position.controller.script = "RFront = (getVert $NanoSUIt 4064) if automateAnimateMuscles == undefined then ( with animate off $'_Bip01 R clavicular deltoid01_LA'.pos = RFront ) else ( if useMuscleKeys == undefined then ( with animate on $'_Bip01 R clavicular deltoid01_LA'.pos = RFront ) else RFront )"
Bip01_L_rear_deltoid01_Con.position.controller = position_script() ; Bip01_L_rear_deltoid01_Con.position.controller.script = "LRear01 = (getVert $NanoSUIt 3809) if automateAnimateMuscles == undefined then ( with animate off $'_Bip01 L rear deltoid01_LA'.pos = LRear01 ) else ( if useMuscleKeys == undefined then ( with animate on $'_Bip01 L rear deltoid01_LA'.pos = LRear01 ) else LRear01 )"
Bip01_L_rear_deltoid02_Con.position.controller = position_script() ; Bip01_L_rear_deltoid02_Con.position.controller.script = "LRear02 = (getVert $NanoSUIt 3962) if automateAnimateMuscles == undefined then ( with animate off $'_Bip01 L rear deltoid02_LA'.pos = LRear02 ) else ( if useMuscleKeys == undefined then ( with animate on $'_Bip01 L rear deltoid02_LA'.pos = LRear02 ) else LRear02 )"
Bip01_L_clavicular_deltoid01_Con.position.controller = position_script() ; Bip01_L_clavicular_deltoid01_Con.position.controller.script = "LFront = (getVert $NanoSUIt 3805) if automateAnimateMuscles == undefined then ( with animate off $'_Bip01 L clavicular deltoid01_LA'.pos = LFront ) else ( if useMuscleKeys == undefined then ( with animate on $'_Bip01 L clavicular deltoid01_LA'.pos = LFront ) else LFront )"
Bip01_L_knee_Con.rotation.controller = rotation_script() ; Bip01_L_knee_Con.rotation.controller.script = "fn LKneeMuscles = ( LKneeOriginRot = (quat -0.461687 0.548192 -0.440465 -0.540667) ; LKneeOriginPos = [43.0243,-0.746225,0.291201] ; LrotDiff = (in coordsys $'Bip01 L Thigh' $'_Bip01 L knee_rotDif'.rotation) as eulerangles ; in coordsys $'Bip01 L Thigh' ( $'Bip01 L knee'.rotation = LKneeOriginRot ; $'Bip01 L knee'.pos = LKneeOriginPos ) in coordsys $'Bip01 L knee' (rotate $'Bip01 L knee' (eulerangles (LrotDiff.z / -2) 0 0)) ) if automateAnimateMuscles == undefined then ( with animate off LKneeMuscles() ) else ( if useMusclesKeys == undefined then ( with animate on LKneeMuscles() ) ) ; $'Bip01 L Thigh'.transform.rotation"
Bip01_R_knee_Con.rotation.controller = rotation_script() ; Bip01_R_knee_Con.rotation.controller.script = "fn RKneeMuscles = ( RKneeOriginRot = (quat -0.530717 -0.393879 0.549399 -0.511233) ; RKneeOriginPos = [43.0243,-0.746225,0.291201] ; RrotDiff = (in coordsys $'Bip01 R Thigh' $'_Bip01 R knee_rotDif'.rotation) as eulerangles ; in coordsys $'Bip01 R Thigh' ( $'Bip01 R knee'.rotation = RKneeOriginRot ; $'Bip01 R knee'.pos = RKneeOriginPos ) in coordsys $'Bip01 R knee' (rotate $'Bip01 R knee' (eulerangles (RrotDiff.z / -2) 0 0)) ) if automateAnimateMuscles == undefined then ( with animate off RKneeMuscles() ) else ( if useMusclesKeys == undefined then ( with animate on RKneeMuscles() ) ) ; $'Bip01 R Thigh'.transform.rotation"
Bip01_R_Clavicle_Con.isHidden = true
Bip01_L_Clavicle_Con.isHidden = true
Bip01_R_knee_Con.isHidden = true
Bip01_L_knee_Con.isHidden = true
Bip01_R_knee_rotDif.isHidden = true
Bip01_L_knee_rotDif.isHidden = true
Bip01_R_rear_deltoid01_Con.isHidden = true
Bip01_R_rear_deltoid02_Con.isHidden = true
Bip01_R_clavicular_deltoid01_Con.isHidden = true
Bip01_L_rear_deltoid01_Con.isHidden = true
Bip01_L_rear_deltoid02_Con.isHidden = true
Bip01_L_clavicular_deltoid01_Con.isHidden = true
-- LOOKAT-SETUP --
$'Bip01 R rear deltoid01'.transform = (matrix3 [0.800769,0.401167,0.444785] [-0.104045,-0.638128,0.762868] [0.589868,-0.657158,-0.469253] [-15.3582,10.8964,154.478])
$'Bip01 R rear deltoid02'.transform = (matrix3 [0.864961,0.479963,0.14655] [0.0248794,-0.33268,0.942711] [0.501221,-0.811763,-0.299696] [-13.2617,14.8806,147.713])
$'Bip01 R clavicular deltoid01'.transform = (matrix3 [0.879667,-0.134998,0.456029] [0.448849,-0.0813437,-0.889898] [0.157229, 0.987502,-0.0109619] [-11.1466,-5.93142,154.513])
$'Bip01 L rear deltoid01'.transform = (matrix3 [0.800769,-0.401167,-0.444785] [-0.104045,0.638128,-0.762868] [0.589868,0.657159,0.469254] [15.3582,10.8963,154.478])
$'Bip01 L rear deltoid02'.transform = (matrix3 [0.864962,-0.479963,-0.14655] [0.0248793,0.33268,-0.942712] [0.501221,0.811763,0.299697] [13.2617,14.8806,147.713])
$'Bip01 L clavicular deltoid01'.transform = (matrix3 [0.879666,0.134998,-0.456029] [0.448849,0.0813439,0.889898] [0.157229,-0.987501,0.0109618] [11.1466,-5.93141,154.513])
$'Bip01 R rear deltoid01'.rotation.controller = LookAt_constraint lookat_vector_length:0 upnode_world:false pickUpNode:$'_Bip01 R Clavicle_Con' relative:true
$'Bip01 R rear deltoid02'.rotation.controller = LookAt_constraint lookat_vector_length:0 upnode_world:false pickUpNode:$'_Bip01 R Clavicle_Con' relative:true
$'Bip01 R clavicular deltoid01'.rotation.controller = LookAt_constraint lookat_vector_length:0 upnode_world:false pickUpNode:$'_Bip01 R Clavicle_Con' relative:true
$'Bip01 L rear deltoid01'.rotation.controller = LookAt_constraint lookat_vector_length:0 upnode_world:false pickUpNode:$'_Bip01 R Clavicle_Con' relative:true
$'Bip01 L rear deltoid02'.rotation.controller = LookAt_constraint lookat_vector_length:0 upnode_world:false pickUpNode:$'_Bip01 R Clavicle_Con' relative:true
$'Bip01 L clavicular deltoid01'.rotation.controller = LookAt_constraint lookat_vector_length:0 upnode_world:false pickUpNode:$'_Bip01 R Clavicle_Con' relative:true
$'Bip01 R rear deltoid01'.rotation.controller.appendTarget $'_Bip01 R rear deltoid01_LA' 100
$'Bip01 R rear deltoid02'.rotation.controller.appendTarget $'_Bip01 R rear deltoid02_LA' 100
$'Bip01 R clavicular deltoid01'.rotation.controller.appendTarget $'_Bip01 R clavicular deltoid01_LA' 100
$'Bip01 L rear deltoid01'.rotation.controller.appendTarget $'_Bip01 L rear deltoid01_LA' 100
$'Bip01 L rear deltoid02'.rotation.controller.appendTarget $'_Bip01 L rear deltoid02_LA' 100
$'Bip01 L clavicular deltoid01'.rotation.controller.appendTarget $'_Bip01 L clavicular deltoid01_LA' 100
)
completeRedraw()
$Bip01.controller.figureMode = false
if sliderTime != animationRange.end then
sliderTime += 1
else
sliderTime -= 1
sliderTime = saveSliderTime
for obj in saveSelection do
selectMore obj
)
)
)
else
(
messageBox "No Bip01 in Scene" title:"Error Generating MuscleRig"
)
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.musclesRO.btnCreateMuscles.pressed" )
)
)
logOutput "> Created muscleRO rollout"
try
(
if cryTools.cryAnim.base.iniFile #get #multiRow == true then
addSubRollout cryTools.cryAnim.UI.main.dialog.row2 musclesRO
else
addSubRollout cryTools.cryAnim.UI.main.dialog.row1 musclesRO rolledUp:true
)
catch ( logOutput "!!> Error adding musclesRO to main dialog" )
musclesRO = undefined
logOutput ">> muscle.ms loaded"
@@ -0,0 +1,332 @@
--###############################################################################
--// rollout to control several operations
--###############################################################################
rollout operationRO "Operation"
(
button btnStart "Start" pos:[8,8] width:45 height:20 toolTip:"Sets the start time of process"
button btnStop "Stop" pos:[60,8] width:45 height:20 toolTip:"Sets the end time of process"
spinner spnBegin "" pos:[6,35] range:[0,9999,0] type:#integer fieldWidth:35 scale:1
spinner spnEnd "" pos:[58,35] range:[0,9999,0] type:#integer fieldWidth:35 scale:1
spinner spnSteps "" pos:[112,35] range:[0,50,1] type:#integer fieldWidth:25 scale:1
label labSteps "Steps" pos:[115,12]
--checkbox chkOnlyExistingKeys "Only existing Keys" pos:[8,60] enabled:false
label labSetRange "Set Range:" pos:[6,60]
button btnSetRangeSelection "Selection" pos:[70,57] height:20 width:50
button btnSetRangeAll "All" pos:[123,57] height:20 width:30
groupBox gbOperation "Operation" pos:[2,80] width:153 height:77
dropDownList ddOperation "" pos:[8,99] width:142 height:21
label labOperation "To :" pos:[15,124] visible:false
label labDistanceDirection "" pos:[15,124] visible:false align:#left
dropDownList ddOperationTo "" pos:[8,140] width:142 height:21 visible:false
spinner spnDistance "" pos:[8,140] width:142 height:21 range:[-1000,1000,0] visible:false
spinner spnDirection "" pos:[8,140] width:142 height:21 range:[-360,360,180] visible:false
button btnApply "Apply" pos:[8,129] width:33 height:20 toolTip:"Applies the Operation once"
button btnApplyBeginEnd "Start/Stop" pos:[46,129] width:59 height:20 toolTip:"Applies the Operation for the selected range"
button btnApplyRange "Range" pos:[110,129] width:39 height:20 toolTip:"Applies the Operation for the animation range"
on operationRO open do
(
try
(
try ( if (cryTools.cryAnim.base.iniFile #get #rolloutStates) == true then (cryTools.cryAnim.UI.main._f.getUI "Operation" "").open = cryTools.cryAnim.base.iniFile #get #operationRO) catch()
operationRO.height = 161
ddOperation.items = cryTools.cryAnim.UI.main.operation._f.updateDialog output:#ddOp
ddOperationTo.items = cryTools.cryAnim.UI.main.operation._f.updateDialog output:#ddOpTo
spnBegin.value = animationRange.start.frame
spnEnd.value = animationRange.end.frame
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.operationRO.open" )
)
on operationRO rolledUp value do
(
try
(
if (cryTools.cryAnim.base.iniFile #get #operationRO) != value then
cryTools.cryAnim.base.iniFile #set #operationRO
cryTools.cryAnim.UI.main._f.updateDialog()
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.operationRO.rolledUp" )
)
on chkOnlyExistingKeys changed value do
(
try
(
spnSteps.enabled = not value
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.operationRO.chkOnlyExistingKeys.changed" )
)
on btnStart pressed do
(
try
(
spnBegin.value = sliderTime
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.operationRO.btnStart.pressed" )
)
on btnStop pressed do
(
try
(
spnEnd.value = sliderTime
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.operationRO.btnStop.pressed" )
)
on spnSteps changed value do
(
try
(
local diffStartEnd = spnEnd.value - spnBegin.value
if diffStartEnd < 0 then
diffStartEnd -= (diffStartEnd * 2)
if value > diffStartEnd then
spnSteps.value = diffStartEnd
if spnSteps.value == 0 then spnSteps.value = 1
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.operationRO.spnSteps.changed" )
)
on btnSetRangeSelection pressed do
(
if selection.count > 0 then
(
local firstKey = 0
local lastKey = 0
for obj in selection do
(
if obj.classID[1] == 37157 then
(
try
(
local tempFirstKey = obj.transform.controller.keys[1].time.frame
if tempFirstKey < firstKey then
firstKey = tempFirstKey
)catch()
try
(
local tempLastkey = obj.transform.controller.keys[obj.transform.controller.keys.count].time.frame
if tempLastKey > lastKey then
lastKey = tempLastKey
)catch()
)
else
(
for i = 1 to 3 do
(
try
(
local tempFirstKey = obj.controller[i].keys[1].time.frame
if tempFirstKey < firstKey then
firstKey = tempFirstKey
)
catch()
try
(
local tempLastkey = obj.controller[i].keys[obj.controller[i].keys.count].time.frame
if tempLastKey > lastKey then
lastKey = tempLastKey
)
catch()
)
)
)
if firstKey != lastKey then
animationRange = interval firstKey lastKey
else
print "Error setting new Range"
)
else
print "Nothing selected."
)
on btnSetRangeAll pressed do
(
local firstKey = 0
local lastKey = 0
for obj in Objects do
(
if obj.classID[1] == 37157 then
(
try
(
local tempFirstKey = obj.transform.controller.keys[1].time.frame
if tempFirstKey < firstKey then
firstKey = tempFirstKey
)catch()
try
(
local tempLastkey = obj.transform.controller.keys[obj.transform.controller.keys.count].time.frame
if tempLastKey > lastKey then
lastKey = tempLastKey
)catch()
)
else
(
for i = 1 to 3 do
(
try
(
local tempFirstKey = obj.controller[i].keys[1].time.frame
if tempFirstKey < firstKey then
firstKey = tempFirstKey
)
catch()
try
(
local tempLastkey = obj.controller[i].keys[obj.controller[i].keys.count].time.frame
if tempLastKey > lastKey then
lastKey = tempLastKey
)
catch()
)
)
)
if firstKey != lastKey then
animationRange = interval firstKey lastKey
else
print "Error setting new Range"
)
on ddOperation selected value do
(
try
(
case value of
(
4: ddOperation.selection -= 1
7: ddOperation.selection -= 1
11: ddOperation.selection -= 1
)
cryTools.cryAnim.UI.main.operation._f.updateDialog()
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.operationRO.ddOperation.selected" )
)
on btnApply pressed do
(
try
(
cryTools.cryAnim.UI.main.operation._f.applyOperation ddOperation.selection ddOperationTo.selection sliderTime.frame sliderTime.frame 1
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.operationRO.btnApply.pressed" )
)
on btnApplyBeginEnd pressed do
(
try
(
if spnBegin.value == spnEnd.value then
(
messageBox ("'Start' must be unequal to 'End'") title:"Begin/End Operation"
return false
)
if spnBegin.value > spnEnd.value then
(
tempValue = spnBegin.value
spnBegin.value = spnEnd.value
spnEnd.value = tempValue
)
local diffBeginEnd = spnEnd.value - spnBegin.value
if diffBeginEnd < 0 then
diffBeginEnd -= (diffBeginEnd * 2)
if spnSteps.value > diffBeginEnd then
spnSteps.value = diffBeginEnd
undo "BeginEndOperation" on
(
local tempAnimationRange = animationRange
animationRange = interval spnBegin.value spnEnd.value
local tempBool = cryTools.cryAnim.UI.main.operation._f.applyOperation ddOperation.selection ddOperationTo.selection spnBegin.value spnEnd.value spnSteps.value
if tempBool != false then
cryTools.cryAnim.UI.main.operation._f.applyOperation ddOperation.selection ddOperationTo.selection spnEnd.value spnEnd.value 1
animationRange = tempAnimationRange
)
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.operationRO.btnApplyBeginEnd.pressed" )
)
on btnApplyRange pressed do
(
try
(
undo "RangeOperation" on
(
tempBool = cryTools.cryAnim.UI.main.operation._f.applyOperation ddOperation.selection ddOperationTo.selection animationRange.start.frame animationRange.end.frame spnSteps.value
if tempBool != false then
cryTools.cryAnim.UI.main.operation._f.applyOperation ddOperation.selection ddOperationTo.selection animationRange.end.frame animationRange.end.frame 1
)
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.operationRO.btnApplyRange.pressed" )
)
)
logOutput "> Created operationRO rollout"
try
(
if cryTools.cryAnim.base.iniFile #get #multiRow == true then
addSubRollout cryTools.cryAnim.UI.main.dialog.row1 operationRO
else
addSubRollout cryTools.cryAnim.UI.main.dialog.row1 operationRO
)
catch ( logOutput "!!> Error adding operationRO to main dialog" )
operationRO = undefined
logOutput ">> operation.ms loaded"
+154
View File
@@ -0,0 +1,154 @@
--###############################################################################
--// rollout with all the file control _f like Load Biped File, Save, Export etc.
--###############################################################################
rollout perforceRO "Perforce"
(
timer clock interval:0 active:false
checkbox chkAutoUpdate "AutoUpdate" pos:[8,8] checked:true
spinner spnAutoUpdateTime "Time " pos:[104,8] range:[0,999,0] width:50 scale:1 type:#integer
groupBox grpOpen " Open For Edit " pos:[2,33] width:153 height:120
label labOpenY "Yes" pos:[82,53]
label labOpenN "No" pos:[107,53]
label labOpenA "Ask" pos:[129,53]
label labOpenLoad "Load" pos:[14,68]
label labOpenSave "Save" pos:[14,88]
label labOpenExport "Export" pos:[14,108]
label labOpenSaveExport "Save/Export" pos:[14,128]
radiobuttons radLoadOpen pos:[85,68] labels:#("","","") columns:3 default:3
radiobuttons radSaveOpen pos:[85,88] labels:#("","","") columns:3 default:3
radiobuttons radExportOpen pos:[85,108] labels:#("","","") columns:3 default:3
radiobuttons radSaveExportOpen pos:[85,128] labels:#("","","") columns:3 default:3
groupBox grpAdd " Add to Source Control " pos:[2,163] width:153 height:100
label labAddY "Yes" pos:[82,183]
label labAddN "No" pos:[107,183]
label labAddA "Ask" pos:[129,183]
label labAddSave "Save" pos:[14,198]
label labAddExport "Export" pos:[14,218]
label labAddSaveExport "Save/Export" pos:[14,238]
radiobuttons radSaveAdd pos:[85,198] labels:#("","","") columns:3 default:3
radiobuttons radExportAdd pos:[85,218] labels:#("","","") columns:3 default:3
radiobuttons radSaveExportAdd pos:[85,238] labels:#("","","") columns:3 default:3
on perforceRO open do
(
try
(
try ( if (cryTools.cryAnim.base.iniFile #get #rolloutStates) == true then (cryTools.cryAnim.UI.main._f.getUI "Perforce" "").open = cryTools.cryAnim.base.iniFile #get #perforceRO) catch()
try chkAutoUpdate.checked = cryTools.cryAnim.base.iniFile #get #autoUpdate catch()
spnAutoUpdateTime.enabled = chkAutoUpdate.checked
try spnAutoUpdateTime.value = cryTools.cryAnim.base.iniFile #get #autoUpdateTime catch()
clock.interval = spnAutoUpdateTime.value * 60000
try radLoadOpen.state = cryTools.cryAnim.base.iniFile #get #loadOpen catch()
try radSaveOpen.state = cryTools.cryAnim.base.iniFile #get #saveOpen catch()
try radExportOpen.state = cryTools.cryAnim.base.iniFile #get #exportOpen catch()
try radSaveExportOpen.state = cryTools.cryAnim.base.iniFile #get #saveExportOpen catch()
try radSaveAdd.state = cryTools.cryAnim.base.iniFile #get #saveAdd catch()
try radExportAdd.state = cryTools.cryAnim.base.iniFile #get #exportAdd catch()
try radSaveExportAdd.state = cryTools.cryAnim.base.iniFile #get #saveExportAdd catch()
clock.active = chkAutoUpdate.checked
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.perforceRO.open" )
)
on perforceRO rolledUp value do
(
try
(
if (cryTools.cryAnim.base.iniFile #get #perforceRO) != value then
cryTools.cryAnim.base.iniFile #set #perforceRO
cryTools.cryAnim.UI.main._f.updateDialog()
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.perforceRO.rolledUp" )
)
on chkAutoUpdate changed value do
(
try
(
clock.active = value
spnAutoUpdateTime.enabled = value
cryTools.cryAnim.base.iniFile #set #autoUpdate
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.perforceRO.chkAutoUpdate.changed" )
)
on clock tick do
(
try
(
if spnAutoUpdateTime.value > 0 then
if (local tempVar = cryTools.cryAnim.base.perforce "" #checkLoading) != false then
if cryTools.suppressWarnings == false then
cryTools.cryAnim.base.perforce tempVar #messageOnUpdate
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.perforceRO.clock" )
)
on spnAutoUpdateTime changed value do
(
try
(
clock.interval = value * 60000
cryTools.cryAnim.base.iniFile #set #autoUpdateTime
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.perforceRO.spnAutoUpdateTime.changed" )
)
on radLoadOpen changed value do
cryTools.cryAnim.base.iniFile #set #loadOpen
on radSaveOpen changed value do
cryTools.cryAnim.base.iniFile #set #saveOpen
on radExportOpen changed value do
cryTools.cryAnim.base.iniFile #set #exportOpen
on radSaveExportOpen changed value do
cryTools.cryAnim.base.iniFile #set #saveExportOpen
on radSaveAdd changed value do
cryTools.cryAnim.base.iniFile #set #saveAdd
on radExportAdd changed value do
cryTools.cryAnim.base.iniFile #set #exportAdd
on radSaveExportAdd changed value do
cryTools.cryAnim.base.iniFile #set #saveExportAdd
)
logOutput "> Created perforceRO rollout"
try
(
if cryTools.cryAnim.base.iniFile #get #multiRow == true then
addSubRollout cryTools.cryAnim.UI.main.dialog.row4 perforceRO
else
addSubRollout cryTools.cryAnim.UI.main.dialog.row1 perforceRO rolledUp:true
)
catch ( logOutput "!!> Error adding perforceRO to main dialog" )
perforceRO = undefined
logOutput ">> perforce.ms loaded"
+155
View File
@@ -0,0 +1,155 @@
--###############################################################################
--// rollout with elements to control the pivot align _f
--###############################################################################
rollout pivotRO "Pivot"
(
button btnPivotSelect "Select Pivot" pos:[8,8] width:142 height:20 toolTip:"Creates pivot point selection tool"
groupBox grpPivPos "Pivot Point" pos:[2,38] width:153 height:50
button btnCreatePivPoint "Create" pos:[8,60] width:65 height:20 toolTip:"Creates pivot point on the selected node"
button btnDeletePivPoint "Delete" pos:[83,60] width:65 height:20 toolTip:"Deletes pivot point of the selected node"
groupBox gbSnapshot " Snapshot " pos:[2,100] width:153 height:50
button btnSingleSnapshot "Single" pos:[8,123] width:66 height:20 toolTip:"Creates snapshot of the current selection"
button btnChildrenSnapshot "+ Children" pos:[84,123] width:66 height:20 toolTip:"Creates grouped snapshot of the current selection with children"
on pivotRO open do
(
try
(
if (cryTools.cryAnim.base.iniFile #get #rolloutStates) == true then
(cryTools.cryAnim.UI.main._f.getUI "Pivot" "").open = cryTools.cryAnim.base.iniFile #get #pivotRO
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.pivotRO.open" )
)
on pivotRO rolledUp value do
(
try
(
if (cryTools.cryAnim.base.iniFile #get #pivotRO) != value then
cryTools.cryAnim.base.iniFile #set #pivotRO
cryTools.cryAnim.UI.main._f.updateDialog()
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.pivotRO.rolledUp" )
)
on btnPivotSelect pressed do
(
try
(
if (local selectedBipPart = cryTools.cryAnim._f.getSelectedBipPart() ) != undefined then
(
if selectedBipPart.object.isPivot == true then
(
undo off
cryTools.cryAnim.align._f.callPivotSelect()
)
else
print "Pivot Selection not available for this Object"
)
else
(
if selection.count > 0 then
print "No Biped Object selected."
else
print "Nothing selected."
)
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.pivotRO.btnPivotSelect.pressed" )
)
on btnCreatePivPoint pressed do
(
try
(
if (selectedBipPart = cryTools.cryAnim._f.getSelectedBipPart() ) != undefined then
(
if selectedBipPart.pivotSel.index == undefined then
messageBox "Select a Pivot first" title:"Pivot Point" beep:false
else
if (cryTools.cryAnim.UI.main.pivot._f.pivotPoint #check) == true then
(
if (queryBox "Set new Pivot Point?" title:"Pivot Point" beep:false) == true then
if (cryTools.cryAnim.UI.main.pivot._f.pivotPoint #delete) == true then
cryTools.cryAnim.UI.main.pivot._f.pivotPoint #create
)
else
cryTools.cryAnim.UI.main.pivot._f.pivotPoint #create
)
else
(
if selection.count > 0 then
print "No Biped Object selected."
else
print "Nothing selected"
)
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.pivotRO.btnCreatePivPoint.pressed" )
)
on btnDeletePivPoint pressed do
(
try
(
if (selectedBipPart = cryTools.cryAnim._f.getSelectedBipPart() ) != undefined then
if selectedBipPart.pivotSel.pivPoint.name != undefined then
if (queryBox "Delete Pivot Point?" title:"Pivot Point" beep:false) == true then
cryTools.cryAnim.UI.main.pivot._f.pivotPoint #delete
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.pivotRO.btnDeletePivPoint.pressed" )
)
on btnSingleSnapshot pressed do
(
try
(
with animate off
(
if cryTools.cryAnim._f.createSnapshot() == undefined then
print "Nothing selected"
)
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.pivotRO.btnSingleSnapshot.pressed" )
)
on btnChildrenSnapshot pressed do
(
try
(
with animate off
(
local baseArray = cryTools.cryAnim._f.createSnapshot children:true
if baseArray == undefined then
print "Nothing selected"
else
group baseArray prefix:"Snapshot_"
)
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.pivotRO.btnChildrenSnapshot.pressed" )
)
)
logOutput "> Created pivotRO rollout"
try
(
if cryTools.cryAnim.base.iniFile #get #multiRow == true then
addSubRollout cryTools.cryAnim.UI.main.dialog.row1 pivotRO
else
addSubRollout cryTools.cryAnim.UI.main.dialog.row1 pivotRO
)
catch ( logOutput "!!> Error adding pivotRO to main dialog" )
pivotRO = undefined
logOutput ">> pivot.ms loaded"
+307
View File
@@ -0,0 +1,307 @@
--###############################################################################
--// rollout with elements to control the locator
--###############################################################################
rollout poseRO "Pose Manager"
(
groupbox gbCharacters " Characters " pos:[2,5] width:153 height:43
editText edCharacter "" pos:[29,22] width:80 height:17
dropdownlist ddCharacter "" pos:[32,20] width:94 height:10
button btnCreateCharacter "" pos:[8,20] width:21 height:21 images:#((getDir #maxroot + "UI\\Icons\\ParameterCollector_i.bmp"), undefined, 28,6,6,20,20) width:29 height:29 toolTip:"Creates a new Character"
button btnDeleteCharacter "" pos:[128,20] width:21 height:21 images:#((getDir #maxroot + "UI\\Icons\\ParameterCollector_i.bmp"), undefined, 28,8,8,17,17) width:29 height:29 toolTip:"Deletes selected Character"
groupbox gbCollections " Collections " pos:[2,55] width:153 height:43
editText edCollection "" pos:[29,72] width:80 height:17
dropdownlist ddCollection "" pos:[32,70] width:94 height:10
button btnCreateCollection "" pos:[8,70] width:21 height:21 images:#((getDir #maxroot + "UI\\Icons\\ParameterCollector_i.bmp"), undefined, 28,6,6,20,20) width:29 height:29 toolTip:"Creates a new Collection"
button btnDeleteCollection "" pos:[128,70] width:21 height:21 images:#((getDir #maxroot + "UI\\Icons\\ParameterCollector_i.bmp"), undefined, 28,8,8,17,17) width:29 height:29 toolTip:"Deletes selected Collection"
groupbox gbPoses " Poses " pos:[2,105] width:153 height:63
editText edPose "" pos:[29,122] width:80 height:17
dropdownlist ddPose "" pos:[32,120] width:94 height:20
button btnCreatePose "" pos:[8,120] width:21 height:21 images:#((getDir #maxroot + "UI\\Icons\\ParameterCollector_i.bmp"), undefined, 28,6,6,20,20) width:29 height:29 toolTip:"Creates a new Pose"
button btnDeletePose "" pos:[128,120] width:21 height:21 images:#((getDir #maxroot + "UI\\Icons\\ParameterCollector_i.bmp"), undefined, 28,8,8,17,17) width:29 height:29 toolTip:"Deletes selected Pose"
button btnPastePose "Paste" pos:[38,145] width:80 height:20
groupbox gbPaste " Paste " pos:[2,185] width:153 height:75
checkbox chkPastePosition "Position" pos:[12,200] checked:true
checkbox chkPasteRotation "Rotation" pos:[12,220] checked:true
checkbox chkControllerValue "Controller Value" pos:[12,240] checked:true
checkbox chkBoneOnly "Nodes Only" pos:[76,200] width:75
checkbox chkByVelocity "By Velocity" pos:[76,220]
groupbox gbPreview " Preview " pos:[2,273] width:153 height:150
bitmap bmpPreview "" pos:[7,289] width:144 height:110
checkbox chkNodesOnly "Only Nodes visible" pos:[12,403] checked:true
groupbox gbNodes " Nodes " pos:[2,435] width:153 height:169
multilistbox lbNodes "" pos:[7,455] width:143 height:9
button btnAddNode "Add" pos:[7,578] width:72 height:20 toolText:"Adds new node to the list"
button btnDeleteNode "Delete" pos:[79,578] width:71 height:20 toolText:"Deletes selected node/s"
on poseRO open do
(
try
(
try ( if (cryTools.cryAnim.base.iniFile #get #rolloutStates) == true then (cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "").open = cryTools.cryAnim.base.iniFile #get #poseRO) catch()
cryTools.cryAnim.UI.main.poseManager._f.inputINI()
cryTools.cryAnim.UI.main.poseManager._f.updateList #character initial:true
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.poseRO.open" )
)
on poseRO rolledUp value do
(
try
(
if (cryTools.cryAnim.base.iniFile #get #poseRO) != value then
cryTools.cryAnim.base.iniFile #set #poseRO
cryTools.cryAnim.UI.main._f.updateDialog()
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.poseRO.rolledUp" )
)
on ddCharacter selected value do
(
try
(
cryTools.cryAnim.UI.main.poseManager._f.updateList #character
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.poseRO.ddCharacter.selected" )
)
on ddCollection selected value do
(
try
(
cryTools.cryAnim.UI.main.poseManager._f.updateList #collection
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.poseRO.ddCollection.selected" )
)
on ddPose selected value do
(
try
(
cryTools.cryAnim.UI.main.poseManager._f.updateList #default
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.poseRO.ddPose.selected" )
)
on btnCreateCharacter pressed do
(
try
(
cryTools.cryAnim.UI.main.poseManager._f.createEntry "Character"
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.poseRO.btnCreateCharacter.pressed" )
)
on btnDeleteCharacter pressed do
(
try
(
cryTools.cryAnim.UI.main.poseManager._f.deleteEntry "Character"
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.poseRO.btnDeleteCharacter.pressed" )
)
on btnCreateCollection pressed do
(
try
(
cryTools.cryAnim.UI.main.poseManager._f.createEntry "Collection"
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.poseRO.btnCreateCollection.pressed" )
)
on btnDeleteCollection pressed do
(
try
(
cryTools.cryAnim.UI.main.poseManager._f.deleteEntry "Collection"
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.poseRO.btnDeleteCollection.pressed" )
)
on btnCreatePose pressed do
(
try
(
cryTools.cryAnim.UI.main.poseManager._f.createEntry "Pose"
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.poseRO.btnCreatePose.pressed" )
)
on btnDeletePose pressed do
(
try
(
cryTools.cryAnim.UI.main.poseManager._f.deleteEntry "Pose"
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.poseRO.btnDeletePose.pressed" )
)
on edCharacter changed value do
(
try
(
if ddCharacter.items.count > 0 then
(
cryTools.cryAnim.UI.main.poseManager._f.renameEntry "Character"
)
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.poseRO.edCharacter.changed" )
)
on edCollection changed value do
(
try
(
if ddCollection.items.count > 0 then
(
cryTools.cryAnim.UI.main.poseManager._f.renameEntry "Collection"
)
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.poseRO.edCollection.changed" )
)
on edPose changed value do
(
try
(
if ddPose.items.count > 0 then
(
cryTools.cryAnim.UI.main.poseManager._f.renameEntry "Pose"
)
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.poseRO.edPose.changed" )
)
on btnPastePose pressed do
(
try
(
if ddPose.items.count > 0 then
(
undo "Paste Pose" on
cryTools.cryAnim.UI.main.poseManager._f.applyPose()
)
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.poseRO.btnPastePose.pressed" )
)
on btnAddNode pressed do
(
try
(
if ddCharacter.items.count > 0 then
(
if selection.count == 0 then
local tempVar = selectByName title:"Add Character Nodes" showHidden:true single:false --filter:filterNodes --// somehow crashes max...
else
local tempVar = getCurrentSelection()
if classOf tempVar == Array and tempVar.count > 0 then
(
local tempArray = cryTools.cryAnim.UI.main.poseManager._v.poses[ddCharacter.selection].nodes
for i = 1 to tempVar.count do
if (findItem tempArray tempVar[i].name) == 0 then
append tempArray tempVar[i].name
tempArray = cryTools.sortRootChildren tempArray
lbNodes.items = tempArray
cryTools.cryAnim.UI.main.poseManager._v.poses[ddCharacter.selection].nodes = tempArray
cryTools.cryAnim.UI.main.poseManager._f.outputINI()
)
else
messageBox "No nodes selected." title:"Error Adding Nodes"
)
else
messageBox "No Character in List " title:"Error adding Nodes"
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.poseRO.btnAddNode.pressed" )
)
on btnDeleteNode pressed do
(
try
(
if lbNodes.items.count > 0 then
(
local poses = cryTools.cryAnim.UI.main.poseManager._v.poses
local saveSelection = lbNodes.selection as Array
local newSelection = (lbNodes.selection as Array)[1]
lbNodes.selection = #{newSelection}
if newSelection == lbNodes.items.count then lbNodes.selection = #{lbNodes.items.count - 1}
if newSelection == 0 then lbNodes.selection = #{1}
local newList = #()
local tempArray = cryTools.cryAnim.UI.main.poseManager._v.poses[ddCharacter.selection].nodes
for i = 1 to tempArray.count do
if (findItem saveSelection i) == 0 then
append newList tempArray[i]
if newList.count > 1 then
newList = cryTools.sortRootChildren newList
lbNodes.items = newList
cryTools.cryAnim.UI.main.poseManager._v.poses[ddCharacter.selection].nodes = newList
cryTools.cryAnim.UI.main.poseManager._f.outputINI()
)
)
catch ( logOutput "!!> Error in cryAnim.UI.main.dialog.poseRO.btnDeleteNode.pressed" )
)
)
logOutput "> Created poseRO rollout"
try
(
if cryTools.cryAnim.base.iniFile #get #multiRow == true then
addSubRollout cryTools.cryAnim.UI.main.dialog.row3 poseRO
else
addSubRollout cryTools.cryAnim.UI.main.dialog.row1 poseRO rolledUp:true
)
catch ( logOutput "!!> Error adding poseRO to main dialog" )
poseRO = undefined
logOutput ">> pose.ms loaded"
+711
View File
@@ -0,0 +1,711 @@
--###############################################################################
--// rollout with all the file control _f like Load Biped File, Save, Export etc.
--###############################################################################
rollout loadSaveRO "Load / Save / Export"
(
groupBox gbLoad " Load " pos:[2,8] width:153 height:50
button btnLoad "Load Biped File" pos:[8,31] width:142 height:20 toolTip:"Loads biped file from the working directory or last used file"
groupBox gbSave " Save / Export " pos:[2,70] width:153 height:315
button btnBegin "Start" pos:[8,92] width:46 height:20 toolTip:"Sets the start time to save/export"
button btnEnd "End" pos:[60,92] width:46 height:20 toolTip:"Sets the end time to save/export"
button btnRange "Range" pos:[110,92] width:40 height:20 toolTip:"Sets the range for save/export"
button btnAll "All" pos:[110,113] width:40 height:20 toolTip:"Sets the animation range for save/export"
spinner spnBegin "" pos:[6,113] range:[0,9999,0] type:#integer fieldWidth:36
spinner spnEnd "" pos:[58,113] range:[0,9999,0] type:#integer fieldWidth:36
checkbox chkGlobalHuman " GlobalHuman.cal" pos:[12,140] tooltip:"Creates entry in GlobalHuman.cal" checked:false enabled:false
button btnExportAdd "Add" pos:[8,165] width:66 height:20 toolTip:"Adds a new node to the exporter list"
button btnExportDelete "Delete" pos:[84,165] width:66 height:20 enabled:false toolTip:"Deletes selected node from the exporter list"
listbox lbExport "" pos:[8,190] width:142 height:2 items:#("Bip01") selection:0 enabled:false
button btnSave "Save" pos:[8,235] width:66 height:20 toolTip:"Saves the biped file"
button btnExport "Export" pos:[84,235] width:66 height:20 toolTip:"Exports to .caf"
button btnSaveExport "Save / Export" pos:[8,265] width:142 height:20 toolTip:"Saves to biped file and exports to .caf"
button btnBatchProcess "Batch Process" pos:[8,360] width:142 height:20 toolTip:"Opens the Batch Process"
listbox lbStatus "" pos:[8,290] width:142 height:4
listbox lbStatusFilepath "" pos:[0,0] width:1 height:1 visible:false
on loadSaveRO open do
(
try
(
try (if (cryTools.cryAnim.base.iniFile #get #rolloutStates) == true then (cryTools.cryAnim.UI.main._f.getUI "Load / Save / Export" "").open = cryTools.cryAnim.base.iniFile #get #loadSaveRO) catch()
try cryTools.cryAnim.UI.main.loadSave._v.bipOpenPath = cryTools.cryAnim.base.iniFile #get #loadBiped catch()
spnBegin.value = animationRange.start.frame
spnEnd.value = animationRange.end.frame
if $Bip01 != undefined then
(
lbExport.items = #($Bip01.name)
lbExport.selection = 0
)
cryTools.cryAnim.UI.main._f.updateDialog()
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.loadSaveRO.open" )
)
on loadSaveRO rolledUp value do
(
try
(
if (cryTools.cryAnim.base.iniFile #get #loadSaveRO) != value then
cryTools.cryAnim.base.iniFile #set #loadSaveRO
cryTools.cryAnim.UI.main._f.updateDialog()
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.loadSaveRO.rolledUp" )
)
on btnBegin pressed do
(
try
spnBegin.value = sliderTime
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.loadSaveRO.btnBegin.pressed" )
)
on btnEnd pressed do
(
try
spnEnd.value = sliderTime
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.loadSaveRO.btnEnd.pressed" )
)
on btnRange pressed do
(
try
(
spnBegin.value = animationRange.start.frame
spnEnd.value = animationRange.end.frame
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.loadSaveRO.btnRange.pressed" )
)
on btnAll pressed do
(
try
(
baseBip = cryTools.cryAnim._f.getBaseBip()
if baseBip != undefined then
(
tempInterval = biped.getCurrentRange baseBip.controller
spnBegin.value = tempInterval.start.frame
spnEnd.value = tempInterval.end.frame
)
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.loadSaveRO.btnAll.pressed" )
)
on btnExportAdd pressed do
(
try
(
if $selection.count > 0 then
(
local tempArray = lbExport.items
for obj in $selection do
(
local exist = false
for i = 1 to lbExport.items.count do
if obj.name == lbExport.items[i] then
exist = true
if exist == false then
append tempArray obj.name
)
sort tempArray
lbExport.items = tempArray
if tempArray.count > 1 then
if tempArray.count > 1 then
(
local tempInt = findItem tempArray "Bip01"
if tempInt != 0 then
(
deleteItem tempArray tempInt
lbExport.enabled = true
)
lbExport.items = tempArray
lbExport.selection = 0
btnExportDelete.enabled = false
)
)
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.loadSaveRO.btnExportAdd.pressed" )
)
on btnExportDelete pressed do
(
try
(
if lbExport.selection > 0 then
(
local tempArray = lbExport.items
deleteItem tempArray lbExport.selection
sort tempArray
lbExport.items = tempArray
)
if lbExport.items.count == 0 then
lbExport.items = #($Bip01.name)
if lbExport.items[1] == "Bip01" then
lbExport.enabled = false
else
lbExport.enabled = true
lbExport.selection = 0
btnExportDelete.enabled = false
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.loadSaveRO.btnExportDelete.pressed" )
)
on lbExport selected value do
(
try
(
if lbExport.items.count <= 1 and lbExport.items[1] == "Bip01" then
(
lbExport.selection = 0
btnExportDelete.enabled = false
)
else
btnExportDelete.enabled = true
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.loadSaveRO.lbExport.selected" )
)
on btnLoad pressed do
(
try
(
local baseBip = cryTools.cryAnim._f.getBaseBip op:#load
local loadedBiped = undefined
if baseBip != undefined then
(
if cryTools.cryAnim.UI.batchProcess._v.fileQue == undefined then
filepath = getOpenFileName filename:cryTools.cryAnim.UI.main.loadSave._v.bipOpenPath types:"Biped (*.bip)|*.bip"
else
filepath = cryTools.cryAnim.UI.batchProcess._v.fileQue
if filepath != undefined then
(
tempStatus = undefined
if cryTools.cryAnim._v.perforceDir != undefined then
(
case (cryTools.cryAnim.UI.main._f.getUI "Perforce" "radLoadOpen").state of
(
1: tempStatus = cryTools.cryAnim.base.perforce filepath #open
2: tempStatus = false
3: tempStatus = cryTools.cryAnim.base.perforce filepath #checkForLoad
)
)
else
tempStatus = false
if tempStatus != undefined then
(
local tempFilterFilename = cryTools.cryAnim.base.perforce filepath #getFilename
local tempUndoString = ("L - " + cryTools.cryAnim.base.perforce filepath #getFilename)
undo tempUndoString on
(
if (loadedBiped = biped.loadBipFile baseBip.controller filepath) == true then
(
cryTools.cryAnim.UI.main.loadSave._v.bipOpenPath = filepath
cryTools.cryAnim.UI.main.loadSave._v.bipSavePath = filepath
cryTools.cryAnim.base.iniFile #set #loadBiped
if (exportPath = cryTools.cryAnim.UI.main._f.checkExport #ProductionToGame filepath) != false then
cryTools.cryAnim.UI.main.loadSave._v.cafSavePath = exportPath
--cryTools.cryAnim.UI.checkExport #createFolder exportPath
tempInterval = biped.getCurrentRange baseBip.controller
if tempInterval.start == tempInterval.end then
tempInterval.end += 1
spnBegin.value = tempInterval.start.frame
spnEnd.value = tempInterval.end.frame
animationRange = tempInterval
try (animationRange = biped.getCurrentRange baseBip.controller) catch ( )
local itemFound = false
for i = 1 to cryTools.cryAnim.UI.main.models._v.itemList.count do
(
if (findString filepath cryTools.cryAnim.UI.main.models._v.itemList[i].external) != undefined then
(
cryTools.cryAnim.UI.main.models._f.selectItem i #set
itemFound = true
)
)
if itemFound == false then
cryTools.cryAnim.UI.main.models._f.selectItem 1 #set
tempArray = lbStatus.items
tempStatusString = ""
if tempStatus == true then
tempStatusString = "L+o"
else
tempStatusString = "L"
append tempArray (tempStatusString + " - " + tempFilterFilename)
lbStatus.items = tempArray
lbStatus.selection = tempArray.count
tempFileArray = lbStatusFilepath.items
append tempFileArray filepath
lbStatusFilepath.items = tempFileArray
)
)
)
)
return #(true, loadedBiped)
)
else
return #(false, loadedBiped)
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.loadSaveRO.btnLoad.pressed" )
)
on btnSave pressed do
(
try
(
with undo off
(
local baseBip = cryTools.cryAnim._f.getBaseBip()
if baseBip != undefined then
(
if cryTools.cryAnim.UI.main.loadSave._v.bipSavePath == (cryTools.cryAnim.UI.main._v.bipWorkingDir + "*.bip") or ((cryTools.cryAnim.UI.main._f.getUI "Settings" "radSavePrompt").state == 1) then
filepath = getSaveFileName filename:cryTools.cryAnim.UI.main.loadSave._v.bipSavePath types:"Biped (*.bip)|*.bip"
else
filepath = cryTools.cryAnim.UI.main.loadSave._v.bipSavePath
if filepath != undefined then
(
local tempFilterFilename = filterString filepath "\\" ; tempFilterFilename = tempFilterFilename[tempFilterFilename.count]
local tempBool = true
local tempStatus = undefined
if cryTools.cryAnim._v.perforceDir != undefined then
(
case (cryTools.cryAnim.UI.main._f.getUI "Perforce" "radSaveOpen").state of
(
1: tempStatus = cryTools.cryAnim.base.perforce filepath #open
2: ( tempStatus = false ; cryTools.cryAnim.base.perforce filepath #setReadMessage )
3: tempStatus = cryTools.cryAnim.base.perforce filepath #checkForSave
)
)
else
tempStatus = false
if tempStatus != undefined then
(
if (animationRange.start != spnBegin.value) or (animationRange.end != spnEnd.value) then
(
tempInterval = cryTools.cryAnim.UI.main.loadSave._f.checkRange spnBegin.value spnEnd.value
spnBegin.value = tempInterval.start
spnEnd.value = tempInterval.end
)
tempBool = biped.saveBipFileSegment baseBip.controller filepath spnBegin.value spnEnd.value #keyPerFrame
cryTools.cryAnim.UI.main.loadSave._v.bipSavePath = filepath
cryTools.cryAnim.UI.main.loadSave._v.bipOpenPath = filepath
if (exportPath = cryTools.cryAnim.UI.main._f.checkExport #ProductionToGame filepath) != false then
cryTools.cryAnim.UI.main.loadSave._v.cafSavePath = exportPath
tempArray = lbStatus.items
local tempStatusString = ""
if tempStatus == true then
tempStatusString = "S+o"
else
tempStatusString = "S"
append tempArray (tempStatusString + " - " + tempFilterFilename)
lbStatus.items = tempArray
lbStatus.selection = tempArray.count
tempFileArray = lbStatusFilepath.items
append tempFileArray filepath
lbStatusFilepath.items = tempFileArray
if (cryTools.cryAnim.UI.main._f.checkExport #save filepath) == true then
(
if cryTools.cryAnim._v.perforceDir != undefined then
(
case (cryTools.cryAnim.UI.main._f.getUI "Perforce" "radSaveAdd").state of
(
1: cryTools.cryAnim.base.perforce filepath #add
3: cryTools.cryAnim.base.perforce filepath #checkForAdd
)
)
)
)
)
)
)
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.loadSaveRO.btnSave.pressed" )
)
on btnExport pressed do
(
try
(
local baseBip = cryTools.cryAnim._f.getBaseBip()
if baseBip != undefined then
(
if (cryTools.cryAnim.UI.main.loadSave._v.cafSavePath == (crytools.BuildPathFull + "Game\Animations\human\*.caf")) or ((cryTools.cryAnim.UI.main._f.getUI "Settings" "radExportPrompt").state == 1) then
filepath = getSaveFileName filename:cryTools.cryAnim.UI.main.loadSave._v.cafSavePath types:"Crytek Bone Animation File (*.caf)|*.caf"
else
filepath = cryTools.cryAnim.UI.main.loadSave._v.cafSavePath
if filepath != undefined then
(
cryTools.cryAnim.UI.main.loadSave._v.cafSavePath = filepath
if (cryTools.cryAnim.UI.main._f.checkExport #export filepath) == true then
(
local tempStatus = undefined
if cryTools.cryAnim._v.perforceDir != undefined then
(
case (cryTools.cryAnim.UI.main._f.getUI "Perforce" "radExportOpen").state of
(
1: tempStatus = cryTools.cryAnim.base.perforce filepath #open
2: ( tempStatus = false ; cryTools.cryAnim.base.perforce filepath #setReadMessage )
3: tempStatus = cryTools.cryAnim.base.perforce filepath #checkForSave
)
)
else
tempStatus = false
if tempStatus != undefined then
(
try( if $'Bip01 R ForeTwist'.parent != $'Bip01 R Forearm' then $'Bip01 R ForeTwist'.parent = $'Bip01 R Forearm' ) catch()
try( if $'Bip01 L ForeTwist'.parent != $'Bip01 L Forearm' then $'Bip01 L ForeTwist'.parent = $'Bip01 L Forearm' ) catch()
try (cryTools.cryAnim.UI.main.loadSave._f.bakeMuscleBones() ) catch()
local tempMode = getCommandPanelTaskMode()
UtilityPanel.OpenUtility CryEngine2_Exporter
local boneList = #()
for i = 1 to lbExport.items.count do
append boneList (getNodeByName lbExport.items[i])
csexport.set_bone_list boneList
local tempBool = (csexport.export.export_anim filepath)
while tempBool != OK do ( escapeEnable = true ; sleep 0.1 )
local tempFilterFilename = filterString filepath "\\"
tempArray = lbStatus.items
tempStatusString = ""
if tempStatus == true then
tempStatusString = "E+o"
else
tempStatusString = "E"
append tempArray (tempStatusString + " - " + tempFilterFilename[tempFilterFilename.count])
lbStatus.items = tempArray
lbStatus.selection = tempArray.count
tempFileArray = lbStatusFilepath.items
append tempFileArray filepath
lbStatusFilepath.items = tempFileArray
cryTools.cryAnim.UI.main.loadSave._v.cafSavePath = filepath
setCommandPanelTaskMode mode:tempMode
if cryTools.cryAnim._v.perforceDir != undefined then
(
case (cryTools.cryAnim.UI.main._f.getUI "Perforce" "radExportAdd").state of
(
1: cryTools.cryAnim.base.perforce filepath #add
3: cryTools.cryAnim.base.perforce filepath #checkForAdd
)
)
)
)
)
)
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.loadSaveRO.btnExport.pressed" )
)
on btnSaveExport pressed do
(
try
(
baseBip = cryTools.cryAnim._f.getBaseBip()
if baseBip != undefined then
(
if (cryTools.cryAnim.UI.main.loadSave._v.bipSavePath == (substring crytools.BuildPathFull 1 (crytools.BuildPathFull.count - 1)) + "_Production\Art\Animation\Human\*.bip") or ((cryTools.cryAnim.UI.main._f.getUI "Settings" "radSaveExportPrompt").state == 1) then
filepath = getSaveFileName filename:cryTools.cryAnim.UI.main.loadSave._v.bipSavePath types:"Biped (*.bip)|*.bip"
else
filepath = cryTools.cryAnim.UI.main.loadSave._v.bipSavePath
if filepath != undefined then
(
if (cryTools.cryAnim.UI.main._f.checkExport #saveExport filepath) == true then
(
local printBool = #(false,false)
if (exportPath = cryTools.cryAnim.UI.main._f.checkExport #ProductionToGame filepath) != false then
cryTools.cryAnim.UI.main.loadSave._v.cafSavePath = exportPath
local tempFilename = ""
local tempStatus = undefined
if cryTools.cryAnim._v.perforceDir != undefined then
(
case (cryTools.cryAnim.UI.main._f.getUI "Perforce" "radSaveExportOpen").state of
(
1: tempStatus = cryTools.cryAnim.base.perforce filepath #open
2: ( tempStatus = false ; cryTools.cryAnim.base.perforce filepath #setReadMessage )
3: tempStatus = cryTools.cryAnim.base.perforce filepath #checkForSave
)
)
else
tempStatus = false
if tempStatus != undefined then
(
tempFilterFilename = filterString filepath "\\"
if (animationRange.start != spnBegin.value) or (animationRange.end != spnEnd.value) then
(
local tempInterval = cryTools.cryAnim.UI.main.loadSave._f.checkRange spnBegin.value spnEnd.value
spnBegin.value = tempInterval.start
spnEnd.value = tempInterval.end
)
biped.saveBipFileSegment baseBip.controller filepath spnBegin.value spnEnd.value #keyPerFrame
cryTools.cryAnim.UI.main.loadSave._v.bipSavePath = filepath
cryTools.cryAnim.UI.main.loadSave._v.bipOpenPath = filepath
printBool[1] = true
tempFilename = tempFilterFilename[tempFilterFilename.count]
if (cryTools.cryAnim.UI.main._f.checkExport #save filepath) == true then
if cryTools.cryAnim._v.perforceDir != undefined then
(
case (cryTools.cryAnim.UI.main._f.getUI "Perforce" "radSaveExportAdd").state of
(
1: cryTools.cryAnim.base.perforce filepath #add
3: cryTools.cryAnim.base.perforce filepath #checkForAdd
)
)
)
local tempStatus = undefined
if cryTools.cryAnim._v.perforceDir != undefined then
(
case (cryTools.cryAnim.UI.main._f.getUI "Perforce" "radSaveExportOpen").state of
(
1: tempStatus = cryTools.cryAnim.base.perforce exportPath #open
2: ( tempStatus = false ; cryTools.cryAnim.base.perforce exportPath #setReadMessage )
3: tempStatus = cryTools.cryAnim.base.perforce exportPath #checkForSave
)
)
else
tempStatus = false
if tempStatus != undefined then
(
/*
tempDirFilter = filterString exportPath "\\"
tempDirString = ""
for i = 1 to (tempDirFilter.count - 1) do
(
tempDirString += tempDirFilter[i] + "\\"
makeDir tempDirString
)
*/
cryTools.cryAnim.UI.main._f.checkExport #createFolder exportPath
if $'Bip01 R ForeTwist'.parent != $'Bip01 R Forearm' then $'Bip01 R ForeTwist'.parent = $'Bip01 R Forearm'
if $'Bip01 R ForeTwist'.parent != $'Bip01 L Forearm' then $'Bip01 L ForeTwist'.parent = $'Bip01 L Forearm'
try ( cryTools.cryAnim.UI.main.loadSave._f.bakeMuscleBones() ) catch()
local tempMode = getCommandPanelTaskMode()
UtilityPanel.OpenUtility CryEngine2_Exporter
local boneList = #()
for i = 1 to lbExport.items.count do
append boneList (getNodeByName lbExport.items[i])
csexport.set_bone_list boneList
local tempBool = (csexport.export.export_anim exportPath)
while tempBool != OK do ( escapeEnable = true ; sleep 0.1 )
tempFilterFilename = filterString exportPath "\\"
printBool[2] = true
setCommandPanelTaskMode mode:tempMode
if cryTools.cryAnim._v.perforceDir != undefined then
(
case (cryTools.cryAnim.UI.main._f.getUI "Perforce" "radSaveExportAdd").state of
(
1: cryTools.cryAnim.base.perforce exportPath #add
3: cryTools.cryAnim.base.perforce exportPath #checkForAdd
)
)
)
local tempArray = lbStatus.items
local tempString = ""
if printBool[1] != printBool[2] then
(
if printBool[1] == true then tempString = "S"
if printBool[2] == true then tempString = "E"
)
else
(
tempString = "SE"
)
append tempArray (tempString + " - " + tempFilename)
lbStatus.items = tempArray
lbStatus.selection = tempArray.count
tempFileArray = lbStatusFilepath.items
append tempFileArray filepath
lbStatusFilepath.items = tempFileArray
)
)
)
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.loadSaveRO.btnSaveExport.pressed" )
)
on lbStatus doubleClicked value do
(
try
(
try (destroyDialog cryTools.cryAnim.UI.main.loadSave.showSelectedFile) catch()
rollout showSelectedFile "SelectedFile"
(
edittext edFilename "" width:(cryTools.cryAnim.UI.main.loadSave._f.getStatusExtents() + 40)
edittext edFilepath "" width:(cryTools.cryAnim.UI.main.loadSave._f.getStatusExtents() + 40)
label labPerforce "Perforce Path:"
edittext edFilepathPerforce "" width:(cryTools.cryAnim.UI.main.loadSave._f.getStatusExtents() + 40)
on showSelectedFile open do
(
if cryTools.cryAnim._v.perforceDir == undefined then
(
labPerforce.visible = false
edFilepathPerforce.visible = false
)
local tempSLB = cryTools.cryAnim.UI.main._f.getUI "Load / Save / Export" "lbStatus"
local tempSFLB = cryTools.cryAnim.UI.main._f.getUI "Load / Save / Export" "lbStatusFilepath"
local tempSize = getTextExtent tempSFLB.items[tempSLB.selection]
cryTools.cryAnim.UI.main.loadSave.showSelectedFile.width = (cryTools.cryAnim.UI.main.loadSave._f.getStatusExtents() + 70)
local tempString = filterString tempSLB.items[tempSLB.selection] " "
local tempString = tempString[tempString.count]
edFilename.text = tempString
edFilepath.text = tempSFLB.items[tempSLB.selection]
edFilepathPerforce.text = cryTools.cryAnim.base.perforce tempSFLB.items[tempSLB.selection] #localToDepot
)
)
cryTools.cryAnim.UI.main.loadSave.showSelectedFile = showSelectedFile
showSelectedFile = undefined
createDialog cryTools.cryAnim.UI.main.loadSave.showSelectedFile pos:[(mouse.pos[1]),(mouse.pos[2] + 70)]
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.loadSaveRO.lbStatus.doubleClicked" )
)
on btnbatchProcess pressed do
(
try
(
cryTools.cryAnim.UI.batchProcess._f.callDialog()
)
catch ( logOutput "!!> Error loading batchProcess ms" )
)
)
logOutput "> Created loadSaveRO rollout"
try
(
if cryTools.cryAnim.base.iniFile #get #multiRow == true then
addSubRollout cryTools.cryAnim.UI.main.dialog.row2 loadSaveRO
else
addSubRollout cryTools.cryAnim.UI.main.dialog.row1 loadSaveRO
)
catch ( logOutput "!!> Error adding loadSaveRO to main dialog" )
loadSaveRO = undefined
logOutput ">> save.ms loaded"
+186
View File
@@ -0,0 +1,186 @@
--###############################################################################
--// rollout with the selection list and what axes to use or if there is an offset
--###############################################################################
rollout targetRO "Target"
(
dropDownList ddSelection "" pos:[8,8] width:144 height:21
groupBox grpAxis "Used Axis" pos:[2,37] enabled:false width:153 height:85 --85 -- 107 -- 125
label labX "X" pos:[38,57] enabled:false
label labY "Y" pos:[65,57] enabled:false
label labZ "Z" pos:[92,57] enabled:false
label labOffset "Offset" pos:[117,57] enabled:false
label labPos "Pos" pos:[10,75] enabled:false
checkbox chkX pos:[36,75] height:16 enabled:false
checkbox chkY pos:[63,75] height:16 enabled:false
checkbox chkZ pos:[90,75] height:16 enabled:false
checkbox chkPosOffset pos:[117,75] height:16 width:15 enabled:false
label labRot "Rot" pos:[10,98] enabled:false
checkbox chkXRot pos:[36,98] height:16 enabled:false
checkbox chkYRot pos:[63,98] height:16 enabled:false
checkbox chkZRot pos:[90,98] height:16 enabled:false
checkbox chkRotOffset pos:[117,98] height:16 width:15 enabled:false
button btnSetOffset "S" pos:[137,76] height:37 width:15 enabled:false toolTip:"Retrieve the offset of selected node and selection in the list"
label labEditOffset1 "1" pos:[8,122] height:20 width:40 visible:false
label labEditOffset2 "2" pos:[8,140] height:20 width:40 visible:false
edittext edOffset1 "" pos:[30,120] fieldWidth:118 visible:false
edittext edOffset2 "" pos:[30,138] fieldWidth:118 visible:false
timer clock interval:10000 active:true
label labChange "" pos:[0,0] height:1 enabled:false
on targetRO close do
(
try
(
if cryTools.cryAnim._v.various[10] == undefined then
cryTools.cryAnim.base.iniFile #set #visible value:"0"
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.targetRO.close" )
)
on targetRO rolledUp value do
(
try
(
if (cryTools.cryAnim.base.iniFile #get #targetRO) != value then
cryTools.cryAnim.base.iniFile #set #targetRO
cryTools.cryAnim.UI.main._f.updateDialog()
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.targetRO.rolledUp" )
)
on targetRO open do
(
try
(
try ( if (cryTools.cryAnim.base.iniFile #get #rolloutStates) == true then (cryTools.cryAnim.UI.main._f.getUI "Target" "").open = cryTools.cryAnim.base.iniFile #get #targetRO) catch()
(cryTools.cryAnim.UI.main._f.getUI "Target" "").height =128
cryTools.cryAnim.UI.main.target._f.updateDDSelection()
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.targetRO.open" )
)
on ddSelection selected value do
(
try
(
groupArray = #(\
grpAxis, labX, labY, labZ, labOffset, \
labPos, chkX, chkY, chkZ, chkPosOffset, \
labRot, chkXRot, chkYRot, chkZRot, chkRotOffset )
if ddSelection.selection <= 3 then
(
cryTools.cryAnim.UI.main.target._f.updateDDSelection op:false
ddSelection.selection = 1
if (findString labChange.text "1") == undefined then
labChange.text = "1:Changed"
else
labChange.text = "1:Unchanged"
)
else
(
cryTools.cryAnim.UI.main.target._f.updateDDSelection op:true
if (findString labChange.text "2") == undefined then
labChange.text = "2:Changed"
else
labChange.text = "2:Unchanged"
)
cryTools.cryAnim.UI.main.operation._f.updateDialog()
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.targetRO.ddSelection.selected" )
)
on btnSetOffset pressed do
(
try
(
if $selection.count > 0 then
(
cryTools.cryAnim._v.various[35] = #()
local tempSnap = cryTools.cryAnim._f.createSnapshot()
for obj in tempSnap do
(
in coordsys (getNodeByName (cryTools.cryAnim.UI.main._f.getUI "Target" "").ddSelection.selected)
append cryTools.cryAnim._v.various[35] (rotPosStruct rotation:obj.rotation position:obj.pos)
)
for obj in tempSnap do
delete obj
cryTools.cryAnim.UI.main.target._f.updateOffset()
)
else
messageBox "No Node selected." title:"Set Offset"
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.targetRO.btnSetOffset.pressed" )
)
on chkPosOffset changed value do
(
try
cryTools.cryAnim.UI.main.target._f.updateOffset()
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.targetRO.chkPosOffset.changed" )
)
on chkRotOffset changed value do
(
try
cryTools.cryAnim.UI.main.target._f.updateOffset()
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.targetRO.chkRotOffset.changed" )
)
on edOffset1 entered value do
(
try
setManualOffset labEditOffset1 edOffset1
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.targetRO.edOffset1.entered" )
)
on edOffset2 entered value do
(
try
setManualOffset labEditOffset2 edOffset2
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.targetRO.edOffset2.entered" )
)
)
logOutput "> Created targetRO rollout"
try
(
if cryTools.cryAnim.base.iniFile #get #multiRow == true then
addSubRollout cryTools.cryAnim.UI.main.dialog.row1 targetRO
else
addSubRollout cryTools.cryAnim.UI.main.dialog.row1 targetRO
)
catch ( logOutput "!!> Error adding targetRO to main dialog" )
targetRO = undefined
logOutput ">> target.ms loaded"
+204
View File
@@ -0,0 +1,204 @@
--###############################################################################
--// rollout with internal control _f like Promt for File when saving, exporting, save+export, or reloading the whole script as well as the perforce control
--###############################################################################
rollout settingsRO "Settings"
(
button btnReload "Reload CryAnim" pos:[8,8] width:142 height:20 toolTip:"Reloads the whole cryAnim script and dialog"
groupBox grpLoadingDialog " Promt for File " pos:[2,40] width:153 height:100
label labPromptN "Yes" pos:[105,60]
label labPromptA "No" pos:[129,60]
label labPromptSave "Save" pos:[14,75]
label labPromptExport "Export" pos:[14,95]
label labPromptSaveExport "Save/Export" pos:[14,115]
radiobuttons radSavePrompt pos:[108,75] labels:#("","") columns:2 default:1
radiobuttons radExportPrompt pos:[108,95] labels:#("","") columns:2 default:1
radiobuttons radSaveExportPrompt pos:[108,115] labels:#("","") columns:2 default:1
label labWorkingDir "Biped Working Directory :" pos:[10,150]
edittext edWorkingDir "" pos:[4,170] fieldWidth:140
button btnPickWorkingDir "Pick" pos:[8,190] height:20 width:65 toolTip:"Get the path for the biped working directory"
button btnSetWorkingDir "Set" pos:[85,190] height:20 width:65 toolTip:"Set the path as biped working directory"
checkbox chkMultiRow "Multi Row Dialog" pos:[10,230] checked:true
checkbox chkRolloutStates "Use Rollout States" pos:[10,250] checked:false
checkbox chkReadOnly "Notify File Attribute" pos:[10,270] checked:true
--button btnCustomizeRollouts "Customize Rollouts" pos:[8,290] width:142 height:20
on settingsRO open do
(
try
(
try radLoadOpen.state = cryTools.cryAnim.base.iniFile #get #loadOpen catch()
try radSaveOpen.state = cryTools.cryAnim.base.iniFile #get #saveOpen catch()
try radExportOpen.state = cryTools.cryAnim.base.iniFile #get #exportOpen catch()
try radSaveExportOpen.state = cryTools.cryAnim.base.iniFile #get #saveExportOpen catch()
try radSaveAdd.state = cryTools.cryAnim.base.iniFile #get #saveAdd catch()
try radExportAdd.state = cryTools.cryAnim.base.iniFile #get #exportAdd catch()
try radSaveExportAdd.state = cryTools.cryAnim.base.iniFile #get #saveExportAdd catch()
try radSavePrompt.state = cryTools.cryAnim.base.iniFile #get #savePrompt catch()
try radExportPrompt.state = cryTools.cryAnim.base.iniFile #get #exportPrompt catch()
try radSaveExportPrompt.state = cryTools.cryAnim.base.iniFile #get #saveExportPrompt catch()
try edWorkingDir.text = cryTools.cryAnim.base.iniFile #get #workingDir catch()
if edWorkingDir.text == "" then
edWorkingDir.text = cryTools.buildPathFull + "Game\\Animations\\"
cryTools.cryAnim.UI.main._v.bipWorkingDir = edWorkingDir.text
cryTools.cryAnim.UI.main._v.cafWorkingDir = subString crytools.cbapath 1 (crytools.cbapath.count - 14)
if cryTools.cryAnim.UI.main.loadSave._v.bipOpenPath == "" then
cryTools.cryAnim.UI.main.loadSave._v.bipOpenPath = cryTools.cryAnim.UI.main._v.bipWorkingDir + "*.bip"
cryTools.cryAnim.UI.main.loadSave._v.bipSavePath = cryTools.cryAnim.UI.main.loadSave._v.bipOpenPath
cryTools.cryAnim.UI.main.loadSave._v.cafSavePath = cryTools.cryAnim.UI.main._v.cafWorkingDir + "*.caf"
try local multiRow = cryTools.cryAnim.base.iniFile #get #multiRow catch()
if multiRow != "" then chkMultiRow.checked = multiRow
try chkRolloutStates.checked = cryTools.cryAnim.base.iniFile #get #rolloutStates catch()
try chkReadOnly.checked = cryTools.cryAnim.base.iniFile #get #readOnly catch()
if chkRolloutStates.checked == true then
try ( (cryTools.cryAnim.UI.main._f.getUI "Tools" "").open = cryTools.cryAnim.base.iniFile #get #settingsRO ) catch()
cryTools.cryAnim.UI.main._f.updateDialog()
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.settingsRO.open" )
)
on settingsRO rolledUp value do
(
try
(
if (cryTools.cryAnim.base.iniFile #get #settingsRO) != value then
cryTools.cryAnim.base.iniFile #set #settingsRO
cryTools.cryAnim.UI.main._f.updateDialog()
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.settingsRO.rolledUp" )
)
on btnReload pressed do
(
try
cryTools.cryAnim.base.reloadScript()
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.settingsRO.btnReload.pressed" )
)
on btnPickWorkingDir pressed do
(
try
(
if cryTools.cryAnim.UI.main._v.bipWorkingDir == "" then
local tempVar = (getSavePath caption:"Project Directory" initialDir:crytools.BuildPathFull)
else
local tempVar = (getSavePath caption:"Project Directory" initialDir:cryTools.cryAnim.UI.main._v.bipWorkingDir)
if tempVar != undefined then
(
if tempVar[tempVar.count] != "\\" then
append tempVar "\\"
edWorkingDir.text = tempVar
)
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.settingsRO.btnPickWorkingDir.pressed" )
)
on btnSetWorkingDir pressed do
(
try
(
cryTools.cryAnim.UI.main._v.bipWorkingDir = edWorkingDir.text
cryTools.cryAnim.UI.main.loadSave._v.bipOpenPath = edWorkingDir.text + ".bip"
cryTools.cryAnim.base.iniFile #set #workingDir
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.settingsRO.btnSetWorkingDir.pressed" )
)
on chkMultiRow changed value do
(
try
(
cryTools.cryAnim.base.iniFile #set #multiRow
cryTools.cryAnim.UI.main._f.callDialog()
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.settingsRO.chkMultiRow.changed" )
)
on chkRolloutStates changed value do
(
try
cryTools.cryAnim.base.iniFile #set #rolloutStates
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.settingsRO.chkRolloutStates.changed" )
)
on chkReadOnly changed value do
(
try
cryTools.cryAnim.base.iniFile #set #readOnly
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.settingsRO.chkReadOnly.changed" )
)
on radSavePrompt changed value do
(
try
cryTools.cryAnim.base.iniFile #set #savePrompt
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.settingsRO.radSavePromt.changed" )
)
on radExportPrompt changed value do
(
try
cryTools.cryAnim.base.iniFile #set #exportPrompt
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.settingsRO.radExportPrompt.changed" )
)
on radSaveExportPrompt changed value do
(
try
cryTools.cryAnim.base.iniFile #set #saveExportPrompt
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.dialog.settingsRO.radSaveExportPrompt.changed" )
)
on btnCustomizeRollouts pressed do
(
cryTools.cryAnim.UI.main.settings._f.callCustomizeDialog()
)
)
logOutput "> Created settingsRO rollout"
try
(
if cryTools.cryAnim.base.iniFile #get #multiRow == true then
addSubRollout cryTools.cryAnim.UI.main.dialog.row4 settingsRO
else
addSubRollout cryTools.cryAnim.UI.main.dialog.row1 settingsRO rolledUp:true
)
catch ( logOutput "!!> Error adding settingsRO to main dialog" )
settingsRO = undefined
logOutput ">> tools.ms loaded"
+13
View File
@@ -0,0 +1,13 @@
max utility mode
UtilityPanel.OpenUtility CryEngine_2_Exporter
for obj in selection do
(
ExprtArr = csexport.export.get_node_list()
for x = 1 to ExprtArr.count do
(
if ExprtArr[x] == obj then deleteItem ExprtArr x
)
append ExprtArr obj
csexport.export.set_node_list ExprtArr
)
max modify mode
+12
View File
@@ -0,0 +1,12 @@
-------------------------Limited Edge Loop---------------------------
if CryModelling == undefined then
(
FileIn (BuildPathFull_crytools + "Tools\\maxscript\\CryModelling.ms")
)
case subobjectLevel of
(
1: CryModelling.SelVertLoop()
2: CryModelling.SelLimELoop ()
4: CryModelling.SelPolyLoop()
)
+11
View File
@@ -0,0 +1,11 @@
-------------------------Limited Edge Ring---------------------------
if CryModelling == undefined then
(
FileIn (BuildPathFull_crytools + "Tools\\maxscript\\CryModelling.ms")
)
case subobjectLevel of
(
1: CryModelling.SelVertRing()
2: CryModelling.SelLimERing()
)
+7
View File
@@ -0,0 +1,7 @@
-------------------------Limited Poly Loop------------------------------
if CryModelling == undefined then
(
FileIn (BuildPathFull_crytools + "Tools\\maxscript\\CryModelling.ms")
)
CryModelling.SelPolyLoop()
+7
View File
@@ -0,0 +1,7 @@
-------------------------Limited Vert Loop----------------------------
if CryModelling == undefined then
(
FileIn (BuildPathFull_crytools + "Tools\\maxscript\\CryModelling.ms")
)
CryModelling.SelVertLoop()
+7
View File
@@ -0,0 +1,7 @@
-------------------------Limited Vert Ring------------------------------
if CryModelling == undefined then
(
FileIn (BuildPathFull_crytools + "Tools\\maxscript\\CryModelling.ms")
)
CryModelling.SelVertRing()
@@ -0,0 +1 @@
$.modifiers[#unwrap_uvw].unwrap2.ScaleSelectedCenter 0.001 1
@@ -0,0 +1 @@
$.modifiers[#unwrap_uvw].unwrap2.ScaleSelectedCenter 0.001 2
+1
View File
@@ -0,0 +1 @@
$.modifiers[#unwrap_uvw].unwrap2.ScaleSelectedCenter 0.001 0
+5
View File
@@ -0,0 +1,5 @@
-- centers the pivot of all selected objects (locally per object)
for obj in selection do
(
CenterPivot obj
)
@@ -0,0 +1,8 @@
case getRefCoordSys() of
(
#local: setRefCoordSys #hybrid
#hybrid: setRefCoordSys #screen
#screen: setRefCoordSys #world
#world: setRefCoordSys #parent
#parent: setRefCoordSys #local
)
+8
View File
@@ -0,0 +1,8 @@
try
(
(crytools.retrieveFn "collapseVerts()")()
)
catch
(
print "error."
)
+3
View File
@@ -0,0 +1,3 @@
max utility mode
UtilityPanel.OpenUtility CryEngine_2_Exporter
csexport.export.export_anim()
+3
View File
@@ -0,0 +1,3 @@
max utility mode
UtilityPanel.OpenUtility CryEngine_2_Exporter
csexport.export.export_nodes()
+8
View File
@@ -0,0 +1,8 @@
if $.preserveUVs == true then
(
$.preserveUVs = false
)
else
(
$.preserveUVs = true
)
@@ -0,0 +1,4 @@
ResetXForm $
print ($.name + " xforms reset")
modPanel.setCurrentObject $.baseObject
maxOps.CollapseNode $ off
+22
View File
@@ -0,0 +1,22 @@
------Display Vertex Alpha------
for obj in selection do
(
if obj.showVertexColors == false then
(
obj.vertexColorType = #alpha
obj.showVertexColors = true
)
else
(
if obj.vertexColorType ==#color then
(
obj.vertexColorType = #alpha
obj.showVertexColors = false
obj.showVertexColors = true
)
else
(
obj.showVertexColors = false
)
)
)
@@ -0,0 +1,22 @@
------Display Vertex Colors-------
for obj in selection do
(
if obj.showVertexColors == false then
(
obj.vertexColorType = #color
obj.showVertexColors = true
)
else
(
if obj.vertexColorType ==#alpha then
(
obj.vertexColorType = #color
obj.showVertexColors = false
obj.showVertexColors = true
)
else
(
obj.showVertexColors = false
)
)
)
+500
View File
@@ -0,0 +1,500 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<title>cryTools: About</title>
</head>
<body style="color: rgb(0, 0, 0);" alink="#ee0000" link="#0000ee" vlink="#551a8b">
<h1 style="background-color: rgb(192, 192, 192); font-family: Arial;">cryTools: About </h1>
<h2 style="background-color: rgb(192, 192, 192);"><span style="font-family: Arial;">What are cryTools?</span></h2>
<span style="font-family: Arial;">CryTools are a suite of maxscripts
that add functionality to 3D Studio Max that does not currently exist.
Not just basic functionality that 3DS Max is lacking, but also special
functionality and tools that help you troubleshoot, create and manage
assets for cryEngine2 games.<br>
<span style="font-weight: bold;"><br>
A Note About Requirements</span><br>
CryTools currently work with versions 8 and 9 of 3D Studio Max. The
installer can install the cryTiff libs, dlls and plugins for versions
6,7, and CS of Photoshop.<br>
<span style="font-weight: bold;"><br>
License</span><br>
CryTools are free. So I want you to feel free to use the code to learn
or incorporate aspects of the tools into your own freely available
toolsets. They are therefore provided 'as is' and with limited support.
The person who wrote these tools is not a programmer, and the code may
be somewhat obtuse at times, but the tools are pretty solid and
reliable. They have been in use at Crytek for quite some time, if you
have any bugs, please send a description of the bug to <a href="mailto:chris@crytek.de">Chris@Crytek.de</a><span style="color: rgb(0, 0, 8);"> (for CryTools ) &nbsp; &nbsp; &nbsp;<a href="mailto:mathias@crytek.de">Mathias@Crytek.de</a> (for CryAnim )</span></span><a href="chris@crytek.de"><span style="font-family: Arial;"></span></a><span style="font-family: Arial;"><br>
</span>
<h2 style="background-color: rgb(192, 192, 192); font-family: Arial;">Features</h2>
<span style="font-family: Arial;">This is a list of functionality that
has been added to 3DSMax. We have been working on CryTools since Max7,
so some features we have implemented were later added to 3DSMax
(loading FBX onto Biped for example)</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<h2 style="background-color: rgb(192, 192, 192);"><span style="font-family: Arial;">Tools/Pipeline Integration</span></h2>
<span style="font-family: Arial; font-weight: bold;">Easy Installation</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; One double click installs all tools/files on the users PC setup correctly and working</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; The installer finds Photoshop\3DS Max install dirs and installs cryTools and cryTiff correctly </span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial; font-weight: bold;">Transparency</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; cryTools can automatically check your assets before export to the game, making sure they</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; have the correct shaders applied</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; are free of extra transformations</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; are facing the right world direction</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; and many more requirements that may be overlooked </span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; cryTools run from your local build, so tools are updated automatically and frequently</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; cryTools sync via Perforce, AlienBrain, HTTP, or LAN on demand</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Checks local build for updated exporter or tools and installs them automatically or on demand </span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial; font-weight: bold;">Diagnostics You Care About</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Show all callbacks and important variables (control panel)</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Dump all vars in global space currently set/used by cryTools</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Visual indicator of local/latest build number in control panel or splash screen</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; 'Rollback' functionality to rollback to a previous exporter</span><span style="font-family: Arial;"></span><br style="font-family: Arial;">
<span style="font-family: Arial;"><br>
</span>
<h2 style="background-color: rgb(192, 192, 192);"><span style="font-family: Arial;">Animation</span></h2>
<span style="font-family: Arial; font-weight: bold;">General</span><span style="font-family: Arial;"><br>
</span><span style="font-family: Arial;">&bull; &nbsp; &nbsp;Batch convert controllers (example: TCB for CGA)<br>
</span><span style="font-family: Arial;"></span><span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Bake procedural motion to dense keyframe data </span><br>
<span style="font-family: Arial; font-weight: bold;"><br>
Biped Tools</span><span style="font-family: Arial;"><br>
</span><span style="font-family: Arial;">&bull; &nbsp; &nbsp;Foot / Hand snapshot alignment to custom pivots<br>
</span><span style="font-family: Arial;">&bull; &nbsp; &nbsp;Move Bip01 to [0,0] / [0,0,0]<br>
</span><span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Ability to set planted, sliding or free keys to any biped part for any number of frames</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Reverse a biped animation (Autodesk added this feature to Max 9)</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Import FBX data directly on to a biped character (Autodesk added this feature to Max 9)</span><br>
<span style="font-family: Arial;">&bull; &nbsp; &nbsp;Reset Rotation<br>
</span><span style="font-family: Arial;">&bull; &nbsp; &nbsp;Create snapshot / + children<br>
</span><span style="font-family: Arial;">&bull; &nbsp; &nbsp;Copy transformation<br>
</span><span style="font-family: Arial;">&bull; &nbsp; &nbsp;Paste transformation / position / rotation<br>
</span><span style="font-family: Arial;">&bull; &nbsp; &nbsp;Everything is available in the quad menu or for shortcuts<br>
</span><span style="font-family: Arial;">&bull; &nbsp; &nbsp;The dialog can handle these functions in a time range<br>
<br>
</span><span style="font-family: Arial; font-weight: bold;">Dialog<br>
</span><span style="font-family: Arial;">&bull; &nbsp; &nbsp;Align selected object to any other object ( rotation, position, create / use offset )</span><br>
<span style="font-family: Arial;">&bull; &nbsp; &nbsp;Compact structure to apply functions<br>
</span><span style="font-family: Arial;">&bull; &nbsp; &nbsp;Works with time range ( Start / Stop ; &nbsp;Range )<br>
</span><span style="font-family: Arial;">&bull; &nbsp; &nbsp;Load often used models to animate with<br>
</span><span style="font-family: Arial;">&bull; &nbsp; &nbsp;Automatically sets the weapon bone for different kind of weapons (if set)<br>
</span><span style="font-family: Arial;">&bull; &nbsp; &nbsp;Loads Biped from the working directory ( or last used file )<br>
</span><span style="font-family: Arial;">&bull; &nbsp; &nbsp;Save Biped directly to the last used biped name<br>
</span><span style="font-family: Arial;">&bull; &nbsp; &nbsp;Export animation with the Biped name and path structure<br>
</span><span style="font-family: Arial;">&bull; &nbsp; &nbsp;Save / Export at the same time<br>
</span><span style="font-family: Arial;">&bull; &nbsp; &nbsp;Perforce control if perforce is installed<br>
</span><span style="font-family: Arial;"></span><br>
<span style="font-family: Arial; font-weight: bold;">Batch Exporter</span><br>
<span style="font-family: Arial;">&bull; &nbsp; &nbsp;Supported file types: BIP, FBX, MAX<br>
</span><span style="font-family: Arial;">&bull; &nbsp; &nbsp;Sub folder selection (will be saved)<br>
</span><span style="font-family: Arial;">&bull; &nbsp; &nbsp;File Mask selection (will be saved)<br>
</span><span style="font-family: Arial;">&bull; &nbsp; &nbsp;Export Folder (will be saved)</span><br>
<span style="font-family: Arial;">&bull; &nbsp; &nbsp;Sorted by folders<br>
</span><span style="font-family: Arial;">&bull; &nbsp; &nbsp;Run pre-export script (if set)<br>
</span><span style="font-family: Arial;">&bull; &nbsp; &nbsp;Automatic export bone detection (if set)<br>
</span><span style="font-family: Arial;">&bull; &nbsp; &nbsp;Keep Sub folder structure</span><br>
<span style="font-family: Arial;">&bull; &nbsp; &nbsp;Check the files (without export)<br>
</span><span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Add or remove bones and rig elements from thousands of animation assets</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Manipulate data for thousands of animations (example: flip all assets 180 deg)<br>
</span><span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Export logs detailing data about your animation assets/batch export</span><br>
<span style="font-family: Arial;"><br>
</span>
<h2 style="background-color: rgb(192, 192, 192);"><span style="font-family: Arial;">Animation (deprecated, unsupported)</span></h2>
<span style="font-family: Arial; font-weight: bold;">Biped Tools</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Rig
Navigator - A synaptic rig element selector (much like Maya, XSI,
Motion Builder, etc). Click a part to select it</span><span style="font-family: Arial;"></span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Syncing of
pose collections sets from Perforce or a network drive on demand, at
Max load or on character load</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; auto-importing animation props and weapons from a build/server</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Select just biped bones, excluding helper joints </span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial; font-weight: bold;">General Tools</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; RangeView -
View or cycle through Animator-created 'time-tagged' sequences in one
timeline. When a sequence is selected, the timeline beginning/end is
set the the time-tagged range's beginning/ending</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Mirror first person arm animation from left arm to right or vice versa</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; XAF XML animation file support (character limited)</span><span style="font-family: Arial;"></span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial; font-weight: bold;">Batch Animation Processing</span><span style="font-family: Arial;"></span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Supports biped BIP or XAF (character limited) animation data</span><span style="font-family: Arial;"></span><span style="font-family: Arial;"></span><span style="font-family: Arial;"></span><br>
<span style="font-family: Arial;">
<br>
</span>
<h2 style="background-color: rgb(192, 192, 192);"><span style="font-family: Arial;">Character Setup and Rigging</span></h2>
<span style="font-family: Arial; font-weight: bold;">General Tools</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Zero out rotations for all selected items</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Snap a pivot to that of another object</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Select just biped bones, excluding helper joints</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Make sweeping adjustments to the width/height/taper of multiple selected bones</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Create arbitrary vertex channels, e.g. multiple vertex color channels</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Create Phys Skeleton from existing Deforming Skeleton</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Automated ParentFrame creation</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial; font-weight: bold;">Character/Animation Diagnostics</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Create Smart Object template files and export Smart Object template data to the Editor in XML format</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Select the root of a hierarchy by selecting any member of it</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Select all children of a node</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Export data about a hierarchy to listener or a spreadsheet (excel/google spreadsheet)</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Compare multiple hierarchies</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Query how many bones in a hierarchy have weights effecting a mesh</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Output
arbitrary movement data, e.g. output how far a character moves out from
behind cover in an animation, or how high the root is when he is in
prone or behind cover.</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Output XML CDF attachment data based on the location of an attachment in Max</span><br style="font-family: Arial;">
<span style="font-family: Arial;"><br>
</span>
<h2 style="background-color: rgb(192, 192, 192);"><span style="font-family: Arial;">Morph Tools</span></h2>
<span style="font-family: Arial; font-weight: bold;">Facial Setup</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Transfer morphs between unlike topologies</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Bake morph targets out from a selected head colored, named, and placed in the cryEngine2 standard</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Bake out an arbitrary number of morphs to geometry with the name of the morph slider</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Delete selected faces from many morph targets while keeping identical point indices</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Mirror eye
bone animation from right to left and vice versa when setting up
deformation for procedural eye morphs </span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial; font-weight: bold;">Pose-Driven Morphs</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Can extract a relative pose shape from a skinned and posed mesh</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Supports creation of arbitrary corrective shapes for a given pose, as well as the standard sets below</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Head/Neck</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Auto-generated fleshy eye morphs</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Shoulder </span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial; font-weight: bold;">Baking Tools</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Supports baking of any complex geometric deformation to a sequence of morphs (muscles, cloth, etc..)</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Set the number of frames to bake, and the number of morphs to generate over those frames</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Can bake out relative morphs with skin data culled to be pose-driven in cryEngine2 </span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial; font-weight: bold;">Diagnostic Tools</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Dump morpher data to the Listener or an excel spreadsheet</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; MorphManager: an improved morpher interface</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<h2 style="background-color: rgb(192, 192, 192);"><span style="font-family: Arial;">Artist Tools</span></h2>
<span style="font-family: Arial; font-weight: bold;">General Tools</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Center pivots to the center of each objects bounding box for all selected objects</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Many commonly used commends, like a button that reset xforms and then collapses a selected object</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Copy/paste modifiers to multiple objects without instancing</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; UV maipulation tools</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<h2 style="background-color: rgb(192, 192, 192);"><span style="font-family: Arial;">TD ToolKit</span></h2>
<span style="font-family: Arial; font-weight: bold;">General</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; The cryTools
architecture allows you to install update, or query anything (tools
related) on any users PC</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Useful
global variables like local build#, latest build#, local build
location, editor path, user preferences, etc</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; You can restrict what tools certain users see based upon their username, network domain, or other data</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Silently execute dos commands </span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial; font-weight: bold;">Useful Functions</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Perforce and AlienBrain integration</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Network
tools to do things like get the current domain, or convert a local
mapped drive letter to its UNC pathname (Autodesk added this feature to
Max 9)</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; General useful fns like converting a string to lowercase, etc.. </span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial; font-weight: bold;">CryExport MaxScript Exposure</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Export functions</span><br style="font-family: Arial;">
<span style="font-family: Arial;">o&nbsp;&nbsp;&nbsp; Get/set node lists for objects and bones</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Registry functions</span><br style="font-family: Arial;">
<span style="font-family: Arial;">&bull;&nbsp;&nbsp;&nbsp; Silent CMD execution<br>
<br>
<br>
<br style="font-family: Arial;">
</span><span style="font-family: Arial;"></span>
</body>
</html>
+931
View File
@@ -0,0 +1,931 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<title>cryTools: AnimTools</title>
</head>
<body style="color: rgb(0, 0, 0);" alink="#ee0000" link="#0000ee" vlink="#551a8b">
<h1 style="background-color: rgb(192, 192, 192); font-family: Arial;">cryTools: AnimTools </h1>
<span style="font-family: Arial;"><a href="#install">Installation</a><br>
<a href="#quadmenu">
Quadmenu Functions</a><br>
Main Dialogue<br>
&nbsp; &nbsp;<a href="#selection">Selection Rollout</a><br>
&nbsp; &nbsp;</span><span style="font-family: Arial;"><a href="#operation">Operation Rollout</a><br>
</span><span style="font-family: Arial;">&nbsp; &nbsp;<a href="#pivot">Pivot</a></span><span style="font-family: Arial;"><a href="#pivot"> Rollout</a><br>
&nbsp; &nbsp;<a href="#misc">Misc Rollout</a><br>
&nbsp; &nbsp;<a href="#loadsave">Load/Save/Export Rollout</a><br>
&nbsp; &nbsp;<a href="#perforce">Perforce Rollout</a><br>
&nbsp; &nbsp;<a href="#tools">Tools Rollout</a><br>
<a href="ModelSetup.html">Model Set-Up</a><br>
<a href="BatchExport.html">Batch Export Rollout</a></span>
<h2 style="background-color: rgb(192, 192, 192); font-family: Arial;"><a name="install"></a> Installation </h2>
<p style="font-family: Arial;">
After initialization of the script in Max, it will also generate entries in the customization dialog:
(<em>Under the</em> <code>MainUI</code> <em>group and in the</em> <code>CryAnim</code> <em>category</em>)
</p>
<p style="font-family: Arial;">
<img alt="cryAnimInstallation.jpg" src="images/atools/cryAnimInstallation.jpg" style="border: 0px solid ; margin-right: 2em; width: 555px; height: 523px;"> <br>
</p>
<p style="font-family: Arial;">
There are all functions available to make a key shortcut or tool bar button. <br>
(<em>most of the functionality is in the quad menu too</em>)</p>
<h2 style="font-family: Arial; background-color: rgb(192, 192, 192);"><a name="quadmenu"></a> Quadmenu Functions </h2>
<p style="font-family: Arial;">
<img alt="quadmenu.jpg" src="images/atools/quadmenu.jpg" style="border: 0px solid ; margin-right: 2em; width: 340px; height: 418px; float: left;">
</p>
<p style="font-family: Arial;">
<br>
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="go_forward" src="images/atools/go_forward.gif" align="top"> <strong>bip to [0,0]</strong><br>
Takes the Bip01 node to [0,0].
</p>
<hr style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="go_forward" src="images/atools/go_forward.gif" align="top"><span style="font-family: Arial;">&nbsp;</span><strong style="font-family: Arial;">bip to [0,0,0]</strong><span style="font-family: Arial;"><br>
Takes the Bip01 node to [0,0,0].</span><br>
<hr style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="go_forward" src="images/atools/go_forward.gif" align="top"><span style="font-family: Arial;">&nbsp;</span><strong style="font-family: Arial;">show trajectory</strong><span style="font-family: Arial;"><br>
Enables the trajectory of the selected node. <br>
(</span><em style="font-family: Arial;">is hidden if no Biped object is selected</em><span style="font-family: Arial;">)</span><br style="font-family: Arial;">
<hr style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="go_forward" src="images/atools/go_forward.gif" align="top"><span style="font-family: Arial;">&nbsp;</span><strong style="font-family: Arial;">hide trajectories</strong>
<p style="font-family: Arial;">
Hides all visible trajectories. <br>
(<em>is available if a trajectory is visible</em>)
</p>
<hr style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="go_forward" src="images/atools/go_forward.gif" align="top"><span style="font-family: Arial;">&nbsp;</span><strong style="font-family: Arial;">move to snapshot</strong><span style="font-family: Arial;"><br>
<span style="font-family: Arial;">Moves the selected Biped object to the nearest snapshot (generated out of the same object)</span><span style="font-style: italic; font-family: Arial;"> </span></span><em style="font-family: Arial;">if a pivot point is selected, it keeps the offset of it</em><span style="font-style: italic; font-family: Arial;"> </span><em style="font-family: Arial;">is disabled if no correct snapshot is in the scene</em><span style="font-family: Arial;"> </span><em style="font-family: Arial;">is visible if a Biped object is selected<br>
</em>
<hr style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="go_forward" src="images/atools/go_forward.gif" align="top"><span style="font-family: Arial;">&nbsp;</span><strong style="font-family: Arial;">move/rotate to snapshot</strong><span style="font-family: Arial;"><br>
The same as "move to snapshot" </span><strong style="font-family: Arial;">plus Rotation<br>
</strong>
<hr style="font-family: Arial;">
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="go_forward" src="images/atools/go_forward.gif" align="top">&nbsp;<strong>lock rotation</strong><br>
Rotates the object every time it will be moved to the set rotation back <br>
(<em>is visible if a Biped object is in scene</em>) <br>
</p>
<hr style="font-family: Arial;">
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="go_forward" src="images/atools/go_forward.gif" align="top">&nbsp;<strong>reset rotation</strong><br>
Rotates the selected Biped object with the same rotation as the parent object <br>
(<em>is visible if a Biped object is selected</em>) <br>
</p>
<hr style="font-family: Arial;">
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="go_forward" src="images/atools/go_forward.gif" align="top">&nbsp;<strong>move to floor</strong><br>
If the foot is selected, it will be rotated and moved to plant on the ground <br>
(<em>is available if a Biped foot is selected</em>) <br>
</p>
<hr style="font-family: Arial;">
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="go_forward" src="images/atools/go_forward.gif" align="top">&nbsp;<strong>create snapshot</strong>
</p>
<p style="font-family: Arial;">
<strong>single</strong><br>
Creates a snapshot of the selected object <br>
(<em>is visible if an Object is selected</em>) <br>
</p>
<p style="font-family: Arial;">
<strong>children</strong><br>
Creates snapshots of all children of the selected object <br>
(<em>is visible if an Object is selected</em>) <br>
</p>
<hr style="font-family: Arial;">
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="go_forward" src="images/atools/go_forward.gif" align="top">&nbsp;<strong>copy</strong><br>
Copies the position and rotation of the selected objects and stores them into a temporary file in cry_temp folder <br>
(<em>is visible if an Object is selected</em>) <br>
</p>
<hr style="font-family: Arial;">
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="go_forward" src="images/atools/go_forward.gif" align="top">&nbsp;<strong>paste<br>
</strong></p>
<p style="font-family: Arial;"><strong>transform</strong><br>
Pastes the position and rotation from the temporary file to the selected objects <br>
(<em>is visible if the temporary file exists and an Object is selected</em>) <br>
(<em>works for non-Biped nodes too</em>) <br>
</p>
<p style="font-family: Arial;">
<strong>position</strong><br>
Pastes only the position <br>
</p>
<p style="font-family: Arial;">
<strong>rotation</strong><br>
Pastes only the rotation <br>
</p>
<hr style="font-family: Arial;">
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="go_forward" src="images/atools/go_forward.gif" align="top">&nbsp;<strong>select pivot</strong><br>
Starts the pivotSelect tool to select an internal pivot to align with snapshots or pivot points <br>
(<em>is available if hand or foot is selected</em>)</p>
<h2 style="font-family: Arial; background-color: rgb(192, 192, 192);"><a name="selection"></a> Main Dialog: Selection Rollout </h2>
<p style="font-family: Arial;">
<img alt="dialogSelection.jpg" src="images/atools/dialogSelection.jpg" style="border: 0px solid ; margin-right: 2em; width: 176px; height: 158px; float: left;">
</p>
<p style="font-family: Arial;">
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top"> <strong>Drop down List :</strong> <br>
In the drop down list you specify the object you want to appy the operation to.<br>
When choosing <strong>Update List</strong>, the list will be updated with the available nodes in the scene.
</p>
<p style="font-family: Arial;">
If the selection is not "--Current Selection--" but an object in the
scene is selected, the axis and offset is available and the Operation&nbsp;rollout will be updated.
</p>
<p style="font-family: Arial;">
<img alt="dialogSelection2.jpg" src="images/atools/dialogSelection2.jpg" style="border: 0px solid ; margin-right: 2em; width: 176px; height: 158px; float: left;">
</p>
<p style="font-family: Arial;">&nbsp;<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top"> <strong>Used Axis :</strong> <br>
If enabled, you can select which coordinate axis will be used for the operation.<br>
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>Offset Set Button :</strong> <br>
If enabled, sets the offset from the current selected object and the object selected in the drop down list.
After the offset is generated, the Offset checkboxes are available.
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>Offset Axis :</strong> <br>
If
position is checked, the selected object will be in addition to the
offset aligned to the object set in the list.
With this, the locator can be easily aligned in cycles or other
animations, where the locator has a different position as the object
selected in the list.
</p>
<p style="font-family: Arial;">
If rotation is checked, the selected object will be in addition to the offset rotated to the object set in the list.
This helps when animating the locator in animations where the character runs in circles and the locator needs to follow up.
</p>
<p style="font-family: Arial;"> </p>
<h2 style="font-family: Arial; background-color: rgb(192, 192, 192);"><a name="operation"></a> Main Dialog: Operation Rollout</h2>
<h2 style="background-color: rgb(192, 192, 192); font-family: Arial;"><img alt="dialogOperation.jpg" src="images/atools/dialogOperation.jpg" style="border: 0px solid ; margin-right: 2em; width: 176px; height: 184px; float: left;">
</h2>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>Start / Stop :</strong> <br>
This button sets the range of operation.<br>
The red square box indicates which value will be changed when hitting again.<br>
<br>
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>Steps :</strong> <br>
Specify how many steps the operation will use.<br>
(<em>Default is 1</em>)
<br>
<br>
<br>
</p>
<h3><img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-orange" src="images/atools/led-orange.gif" align="top"> <strong style="font-family: Arial;">Operation :</strong></h3>
<p style="font-family: Arial;"><strong><em>If 'Current Selection' is selected in the Selection rollout:</em></strong></p>
<table style="font-family: Arial;" class="twikiTable" border="0" cellpadding="1" cellspacing="1">
<tbody>
<tr>
<th class="twikiFirstCol" align="center" bgcolor="#dadada"> <a rel="nofollow" href="http://server41/twiki/bin/view/AssetCreation/CryAnimDialogOperation?sortcol=0;table=1;up=0#sorted_table" title="Sort by this column"><font color="#000000">Name</font></a> </th>
<th align="center" bgcolor="#dadada"> <a rel="nofollow" href="http://server41/twiki/bin/view/AssetCreation/CryAnimDialogOperation?sortcol=1;table=1;up=0#sorted_table" title="Sort by this column"><font color="#000000">Operation</font></a> </th>
</tr>
<tr>
<th class="twikiFirstCol" bgcolor="#dadada"> <strong><font color="#000000">Planted Key</font></strong> </th>
<td bgcolor="#ffffff"> generates a planted key </td>
</tr>
<tr>
<th class="twikiFirstCol" bgcolor="#dadada"> <strong><font color="#000000">Sliding Key</font></strong> </th>
<td bgcolor="#eaeaea"> generates a sliding key </td>
</tr>
<tr>
<th class="twikiFirstCol" bgcolor="#dadada"> <strong><font color="#000000">Free Key</font></strong> </th>
<td bgcolor="#ffffff"> generates a free key </td>
</tr>
<tr>
<td class="twikiFirstCol" bgcolor="#eaeaea"> -------------------- </td>
<td bgcolor="#eaeaea"> ------------------------------------------------------------------------------------------------ </td>
</tr>
<tr>
<th class="twikiFirstCol" bgcolor="#dadada"> <strong><font color="#000000">Move</font></strong> </th>
<td bgcolor="#eaeaea"> moves the selected Biped object to the nearest snapshot / pivot point </td>
</tr>
<tr>
<th class="twikiFirstCol" bgcolor="#dadada"> <strong><font color="#000000">Move / Rotate</font></strong> </th>
<td bgcolor="#ffffff"> moves and rotates the selected Biped object </td>
</tr>
<tr>
<td class="twikiFirstCol" bgcolor="#eaeaea"> -------------------- </td>
<td bgcolor="#eaeaea"> ------------------------------------------------------------------------------------------------ </td>
</tr>
<tr>
<th class="twikiFirstCol" bgcolor="#dadada"> <strong><font color="#000000">Move to Floor</font></strong> </th>
<td bgcolor="#eaeaea"> if the foot is selected it puts the foot on the floor </td>
</tr>
<tr>
<th class="twikiFirstCol" bgcolor="#dadada"> <strong><font color="#000000">Reset Rotation</font></strong> </th>
<td bgcolor="#ffffff"> adapts the rotation of the selected objects parent rotation </td>
</tr>
<tr>
<td class="twikiFirstCol" bgcolor="#eaeaea"> -------------------- </td>
<td bgcolor="#eaeaea"> ------------------------------------------------------------------------------------------------ </td>
</tr>
<tr>
<th class="twikiFirstCol" bgcolor="#dadada"> <strong><font color="#000000">Copy</font></strong> </th>
<td bgcolor="#eaeaea"> copies the rotation and position of the current selected object </td>
</tr>
<tr>
<th class="twikiFirstCol" bgcolor="#dadada"> <strong><font color="#000000">Paste</font></strong> </th>
<td bgcolor="#ffffff"> pastes the rotation / position / transform to the current selected object </td>
</tr>
<tr>
<td class="twikiFirstCol" bgcolor="#eaeaea"> -------------------- </td>
<td bgcolor="#eaeaea"> ------------------------------------------------------------------------------------------------ </td>
</tr>
<tr>
<th class="twikiFirstCol" bgcolor="#dadada"> <strong><font color="#000000">Bip to [0,0]</font></strong> </th>
<td bgcolor="#eaeaea"> puts Bip01 node to [0,0] </td>
</tr>
<tr>
<th class="twikiFirstCol" bgcolor="#dadada"> <strong><font color="#000000">Bip to [0,0,0]</font></strong> </th>
<td bgcolor="#ffffff"> puts Bip01 node to [0,0,0] </td>
</tr>
</tbody>
</table>
<br style="font-family: Arial;">
<br style="font-family: Arial;">
<strong style="font-family: Arial;"><em>If some Object in the list is selected:</em></strong>
<table style="font-family: Arial;" class="twikiTable" border="0" cellpadding="1" cellspacing="1">
<tbody>
<tr>
<th class="twikiFirstCol" align="center" bgcolor="#dadada"> <a rel="nofollow" href="http://server41/twiki/bin/view/AssetCreation/CryAnimDialogOperation?sortcol=0;table=2;up=0#sorted_table" title="Sort by this column"><font color="#000000">Name</font></a> </th>
<th align="center" bgcolor="#dadada"> <a rel="nofollow" href="http://server41/twiki/bin/view/AssetCreation/CryAnimDialogOperation?sortcol=1;table=2;up=0#sorted_table" title="Sort by this column"><font color="#000000">Operation</font></a> </th>
</tr>
<tr>
<th class="twikiFirstCol" bgcolor="#dadada"> <strong><font color="#000000">Move</font></strong> </th>
<td bgcolor="#ffffff"> moves the selected Biped object to the object selected in the list </td>
</tr>
<tr>
<th class="twikiFirstCol" bgcolor="#dadada"> <strong><font color="#000000">Line</font></strong> </th>
<td bgcolor="#eaeaea"> moves the selected Biped object with reference of the selected object in the list along a line </td>
</tr>
</tbody>
</table>
<br style="font-family: Arial;">
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>Apply</strong> <br>
Applies <strong>once</strong> the selected operation to the selected object.
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>Begin / End</strong> <br>
Applies the selected operation in the specified range (<strong>Start / Stop</strong>) and with the given <strong>Steps</strong>
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>Range</strong> <br>
Applies the selected operation for the <strong style="font-family: Arial;">Full animation range</strong><span style="font-family: Arial;"> with the given </span><strong style="font-family: Arial;">Steps</strong> </p>
<h2 style="font-family: Arial; background-color: rgb(192, 192, 192);"><a name="pivot"></a> Main Dialog: Pivot Rollout </h2>
<p style="font-family: Arial;">
</p>
<p style="font-family: Arial;"><img alt="dialogPivot.jpg" src="images/atools/dialogPivot.jpg" style="border: 0px solid ; margin-right: 2em; width: 176px; height: 179px; float: left;"><img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top"> <strong>Select Pivot</strong> <br>
If a foot is selected, you can select which pivot you want to operate with for <strong>Move</strong> operation. <br>
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>Create</strong> <br>
Creates a new <strong>Pivot Point</strong> with the selected pivot. <br>
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>Delete</strong> <br>
Deletes the <strong>Pivot Point</strong> of the selected Biped Object. <br>
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>Single</strong> <br>
Creates a single snapshot from the selected Object. <br>
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>+ Children</strong> <br>
Creates snapshot from the children of the selected Object and integrates them into a group.&nbsp;</p>
<h2 style="font-family: Arial; background-color: rgb(192, 192, 192);"><a name="misc"></a> Main Dialog: Misc Rollout </h2>
<p style="font-family: Arial;">
<img alt="dialogMisc.jpg" src="images/atools/dialogMisc.jpg" style="border: 0px solid ; margin-right: 2em; width: 176px; height: 210px; float: left;">
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>Load Model</strong> <br>
If a model list is created before, the model selected will be opened (without message box asking to save changes!). <br>
<a href="ModelSetup.html" class="twikiLink"><strong>How to maintain models</strong> </a><br>
<br>
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>Reset Locator</strong> <br>
Rotates and translates the locator to Y+ and [0,0,0] (origin of scene). <br>
<br>
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>Weapons Drop Down List</strong> <br>
If a weapon list is created before, the weapon selected will be
unhidden, every weapon before will be hidden (needs reference in
weapons_ref.max in tools folder). <br>
<strong><a href="http://server41/twiki/bin/view/AssetCreation/CryAnimTutorialDialogMiscWeaponSetup" class="twikiLink">How to maintain weapons</a></strong></p>
<p style="font-family: Arial;"><strong><a href="http://server41/twiki/bin/view/AssetCreation/CryAnimTutorialDialogMiscWeaponSetup" class="twikiLink"></a></strong>
</p>
<h3 style="font-family: Arial;"><img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-orange" src="images/atools/led-orange.gif" align="top"><strong>Muscles</strong>&nbsp;</h3>
<img style="border: 0px solid ; width: 16px; height: 16px; font-family: Arial;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top"><span style="font-family: Arial;">&nbsp;</span><strong style="font-family: Arial;">AutoMuscles</strong><span style="font-family: Arial;"> <br>
If checked and nanoMuscles are in the scene, automatically repositions the look-at targets without animating. </span><br style="font-family: Arial;">
<span style="font-family: Arial;">
If unchecked and Use Keys is unchecked too, keys will be generated automatically when changing the timeline. </span><br style="font-family: Arial;">
<span style="font-family: Arial;">
When exporting using the cryAnim tools, the nanoMuscles will be baked automatically by export. </span><br>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>Use Key</strong> <br>
Is available when Auto-Muscles is unchecked. <br>
If nanoMuscles are baked and Use Keys is checked, it will not generate
keys when changing the timeline. Needed when tweaking the bones. <br>
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px; font-family: Arial;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top"><span style="font-family: Arial;">&nbsp;</span><strong style="font-family: Arial;">Create</strong><span style="font-family: Arial;"> </span><br>
If there is no nanoMuscles rig available on the character, it will be generated. <br>
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>Bake</strong> <br>
Bakes the nanoMuscles Keys. <br>
</p>
<h2 style="font-family: Arial; background-color: rgb(192, 192, 192);"><a name="loadsave"></a> Main Dialog: Load / Save / Export Rollout</h2>
<p style="font-family: Arial;">
<img alt="dialogLoadSave.jpg" src="images/atools/dialogLoadSave.jpg" style="border: 0px solid ; margin-right: 2em; width: 176px; height: 414px; float: left;">
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px; font-family: Arial;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>Load Biped File</strong> <br>
Prompts a open file dialog where you can choose the biped you want to
load (must have correct file naming: works not without file extension).
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px; font-family: Arial;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>Start / End</strong> <br>
Sets the range to save the biped to.
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px; font-family: Arial;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>Range</strong> <br>
Sets the current animation range to save the biped to.
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px; font-family: Arial;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>All</strong> <br>
Uses the biped range for saving.
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px; font-family: Arial;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>Add</strong> <br>
If a bone is currently selected, the bone will be added to the bone export list.
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px; font-family: Arial;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>Delete</strong> <br>
If a bone is selected in the list, it will be deleted.
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px; font-family: Arial;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>Save</strong> <br>
Prompts a saving file dialog to choose a file where to save the biped to.
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px; font-family: Arial;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>Export</strong> <br>
Prompts a saving file dialog to choose a file where to export to. <br>
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px; font-family: Arial;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>Save / Export</strong> <br>
Prompts a saving file dialog to choose a file where to save to. <br>
(<em>It will generate automatically the correct path for the CAF file and export the biped.</em>)
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px; font-family: Arial;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>Batch Export</strong> <br>
Runs the batch exporter to export .bip or .fbx files. <br>
<strong><a href="http://server41/twiki/bin/view/AssetCreation/CryAnimDialogBatchExport" class="twikiLink">How to use the batch export</a></strong>
</p>
<p style="font-family: Arial;">
</p>
<p style="font-family: Arial;"></p>
<h2 style="font-family: Arial; background-color: rgb(192, 192, 192);"><a name="perforce"></a> Main Dialog: Perforce Rollout </h2>
<p style="font-family: Arial;">
<img alt="dialogPerforce.jpg" src="images/atools/dialogPerforce.jpg" style="border: 0px solid ; margin-right: 2em; width: 176px; height: 291px; float: left;">
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px; font-family: Arial;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>AutoUpdate</strong> <br>
If checked, tries to get latest revision every minute from perforce. <br>
<br>
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px; font-family: Arial;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>Notify</strong> <br>
If checked, shows a message box if there is a new updated installed. <br>
<br>
<br>
</p>
<table style="font-family: Arial;" class="twikiTable" border="0" cellpadding="1" cellspacing="1">
<tbody>
<tr>
<th class="twikiFirstCol" bgcolor="#dadada"> <a rel="nofollow" href="http://server41/twiki/bin/view/AssetCreation/CryAnimDialogPerforce?sortcol=0;table=1;up=0#sorted_table" title="Sort by this column"><font color="#000000">Name</font></a> </th>
<th bgcolor="#dadada"> <a rel="nofollow" href="http://server41/twiki/bin/view/AssetCreation/CryAnimDialogPerforce?sortcol=1;table=1;up=0#sorted_table" title="Sort by this column"><font color="#000000">Y(es)</font></a> </th>
<th bgcolor="#dadada"> <a rel="nofollow" href="http://server41/twiki/bin/view/AssetCreation/CryAnimDialogPerforce?sortcol=2;table=1;up=0#sorted_table" title="Sort by this column"><font color="#000000">N(o)</font></a> </th>
<th bgcolor="#dadada"> <a rel="nofollow" href="http://server41/twiki/bin/view/AssetCreation/CryAnimDialogPerforce?sortcol=3;table=1;up=0#sorted_table" title="Sort by this column"><font color="#000000">A(sk)</font></a> </th>
</tr>
<tr>
<td class="twikiFirstCol" bgcolor="#ffffff"> Open For Edit </td>
<td bgcolor="#ffffff"> always open </td>
<td bgcolor="#ffffff"> never open </td>
<td bgcolor="#ffffff"> prompt message to ask </td>
</tr>
<tr>
<td class="twikiFirstCol" bgcolor="#eaeaea"> Add to Source Control </td>
<td bgcolor="#eaeaea"> always add </td>
<td bgcolor="#eaeaea"> never add </td>
<td bgcolor="#eaeaea"> prompt message to ask </td>
</tr>
</tbody>
</table>
<p style="font-family: Arial;">
<br>
<br>
</p>
<h2 style="font-family: Arial; background-color: rgb(192, 192, 192);"><a name="tools"></a> Main Dialog: Tools Rollout </h2>
<p style="font-family: Arial;">
</p>
<p style="font-family: Arial;"><img alt="dialogTools.jpg" src="images/atools/dialogTools.jpg" style="border: 0px solid ; margin-right: 2em; width: 176px; height: 301px; float: left;"><img style="border: 0px solid ; width: 16px; height: 16px; font-family: Arial;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top"> <strong>Reload Script</strong> <br>
Destroys the dialog and runs the loading script to load all necessary files again. <br>
<br>
<img style="border: 0px solid ; width: 16px; height: 16px; font-family: Arial;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>Prompt for File</strong> <br>
When saving or exporting, a open file dialog pops up to get the file
location the animation should be saved to (works only with extension).<br>
<br>
<img style="border: 0px solid ; width: 16px; height: 16px; font-family: Arial;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>Biped Working Directory</strong> <br>
Has the path of the directory to use when Save / Exporting animations and will be the default folder when Loading Biped Files.<br>
<img style="border: 0px solid ; width: 16px; height: 16px; font-family: Arial;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>Pick</strong> <br>
Opens a dialog to get the directory for the biped files.<br>
<img style="border: 0px solid ; width: 16px; height: 16px; font-family: Arial;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>Set</strong> <br>
Assigns the folder path to the variable used internally.<br>
<br>
<img style="border: 0px solid ; width: 16px; height: 16px; font-family: Arial;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>Use Rollout States</strong> <br>
If checked, remembers the last state (rolled up/down) of the rollouts
and when loading the dialog again, these states will be set.<br>
<img style="border: 0px solid ; width: 16px; height: 16px; font-family: Arial;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>Notify File Attribute</strong> <br>
If checked, pops up a message box if the file to save or export to is read-only.<br>
</p>
<p></p>
<p></p>
<span style="font-family: Arial;">
</span>
</body>
</html>
+95
View File
@@ -0,0 +1,95 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<title>cryTools: AnimTools: Batch Exporter Rollout</title>
</head>
<body style="color: rgb(0, 0, 0);" alink="#ee0000" link="#0000ee" vlink="#551a8b">
<h1 style="background-color: rgb(192, 192, 192); font-family: Arial;">cryTools: AnimTools: Batch Exporter Rollout</h1>
<h2 style="font-family: Arial; background-color: rgb(192, 192, 192);"> Main Dialog Batch Export Rollout </h2>
<p style="font-family: Arial;">
<img src="http://server41/twiki/pub/AssetCreation/CryAnimDialogBatchExport/dialogBatchExport.jpg" style="margin-right: 2em;" border="0">
</p>
<h2 style="font-family: Arial;"><img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-orange" src="images/atools/led-orange.gif" align="top"> <strong>Input / Output</strong> </h2>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top"> <strong>Source</strong> <br>
Prompts a open folder dialog where you can choose location of files you want to process.<br>
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>PreExport</strong> <br>
Opens a dialog to define a pre-export script which will be executed
before the actually export begins or after the check is done.<br>
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>Export</strong> <br>
Prompts a open folder dialog where you can choose the location to export the files to.<br>
</p>
<p style="font-family: Arial;">
</p>
<h2 style="font-family: Arial;"><img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-orange" src="images/atools/led-orange.gif" align="top"> <strong>Check / Export</strong><br>
</h2>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top"><span style="font-family: Arial;">&nbsp;</span><strong style="font-family: Arial;">Count</strong><span style="font-family: Arial;"> </span><br style="font-family: Arial;">
<span style="font-family: Arial;">
Counter of files in the file list or how many files are selected.</span><br style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top"><span style="font-family: Arial;">&nbsp;</span><strong style="font-family: Arial;">Keep Sub Folders</strong><span style="font-family: Arial;"> </span><br style="font-family: Arial;">
<span style="font-family: Arial;">
If checked, the sub folder structure will be used, otherwise all files in the list will be exported into the Export folder.</span><br style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top"><span style="font-family: Arial;">&nbsp;</span><strong style="font-family: Arial;">Config</strong><span style="font-family: Arial;"> </span><br>
Opens a dialog to config the bone detection.
(<strong><a href="http://server41/twiki/bin/view/AssetCreation/CryAnimTutorialsBoneDetection" class="twikiLink">How to maintain bone detection</a></strong>) <br>
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>Detect</strong> <br>
If checked, automatically chooses the bone specified in Config with the filename.<br>
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>+</strong> <br>
If checked, shows only bone detected files.<br>
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>-</strong> <br>
If checked, shows only non-bone detected files.<br>
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>CHECK</strong> <br>
Processes the files list, without exporting (opening the file, checking
if the file can be exported and running the pre-export script if
defined).<br>
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;<strong>BATCH</strong> <br>
Processes the files list (opening the file, checking if the file can be
exported, running the pre-export script if defined and export the file).</p>
<p style="font-family: Arial;"></p>
<p style="font-family: Arial;"></p>
<span style="font-family: Arial;">
</span>
</body>
</html>
+152
View File
@@ -0,0 +1,152 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<title>cryTools: Control Panel</title>
</head>
<body style="color: rgb(0, 0, 0);" alink="#ee0000" link="#0000ee" vlink="#551a8b">
<h1 style="background-color: rgb(192, 192, 192); font-family: Arial;">cryTools: Control Panel </h1>
<span style="font-family: Arial;"></span>
<h2 style="background-color: rgb(192, 192, 192); font-family: Arial;">
<img alt="Control Panel Rollout" src="images/controlpanel.png" style="border: 0px solid ; margin-right: 1em; width: 356px; height: 625px; float: left;">&nbsp;General Overview<br>
</h2>
<span style="font-family: Arial;">The control panel is a place where
you can set personal preferences specific to your workflow. It is
broken up into four main sections Art, Animation, Misc, and Debug Info.<br>
</span>
<h2 style="background-color: rgb(192, 192, 192);"><span style="font-family: Arial;">Art</span></h2>
<span style="font-family: Arial;"><span style="font-weight: bold;">Check for Crytek shader at export [Default: ON]</span><br>
With this enabled, when the export button is pressed in the cryExport
utility rollout, cryTools will loop through all objects that are in the
current export list and check all of their materials and submaterials.
cryTools will generate a warning if it finds any non 'Crytek' materials
or any object with no defined material.<br>
<br>
<span style="font-weight: bold;">Re-parent biped twist bones at export [Default: ON]</span><br>
Biped forearm twist bones are parented to the upper arm for some weird
reason. They still work if you reparent them to the lower arm, but on
load they are always reparented to the upper arm. With this enabled,
the twist bones will be re-parented to the lower arm on character
export. This way they do not receive weird double transforms ingame.<br>
<span style="font-weight: bold; color: rgb(255, 0, 0);">Update:</span> This also reparents upper arm twists now<br>
<br>
</span>
<h2 style="background-color: rgb(192, 192, 192);"><span style="font-family: Arial;">Animation</span></h2>
<span style="font-family: Arial;"><span style="font-weight: bold;">Load Old Animation tools</span><br>
When checked, the original <span style="font-weight: bold;">CryAnimTools</span> will load when <span style="font-weight: bold;">'CryAnimation'</span> is slected from the drop down.</span><br>
<span style="font-family: Arial;"><span style="font-weight: bold;"><br>
Do not unparent $weapon_bone children at export [Default: OFF]</span><br>
I merged our 'animation rigs' into the main character Max file, because
any time the main character was updated, then the animation rig would
need to be updated. Now we animate on the actual character Max file.
Because of this, there are guns parented to the arms that you can cycle
through from within the Animation Tools. It is important that these
guns not export in the hierarchy. With this option checked, the weapon
objects will be exported, as skeletal nodes.<br>
<br>
<span style="font-weight: bold; color: rgb(255, 0, 0);">Update:</span> The following have been removed, but the commented code exists<br>
<span style="font-weight: bold; color: rgb(153, 153, 153);">Auto-update pose collections on max file open [Default: OFF]</span><br style="color: rgb(153, 153, 153);">
<span style="color: rgb(153, 153, 153);">With this enabled, cryTools
will auto-update pose collections when you load a file. This is useful
when an animation team has a pose collection file somewhere on the
network or in P4. You can also click 'Get Latest P4' to manually sync
to the latest pose collections from the control panel without
restarting.</span><br style="color: rgb(153, 153, 153);">
<br style="color: rgb(153, 153, 153);">
<span style="font-weight: bold; color: rgb(153, 153, 153);">Sync pose collections at p4 start [Default: OFF]</span><br style="color: rgb(153, 153, 153);">
<span style="color: rgb(153, 153, 153);">In addition to the above, each
animator can have their pose collections updated from a P4 location
every time he opens a maxfile.</span><br>
<br>
</span>
<h2 style="background-color: rgb(192, 192, 192);"><span style="font-family: Arial;">Misc</span></h2>
<span style="font-family: Arial;"><span style="font-weight: bold;">Suppress all export warnings [Default: OFF]</span><br>
This is for advanced users. It disabled all warnings for shader
problems, hierarchy issues; everything. You really shouldn't enable
this unless working on some test items and getting annoyed with export
warnings.<br>
<br>
<span style="font-weight: bold;">Show splash screen [Default: ON]</span><br>
You can disable the splash screen here. It is a good idea to leave the
splash screen up as it has some information like your local
build/latest build and the version number, it is also up only during
the time it takes to load/initialize the tools. The cryTools splash
screen can be closed immediately by clicking anywhere on the screen,
you can also click menu items and things while it is up.<br>
<br>
</span>
<h2 style="background-color: rgb(192, 192, 192);"><span style="font-family: Arial;">Update/Uninstall/Rollback</span></h2>
<span style="font-family: Arial;"><span style="font-weight: bold;">Reload/Install Updates From Your Local Build</span><br>
This will reload cryTools, this is useful if you have copied over new
scripts, or updated your scripts via PerForce, AlienBrain, etc...<br>
<br>
<span style="font-weight: bold;">Retreive Latest Tools/Sync</span><br>
When this is pressed, it uses the selected option to look for tools
updates. You need to set up the script to work with your P4 or
AlienBrain servers.<br>
<br>
<span style="font-weight: bold;">Rollback Exporter</span><br>
This rolls back to the last version of the exporter<br>
<br>
<span style="font-weight: bold;">Uninstall Crytools</span><br>
This uninstalls the scripts<br>
<br>
<span style="font-weight: bold;">LOCAL/LATEST Build</span><br>
This shows the local and latest builds. The latest build is queried
from a build server, you will have to point it at your server.<br>
</span>
<h2 style="background-color: rgb(192, 192, 192);"><span style="font-family: Arial;">Debug Info</span></h2>
<span style="font-family: Arial;"><span style="font-weight: bold;">dump/remove callbacks</span><br>
If you click 'dump callbacks', all the callbacks cryTools has
registered will be echoed to the Maxscript Listener. If you click
'remove callbacks' nothing will happen, you have to right click it to
remove all callbacks cryTools has set. To reload the callbacks, you
must restart max, click 'Check/Install updates from your latest build'
in updateTools, or open the tools that registered the callback (like
riggingTools or animationTools)<br>
<br>
<span style="font-weight: bold;">dump crytek global vars</span><br>
This will dump any global variables set by cryTools. Crytools uses a global struct now and does not set as many global vars<br>
<br>
<span style="font-weight: bold;">Various debug info</span><br>
Here you can check for problems. I echo out a lot of the vars that,
when missing or improperly set, can cause cryTools not to work or load.
I will quickly go through them:<br>
<br>
<span style="font-weight: bold;">MAX VERSION:</span> Self explanatory<br>
<br>
<span style="font-weight: bold;">MAX PATH:</span> The 3D Studio Max install path<br>
<br>
<span style="font-weight: bold;">PROJECT:</span> Internally, this is
taken from your P4 root folder name. At Crytek, we use a naming scheme
like "Game02", "Game04", etc. This allows cryTools to be largely
project independent when syncing tools and things on P4.<br>
<br>
<span style="font-weight: bold;">DOMAIN:</span> This is returned from a
cryTools function that returns the domain of the network the cryTools
users machine is on. This is useful when creating internal tools, it is
not secure, but it keeps debug stuff and hacks out of the UI.<br>
<br>
<span style="font-weight: bold;">BUILD PATH: </span>This is the location of the build on the users local machine.<br>
<br>
<span style="font-weight: bold;">CRYEXPORT.INI PATH: </span>The location of the cryexport.ini file<br>
<br>
<span style="font-weight: bold;">CRYTOOLS.INI PATH: </span>The location of the crytools.ini file where the control panel settings and various other things are stored.<br>
<br>
<span style="font-weight: bold;">EDITOR PATH:</span> The local path to the editor.<br>
<br>
<span style="font-weight: bold;">ROLLBACK STATUS:</span> If 'true',
cryTools is currently operating in a 'rolled back' state, and will not
attempt to get latest versions of the exporter and tools at max start.
'False' indicates normal operation.<br>
<br>
<span style="font-weight: bold;">LOCAL BUILD #: </span>This is the number of the local build on the users HD.<br>
<br>
<span style="font-weight: bold;">LATEST BUILD #: </span>This is the latest build number on the server (procedural builds)<br>
<br>
<span style="font-weight: bold;">LATEST BUILD ON SERVER: </span>This is the filename of the latest build on the server. <br>
<br>
<br>
</span>
</body>
</html>
+208
View File
@@ -0,0 +1,208 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<title>cryTools: CryAnimTools</title>
</head>
<body style="color: rgb(0, 0, 0);" alink="#ee0000" link="#0000ee" vlink="#551a8b">
<h1 style="font-family: Arial; background-color: rgb(192, 192, 192);">CryAnimTools&nbsp;</h1>
<span style="font-family: Arial;">(CryAnimTools are old and have been
replaced with animTools, they still exist and are accessible through
the Control Panel. This is mainly for reference and some old tools that
were not merged into animTools)</span>
<p style="font-family: Arial;">
<img alt="CryAnimTools Rollout" src="images/animationTools.png" style="border: 0px solid ; margin-right: 1em; width: 204px; height: 2275px; float: left;">
</p>
<span style="font-family: Arial;"><br>
</span>
<h2 style="background-color: rgb(192, 192, 192);"><span style="font-family: Arial;"><span style="font-weight: bold;">CryPlantKey</span></span></h2>
<span style="font-family: Arial;">CryPlantKey is one of the first
cryTools written, it is used to plant a node (i.e. foot) in a spot
specified by the animator for a given number of frames.<br>
<br>
<span style="font-weight: bold;">Key Type</span><br>
Here you can set the key type of the keys that are generated. You may
choose from any of the three supported Biped key types: Planted,
Sliding, or Free. Checking 'Only for existing' will only overwrite the
existing keys, if this is unchecked the tool will default to one key
per frame.<br>
<br>
<span style="font-weight: bold;">Begin/End (Set Range)</span><br>
You can set a range either by entering a numeric range, or by clicking
the 'begin' and 'end' buttons to dump the current time into the field.<br>
<br>
<span style="font-weight: bold;">Use Begin/End - Use Timeline</span><br>
Upon pressing either of these, the script will run. When 'Use
Begin/End' is pressed, the values entered in the Begin/End fields will
be used, when pressing 'Use Animation Range', the beginning and ending
of the animation range will be used.<br>
<br>
</span>
<h2 style="background-color: rgb(192, 192, 192);"><span style="font-family: Arial;"><span style="font-weight: bold;">BipedTools</span></span></h2>
<span style="font-family: Arial;">The BipedTools are an extremely user friendly front end to more laborious Biped-related tasks.<br>
<br style="font-weight: bold;">
<span style="font-weight: bold;">Biped Selection</span><br>
At the top you see this drop down menu where you select the biped you
are currently wanting to manipulate. This list is set at the time you
open the Animation tools, if you have imported other biped and would
like to update/refresh the list, click the arrow: &lt; . (less than)<br>
<br>
<span style="font-weight: bold;">Bip Motion Menu</span><br>
This takes you to the motion menu tab for the current biped loaded in the tools.<br>
<br>
<span style="font-weight: bold;">LoadBIP</span><br>
An improved (resizable) BIP file requester for loading animations.<br>
<br>
<span style="font-weight: bold;">Figure Mode / Hide Biped [Toggles]</span><br>
These two checkbuttons are toggles, meaning that when you press 'Figure
Mode' it stays hilighted for the duration that the characte is in
figure mode. 'Hide Biped is one of the most used buttons in the entire
Aniamtion toolset; it just hides the entire skeleton.<br>
<br>
<span style="font-weight: bold;">In Place Mode [Toggle]</span><br>
Clikcing the 'In place Mode' toggle will turn on In Place Mode, which
constrains the motion on X and Y, however, pressing 'X or Y will
constrain the motion to only the selected axis.<br>
<br>
<span style="font-weight: bold;">Select Only Biped Bones</span><br>
Selects the original biped skeleton, and ignores any extra helper bones
that have been added. Useful when you want to load up a pose or do some
motion panel operation to all the original biped bones. (motion panel
biped options will not load if a single non-original biped bone is in
the current selection)<br>
<br>
<span style="font-weight: bold;">Clamp Timeline</span><br>
This clamps the timeline at the current key, if you click 'At Last Key'
it will clamp the timeline at the last keyframe of the currently
selected object.<br>
<br>
<span style="font-weight: bold;">Reverse Animation to FBX Skeleton</span><br>
This will generate a skeleton with our internal FBX naming convention
and it will reverse the current animation onto that skeleton. Just give
the script the start and end frames of the animation you would like to
reverse.<br>
<br>
<span style="font-weight: bold;">Attach Biped to FBX Skeleton / Delete FBX Skeleton</span><br>
This will copy the animation of an imported FBX skeleton with the
correct naming convention to the currently loaded biped. 'Delete FBX
Skeleton' removes the FBX skeleton.<br>
<br>
<span style="font-weight: bold;">Collections</span><br>
This loads Biped pose collections and allows you to manually sync to the latest files from Perforce.<br>
<br>
<span style="font-weight: bold;">Crysis Rig Navigator</span><br>
This acts as a synaptic rig element selector, much like what people are
used to in Maya, XSI, and MotionBuilder. You can click on part of the
rig to select it. When working with multiple bipeds in the same scene,
remember to select the biped you want to manipulate at the top of the
BipedTools rollout.<br>
<br>
</span>
<h2 style="background-color: rgb(192, 192, 192);"><span style="font-family: Arial;">Internal Tools/Fixes</span></h2>
<span style="font-family: Arial;"><span style="font-weight: bold;">Animation Setup</span><br>
This drop down menu offers you the choices of none, pistol, rifle, mg,
and law. Upon selecting a weapon, it appears in the character's hand<br>
<br>
<span style="font-weight: bold;">Add Trooper Weapon Bone</span><br>
This adds a correctly oriented trooper weapon bone into the trooper
hierarchy. It was made when Antoine needed to iterate through all
trooper animations and add a central weapon bone.<br>
<br>
<span style="font-weight: bold;">XAF Import/Export</span><br>
This is an XAF importer/exporter for non human characters. The idea was
to save XML Animation files (XAF) for all non human characters like we
do BIPs for humans. I implemented it for the trooper, but Animation
never used it and it does not work for other characters currently.<br>
<br>
</span>
<h2 style="background-color: rgb(192, 192, 192);"><span style="font-family: Arial;">GeneralTools</span></h2>
<span style="font-family: Arial;"><span style="font-weight: bold;">Change Rotation to TCB</span><br>
This iterates through all selected objects and changes their rotation
controllers to TCB. It really comes in handy when trying to export
vehicles into CryEngine as CGAs (all moving parts need to be TCB).<br>
<br>
<span style="font-weight: bold;">Bake Motion to Keys</span><br>
Bakes all motion on an object to dense keys (1 key/frame)<br>
<br>
</span>
<h2 style="background-color: rgb(192, 192, 192);"><span style="font-family: Arial;">RangeView</span></h2>
<span style="font-family: Arial;">This drop down menu is populated by
Animator-created 'time-tagged' sequences. It reads in the names and
allows you to select individual sequences. When a sequence is selected,
the timeline beginning/end is set the the time-tagged range's
beginning/ending.<br>
<br>
</span>
<h2 style="background-color: rgb(192, 192, 192);"><span style="font-family: Arial;">MirrorArms</span></h2>
<span style="font-family: Arial;">When you press 'Mirror' the animation
from one arm to the other will be mirrored for the frames currently in
the timeline. 'copy/mirror root anim' will also copy the root and
reverse it's animation. Keep in mind that you need to be using the
Crysis first person arms rig, and also that these newly created
keyframes might not tween correctly to other keys outside of the
animation range, so you might want to do all keys at once.<br>
<br>
</span>
<h2 style="background-color: rgb(192, 192, 192);"><span style="font-family: Arial;">Batch Export</span></h2>
<span style="font-family: Arial;">The Batch Exporter was created to
manipulate many animations at once, and make sweeping changes in
animation data. You can do things like add new procedurally driven
bones to a hierarchy then batch export these bones/animation to 3,000
animations. You could also flip every animation 180 deg on the Z axis.
The exporter works by loading many BIP animations onto a currently
loaded Biped, and exporting them one by one. This makes it very
flexible, and allows you to generate sweeping changes to the animation
dataset with relative ease.<br>
<br>
<span style="font-weight: bold;">Specify Modes</span><br>
The idea was that here you couls specify modes, switching from a BIP
batch exporter to an XAF batch exporter. That idea has currently been
put on hold, since XAF was not switched to as a standard animation
format for non-human characters.<br>
<br>
<span style="font-weight: bold;">Batch Folder / Save Folder</span><br>
Here you set the Batch Folder that has trhe BIP files you would like to
batch process/export, you also select the Save Folder. Upon selecting
the Batch Folder the Export button should enable with the number of bip
files there are present to be batched.<br>
<br>
<span style="font-weight: bold;">Batching Mutliple Folders</span><br>
If you check the box next to Multiple Folders, the Add to list button
should become active. If you press this, your current Batch/Save
folders will be saved in a que below (Folders to Process in List:). You
can save your que and load old queues you have made.<br>
<br>
<span style="font-weight: bold;">Generate CAL File</span><br>
This would generate a CAL file for the animations you were batch
exporting, making it easier to test them and also would make it so you
did not need to dump those new animations directly into your build. The
CAL file system has changed a lot in the past months, so this may no
longer work.<br>
<br>
<span style="font-weight: bold;">Log to File</span><br>
With this enabled, cryTools will generate a log file to the folder in which you are exporting. Here is an example:<br>
7/20/2006 12:38:22 PM --- Exporting combat_blinded_nw_01<br>
7/20/2006 12:38:30 PM --- Exporting combat_blinded_pistol_01<br>
7/20/2006 12:38:40 PM --- Exporting combat_blinded_rifle_01<br>
7/20/2006 12:38:52 PM --- Exporting combat_callBase_01<br>
<br>
<span style="font-weight: bold;">Flip on Z Axis</span><br>
This will flip all exported animation on the Z axis. This was used to
convert all out animations from facing -Y direction to +Y direction.<br>
<br>
<span style="font-weight: bold;">Export RAW CAF Data</span><br>
This is somewhat deprecated. It used to export RAW CAF animation data,
but now we use a different RAW format and compression scheme. This
option however, is still here for testing and backwards compatibility.<br>
<br>
<span style="font-weight: bold;">Save BIP/XAF Files</span><br>
With this option enabled, the Batch Exporter will also save the BIP
file when it exports. If you check 'Only Save, No Export, the Batch
Exporter becomes a kind of "Batch Saver" that can step through folders
of BIP files and load them onto a new skeleton and resave them with new
bones or other changes. <br>
<br>
</span>
</body>
</html>
+321
View File
@@ -0,0 +1,321 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<title>cryTools: CryArtistTools</title>
</head>
<body style="color: rgb(0, 0, 0);" alink="#ee0000" link="#0000ee" vlink="#551a8b">
<h1 style="background-color: rgb(192, 192, 192); font-family: Arial;">CryArtistTools </h1>
<p style="font-family: Arial;">
<img alt="CryArtistTools Rollout" src="images/artistTools.png" style="border: 0px solid ; margin-right: 1em; width: 204px; height: 1144px; float: left;">
</p>
<h2 style="background-color: rgb(192, 192, 192); font-family: Arial;">Artist Tools</h2>
<h3 style="font-family: Arial; background-color: rgb(225, 225, 225);">General Tools</h3>
<span style="font-weight: bold; font-family: Arial;">centerPivot</span><br style="font-family: Arial;">
<span style="font-family: Arial;">This will cycle through all selected objects and center the pivot of each to the center of the objects respective bounding box.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-weight: bold; font-family: Arial;">preserveUVs</span><br style="font-family: Arial;">
<span style="font-family: Arial;">This was a request, which turns on and off 'preserve UVs' when clicked. It has also been exposed as a key binding in cryKeys.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-weight: bold; font-family: Arial;">resetXformCollapse</span><span style="font-family: Arial;"><br>
Upon clicking this, cryTools will
loop through all currently selected objects and quickly resetXform and
then collapse each, one by one.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-weight: bold; font-family: Arial;">Copy/Paste Modifier</span><br style="font-family: Arial;">
<span style="font-family: Arial;">When clicking Copy Modifier, the
current modifier will be copied and stored in memory. It can then be
pasted to any number of like objects. This is useful for changing a
base mesh and applying the change to many other meshes with the same
point index (useful for heads/morph targets)</span><br style="font-family: Arial;">
<h3 style="font-family: Arial; background-color: rgb(225, 225, 225);">UV Tools</h3>
<span style="font-family: Arial;">By pressing ' &lt; ' or reloading
Artist Tools, it will grab the UV info from the currently selected
object. You can now use the following buttons to manipulate the UV
coordinates. There is the ability to scale selected points to 0 on the
X and Y, or X+Y, and to rotate 90 degrees clockwise and
counterclockwise. <br>
<br>
<br>
</span>
<h2 style="background-color: rgb(192, 192, 192); font-family: Arial;">Diagnostics</h2>
<h3 style="font-family: Arial; background-color: rgb(225, 225, 225);">polyStats</h3>
<span style="font-family: Arial;">polyStats gives realtime face, edge and vert data for any selected object.<br>
</span>
<h2 style="background-color: rgb(192, 192, 192); font-family: Arial;">CGF Metadata Manager</h2>
<span style="font-family: Arial;">
This tool is used to set-up breakable/destroyable objects. The data is
set and stored in the objects' <span style="font-weight: bold;">User Defined Properties</span> (UDP).</span><strong style="font-family: Arial;"><span style="text-decoration: underline;"><br>
</span></strong>
<h3 style="background-color: rgb(225, 225, 225);"><strong style="font-family: Arial;">Object Properties</strong></h3>
<p style="font-family: Arial;"><strong>Mass</strong> (render geometry property)<br>
Mass defines the weight of an object based on real world physics. A value of <span style="font-weight: bold;">0</span> sets the object to "unmovable". This is used on the basement of
a house for example or the sign pole which should not be movable and
always stay in the original position. When used in brushes and Geom
Entities, this is the final part's mass. When used in regular Entities,
all parts masses are scaled so that their total mass gives the mass
specified in the entity properties.<strong></strong>
</p>
<p style="font-family: Arial;">
<strong>Density</strong><br>
The engine automatically calculates the mass for an object based on the density and the bounding box of an object.
Can be used alternatively to <em>mass</em>.
</p>
<span style="font-family: Arial;">
To set the Mass/Density of an object, check the appropriate checkbox
and set the value. To &nbsp;apply the setting click "Apply Settings to
Selected" button. If wishing to scale the mass of multiple objects with
different masses, select those objects, set the scale value desired,
and press "Update Data" button.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;">
A forced primitve allows a basic shape be defined for the object based
on it's bounding box. Check the desired shape, and apply settings.<br>
<br>
</span><strong style="font-family: Arial; color: rgb(255, 0, 0);">TechNote:</strong><span style="font-family: Arial;"> You must either define this value or </span><em style="font-family: Arial;">density</em><span style="font-family: Arial;"> to ensure the simulation is working correctly.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<h3 style="background-color: rgb(225, 225, 225);"><span style="font-weight: bold; font-family: Arial;"><span style="font-family: Arial;">Joint Properties</span></span><span style="font-weight: bold; text-decoration: underline; font-family: Arial;"></span></h3>
<span style="font-weight: bold; text-decoration: underline; font-family: Arial;">
<span style="text-decoration: underline;"><span style="font-weight: bold;"><span style="text-decoration: underline;"><span style="font-weight: bold;"></span></span></span></span></span><span style="font-family: Arial;">Only
Helpers/Dummies can be joints. Joints hold together pieces of the
breakable objects and define how much force (and what kind of force) is
necessary to break the objects from their joints.</span><span style="font-family: Arial;">
To Set the joint properties enable joint properties and set the needed values for the properties desired.</span>
<p style="font-family: Arial;">
<strong>Limit</strong> - limit is a general value for several different kind of forces applied
to the joint. It contains a combination of the values below.<br>
<strong style="font-family: Arial; color: rgb(255, 0, 0);"></strong></p>
<p style="font-family: Arial;"><strong style="font-family: Arial; color: rgb(255, 0, 0);">TechNote:</strong><span style="font-family: Arial;">&nbsp;</span>This value needs to be defined, otherwise the
simulation will not work correctly.
Crysis Example values: 100 - 500 can be broken by a bullet; 10000 can
be broken by the impact of a driving vehicle or a big explosion.
</p>
<p style="font-family: Arial;">
The following values are optional and are used to fine tune the "limit" settings.<br>
<strong></strong></p>
<p style="font-family: Arial;"><strong>Bend</strong> - maximum torque around an axis perpendicular to the normal.
</p>
<p style="font-family: Arial;">
<strong>Twist</strong> - maximum torque around the normal
</p>
<p style="font-family: Arial;">
<strong>Pull</strong> - maximum force
applied to the joint&rsquo;s 1st object against the joint normal (the parts
are "pulled together" as a reaction to external forces pulling them
apart)
</p>
<p style="font-family: Arial;">
<strong>Push</strong> - maximum force
applied to the joint's 1st object (i.e. the one whose name is listed
first in the joint's name, or if the names were not specified, the
object the joint's z axis points towards) along the joint normal; joint
normal is the joint's z axis, so for this value to actually be "push
apart" (as a reaction to external forces pressing the parts together),
this axis must be directed inside the 1st object
</p>
<p style="font-family: Arial;">
<strong>Shift</strong> - maximum force in the direction perpendicular to normal
</p>
<span style="font-family: Arial;"><span style="font-weight: bold;">
</span></span><span style="font-weight: bold; font-family: Arial; color: rgb(255, 0, 0);">TechNote:</span><span style="font-family: Arial;"> Remember to press '<span style="font-weight: bold;">Apply Settings' </span>after you have made changes to an objects properties.</span><br style="font-family: Arial;">
<br style="font-family: Arial; font-weight: bold;">
<span style="font-family: Arial;"><span style="font-weight: bold;">Scale Properties</span> - To scale the joint properties, select the joints that you need to
scale, check the scale properties checkbox, and check the properties
which you desire to scale. Set the scale value and apply settings to
the objects.<br>
<br>
</span>
<h3 style="background-color: rgb(225, 225, 225);"><span style="font-weight: bold; font-family: Arial;"><span style="font-family: Arial;">Destroyable Objects</span></span></h3>
<span style="font-family: Arial;"></span><span style="font-weight: bold; font-family: Arial; color: rgb(255, 0, 0);">TechNote: </span><span style="font-family: Arial; color: rgb(255, 0, 0);"><span style="color: rgb(0, 0, 0);">please keep in mind that Destroyable objects should also have Mass/Density<br>
<br>
</span></span><span style="font-family: Arial;"><span style="font-weight: bold;">Main</span>: This is the option to set the submodel's name to be "Main" so that it becomes the </span><span style="font-family: Arial;">(only) pre-destruction submodel</span><span style="font-family: Arial;">.<br>
</span> <code style="font-family: Arial; font-weight: bold;"><br>
Remain</code><span style="font-family: Arial;">: This sets the object's name to "Remain" so it becomes the permanent post-destruction submodel which replaces </span><code style="font-family: Arial;">Main</code><span style="font-family: Arial;">.</span><br>
<br>
<span style="font-family: Arial;"><span style="font-weight: bold;">generic</span> = count: Causes the piece to be spawned
multiple times in random locations throughout the original model. The
count specifies how many times it is spawned. There can be multiple
generic pieces.<br>
<br>
</span><code style="font-family: Arial; font-weight: bold;">entity</code><span style="font-family: Arial;">: If object is&nbsp;set to entity, the piece is spawned as a persistent entity. Otherwise, it is spawned as a particle.<br>
<br>
</span><code style="font-family: Arial; font-weight: bold;">rotaxes</code><span style="font-family: Arial;"> = </span><em style="font-family: Arial;">axes</em><span style="font-family: Arial;">: For generic pieces, this generates random rotation. Set this to the axis letter(s), for example, </span><code style="font-family: Arial;">z</code><span style="font-family: Arial;"> or </span><code style="font-family: Arial;">xyz</code><span style="font-family: Arial;">,
to cause the piece to rotate randomly about the selected local
axis/axes. If not set, the pieces will spawn in their authored rotation.<br>
<br>
</span><code style="font-family: Arial; font-weight: bold;">sizevar</code><span style="font-family: Arial;"><span style="font-weight: bold;"> </span>= </span><em style="font-family: Arial;">var</em><span style="font-family: Arial;"> : For generic pieces, this randomises the size of each piece, by a scale of 1-var to 1+var.</span><br>
<span style="font-weight: bold; font-family: Arial; color: rgb(255, 0, 0);"></span><span style="font-family: Arial; color: rgb(255, 0, 0);"><span style="color: rgb(0, 0, 0);"></span></span><span style="font-family: Arial; color: rgb(255, 0, 0);"><span style="color: rgb(0, 0, 0);"></span></span><span style="font-family: Arial;"></span><br>
<span style="font-family: Arial;"><br>
</span><span style="font-family: Arial;">
<br>
</span>
</body>
</html>
+259
View File
@@ -0,0 +1,259 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<title>cryTools: CryMorphTools</title>
</head>
<body style="color: rgb(0, 0, 0);" alink="#ee0000" link="#0000ee" vlink="#551a8b">
<h1 style="background-color: rgb(192, 192, 192); font-family: Arial;">cryTools:
CryMorphTools </h1>
<span style="font-family: Arial;"></span>
<p style="font-family: Arial;"><br>
</p>
<h2 style="background-color: rgb(192, 192, 192); font-family: Arial;">Tutorials</h2>
<span style="font-family: Arial;">Here are some tutorials
on using the MorphTools:<br>
<br>
<a href="MirrorMorphs.html">Mirroring Morphs and
Deformation</a> (without altering point index)<br>
<br>
<a href="TransferMorphs.html">Transferring Morphs Between
Characters</a><br>
<br>
<a href="LODMorphs.html">Generating Head LODs with Morph
Targets</a><br>
<br>
</span>
<p style="font-family: Arial;"><img alt="morphtools rollout" src="images/morphTools.png" style="border: 0px solid ; margin-right: 1em; width: 204px; height: 1795px; float: left;">
</p>
<h2 style="font-family: Arial; background-color: rgb(192, 192, 192);">
Facial Tools </h2>
<span style="font-family: Arial;">Please refer to the
tutorials above about how to use these tools.
</span>
<p style="font-family: Arial;"><span style="font-weight: bold;">Auto Generation/Extraction</span>
</p>
<span style="font-family: Arial;">
When you press '</span><b style="font-family: Arial;">Load
Morphs from Selected</b><span style="font-family: Arial;">,
the text at the top changes to echo the number of morphs loaded fromt
he selected head/mesh. When using the number of morph targets rigidly
setup for the Crysis pipeline, you can ignore 'dirty output', when you
bake out morphs, they will be arranged by morph set and colored in the
fashion that you are used to. The baked out head meshes will also be
named with their respective morpher name.
</span>
<p style="font-family: Arial;"><b>Enable Dirty Output</b>
- This means that you are exporting a head
or object that does not use the rigid preset structure of the Crysis
facial pipeline. <b>Dirty Output</b> is used when baking
or adding an
arbitrary number of morphs to a selected head or object with a morph
modifier (useful for baking out vertex animation, an example in Crysis
would be the parachute). The morphs created are named using the names
fromt he morph target in the morpher modifier, and they are randomly
colored.</p>
<p style="font-family: Arial;"><span style="font-weight: bold;">Organize (Align to helpers)</span>
-
will move the heads created to artist specified locations, these
locations are marked by helper dummies with the morph name prefixed by
&lsquo;<span style="font-weight: bold;">Dummy_</span>&rsquo;.
The overflow (targets baked out that have no corresponding helper) will
default to a row up top, like the &lsquo;dirty&rsquo; output
mode.
</p>
<p style="font-family: Arial;">
<b>New Layer:</b> - Enter text defining the name of the
layer you would like the morphs baked to.
</p>
<p style="font-family: Arial;">
<b>Add Selected Morphs to Picked</b> - This will ass all
selected morph targets to your picked head. The morphs will be named
after the meshes that created them.</p>
<p style="font-family: Arial;"><span style="font-weight: bold;">Add organized morphs to head</span>
- will dump all the morphs you created (even overflow) to a new head</p>
<p style="font-family: Arial;"><span style="font-weight: bold;">Delete Faces from Targets</span>
- You
can load a selection of faces and then delete those same faces from any
number of selected objects. All objects must share the same point
index. Useful for deleting faces on multiple heads. (Used in Crysis to
remove the NK heads, but allow eye animation to be played inside the
Asian Nanosuit helmet.)
</p>
<span style="font-family: Arial;"></span>
<p style="font-family: Arial;"><span style="font-weight: bold;">Mirror Eye Animation </span>-
This
will mirror the procedural eye calibration animation from Left to Right
or Right to Left. This animation is used to bake out eye deformation
targets that are later procedurally driven by look IK. The bone eye rig
must be present in the scene to use this tool.
</p>
<span style="font-family: Arial;"></span>
<p style="font-family: Arial;"><font color="#ff0000"><span style="font-weight: bold;">Tech Note:</span> </font>Using
this and many other
facial tools (like non-dirty output above) requires strict adherence to
the CryEngine2 Facial Pipeline, these eye bones have specific names and
those names are used to locate and mirror their animation.
</p>
<p style="font-family: Arial;">
<span style="font-weight: bold;">Morph Transfer</span>
- This is used to transfer morphs between heads with unlike topologies/
point indices.</p>
<span style="font-family: Arial;"></span><font style="font-family: Arial;" color="#808000">
</font>
<h2 style="font-family: Arial; background-color: rgb(192, 192, 192);">Sync-Collapse
by Location</h2>
<p style="font-family: Arial;">
This tool collapses points by location instead of point index, useful
for creating head LODs and loading those collapsed point sets onto
other heads. Unfortunately, it is no longer supported. Though the code
is there if you have the need and want to check it out. <a href="images/syncLoc.jpg" target="blank">Here</a> is an image
explaining the basic concept, and <a href="images/syncLoc2.jpg" target="blank">here</a>
is what the marking looks like.<big><font size="2"><big><span style="font-size: 10pt;"></span></big></font></big><br>
<span style="font-weight: bold;"></span><br>
<span style="font-weight: bold;">Hide Collapsed</span>
- will hide the points you collapse as you go</p>
<p style="font-family: Arial;"><span style="font-weight: bold;">Collapse Variations as I Work </span>-
will apply your collapse to all head variations as you work</p>
<p style="font-family: Arial;"><span style="font-weight: bold;">Mark Collapased Verts</span>
- will mark the verts you have collapsed on all the head variations<br>
</p>
<p style="font-family: Arial;"><span style="font-weight: bold;">Here is the basic workflow:</span><br>
1)&nbsp;&nbsp; Select the main head you will model on and click
&lsquo;<span style="font-weight: bold;">Select Main</span>&rsquo;<br>
2)&nbsp;&nbsp; You &lsquo;<span style="font-weight: bold;">collapse</span>&rsquo;
verts on the main head (two at a time) to make an LOD, then click
&lsquo;<span style="font-weight: bold;">Save Collapse
Data</span>&rsquo;<br>
3)&nbsp;&nbsp; This then saves an &lsquo;<span style="font-weight: bold;">.i2l</span>&rsquo; file
with your changes.<br>
4)&nbsp;&nbsp; Open a file with other heads (different
character head)<br>
5)&nbsp;&nbsp; Select all the heads and click &lsquo;<span style="font-weight: bold;">Select variations</span>&rsquo;<br>
6)&nbsp;&nbsp; Then click &lsquo;<span style="font-weight: bold;">Load Collapse Data</span>&rsquo;
and select your &lsquo;<span style="font-weight: bold;">.i2l</span>&rsquo;
file<br>
7)&nbsp;&nbsp; Then click &lsquo;<span style="font-weight: bold;">Apply</span>&rsquo;.<br>
<br>
</p>
<h2 style="background-color: rgb(192, 192, 192); font-family: Arial;">Pose-Driven
Morphs</h2>
<h3 style="background-color: rgb(204, 204, 204);"><span style="font-family: Arial;"></span><span style="font-weight: bold; font-family: Arial;"></span><span style="font-family: Arial;"><span style="font-weight: bold;">Head/Neck</span></span></h3>
<p><span style="font-family: Arial;">Pose-driven morphs allow you to
set different &lsquo;pose vectors&rsquo; like &lsquo;look_up&rsquo;,
&lsquo;look_down&rsquo;, &lsquo;look_left&rsquo;,
&lsquo;look_right&rsquo;, and so on. Each of these directions, can be
associated with a morph target, so when a characters head rotates left,
the geometry is cleaned up with a nice morph shape that an artist
sculpted just for that position.<br style="font-family: Arial;">
<span style="font-weight: bold; font-family: Arial;"></span></span></p>
<p style="font-family: Arial;"><font color="#ff0000"><span style="font-weight: bold;">Tech Note:</span>&nbsp;</font>As of right now this only works with Skin. But we have a few heads using the Skin modifier, and we can convert Physique to Skin.<br>
<span style="font-weight: bold;"></span></p>
<p style="font-family: Arial;"><span style="font-weight: bold;">Usage:</span> First you click &lsquo;<span style="font-weight: bold;">Select Character Head</span>&rsquo; which will then change to HeadName + &lsquo;Head Loaded<br>
When you select a pose vector, the &lsquo;<span style="font-weight: bold;">Create Pose Shape</span>&rsquo;
button now becomes enabled if a pose shape associated with this vector
is not already present. When you click this button it will make a head
snapshot in the position of the vector. Note that we are defining the
vectors, and that this system does not allow for an arbitrary number of
vectors and associated morphs (in engine). Here is what it looks like
if you click &lsquo;<span style="font-weight: bold;">Create Pose Shape</span>&rsquo; for each vector:</p>
<p><span style="font-family: Arial;"></span><img style="width: 500px; height: 487px;" alt="poseShape" src="images/poseShape.jpg"><span style="font-family: Arial;"><br>
<br>
You can now edit any of these objects. The objects are named: <span style="font-weight: bold;">Look_Up_sculpt</span>,<span style="font-weight: bold;"> Look_Down_sculpt</span>, <span style="font-weight: bold;">Look_Right_sculpt</span>, <span style="font-weight: bold;">Look_Left_sculpt</span>, <span style="font-weight: bold;">Tilt_Left_sculpt</span>, <span style="font-weight: bold;">Tilt_Right_sculpt</span><br>
<br>
If you click &lsquo;<span style="font-weight: bold;">Add Pose Shape To Morpher</span>&rsquo;, the tool will generate a relative shape with all of the skinning data culled from it, and apply it to the loaded head.</span></p>
<p><span style="font-family: Arial;"></span><span style="font-family: Arial;"><span style="font-weight: normal;">The morphs are added to the Morpher in the following channels:</span><br>
<span style="font-weight: bold;">1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Look_Up</span><br style="font-weight: bold;">
<span style="font-weight: bold;">2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Look_Down</span><br style="font-weight: bold;">
<span style="font-weight: bold;">3)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Look_Right</span><br style="font-weight: bold;">
<span style="font-weight: bold;">4)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Look_Left</span><br style="font-weight: bold;">
<span style="font-weight: bold;">5)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Tilt_Left</span><br style="font-weight: bold;">
<span style="font-weight: bold;">6)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Tilt_Right</span><br>
<br>
You can work on a corrective shape, then click &lsquo;<span style="font-weight: bold;">Add Pose Shape To Morpher</span>&rsquo; and it will apply your work over the associated channel so that you can test as you go. If you click &lsquo;<span style="font-weight: bold;">Extract Relative Pose Shape</span>&rsquo;,
the tool will spit out a relative morph shape in the position of the
original character head with your sculpt changes (minus all
skinning-related transformations). That looks like so:</span></p>
<p><span style="font-family: Arial;"></span><img style="width: 498px; height: 265px;" alt="relativePoseShape" src="images/relativePoseShape.png"><span style="font-family: Arial;"><br>
<br>
Above, some points on Look_Left_sculpt have been tweaked to give the
neck the volume lost in the skinned rotation. The relative shape was
extracted and we now see it on top of the Morrison head (pink, and
looks like he has a goiter).</span></p>
<p style="font-weight: bold;"><span style="font-family: Arial;">Facial Editor Setup:</span></p>
<p><span style="font-family: Arial;"></span><img style="width: 646px; height: 387px;" alt="facialEditor" src="images/facialEditor_pose.png"><span style="font-family: Arial;"><br>
<br>
So you just set the targets up like so, ignore the naming here.</span></p>
<h3 style="background-color: rgb(204, 204, 204);"><span style="font-family: Arial;"><span style="font-weight: bold;">Fleshy Eyes (Auto-Created)</span></span></h3>
<p><span style="font-family: Arial;">This works much the same way as
the tool above, but the eye directions drive a special eye rig. The
look directions are already setup, the character just needs to be
imported into this file, you can then refit the bones to his eyes and
weight them.</span></p>
<p><span style="font-family: Arial;">This rig is located in the following path:<br>
<span style="font-weight: bold;">Tools\maxscript\ref\fleshy_eye_rig.max</span></span></p>
<span style="font-weight: bold; font-family: Arial;"></span>
<h2 style="background-color: rgb(192, 192, 192); font-family: Arial;">Baking Tools</h2>
<span style="font-weight: bold; font-family: Arial;">Bake Deformation to Morphs<br>
</span><span style="font-family: Arial;">This is a simple tool, you
load an object that has a deformation applied over time. You then set
the frames in which you want the deformation baked off to morphs, then
the number of morphs you would like it baked to.</span><span style="font-weight: bold; font-family: Arial;"><br>
</span><br>
<h2 style="background-color: rgb(192, 192, 192); font-family: Arial;">Diagnostic Tools</h2>
<span style="font-family: Arial;"></span><span style="font-weight: bold; font-family: Arial;">Morph Manager<br>
</span><span style="font-family: Arial;">This is a better morph rollout that comes from the Max SDK/help docs</span><span style="font-weight: bold; font-family: Arial;"><br>
<br>
Generate Morph List<br>
</span><span style="font-family: Arial;">This spits out a list of the morphs for a current object to a list in the Listener. If '<span style="font-weight: bold;">Include Channel Numbers</span>' is checked, channel numbers will also be printed.</span><span style="font-weight: bold; font-family: Arial;"><br>
</span><span style="font-family: Arial;"></span><span style="font-family: Arial;"></span>
</body>
</html>
+675
View File
@@ -0,0 +1,675 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<title>cryTools: CryRiggingTools</title>
</head>
<body style="color: rgb(0, 0, 0);" alink="#ee0000" link="#0000ee" vlink="#551a8b">
<h1 style="background-color: rgb(192, 192, 192); font-family: Arial;">cryTools: CryRiggingTools </h1>
<span style="font-family: Arial;"></span>
<p style="font-family: Arial;">
<img style="border: 0px solid ; margin-right: 1em; width: 204px; height: 1495px; float: left;" src="images/riggingTools.png" alt="CryRiggingTools Rollout">
</p>
<h2 style="font-family: Arial; background-color: rgb(192, 192, 192);">Internal Tools <small>(some deprecated)</small></h2>
<span style="font-family: Arial;">This tools rollout only shows up if the <span style="font-weight: bold;">DOMAIN</span> is set as <span style="font-weight: bold;">INTERN.CRYTEK.DE</span>
(in the cryTools Control Panel you can see your DOMAIN). These tools
are not secret in any way, they are just quick hacks to make it easier
for artists, animators and TDs to fix issues more easily, and deal with
certain project-specific rigs. </span><span style="font-family: Arial;">Even if you are not in the Crytek offices you can easily enable this code or learn from it, </span><span style="font-family: Arial;">or you can just check out how we patched different problems.<br>
<br>
<span style="font-weight: bold; color: rgb(255, 0, 0);">TechNote:</span> Arrrr, these be untested waters with monsters abound! Wear a helmet.<br style="font-family: Arial;">
</span>
<h3 style="background-color: rgb(225, 225, 225);"><span style="font-family: Arial; font-weight: bold;">Helper Joints</span></h3>
<span style="font-family: Arial;">This primarily deals with the Crysis
NanoSuit helper joints, but also covers knees, breasts, and others.
Hide/Show Helper Joints will hide and unhide the joints. Select Helper
Joints will select them and Unselect Helper Joints will deselect them.</span><br style="font-family: Arial;">
<h3 style="background-color: rgb(225, 225, 225);"><span style="font-family: Arial; font-weight: bold;">File Fixes/Cleanup</span></h3>
<span style="font-family: Arial; font-weight: bold;">Mirror Weapon Bone</span><br style="font-family: Arial;">
<span style="font-family: Arial;">This mirrors and correctly orients
the right weapon bone to the left and renames the new one
alt_weapon_bone01. At the start of Crysis characters only had one
weapon bone (in the right hand), mid way through we decided that we
would add another weapon bone in the left hand.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial; font-weight: bold;">Select New Attachment Points</span><br style="font-family: Arial;">
<span style="font-family: Arial;">When pressed with nothing checked,
this simply selects the new weapon attachment points. With delete\add
checked, it either adds the new attachment points, or if they are
present, deletes them. With hide\show checked it will hide them, or
show them if they are hidden. After a year and a half of Crysis
development, we decided to add many weapon attachment points to every
human character in the game, that's why this tool was written, the
attachment points added are:</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier;">weaponPos_hurricane</span><br style="font-family: Courier;">
<span style="font-family: Courier;">weaponPos_law</span><br style="font-family: Courier;">
<span style="font-family: Courier;">weaponPos_rifle01</span><br style="font-family: Courier;">
<span style="font-family: Courier;">weaponPos_rifle02</span><br style="font-family: Courier;">
<span style="font-family: Courier;">weaponPos_pistol_L_leg</span><br style="font-family: Courier;">
<span style="font-family: Courier;">weaponPos_pistol_R_leg</span><br style="font-family: Courier;">
<span style="font-family: Courier;">weaponPos_pistol_L_hip</span><br style="font-family: Courier;">
<span style="font-family: Courier;">weaponPos_pistol_R_hip</span><br style="font-family: Courier;">
<span style="font-family: Courier;">weaponPos_grenade_L_hip</span><br style="font-family: Courier;">
<span style="font-family: Courier;">weaponPos_grenade_R_hip</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold; color: rgb(255, 0, 0);">TechNote: </span>The weapon positions are loaded from the following max file: <span style="font-weight: bold;">Tools\maxscript\ref\weapon_positions.max</span></span><br style="font-family: Arial;">
<br style="font-family: Arial; font-weight: bold;">
<span style="font-family: Arial; font-weight: bold;">Wire FP Hands Twist Bones</span><br style="font-family: Arial;">
<span style="font-family: Arial;">This wires up and procedurally drives
twist bones on the Crysis first person arms. When we were pretty far
into development we decided twist bones were needed for correct
pronation/supination of the first person arms. The wiring allowed the
current animation assets to drive the twist bones.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial; font-weight: bold;">Comment out Nub Bones</span><br style="font-family: Arial;">
<span style="font-family: Arial;">We have many 'nub' bones in our rigs,
these are old holdovers from the Physique era. A nub bone was used to
create a physique link, the same way some rigs have 'end' bones. When
you press this button, the tool will search your scene for the
following named nodes and replace them thusly:</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier;">Bip01 HeadNub - _Bip01 HeadNub</span><br style="font-family: Courier;">
<span style="font-family: Courier;">Bip01 R Finger0Nub - _Bip01 R Finger0Nub</span><br style="font-family: Courier;">
<span style="font-family: Courier;">Bip01 R Finger1Nub - _Bip01 R Finger1Nub</span><br style="font-family: Courier;">
<span style="font-family: Courier;">Bip01 R Finger2Nub - _Bip01 R Finger2Nub</span><br style="font-family: Courier;">
<span style="font-family: Courier;">Bip01 R Finger3Nub - _Bip01 R Finger3Nub</span><br style="font-family: Courier;">
<span style="font-family: Courier;">Bip01 R Finger4Nub - _Bip01 R Finger4Nub</span><br style="font-family: Courier;">
<span style="font-family: Courier;">Bip01 L Finger0Nub - _Bip01 L Finger0Nub</span><br style="font-family: Courier;">
<span style="font-family: Courier;">Bip01 L Finger1Nub - _Bip01 L Finger1Nub</span><br style="font-family: Courier;">
<span style="font-family: Courier;">Bip01 L Finger2Nub - _Bip01 L Finger2Nub</span><br style="font-family: Courier;">
<span style="font-family: Courier;">Bip01 L Finger3Nub - _Bip01 L Finger3Nub</span><br style="font-family: Courier;">
<span style="font-family: Courier;">Bip01 L Finger4Nub - _Bip01 L Finger4Nub</span><br style="font-family: Courier;">
<span style="font-family: Courier;">Bip01 L Heel - _Bip01 L Heel</span><br style="font-family: Courier;">
<span style="font-family: Courier;">Bip01 R Heel - _Bip01 R Heel</span><br style="font-family: Courier;">
<span style="font-family: Courier;">Bip01LToeHelper - _Bip01LToeHelper</span><br style="font-family: Courier;">
<span style="font-family: Courier;">Bip01RToeHelper - _Bip01RToeHelper</span><br style="font-family: Arial;">
<h3 style="background-color: rgb(225, 225, 225);"><span style="font-family: Arial;">Locomotion Manager</span></h3>
<span style="font-family: Arial; font-weight: bold;">Extract Data to LocoMan Node</span><br style="font-family: Arial;">
<span style="font-family: Arial;">When pressed, this steps through all
the frames of the current biped animation and adds a spedcial 'locoMan'
node that the engine uses to get data about the characters movement and
look direction. The node itself looks like a circle around the hips of
the character (or on the ground) with an arrow breaking through it. The
following check boxes effect how the node is created:</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">Lock to X/Y </span>- This will lock the node to the X or Y axis.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">Ignore Root Rotation</span> - This will disable Use Head for Direction and Use Root for Direction, and the locoman node will not rotate at all.</span><br style="font-family: Arial;">
<br style="font-family: Arial; font-weight: bold;">
<span style="font-family: Arial;"><span style="font-weight: bold;">Restrict to Ground Plane</span> - This will restrict the locoMan node to a Z height of 0, or stick it to the flat ground plane during the animation.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">Use Head for Direction</span>
- This will use the head of the character to point the locoMan node
(you assume that the character is looking the direction you want him to
be facing (useful for most instances the root would mess up (like
prone))</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">Use Root for Direction </span>- This will use the pelvis orientation to generate a locoMan node direction.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">Freeze and Lock </span>- When checked this will freeze and lock the locator, if you want to refine it's motion by hand, do not leave this checked.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial; font-weight: bold;">Remove Unwanted Bones</span><br style="font-family: Arial;">
<span style="font-family: Arial;">When you press this button it will
either remove bones from the Skin modifier of the currently selected
node, or delete them, depending on which checkbox is selected. The
bones removed or deleted are any bones commented out of export ('_'
prefix) and *nub bones.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<h2 style="background-color: rgb(192, 192, 192);"><span style="font-family: Arial;">Rigging Tools</span></h2>
<h3 style="background-color: rgb(225, 225, 225);"><span style="font-family: Arial;">General Tools</span></h3>
<span style="font-family: Arial; font-weight: bold;">matchPivot</span><br style="font-family: Arial;">
<span style="font-family: Arial;">Select two objects. When you press this button it will snap the pivot of the second object to that of the first.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial; font-weight: bold;">zeroOut Rots</span><br style="font-family: Arial;">
<span style="font-family: Arial;">This is a bread and butter tool for
TDs. When you press this, it inserts a point helper in the hierarchy
between the currently selected node and it's parent effectively zeroing
out the selected node's rotations. The new node created has the current
node's name + 'ZERO', example: Bip01 R Hand Phys would have a helper
inserted called Bip01 R Hand PhysZERO. This works for any number of
selected objects.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial; font-weight: bold;">Clamp Timeline at Current/Last</span><br style="font-family: Arial;">
<span style="font-family: Arial;">This clamps the timeline at the
current key, if you click 'At Last Key' it will clamp the timeline at
the last keyframe of the currently selected object.</span><br style="font-family: Arial;">
<h3 style="background-color: rgb(225, 225, 225);"><span style="font-family: Arial;">Biped Tools</span></h3>
<span style="font-family: Arial; font-weight: bold;">Figure Mode / Hide Biped [Toggles]</span><span style="font-family: Arial;"><br>
These two checkbuttons are toggles, meaning that when you press 'Figure
Mode' it stays hilighted for the duration that the characte is in
figure mode. 'Hide Biped is one of the most used buttons in the entire
Aniamtion toolset; it just hides the entire skeleton.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial; font-weight: bold;">Bip Motion Menu</span><span style="font-family: Arial;"><br>
This takes you to the motion menu tab for the current biped loaded in the tools.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial; font-weight: bold;">Select Biped Bones</span><br style="font-family: Arial;">
<span style="font-family: Arial;">Selects the original biped skeleton,
and ignores any extra helper bones that have been added. Useful when
you want to load up a pose or do some motion panel operation to all the
original biped bones. (motion panel biped options will not load if a
single non-original biped bone is in the current selection)</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial; font-weight: bold;">Toggle In Place Mode [Toggle]</span><br style="font-family: Arial;">
<span style="font-family: Arial;">Clikcing the 'In place Mode' toggle
will turn on In Place Mode, which constrains the motion on X and Y,
however, pressing 'X or Y will constrain the motion to only the
selected axis.<br>
</span><br style="font-family: Arial;">
<span style="font-family: Arial; font-weight: bold;">Convert Biped to Bones</span><br style="font-family: Arial;">
<span style="font-family: Arial;">This will essentially snapshot out the biped to normal nodes that are no longer Biped related, yet keeping the hierarchy.</span><br>
<h3 style="background-color: rgb(225, 225, 225);"><span style="font-family: Arial;">Rotate Bind Pose</span></h3>
<span style="font-family: Arial;">This will rotate <span style="font-weight: bold;">Skinned</span>
characters an arbitrary rotation, updating the initial skeletal
positions. It does this by saving the weights, removing skin, rotating
the character and the skel, reset xforming the char, then reapplying
skin and the weights.</span><br style="font-family: Arial;">
<h3 style="background-color: rgb(225, 225, 225);"><span style="font-family: Arial;">Bone Tools</span></h3>
<span style="font-family: Arial; font-weight: bold;">Adjust Bones</span><span style="font-family: Arial;"><br>
</span><span style="font-family: Arial;">This allows you to change the Taper, Width, and Height of any selected bones; great for bone chains, ropes, and tentacles!</span><br style="font-family: Arial;">
<br>
<span style="font-family: Arial; font-weight: bold;">Convert hierarchy to Bones</span><span style="font-family: Arial;"><br>
</span><span style="font-family: Arial;">This will convert a node hierarchy to max bones matching their orientations, positions and hierarchy. '<span style="font-weight: bold;">fromSelected</span>' will generate a hierarchy from the selected node down through all it's children. '<span style="font-weight: bold;">fromRoot</span>' will find the root of the selected node and then convert all it's children to max bones.</span><br style="font-family: Arial;">
<h3 style="background-color: rgb(225, 225, 225);"><span style="font-family: Arial;">Vertex Tools</span></h3>
<span style="font-family: Arial;">This is very much a work in progress.
The exporter cannot currently export arbitrary channels of vertex
colors, but when we can, you can use this to create multiple vertex
color channels per object. ChannelInfo brings up the channel info
spreadsheet so that you can see all the vertex channels. vertexColors
is a toggle that enables/disables vertex color shaded mode. Add
cryChannel to Selected will add a channel named 'cry' to the selected
object, you can store various data here for export.</span><br style="font-family: Arial;">
<br>
<h2 style="background-color: rgb(192, 192, 192);"><span style="font-family: Arial;">Physics Setup</span></h2>
<span style="font-family: Arial; font-weight: bold;">Create Phys Skeleton</span><br style="font-family: Arial;">
<span style="font-family: Arial;">This will create a Phys skeleton from a currently selected skeleton. Just select one node in the skeleton, and press the button.<br>
<br>
</span><span style="font-family: Arial; font-weight: bold;">Create Parent Frame</span><br style="font-family: Arial;">
<span style="font-family: Arial;">This will generate a ParentFrame for
the currently selected node, set it above the node in the hierarchy,
name it appropriately, and hide it.<br>
<br style="font-family: Arial;">
</span>
<h2 style="background-color: rgb(192, 192, 192);"><span style="font-family: Arial;">Diagnostic Tools</span></h2>
<h3 style="background-color: rgb(225, 225, 225);"><span style="font-family: Arial;">General Diagnostics</span></h3>
<span style="font-family: Arial; font-weight: bold;">selectRoot/selectChildren</span><br style="font-family: Arial;">
<span style="font-family: Arial;">With an object selected selectRoot
will traverse the hierarchy and select the root of the object's
hierarchy, whereas selectChildren will select all children of the
current object.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial; font-weight: bold;">numChildren [print]</span><br style="font-family: Arial;">
<span style="font-family: Arial;">When pressed, this will echo out the
number of children of a currently selected node. When 'print' is
checked, it will export the names of all children nodes in an
excel-friendly format. This is very useful for comparing and
troubleshooting two character hierarchies.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial; font-weight: bold;">Compare Two Hierarchies</span><br style="font-family: Arial;">
<span style="font-family: Arial;">Select a root object, then press
'Hierarchy1, then select another root who's hierarchy you would like to
compare and press 'Hierarchy2', any differences in the hierarchies will
be printed to the Listener. The hierarchies are stored as global vars,
so you can click one hierarchy and even load another max file or
character to compare. 'Check Consistency' will check the hierarchy
structure and report any inconsistencies.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<h3 style="background-color: rgb(225, 225, 225);"><span style="font-family: Arial;">Physique Diagnostics <small>(removed, exist but commented)</small></span></h3>
<span style="font-family: Arial;"><span style="font-weight: bold; color: rgb(255, 0, 0);">TechNote:</span> This requires the Iphysique (IPhysique.gup) maxscript exposure from the Autodesk Sparks website</span><span style="font-family: Arial; font-weight: bold;"><br>
<br>
Select Verts that use X bones</span><br style="font-family: Arial;">
<span style="font-family: Arial;">This will select vertices in the selected node that use the input number of bones.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial; font-weight: bold;">Get Bone Count</span><br style="font-family: Arial;">
<span style="font-family: Arial;">This returns the number of bones that
are effecting the selected object's mesh. Not to be confused with the
number of bones a character has. With Character Studio, you need to
have a lot of terminator bones that are often not exported, and have no
weights. This returns all bones weighted to the mesh.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial; font-weight: bold;">Initial Pose</span><br style="font-family: Arial;">
<span style="font-family: Arial;">This shows the initial pose stored by
Physique at the time the physique modifier is applied. Very useful when
troubleshooting exporter issues.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial; font-weight: bold;">Select Verts with 0.0 weight</span><br style="font-family: Arial;">
<span style="font-family: Arial;">Selects vertices where the sum of their weights is 0.0</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<h3 style="background-color: rgb(225, 225, 225);"><span style="font-family: Arial;">Animation Diganostics <small>(removed, exist but commented)</small></span></h3>
<span style="font-family: Arial;">Sometimes you will need to output
character position data or translation data. For instance, AI may want
to know how far a character moves out from behind cover in an
animation, or how high the root is when he is in prone or behind cover.
When you press ?Get Weapon\Root Info? the POS and TRANS boxes will
refresh with data. The POS values are the world Z position (how high)
in cm of the main weapon bone weapon_bone and the root. The TRANS data
is the world translation of the weapon_bone and root during the
animation. You can log this data to a file or to the listener, the
logged info is a bit more detailed. (alt weapon bones or arbitrary
objects) Here is an example of the logged data:</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;">combat_peekIdle_rifle_rightReverse_01</span><br style="font-family: Arial;">
<span style="font-family: Arial;">POSITION</span><br style="font-family: Arial;">
<span style="font-family: Arial;">Frame: 0f (hiding)</span><br style="font-family: Arial;">
<span style="font-family: Arial;">root 88.846977</span><br style="font-family: Arial;">
<span style="font-family: Arial;">weapon_bone 101.276</span><br style="font-family: Arial;">
<span style="font-family: Arial;">alt_weapon_bone01 101.601</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;">Frame: 13f (firing)</span><br style="font-family: Arial;">
<span style="font-family: Arial;">root 88.846977</span><br style="font-family: Arial;">
<span style="font-family: Arial;">weapon_bone 105.406</span><br style="font-family: Arial;">
<span style="font-family: Arial;">alt_weapon_bone01 110.632</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<h3 style="background-color: rgb(225, 225, 225);"><span style="font-family: Arial;">Attachment\Game Diagnostics <small>(deprecated, you should now use Character Editor for creating attachments)</small></span></h3>
<span style="font-family: Arial;">allows us to align Bone Attachments
in Max and export them to Character Editor (which can be extremely
useful for eyes, and constantly changing aliens). Select an object to
be added to the CDF, enter a name for it (this will be the name of the
bone attachment in Character Editor). Press <span style="font-weight: bold;">'Generate CDF Attachment Data'</span> and it will open a dialogue asking <span style="font-weight: bold;">"Is this the bone the CDF is attached to?"</span>. If it is the bone the you want associated in the CDF, click<span style="font-weight: bold;"> 'Yes'</span>, if not, click <span style="font-weight: bold;">'No, Pick Bone'</span>, then click the correct bone in the Max viewport. Example:</span><br style="font-family: Arial;">
<p style="font-family: Arial;">
<img style="width: 306px; height: 75px;" alt="riggind dialog 1" src="images/rigging_dia01.png">
</p>
<p style="font-family: Arial;">
This will bring you to this next dialogue:
</p>
<p style="font-family: Arial;">
<img style="width: 606px; height: 90px;" alt="rigging dialog 2" src="images/rigging_dia02.png">
</p>
<span style="font-family: Arial;">f this is the name of the exported
CDF file, then click 'Yes', if it is not, click ?No, let me choose.?
And a file dialogue will open. Find the CDF and click ok. The script
will now pop open a window with a generated line of XML that you can
paste into your CDF file. Here is an example:<br>
<br>
<span style="font-family: Courier New,Courier,monospace;">
&lt;Attachment AName="Gun"
Binding="J:\Game02\Game\Objects\Characters\Alien\Hunter\face_gun_geo.cdf"
BoneName="face_connector" Position="-0.000635176,-2386.97,643.324"
Rotation="-1,0,0,1.87841" Type="CA_BONE" /&gt;</span><br>
<br>
<span style="font-weight: bold; color: rgb(255, 0, 0);">
TechNote:</span> The bone associated with the CDF is taken from the parent
bone (as it should be). The name and directory are taken from the
geometry name and the max save path used by the exporter. Also, the
quaternion values CharEdit needs are WXYZ. Also keep in mind that the
CDF XML format may change, check to see what this exports vs the
current CDF standards before checking assets with XML generated from
this tool into a build.<br>
<br>
</span>
<h2 style="background-color: rgb(192, 192, 192);"><span style="font-family: Arial;">Smart Object Tools</span></h2>
<span style="font-family: Arial;"><span style="font-weight: bold;">Template Generator\Exporter</span><br>
Select the geometry that you will export as the Smart Object CGF, then click <span style="font-weight: bold;">Get Smart Obj Geometry</span>. The button text will now change to reflect the object's name, and <span style="font-weight: bold;">Add Start\Stop Locations</span> will not be enabled. When you click <span style="font-weight: bold;">Add Start\Stop Locations</span>,
two circles will appear, one red and one green, these denote the start
and stop locations. They are named sequentially following the format '<span style="font-weight: bold;">so_start#</span>' and '<span style="font-weight: bold;">so_end#</span>'. If '<span style="font-weight: bold;">Project on Ground</span>' is checked, in the Editor the two start/stop locations will be projected onto the ground.</span><br>
<br>
<span style="font-family: Arial;">
<span style="font-weight: bold;">Exporting Smart Object Data</span><br>
When you click <span style="font-weight: bold;">'Export Smart Object Data'</span>
is pressed, a window will pop up asking you where you would like to
save the XML file. The file will be named with the name of the Smart
Object (printed in the save dialog). If Flip Around Z Axis is checked,
the XML data exported will be rotated 180 degrees on export. This is
done because all out animations are in -Y yet the engine requires
things in +Y<br>
<br>
</span><span style="font-family: Arial;"></span>
<h2 style="background-color: rgb(192, 192, 192);"><span style="font-family: Arial;">Reactor Tools</span></h2>
<span style="font-family: Arial;"><span style="font-weight: bold;">Add Objs to Rigid Body </span>- Adds all selected objects to a picked rigid body node<br>
<span style="font-weight: bold;">Add Objs to Fracture </span>- Adds all selected objects to a picked fracture node<br>
<br>
</span>
<h2 style="background-color: rgb(192, 192, 192);"><span style="font-family: Arial;">Bake to Bones</span></h2>
<span style="font-family: Arial;"><span style="font-weight: bold;">Bake Deformation to Bones</span><br>
If you select verts in a deforming mesh, this will step through the
timeline and add small bones to every vert and animate them throughout
the timeline.<br>
<br>
</span><span style="font-family: Arial;"><span style="font-weight: bold;">Blend All Bones</span><br>
This will step through all bones in the <span style="font-weight: bold;">Skin</span> modifier and do the '<span style="font-weight: bold;">blend</span>' function. This is used for smothing out baked deformation, such as a flag or cloth.</span><br>
<span style="font-family: Arial;">
<br>
<br>
<br style="font-family: Arial;">
</span><span style="font-family: Arial;"></span>
</body>
</html>
+242
View File
@@ -0,0 +1,242 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<title>cryTools: MorphTools: Generating Head LODs with Morph Targets</title>
</head>
<body style="color: rgb(0, 0, 0);" alink="#ee0000" link="#0000ee" vlink="#551a8b">
<h1 style="background-color: rgb(192, 192, 192); font-family: Arial;">cryTools: MorphTools: Generating Head LODs with Morph Targets</h1>
<p style="font-family: Arial;" class="MsoNormal">In this tutorial I will show you how to transfer your morphs
from LOD0 to LOD1, LOD2 etc.</p>
<p style="font-family: Arial;" class="MsoNormal">Here is my max scene the red head is LOD1 and the black one
LOD0. The orange heads are the morphtargets for LOD0.</p>
<p style="font-family: Arial;" class="MsoNormal"><!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600"
o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f"
stroked="f">
<v:stroke joinstyle="miter"/>
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0"/>
<v:f eqn="sum @0 1 0"/>
<v:f eqn="sum 0 0 @1"/>
<v:f eqn="prod @2 1 2"/>
<v:f eqn="prod @3 21600 pixelWidth"/>
<v:f eqn="prod @3 21600 pixelHeight"/>
<v:f eqn="sum @0 0 1"/>
<v:f eqn="prod @6 1 2"/>
<v:f eqn="prod @7 21600 pixelWidth"/>
<v:f eqn="sum @8 21600 0"/>
<v:f eqn="prod @7 21600 pixelHeight"/>
<v:f eqn="sum @10 21600 0"/>
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
<o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:596.25pt;
height:369.75pt'>
<v:imagedata src="file:///C:\DOCUME~1\CHRIST~1\LOCALS~1\Temp\msohtml1\01\clip_image001.jpg"
o:title="2"/>
</v:shape><![endif]--><!--[if !vml]--><img style="width: 795px; height: 493px;" alt="1" src="images/lod_morph/image001.jpg" v:shapes="_x0000_i1025"><!--[endif]--></p>
<p style="font-family: Arial;" class="MsoNormal">First step, create your LODs</p>
<p style="font-family: Arial;" class="MsoNormal"><!--[if gte vml 1]><v:shape id="_x0000_i1026" type="#_x0000_t75"
style='width:466.5pt;height:324pt'>
<v:imagedata src="file:///C:\DOCUME~1\CHRIST~1\LOCALS~1\Temp\msohtml1\01\clip_image002.jpg"
o:title="3"/>
</v:shape><![endif]--><!--[if !vml]--><img style="width: 622px; height: 432px;" alt="2" src="images/lod_morph/image002.jpg" v:shapes="_x0000_i1026"><!--[endif]--></p>
<p style="font-family: Arial;" class="MsoNormal">For LOD creation you must do all your changes with an
editable poly modifier.</p>
<p style="font-family: Arial;" class="MsoNormal">It is also good, if you are put a morpher under your
editable poly modifier to test your LOD directly with your morphtargets. </p>
<p style="font-family: Arial;" class="MsoNormal">You are also able to fix UVs by adding a unwrap modifier to
your LOD.</p>
<p style="font-family: Arial;" class="MsoNormal">Your setup for LOD 1 should look like this:</p>
<table class="MsoNormalTable" style="border: medium none ; margin-left: 12.8pt; border-collapse: collapse; font-family: Arial;" border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr style="height: 12pt;">
<td style="border: 1pt solid windowtext; padding: 0in 5.4pt; width: 139.8pt; height: 12pt;" valign="top" width="186">
<p class="MsoNormal"><!--[if gte vml 1]><v:shape id="_x0000_s1026" type="#_x0000_t75"
style='position:absolute;margin-left:-4.2pt;margin-top:-.8pt;width:129pt;
height:53.25pt;z-index:1;mso-position-vertical-relative:line'>
<v:imagedata src="file:///C:\DOCUME~1\CHRIST~1\LOCALS~1\Temp\msohtml1\01\clip_image003.jpg"
o:title="2"/>
</v:shape><![endif]--><!--[if !vml]--><span style="position: relative; z-index: 1;"><span style="position: absolute; left: -6px; top: -1px; width: 172px; height: 71px;"><img style="width: 172px; height: 71px;" alt="3" src="images/lod_morph/image003.jpg" v:shapes="_x0000_s1026"></span></span><!--[endif]--><span style=""><o:p></o:p></span></p>
</td>
<td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 564pt; height: 12pt;" valign="top" width="752">
<p class="MsoNormal"><span style="">Unwrap UVw: for fixing UVs
on LOD1<o:p></o:p></span></p>
</td>
</tr>
<tr style="height: 12pt;">
<td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 139.8pt; height: 12pt;" valign="top" width="186">
<p class="MsoNormal"><span style=""><o:p>&nbsp;</o:p></span></p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 564pt; height: 12pt;" valign="top" width="752">
<p class="MsoNormal"><span style="">Edit Poly: LOD1<o:p></o:p></span></p>
</td>
</tr>
<tr style="height: 12pt;">
<td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 139.8pt; height: 12pt;" valign="top" width="186">
<p class="MsoNormal"><span style=""><o:p>&nbsp;</o:p></span></p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 564pt; height: 12pt;" valign="top" width="752">
<p class="MsoNormal"><span style="">Morpher: Morph modifier to
test how your morphs are working with your LOD1- contains all the LOD0 morphs<o:p></o:p></span></p>
</td>
</tr>
<tr style="height: 12pt;">
<td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 139.8pt; height: 12pt;" valign="top" width="186">
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 564pt; height: 12pt;" valign="top" width="752">
<p class="MsoNormal">Editable Poly: LOD0</p>
</td>
</tr>
</tbody>
</table>
<p style="font-family: Arial;" class="MsoNormal">Note: When you are working on the edit poly modifier check
your mesh for unwanted gaps.</p>
<p style="font-family: Arial;" class="MsoNormal">If your LOD1 is done open the cryMorphTools and go to the
&ldquo;Facial Tools&rdquo;.</p>
<p style="font-family: Arial;" class="MsoNormal">Select your LOD1 and click &ldquo;Load Morphs From Selected&rdquo;. </p>
<p style="font-family: Arial;" class="MsoNormal">The tool will load all morphs which are added to the morph
modifier and display you how many morphs are stored.</p>
<p style="font-family: Arial;" class="MsoNormal">When you type in a layer name, all generated morphs will be
moved into this layer. In my example I use Morphs_LOD1. </p>
<p style="font-family: Arial;" class="MsoNormal">Normally your generated meshes are moved next to your source
object. To keep your maxscene tidy you can add dummies to your scene. Name the
dummies, Dummy_+the name of the morph. At example: &ldquo;Dummy_Lip_funneler&rdquo;.</p>
<p style="font-family: Arial;" class="MsoNormal">Now activate &ldquo;Organize&rdquo; and generated Morphs will be
automatically aligned to the dummies.</p>
<p style="font-family: Arial;" class="MsoNormal">After this press Bake Morphs.</p>
<p style="font-family: Arial;" class="MsoNormal"><!--[if gte vml 1]><v:shape id="_x0000_i1027" type="#_x0000_t75"
style='width:153pt;height:236.25pt'>
<v:imagedata src="file:///C:\DOCUME~1\CHRIST~1\LOCALS~1\Temp\msohtml1\01\clip_image004.jpg"
o:title="6"/>
</v:shape><![endif]--><!--[if !vml]--><img style="width: 204px; height: 315px;" alt="4" src="images/lod_morph/image004.jpg" v:shapes="_x0000_i1027"><!--[endif]--></p>
<p style="font-family: Arial;" class="MsoNormal">Here you can see the result. On the left the original LOD0
morph and on the right the baked LOD1.</p>
<p style="font-family: Arial;" class="MsoNormal"><!--[if gte vml 1]><v:shape id="_x0000_i1028" type="#_x0000_t75"
style='width:508.5pt;height:393pt'>
<v:imagedata src="file:///C:\DOCUME~1\CHRIST~1\LOCALS~1\Temp\msohtml1\01\clip_image005.jpg"
o:title="5"/>
</v:shape><![endif]--><!--[if !vml]--><img style="width: 875px; height: 675px;" alt="5" src="images/lod_morph/image005.jpg" v:shapes="_x0000_i1028"><!--[endif]--></p>
<span style="font-family: Arial;"></span>
</body>
</html>
+214
View File
@@ -0,0 +1,214 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<title>cryTools: MorphTools: Mirror Morphs</title>
</head>
<body style="color: rgb(0, 0, 0);" alink="#ee0000" link="#0000ee" vlink="#551a8b">
<h1 style="background-color: rgb(192, 192, 192); font-family: Arial;">cryTools: MorphTools: Mirroring Morph Targets</h1>
<h2 style="background-color: rgb(192, 192, 192); font-family: Arial;">Mirroring Morphs: Background and Explanation </h2>
<p style="font-family: Arial;" class="MsoNormal"><b style=""><o:p></o:p></b>To save time you should mirror your morphs. But this is not
that easy like it sounds, because you are not able to use the tools which 3D
Studio Max provides. The problem of the 3Ds Max tools, like the Symmetry
modifier is that they don&rsquo;t keep your vertex index, which is necessary for
morphtargets. Here is an example:</p>
<p style="font-family: Arial;" class="MsoNormal">I selected a vertex which has the vertex ID 442</p>
<p style="font-family: Arial;" class="MsoNormal">Now I add a symmetry modifier to mirror my model and an
editable poly modifier to select the vertex again.</p>
<p style="font-family: Arial;" class="MsoNormal">As you can see, the vertex ID changed to 1432.</p>
<p style="font-family: Arial;" class="MsoNormal"><!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600"
o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f"
stroked="f">
<v:stroke joinstyle="miter"/>
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0"/>
<v:f eqn="sum @0 1 0"/>
<v:f eqn="sum 0 0 @1"/>
<v:f eqn="prod @2 1 2"/>
<v:f eqn="prod @3 21600 pixelWidth"/>
<v:f eqn="prod @3 21600 pixelHeight"/>
<v:f eqn="sum @0 0 1"/>
<v:f eqn="prod @6 1 2"/>
<v:f eqn="prod @7 21600 pixelWidth"/>
<v:f eqn="sum @8 21600 0"/>
<v:f eqn="prod @7 21600 pixelHeight"/>
<v:f eqn="sum @10 21600 0"/>
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
<o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:418.5pt;
height:423.75pt'>
<v:imagedata src="file:///C:\DOCUME~1\CHRIST~1\LOCALS~1\Temp\msohtml1\01\clip_image001.jpg"
o:title="vertexB"/>
</v:shape><![endif]--><!--[if !vml]--><img style="width: 558px; height: 565px;" alt="1" src="images/morph_tut/image001.jpg" v:shapes="_x0000_i1025"><!--[endif]--><o:p><br>
<br>
</o:p></p>
<h2 style="background-color: rgb(192, 192, 192); font-family: Arial;">cryTools: Mirror Deformation: Setup</h2>
<p style="font-family: Arial;" class="MsoNormal">To mirror morph targets we created our own tool, which keep
the vertex index. Open <span style="font-weight: bold;">CryTools &gt; Cry MorphManager</span> and open <span style="font-weight: bold;">Mirror
Deformation</span>.</p>
<p style="font-family: Arial;" class="MsoNormal"><!--[if gte vml 1]><v:shape id="_x0000_i1026" type="#_x0000_t75"
style='width:153pt;height:279.75pt'>
<v:imagedata src="file:///C:\DOCUME~1\CHRIST~1\LOCALS~1\Temp\msohtml1\01\clip_image002.jpg"
o:title="tool"/>
</v:shape><![endif]--><!--[if !vml]--><img style="width: 204px; height: 373px;" alt="2" src="images/morph_tut/image002.jpg" v:shapes="_x0000_i1026"><!--[endif]--><br>
<br>
Here is a little example scene. </p>
<p style="font-family: Arial;" class="MsoNormal">On the left side you see a completely symmetrical mesh. On
the right is an asymmetrical mesh. Now we want to mirror the right side of the
morph(the blue mesh) to the left.</p>
<p style="font-family: Arial;" class="MsoNormal"><!--[if gte vml 1]><v:shape id="_x0000_i1027" type="#_x0000_t75"
style='width:565.5pt;height:341.25pt'>
<v:imagedata src="file:///C:\DOCUME~1\CHRIST~1\LOCALS~1\Temp\msohtml1\01\clip_image003.jpg"
o:title="6"/>
</v:shape><![endif]--><!--[if !vml]--><img style="width: 754px; height: 455px;" alt="3" src="images/morph_tut/image003.jpg" v:shapes="_x0000_i1027"><!--[endif]--></p>
<p style="font-family: Arial;" class="MsoNormal">First you have to set your source object. Simply select your
main mesh with the neutral facial expression and press the &ldquo;Select Source
Object&rdquo; button. After you did that, the name of the chosen object will be
displayed on the button.</p>
<p style="font-family: Arial;" class="MsoNormal"><!--[if gte vml 1]><v:shape id="_x0000_i1028" type="#_x0000_t75"
style='width:575.25pt;height:326.25pt'>
<v:imagedata src="file:///C:\DOCUME~1\CHRIST~1\LOCALS~1\Temp\msohtml1\01\clip_image004.jpg"
o:title="5"/>
</v:shape><![endif]--><!--[if !vml]--><img style="width: 767px; height: 435px;" alt="4" src="images/morph_tut/image004.jpg" v:shapes="_x0000_i1028"><!--[endif]--></p>
<p style="font-family: Arial;" class="MsoNormal">Now you have to save the vertices which shall be influenced
by the mirror function. For this select the vertices from one side of the
model, without the vertices in the center of your head and press &ldquo;Save&rdquo; to save
your selection.</p>
<p style="font-family: Arial;" class="MsoNormal">After you saved the selection as a file you have to load the
file into max. Press the load button and chose the file which you recently
saved.</p>
<p style="font-family: Arial;" class="MsoNormal"><!--[if gte vml 1]><v:shape id="_x0000_i1029" type="#_x0000_t75"
style='width:561.75pt;height:315pt'>
<v:imagedata src="file:///C:\DOCUME~1\CHRIST~1\LOCALS~1\Temp\msohtml1\01\clip_image005.jpg"
o:title="8"/>
</v:shape><![endif]--><!--[if !vml]--><img style="width: 749px; height: 420px;" alt="5" src="images/morph_tut/image005.jpg" v:shapes="_x0000_i1029"><!--[endif]--></p>
<p style="font-family: Arial;" class="MsoNormal">Next time when you open your maxfile you only have to set
your source object and load the saved selection.</p>
<h2 style="background-color: rgb(192, 192, 192); font-family: Arial;">cryTools: Mirror Deformation: Usage</h2>
<p style="font-family: Arial;" class="MsoNormal">You will notice, that you are now able to use the
<span style="font-weight: bold;">right-----&gt;left</span> /<span style="font-weight: bold;"> left-----&gt;right </span>buttons.</p>
<p style="font-family: Arial;" class="MsoNormal"><!--[if gte vml 1]><v:shape id="_x0000_i1030" type="#_x0000_t75"
style='width:149.25pt;height:178.5pt'>
<v:imagedata src="file:///C:\DOCUME~1\CHRIST~1\LOCALS~1\Temp\msohtml1\01\clip_image006.jpg"
o:title="t4"/>
</v:shape><![endif]--><!--[if !vml]--><img style="width: 199px; height: 238px;" alt="6" src="images/morph_tut/image006.jpg" v:shapes="_x0000_i1030"><!--[endif]--><o:p><br>
</o:p>If want to mirror you object, select &ldquo;<span style="font-weight: bold;">Same Obj</span>&rdquo;. To mirror
the right side to the left side press <!--[if gte vml 1]><v:shape id="_x0000_i1031"
type="#_x0000_t75" style='width:79.5pt;height:15.75pt'>
<v:imagedata src="file:///C:\DOCUME~1\CHRIST~1\LOCALS~1\Temp\msohtml1\01\clip_image007.jpg"
o:title="9"/>
</v:shape><![endif]--><!--[if !vml]--><img style="width: 106px; height: 21px;" alt="7" src="images/morph_tut/image007.jpg" v:shapes="_x0000_i1031"><!--[endif]--></p>
<p style="font-family: Arial;" class="MsoNormal"><!--[if gte vml 1]><v:shape id="_x0000_i1032" type="#_x0000_t75"
style='width:958.5pt;height:618pt'>
<v:imagedata src="file:///C:\DOCUME~1\CHRIST~1\LOCALS~1\Temp\msohtml1\01\clip_image008.jpg"
o:title="t5"/>
</v:shape><![endif]--><!--[if !vml]--><img style="width: 1278px; height: 824px;" alt="8" src="images/morph_tut/image008.jpg" v:shapes="_x0000_i1032"><!--[endif]--></p>
<p style="font-family: Arial;" class="MsoNormal">To flip you object you have the select &ldquo;New Obj&rdquo; instead of
&ldquo;Same Obj&rdquo;</p>
<p style="font-family: Arial;"></p>
<p style="font-family: Arial;"></p>
<span style="font-family: Arial;">
</span>
</body>
</html>
+84
View File
@@ -0,0 +1,84 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<title>cryTools: AnimTools: Model Set-Up</title>
</head>
<body style="color: rgb(0, 0, 0);" alink="#ee0000" link="#0000ee" vlink="#551a8b">
<h1 style="background-color: rgb(192, 192, 192); font-family: Arial;">cryTools: AnimTools: Model Set-Up</h1>
<h2 style="font-family: Arial; background-color: rgb(192, 192, 192);"> How to set up models in the main dialogs Misc rollout </h2>
<p style="font-family: Arial;">
<strong>This tutorial describes how to set up models and how to maintain them.</strong>
</p>
<p style="font-family: Arial;">
In this example I choosed a simple charachter.
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top"> 1. Open the dialog and hit <strong>Load Model</strong>: <br>
<br>
<img alt="1" src="images/atools/dialogMiscModel1.jpg" style="border: 0px solid ; margin-right: 2em; width: 176px; height: 127px;"><br>
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;2. Select <strong>Edit Entries</strong>: <br>
<br>
<img alt="2" src="images/atools/dialogMiscModel2.jpg" style="border: 0px solid ; margin-right: 2em; width: 177px; height: 104px;"><br>
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;3. A dialog should pop up. In the list, double click in an empty line to add a model:<br>
<br>
<img alt="3" src="images/atools/dialogMiscModel3.jpg" style="border: 0px solid ; margin-right: 2em; width: 442px; height: 219px;"><br>
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;4. In the next window you must select the model you want to add:<br>
<br>
<img alt="4" src="images/atools/dialogMiscModel4.jpg" style="border: 0px solid ; margin-right: 2em; width: 420px; height: 265px;"><br>
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;5. Now the model should be in the list. To maintain them, double click
on the line with the model or click once to rename the entry name:<br>
<br>
<img alt="5" src="images/atools/dialogMiscModel5.jpg" style="border: 0px solid ; margin-right: 2em; width: 443px; height: 219px;"><br>
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;6. When the list is saved, the new entry is available when clicking again on <strong>Load Model</strong>:<br>
<br>
<img alt="6" src="images/atools/dialogMiscModel6.jpg" style="border: 0px solid ; margin-right: 2em; width: 176px; height: 104px;"></p>
<p style="font-family: Arial;"></p>
<p style="font-family: Arial;"></p>
<span style="font-family: Arial;">
</span>
</body>
</html>
+680
View File
@@ -0,0 +1,680 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<title>cryTools: TD Tools</title>
</head>
<body style="color: rgb(0, 0, 0);" alink="#ee0000" link="#0000ee" vlink="#551a8b">
<h1 style="background-color: rgb(192, 192, 192); font-family: Arial;">cryTools: TD Tools </h1>
<span style="font-family: Arial;"></span>
<h2 style="background-color: rgb(192, 192, 192);"><span style="font-family: Arial;">External Apps</span></h2>
<span style="font-family: Arial;">There are some exe's in the root directory (/maxscript)</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">scmd.exe </span>-
this is an app that will silently execute a dos command, this is no
longer used, as the the latest exporter plugin now has this
functionality. In the example below I sync a directory via perforce: </span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier;">scmd ("p4 sync \"" + BuildPathFull_crytools + "Tools\\...\"") true</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">md5.exe</span> - this is a freeware md5 hash generator, it is called from the crytools md5 function. </span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<h2 style="background-color: rgb(192, 192, 192);"><span style="font-family: Arial;">Global Struct</span></h2>
<span style="font-family: Arial;">These globally available variables
can be accessed through the crytools struct. Because they are members
of the struct, you must access them through it, for instance: <span style="font-weight: bold;">crytools.BuildPathFull</span></span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">_fnStore, _fnStoreIndex, _varStore, _varStoreIndex, </span>-
These are global storage arrays that allow variables and functions to
be stored and passed via the storeFn, retrieveFn, storeVar, retrieveVar
functions. These are never directly accessed.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">localBuildNumber </span>- returns the number of the local build. (The build that the current crytools /maxscript dir is loaded from)</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier;">print crytools.localBuildNumber</span><br style="font-family: Courier;">
<span style="font-family: Courier; color: rgb(51, 51, 255);">"5571"</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">BuildPathFull </span>- returns string of the artists build path to the bin32 directory</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier;">print crytools.BuildPathFull</span><br style="font-family: Courier;">
<span style="font-family: Courier; color: rgb(51, 51, 255);">"J:\Game02\bin32\"</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">maxDirTxt </span>- returns string of the max root dir.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier;">print crytools.MaxDirTxt</span><br style="font-family: Courier;">
<span style="font-family: Courier; color: rgb(51, 51, 255);">"C:\3dsmax7\"</span><br style="font-family: Courier;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">editorPath </span>- path string to the Editor</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier;">crytools.editorPath</span><br style="font-family: Courier;">
<span style="font-family: Courier; color: rgb(51, 51, 255);">"J:\Game02\bin32\Editor.exe"</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">cryINI </span>- path string to the CryTools INI file</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier;">crytools.cryINI</span><br style="font-family: Courier;">
<span style="color: rgb(51, 51, 255); font-family: Courier;">"C:\Program Files\Autodesk\3ds Max 2008\plugins\CryExport.ini"</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">maxVersionNum </span>- returns the version number of 3D Studio Max that the script is being run on</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier;">print crytools.maxVersionNum</span><br style="font-family: Courier;">
<span style="color: rgb(51, 51, 255); font-family: Courier;">"8"</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">project_name </span>- returns the name of the project the artist resides on, taken from the build path.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier;">print crytools.project_name</span><br style="font-family: Courier;">
<span style="font-family: Courier; color: rgb(51, 51, 255);">"Game02"</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">latest_build </span>-
returns the name of the latest build on S:\, this global variable is
set from within UpdateTools.ms, which refreshes the 'latest_builds.txt'
stored in cry_temp. This is set to "NET_ERROR" if the location cannot
be found on the network.</span><br style="font-family: Arial;">
<br style="font-family: Courier;">
<span style="font-family: Courier;">print crytools.latest_build</span><br style="font-family: Courier;">
<span style="font-family: Courier; color: rgb(51, 51, 255);">"Game02(2670)_03_27_FastBuild"</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">latestBuildNumber </span>-
returns the number of the latest build available on S:\, this global
variable is set from within 'UpdateTools.ms', which refreshes the
'latest_builds.txt' stored in cry_temp.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier;">print crytools.latestBuildNumber</span><br style="font-family: Courier;">
<span style="font-family: Courier; color: rgb(51, 51, 255);">"2670"</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">cryExportPresent </span>- set to true or false based on whether or not the exporter plugin is loaded.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier;">print crytools.cryExportPresent</span><br style="font-family: Courier;">
<span style="font-family: Courier; color: rgb(51, 51, 255);">true</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">cbaPath </span>- returns string of the CBA path.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier;">print crytools.cbaPath</span><br style="font-family: Courier;">
<span style="font-family: Courier; color: rgb(51, 51, 255);">"J:\Game02\Game\Animations\Animations.cba"</span><br style="font-family: Arial;">
<br style="font-family: Arial; font-weight: bold;">
<span style="font-family: Arial;"><span style="font-weight: bold;">rollback_status </span>-
returns whether or not the exporter is currently rolled back to a
previous version. This is currently stored in rollback_status.ini in
the cryTemp folder.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier;">print crytools.rollback_status</span><br style="font-family: Courier;">
<span style="font-family: Courier; color: rgb(51, 51, 255);">"false"</span><br style="font-family: Arial;">
<br style="font-family: Arial; font-weight: bold;">
<span style="font-family: Arial;"><span style="font-weight: bold;">DOMAIN</span>
- returns the network domain of the network the computer is plugged
into. This is set via GetDNS() once and written to the first line of
cryTools.ini and then read in from there every time at load after. This
var is set by AddCryTools.ms</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier;">print crytools.DOMAIN</span><br style="font-family: Courier;">
<span style="font-family: Courier; color: rgb(51, 51, 255);">"INTERN.CRYTEK.DE"</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<h2 style="background-color: rgb(192, 192, 192);"><span style="font-family: Arial;">Functions</span></h2>
<span style="font-family: Arial;">These functions are added on load within AddCryTools.ms, and made available through the crytools struct.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">scmd &lt;command&gt; wait </span>- Silently
runs a dos command using the cryengine export plugin
(csexport.export.execute_command_line).</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier;">crytools.scmd ("mkdir \"" + crytools.maxDirTxt + "cry_temp\\bad\\\"") true</span><br style="font-family: Courier;">
<span style="font-family: Courier; color: rgb(51, 51, 255);">OK</span><br style="font-family: Arial;">
<br style="font-family: Arial; font-weight: bold;">
<span style="font-family: Arial;"><span style="font-weight: bold;">md5 &lt;filename_string&gt; </span>- Returns
string MD5 hash for file queried, you must feed it a valid file. This
function uses an open source, public domain MD5 executable stored in
the /maxscript folder.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier;">crytools.md5 "C:\\WINDOWS\\explorer.exe"</span><br style="font-family: Courier;">
<span style="font-family: Courier; color: rgb(51, 51, 255);">"A0732187050030AE399B241436565E64"</span><br style="font-family: Arial;">
<br style="font-family: Arial; font-weight: bold;">
<span style="font-family: Arial;"><span style="font-weight: bold;">storeFn &lt;function&gt;
&lt;overwrite&gt; </span>- This stores a function in the global crytools
struct where it can be used by any other script. Overwrite will
overwrite any existing fn with the same name. You use retrieveFn to
retrieve the var you have stored. Here is an example below from the
MorphTools script: </span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier New,Courier,monospace;">cryTools.storeFn collapseVerts true <span style="color: rgb(0, 153, 0);">--collapseVerts fn now stored in crytools._fnStore</span></span><br style="font-family: Courier New,Courier,monospace;">
<br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace;">crytools._fnstore</span><br style="font-family: Courier New,Courier,monospace;">
<span style="color: rgb(51, 51, 255); font-family: Courier New,Courier,monospace;">#(collapseVerts())</span><br style="font-family: Courier New,Courier,monospace;">
<br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace;">crytools.retrieveFn "collapseVerts()")()<span style="color: rgb(51, 204, 0);"> <span style="color: rgb(0, 153, 0);">--now we grab the fn and use it</span></span></span><br style="font-family: Courier New,Courier,monospace;">
<span style="color: rgb(51, 51, 255); font-family: Courier New,Courier,monospace;">OK</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">storeVar &lt;var&gt; &lt;alias&gt;
&lt;overwrite&gt; </span>- This stores a variable in the global crytools
struct where it can be used by any other script. The 'var' is the item
you are storing, and the 'alias' is the associated name. Overwrite will
overwrite a stored var with the same alias. You use retrieveVar to
retrieve the var you have stored. Here is an example below from the
MorphTools script:</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier New,Courier,monospace;">cryTools.storeVar $ "obj1" true <span style="color: rgb(0, 153, 0);">--selected object now stored in crytools._varStore</span></span><br style="font-family: Courier New,Courier,monospace;">
<br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace;">crytools._varstore</span><br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace; color: rgb(51, 51, 255);">#($Box:Box01 @ [-101.424500,-0.000001,25.641026])</span><br style="font-family: Courier New,Courier,monospace;">
<br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace;">crytools.retrieveVar "obj1" <span style="color: rgb(0, 153, 0);">--now we grab the var</span></span><br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace; color: rgb(51, 51, 255);">$Box:Box01 @ [-101.424500,-0.000001,25.641026]</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">alienBrain
&lt;command_argument_string&gt; - </span>This executes AlienBrain command
arugments from within Studio Max. It is set to execute the command via
a JDK bridge/DOS command. This does not load ALienBrain.exe (or the
long load screen associated with it) and executes the commands
instantly and transparently in the background.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier New,Courier,monospace;">crytools.alienBrain "getlatest"</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;">or something more complex like:</span><br style="font-family: Arial;">
<br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace;">crytools.alienBrain ("ab getlatest
Bin32\Tools\maxscript -s Server3 -d " + project_name + " -u login -p
passwd -forcefileupdate -overwritewritable skip")</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">existFile &lt;filename_string&gt; </span>- Returns true/false whether file exists or not</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;">crytools.existFile "C:\\WINDOWS\\explorer.exe"</span><br style="font-family: Arial;">
<span style="font-family: Arial;">true</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">existDir &lt;filename_string&gt;</span> - Returns true/false whether directory exists or not</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier New,Courier,monospace;">crytools.existDir "C:\\WINDOWS"</span><br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace; color: rgb(51, 51, 255);">true</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;">or something more complex like:</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier New,Courier,monospace;">if (crytools.existDir (maxDirTxt + "cry_temp")) == true then (print "cry_temp exists")</span><br style="font-family: Courier New,Courier,monospace;">
<span style="color: rgb(51, 51, 255); font-family: Courier New,Courier,monospace;">"cry_temp exists"</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">getDNS()</span> - Returns the Domain Name
Server of the local network. This uses a dos command to dump and read
ipconfig info from a temp file that is then deleted; so it pops up a
black cmd window for a milisecond when called. CryTools calls this
once, and saves that info in cryTools.ini located in the cryTemp
directory in the max root dir.</span><br style="font-family: Arial;">
<br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace;">crytools.getDNS()</span><br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace; color: rgb(51, 51, 255);">"INTERN.CRYTEK.DE"</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">MirrorObjs &lt;Obj1&gt; &lt;Obj2&gt;
&lt;MObj&gt; &lt;MAxis&gt; &lt;OAxis&gt;</span> - Function for mirroring joint
orientations over an arbitrary axis. The below example is from
CryAnimationTools.ms, you can look there to see it in use.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier New,Courier,monospace;">crytools.MirrorObjs right_arm[i] left_arm[i] $root #x #x</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">matchPivot &lt;Obj1&gt; &lt;Obj2&gt; </span>- Aligns the pivot of an object to that of another</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;">crytools.matchPivot $obj1 $obj2</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">findRoot &lt;Obj&gt; </span>- Returns the root of the hierarchy the object is a member of</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier New,Courier,monospace;">crytools.findroot $'Bip01 L Forearm'</span><br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace; color: rgb(51, 51, 255);">$Editable_Mesh:Bip01 @ [0.000000,0.000038,90.368042]</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">getChildren &lt;Obj&gt;</span> - Returns the root of the hierarchy the object is a member of</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;">print (crytools.getchildren $'Bip01 L Thigh')</span><br style="font-family: Arial;">
<span style="font-family: Arial; color: rgb(51, 51, 255);">$PolyMesh:Bip01 L Calf @ [12.594235,-1.113732,49.932632]</span><br style="font-family: Arial; color: rgb(51, 51, 255);">
<span style="font-family: Arial; color: rgb(51, 51, 255);">$PolyMesh:Bip01 L Foot @ [16.074495,4.691678,9.804122]</span><br style="font-family: Arial; color: rgb(51, 51, 255);">
<span style="font-family: Arial; color: rgb(51, 51, 255);">$Editable_Mesh:Bip01 L Toe0 @ [17.749069,-7.237181,0.444188]</span><br style="font-family: Arial; color: rgb(51, 51, 255);">
<span style="font-family: Arial; color: rgb(51, 51, 255);">$Dummy:_Bip01LToeHelper @ [19.030598,-16.366177,0.444188]</span><br style="font-family: Arial; color: rgb(51, 51, 255);">
<span style="font-family: Arial; color: rgb(51, 51, 255);">$Bone:Bip01 L Toe0Nub @ [19.145245,-17.182899,0.149435]</span><br style="font-family: Arial; color: rgb(51, 51, 255);">
<span style="font-family: Arial; color: rgb(51, 51, 255);">$Bone:Bip01 L Heel @ [16.074499,4.691682,-0.687943]</span><br style="font-family: Arial; color: rgb(51, 51, 255);">
<span style="font-family: Arial; color: rgb(51, 51, 255);">$Editable_Mesh:Bip01 L knee @ [12.464909,-0.477371,47.556950]</span><br style="font-family: Arial; color: rgb(51, 51, 255);">
<span style="font-family: Arial; color: rgb(51, 51, 255);">$Dummy:Bip01 L knee_end @ [13.773256,-8.799936,43.612862]</span><br style="font-family: Arial; color: rgb(51, 51, 255);">
<span style="font-family: Arial; color: rgb(51, 51, 255);">$Editable_Mesh:weaponPos_pistol_L_leg @ [23.779840,-4.798794,68.739929]</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">getBips </span>- Returns the Bipeds in the current scene</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier New,Courier,monospace;">for obj in crytools.getBips() do print obj.name</span><br style="font-family: Courier New,Courier,monospace;">
<span style="color: rgb(51, 51, 255); font-family: Courier New,Courier,monospace;">"Bip01"</span><br style="color: rgb(51, 51, 255); font-family: Courier New,Courier,monospace;">
<span style="color: rgb(51, 51, 255); font-family: Courier New,Courier,monospace;">"Bip02"</span><br style="color: rgb(51, 51, 255); font-family: Courier New,Courier,monospace;">
<span style="color: rgb(51, 51, 255); font-family: Courier New,Courier,monospace;">"Bip03"</span><br style="color: rgb(51, 51, 255); font-family: Courier New,Courier,monospace;">
<span style="color: rgb(51, 51, 255); font-family: Courier New,Courier,monospace;">"Bip04"</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial; font-weight: bold;">getBindPoseVertexTarget &lt;targetNode&gt; &lt;sourceNode&gt; &lt;vertexID&gt;</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial; font-weight: bold;">CreateBindPoseMorph
&lt;targetNode&gt; &lt;sourceNode&gt; &lt;deleteYN&gt;
&lt;addMorphYN&gt; &lt;channelNum&gt; &lt;extractedNode&gt;</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">inFromUDP &lt;targetNode&gt; </span>- This function reads the User Defined Properties for an object into an array</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier New,Courier,monospace;">crytools.inFromUDP $</span><br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace; color: rgb(51, 51, 255);">#("mass = 110", "capsule")</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">outToUDP &lt;targetNode&gt;
&lt;string_array&gt; &lt;echo&gt;</span> - This function reads/writes to the
User Defined Properties buffer for an object</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier New,Courier,monospace;">crytools.outToUDP #("I have needed this","for quite some time") $ true</span><br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace; color: rgb(51, 51, 255);">"I have needed this</span><br style="font-family: Courier New,Courier,monospace; color: rgb(51, 51, 255);">
<span style="font-family: Courier New,Courier,monospace; color: rgb(51, 51, 255);">for quite some time</span><br style="font-family: Courier New,Courier,monospace; color: rgb(51, 51, 255);">
<span style="font-family: Courier New,Courier,monospace; color: rgb(51, 51, 255);">"</span><br style="font-family: Courier New,Courier,monospace;">
<br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace;">getUserPropBuffer $</span><br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace; color: rgb(51, 51, 255);">"I have needed this</span><br style="font-family: Courier New,Courier,monospace; color: rgb(51, 51, 255);">
<span style="font-family: Courier New,Courier,monospace; color: rgb(51, 51, 255);">for quite some time</span><br style="font-family: Courier New,Courier,monospace; color: rgb(51, 51, 255);">
<span style="font-family: Courier New,Courier,monospace; color: rgb(51, 51, 255);">"</span><br style="font-family: Courier New,Courier,monospace;">
<br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace;">crytools.inFromUDP $</span><br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace; color: rgb(51, 51, 255);">#("I have needed this", "for quite some time")</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">local2unc &lt;string&gt; </span>- This will convert a local drive letter to a UNC path</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier New,Courier,monospace;">crytools.local2unc "p"</span><br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace; color: rgb(51, 51, 255);">"\\192.168.0.9\public"</span><br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace;">crytools.local2unc "k"</span><br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace; color: rgb(51, 51, 255);">"\\server2\Artists"</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">forceLowerCase &lt;string&gt; </span>- This will convert a string to lowercase</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier New,Courier,monospace;">crytools.forceLowerCase "MaSs = 19.9"</span><br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace; color: rgb(51, 51, 255);">"mass = 19.9"</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">inFromINI &lt;path&gt; echo </span>- This
will read in a text file line by line and return an array where array
element number corresponds to the line number.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier New,Courier,monospace;">crytools.infromINI (crytools.maxDirTxt + "\\plugins\\CryExport.ini") true</span><br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace; color: rgb(51, 51, 255);">"[Sandbox]"</span><br style="font-family: Courier New,Courier,monospace; color: rgb(51, 51, 255);">
<span style="font-family: Courier New,Courier,monospace; color: rgb(51, 51, 255);">"path = J:\Game02\Bin32\Editor.exe"</span><br style="font-family: Courier New,Courier,monospace; color: rgb(51, 51, 255);">
<span style="font-family: Courier New,Courier,monospace; color: rgb(51, 51, 255);">"animlistpath = J:\Game02\Game\Animations\Animations.cba"</span><br style="font-family: Courier New,Courier,monospace; color: rgb(51, 51, 255);">
<span style="font-family: Courier New,Courier,monospace; color: rgb(51, 51, 255);">#("[Sandbox]", "path = J:\Game02\Bin32\Editor.exe", "animlistpath = J:\Game02\Game\Animations\Animations.cba")</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">outToINI &lt;data&gt; &lt;path&gt;
echo </span>- This will export an array to a text file line by line where
array element number corresponds to the line number.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier New,Courier,monospace;">crytools.outtoini test (crytools.maxDirTxt + "\\plugins\\CryExport.ini") true</span><br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace; color: rgb(51, 51, 255);">"[Sandbox]"</span><br style="font-family: Courier New,Courier,monospace; color: rgb(51, 51, 255);">
<span style="font-family: Courier New,Courier,monospace; color: rgb(51, 51, 255);">"path = J:\Game02\Bin32\Editor.exe"</span><br style="font-family: Courier New,Courier,monospace; color: rgb(51, 51, 255);">
<span style="font-family: Courier New,Courier,monospace; color: rgb(51, 51, 255);">"animlistpath = J:\Game02\Game\Animations\Animations.cba"</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">plusR &lt;path&gt; </span>- this will check if the file exists and make it read-only</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier New,Courier,monospace;">crytools.plusR (crytools.maxDirTxt + "\\plugins\\CryExport.ini")</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">minusR &lt;path&gt; </span>- this will check if the file exists and make it writable</span><br style="font-family: Arial;">
<br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace;">crytools.minusR (crytools.maxDirTxt + "\\plugins\\CryExport.ini")</span><br style="font-family: Arial;">
<br style="font-family: Arial; font-weight: bold;">
<span style="font-family: Arial;"><span style="font-weight: bold;">objTrajectoryToSpline &lt;obj&gt;</span> - this will create a spline showing the trajectory of all selected objects</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">cutString &lt;string input&gt; &lt;string to cut&gt; </span>- this removes the 'string to cut' from the 'string input'.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier New,Courier,monospace;">crytools.cutString "Crysis is a beautiful, meticulously designed game" ", meticulously designed"</span><br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace; color: rgb(51, 51, 255);">"Crysis is a beautiful game"</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">vertDistance &lt;pos&gt; &lt;pos&gt; </span>- this will output the distance between two positions in space</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier New,Courier,monospace;">crytools.vertDistance $Box01.pos $Box02.pos</span><br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace; color: rgb(51, 51, 255);">169.997</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">copyPasteController &lt;parentObj&gt;
&lt;selOrChild&gt; &lt;copyWhat&gt;</span> - this will copy and paste a
controller, here is an example from CryRiggingTools:</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier New,Courier,monospace;">crytools.copyPasteController mObj "children" "rp"</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">sliderMan</span> -<span style="font-weight: bold;"> </span>this is a fn that works
on a selection callback, when you select a slider manipulator, it
always goes into manipulate mode so that it can be used.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<h2 style="background-color: rgb(192, 192, 192);"><span style="font-family: Arial;">Items Stored In cry_temp\</span></h2>
<span style="font-family: Arial;">A folder named '<span style="font-weight: bold;">cry_temp</span>' is created by <span style="font-weight: bold;">AddCryTools.ms</span>, CryTools store many things in this folder, like the following examples:</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">crytools.ini </span>- This stores
suer-specific options, such as window layout and control panel
settings. I will work to fold some of the other droppings below into
this single INI file. Here are some of the things stored within:</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier New,Courier,monospace;">DOMAIN:INTERN.CRYTEK.DE</span><br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace;">WARNMATS:true</span><br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace;">REPARENT:true</span><br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace;">SUPPRESS:false</span><br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace;">NO_UNPARENT_WEAPON:false</span><br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace;">RIGGING_POS:1396:78</span><br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace;">ANIMATION_POS:1192:78</span><br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace;">MORPH_POS:2072:70</span><br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace;">ARTIST_POS:698:457</span><br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace;">SPLASH:true</span><br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace;">UPDATE_COLLECTIONS:false</span><br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace;">SYNC_COLLECTIONS:false</span><br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace;">LOADOLDANIMTOOLS:false</span><br style="font-family: Courier New,Courier,monospace;">
<span style="font-family: Courier New,Courier,monospace;">GENERATEMENU:true</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">latest_builds.txt </span>- When UpdateTools.ms is run, it dumps the latest builds from S:\_Builds\ into this txt file.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">paths.txt </span>- When CryTools were
installed, the InstallCryTools.vbs created this txt file, it stores the
install path of StudioMax and Photoshop. The first line is always
StudioMax and the second Photoshop.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Courier New,Courier,monospace;">C:\3dsmax7C:\graphics\Adobe Photoshop CS2\Plug-Ins\</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">rollback_status.ini </span>- A value of
true/false is stored in this file. When an artist has rolled back their
exporter, the file is set to 'true', when 'Get Latest Tools From
AlienBrain/Latest Build' is pressed in UpdateTools, rollback status is
set to 'false' because the latest exporter is installed.</span><br style="font-family: Arial;">
<br style="font-family: Arial;">
<span style="font-family: Arial;"><span style="font-weight: bold;">CryExport7.dlu, Morpher.dlm,
MorpherMXS.dlx</span> - When new copies of these are installed, the prior
versions are saved here, where they can be rolled back to on demand.
Currently, the rollback function only exists for CryExport7.dlu.&nbsp;</span><br style="font-family: Arial;">
<span style="font-family: Arial;"><br>
</span>
</body>
</html>
+290
View File
@@ -0,0 +1,290 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<title>cryTools: MorphTools: Transfer Morphs Between Characters</title>
</head>
<body style="color: rgb(0, 0, 0);" alink="#ee0000" link="#0000ee" vlink="#551a8b">
<h1 style="background-color: rgb(192, 192, 192); font-family: Arial;">cryTools: MorphTools: Transferring Morphs Between Characters</h1>
<p style="font-family: Arial;" class="MsoNormal">To save time we created a way to bake morphtargets from one
character to another character. This tutorial will show you how you we do this.</p>
<p style="font-family: Arial;" class="MsoNormal"><o:p>&nbsp;</o:p>We use for all our head the same topology with the same
vertex index. This allows us to transfer morph targets from one head to another
head.</p>
<p style="font-family: Arial;" class="MsoNormal"><o:p></o:p>Here you can see an example for this.</p>
<p style="font-family: Arial;" class="MsoNormal"><!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600"
o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f"
stroked="f">
<v:stroke joinstyle="miter"/>
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0"/>
<v:f eqn="sum @0 1 0"/>
<v:f eqn="sum 0 0 @1"/>
<v:f eqn="prod @2 1 2"/>
<v:f eqn="prod @3 21600 pixelWidth"/>
<v:f eqn="prod @3 21600 pixelHeight"/>
<v:f eqn="sum @0 0 1"/>
<v:f eqn="prod @6 1 2"/>
<v:f eqn="prod @7 21600 pixelWidth"/>
<v:f eqn="sum @8 21600 0"/>
<v:f eqn="prod @7 21600 pixelHeight"/>
<v:f eqn="sum @10 21600 0"/>
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
<o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:404.25pt;
height:282pt'>
<v:imagedata src="file:///C:\DOCUME~1\CHRIST~1\LOCALS~1\Temp\msohtml1\01\clip_image001.jpg"
o:title="1"/>
</v:shape><![endif]--><!--[if !vml]--><img style="width: 539px; height: 376px;" alt="1" src="images/transfer_tut/image002.jpg" v:shapes="_x0000_i1025"><!--[endif]--></p>
<p style="font-family: Arial;" class="MsoNormal">Let&rsquo;s bake the existing morphs from the left guy to the
Asian.<br>
<o:p><br>
</o:p>To do this we open the scene of the head with the existing
morphtargets.</p>
<p style="font-family: Arial;" class="MsoNormal">The black head on the upper left corner is our basehead
without morphs. The blue morphs are symmetrical morphs. The red ones are
asymmetrical morphs.</p>
<p style="font-family: Arial;" class="MsoNormal">The green squares are helpers which I will describe later.</p>
<p style="font-family: Arial;" class="MsoNormal"><!--[if gte vml 1]><v:shape id="_x0000_i1026" type="#_x0000_t75"
style='width:626.25pt;height:404.25pt'>
<v:imagedata src="file:///C:\DOCUME~1\CHRIST~1\LOCALS~1\Temp\msohtml1\01\clip_image003.jpg"
o:title="2"/>
</v:shape><![endif]--><!--[if !vml]--><img style="width: 835px; height: 539px;" alt="2" src="images/transfer_tut/image004.jpg" v:shapes="_x0000_i1026"><!--[endif]--><o:p><br>
<br>
</o:p>Now we apply a morph modifier to the head with the neutral
expression and add all morphs which shall be baked to the Asian head.</p>
<p style="font-family: Arial;" class="MsoNormal">In this case I add all symmetrical and asymmetrical morphs
to it.</p>
<p style="font-family: Arial;" class="MsoNormal"><!--[if gte vml 1]><v:shape id="_x0000_i1027" type="#_x0000_t75"
style='width:456pt;height:420.75pt'>
<v:imagedata src="file:///C:\DOCUME~1\CHRIST~1\LOCALS~1\Temp\msohtml1\01\clip_image005.jpg"
o:title="3"/>
</v:shape><![endif]--><!--[if !vml]--><img style="width: 868px; height: 801px;" alt="3" src="images/transfer_tut/image005.jpg" v:shapes="_x0000_i1027"><!--[endif]--><br>
<o:p><br>
</o:p>Delete all Morphtargets of the afro American and merge the
Asian head into your scene.<o:p>&nbsp;</o:p></p>
<p style="font-family: Arial;" class="MsoNormal"><!--[if gte vml 1]><v:shape id="_x0000_i1028" type="#_x0000_t75"
style='width:736.5pt;height:468.75pt'>
<v:imagedata src="file:///C:\DOCUME~1\CHRIST~1\LOCALS~1\Temp\msohtml1\01\clip_image007.jpg"
o:title="4"/>
</v:shape><![endif]--><!--[if !vml]--><img style="width: 982px; height: 625px;" alt="4" src="images/transfer_tut/image008.jpg" v:shapes="_x0000_i1028"><!--[endif]--></p>
<p style="font-family: Arial;" class="MsoNormal"><!--[if gte vml 1]><v:shape id="_x0000_i1029" type="#_x0000_t75"
style='width:396pt;height:299.25pt'>
<v:imagedata src="file:///C:\DOCUME~1\CHRIST~1\LOCALS~1\Temp\msohtml1\01\clip_image009.jpg"
o:title="d1"/>
</v:shape><![endif]--><!--[if !vml]--><img style="width: 528px; height: 399px;" alt="5" src="images/transfer_tut/image009.jpg" v:shapes="_x0000_i1029"><!--[endif]--><span style="">&nbsp;</span><br>
<o:p><br>
</o:p>Normally the UVs of the characters are not matching,
therefore we need to use an inbetween step.</p>
<ol style="margin-top: 0in; font-family: Arial;" start="1" type="1">
<li class="MsoNormal" style="">create
a copy of the Asian Head (red wireframe).</li>
<li class="MsoNormal" style="">create
a morpher for the asian head, choose the African head as a morphtarget and
set the vaule to 100%</li>
<li class="MsoNormal" style="">collapse
the morpher modifier (result see below &ndash; green wireframe)</li>
</ol>
<p style="font-family: Arial;" class="MsoNormal"><!--[if gte vml 1]><v:shape id="_x0000_i1030" type="#_x0000_t75"
style='width:558.75pt;height:283.5pt'>
<v:imagedata src="file:///C:\DOCUME~1\CHRIST~1\LOCALS~1\Temp\msohtml1\01\clip_image010.jpg"
o:title="d2"/>
</v:shape><![endif]--><!--[if !vml]--><img style="width: 745px; height: 378px;" alt="6" src="images/transfer_tut/image010.jpg" v:shapes="_x0000_i1030"><!--[endif]--></p>
<ol style="margin-top: 0in; font-family: Arial;" start="4" type="1">
<li class="MsoNormal" style="">Copy
the morpher from the African head to the Asian head(green wireframe).
Delete the afrcian head, it is not longer needed.</li>
<li class="MsoNormal" style=""><span style="">&nbsp;</span>Add the copy of the Asian head (red wireframe)
as a morph to the existing morpher modifier on the green head and turn the
amount to 100%.</li>
</ol>
<p style="font-family: Arial;" class="MsoNormal"><!--[if gte vml 1]><v:shape id="_x0000_i1031" type="#_x0000_t75"
style='width:557.25pt;height:529.5pt'>
<v:imagedata src="file:///C:\DOCUME~1\CHRIST~1\LOCALS~1\Temp\msohtml1\01\clip_image011.jpg"
o:title="d3"/>
</v:shape><![endif]--><!--[if !vml]--><img style="width: 743px; height: 706px;" alt="7" src="images/transfer_tut/image011.jpg" v:shapes="_x0000_i1031"><!--[endif]--><o:p>&nbsp;</o:p></p>
<p style="font-family: Arial;" class="MsoNormal">Open the CryMorphManager and open the &ldquo;Facial Tools&rdquo;</p>
<p style="font-family: Arial;" class="MsoNormal">Select the green head and add click on the &ldquo;Load Morphs From
Selection&rdquo; button. The tool will load all morphs which are added to the morph
modifier and display you how many morphs are stored.</p>
<p style="font-family: Arial;" class="MsoNormal">When you activate &ldquo;Organize&rdquo; your generated Morphs will be
automatically aligned to the helper. Call the helper for this Dummy_+the name
of the morph. At example: &ldquo;Dummy_Lip_funneler&rdquo;.</p>
<p style="font-family: Arial;" class="MsoNormal">All generated morphs will be moved into a new layer. For
this set the name of the new layer into the textbox beside to New Layer.</p>
<p style="font-family: Arial;" class="MsoNormal">Before you press the &ldquo;Bake Morphs&rdquo; button, be sure that you
have the head with the morphmodifier selected. </p>
<p style="font-family: Arial;" class="MsoNormal">Now you are ready to generate the morphs.</p>
<p style="font-family: Arial;" class="MsoNormal"><!--[if gte vml 1]><v:shape id="_x0000_i1032" type="#_x0000_t75"
style='width:172.5pt;height:243.75pt'>
<v:imagedata src="file:///C:\DOCUME~1\CHRIST~1\LOCALS~1\Temp\msohtml1\01\clip_image012.jpg"
o:title="d4"/>
</v:shape><![endif]--><!--[if !vml]--><img style="width: 230px; height: 325px;" alt="8" src="images/transfer_tut/image012.jpg" v:shapes="_x0000_i1032"><!--[endif]--></p>
<p style="font-family: Arial;" class="MsoNormal">Note: the bake function will also generate a copy of your
copy(red head) which you loaded into the morph modifier. Just delete it if you
don&rsquo;t need it.<o:p></o:p></p>
<p style="font-family: Arial;" class="MsoNormal">Result:</p>
<p style="font-family: Arial;" class="MsoNormal"><!--[if gte vml 1]><v:shape id="_x0000_i1033" type="#_x0000_t75"
style='width:874.5pt;height:562.5pt'>
<v:imagedata src="file:///C:\DOCUME~1\CHRIST~1\LOCALS~1\Temp\msohtml1\01\clip_image013.jpg"
o:title="d5"/>
</v:shape><![endif]--><!--[if !vml]--><img style="width: 1166px; height: 750px;" alt="13" src="images/transfer_tut/image013.jpg" v:shapes="_x0000_i1033"><!--[endif]--></p>
<p style="font-family: Arial;" class="MsoNormal"><!--[if gte vml 1]><v:shape id="_x0000_i1034" type="#_x0000_t75"
style='width:752.25pt;height:562.5pt'>
<v:imagedata src="file:///C:\DOCUME~1\CHRIST~1\LOCALS~1\Temp\msohtml1\01\clip_image014.jpg"
o:title="d6"/>
</v:shape><![endif]--><!--[if !vml]--><img style="width: 1003px; height: 750px;" alt="14" src="images/transfer_tut/image014.jpg" v:shapes="_x0000_i1034"><!--[endif]--></p>
<p style="font-family: Arial;"></p>
<span style="font-family: Arial;">
</span>
</body>
</html>
+107
View File
@@ -0,0 +1,107 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<title>cryTools: AnimTools: Model Set-Up</title>
</head>
<body style="color: rgb(0, 0, 0);" alink="#ee0000" link="#0000ee" vlink="#551a8b">
<h1 style="background-color: rgb(192, 192, 192); font-family: Arial;">cryTools: AnimTools: Weapon Set-Up</h1>
<h2 style="font-family: Arial; background-color: rgb(192, 192, 192);"> How to set up weapons in the main dialogs Misc rollout </h2>
<p style="font-family: Arial;">
This tutorial describes how to set up weaons and offsets and how to maintain them.
</p>
<p style="font-family: Arial;">
In this example I choosed a rifle and opened a character max file with the weapon in it.
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top"> 1. Open the dialog and hit Edit Entries: <br>
<br>
<img alt="1" src="images/atools/dialogMiscWeapon1.jpg" style="border: 0px solid ; margin-right: 2em; width: 176px; height: 125px;"><br>
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;2. A dialog should pop up. In the list, double click in an empty line to add a weapon:<br>
<br>
<img alt="2" src="images/atools/dialogMiscWeapon2.jpg" style="border: 0px solid ; margin-right: 2em; width: 443px; height: 220px;"><br>
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;3. In the next window you must select the model of the weapon you want to add:<br>
<br>
<img alt="3" src="images/atools/dialogMiscWeapon3.jpg" style="border: 0px solid ; margin-right: 2em; width: 452px; height: 403px;"><br>
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;4. After this another window pops up where to choose the model to get the offset from (for weapons, normally the hand):<br>
<br>
<img alt="4" src="images/atools/dialogMiscWeapon4.jpg" style="border: 0px solid ; margin-right: 2em; width: 452px; height: 404px;"><br>
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;5. Now the weapon should be in the list. To maintain them, double click on the line with the weapon:<br>
<br>
<img alt="5" src="images/atools/dialogMiscWeapon5.jpg" style="border: 0px solid ; margin-right: 2em; width: 443px; height: 220px;"><br>
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;6. A new dialog pops up where the entries can be edited. In this
example, I changed the name (displayed in the drop down list) and the
external file reference (used to automatically set up the specific
weapon depending on the file name i.e. combat_run_rifle_forward =&gt;
rifle)<br>
<br>
<img alt="6" src="images/atools/dialogMiscWeapon6.jpg" style="border: 0px solid ; margin-right: 2em; width: 385px; height: 189px;"><br>
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;7. After saving, the changed should be visible in the list:<br>
<br>
<img alt="7" src="images/atools/dialogMiscWeapon7.jpg" style="border: 0px solid ; margin-right: 2em; width: 443px; height: 220px;"><br>
</p>
<p style="font-family: Arial;">
<img style="border: 0px solid ; width: 16px; height: 16px;" alt="led-yellow" src="images/atools/led-yellow.gif" align="top">&nbsp;8. When the list is saved, the new entry is available in the drop down list:<br>
<br>
<img alt="8" src="images/atools/dialogMiscWeapon8.jpg" style="border: 0px solid ; margin-right: 2em; width: 176px; height: 131px;"></p>
<p style="font-family: Arial;"></p>
<p style="font-family: Arial;"></p>
<span style="font-family: Arial;">
</span>
</body>
</html>
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:e92bbf1901351890bead8df6a0aec3b74921e97e0559c369d9fa3213c2b587e6
size 64693

Some files were not shown because too many files have changed in this diff Show More