Integrating latest 47acbe8
This commit is contained in:
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
@@ -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)
|
||||
@@ -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)
|
||||
)
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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)
|
||||
@@ -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()
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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())
|
||||
)
|
||||
)
|
||||
@@ -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
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:a1963f8897dae90853082dbb6961cc916eef0bf3b3dee4759d964c8010496686
|
||||
size 17124
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:3679794cce0eefa383c495b8eac5573e3040f2e256770c3aab78d429cb77a801
|
||||
size 17249
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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"
|
||||
)
|
||||
@@ -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
@@ -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"
|
||||
@@ -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"
|
||||
@@ -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"
|
||||
@@ -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"
|
||||
@@ -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"
|
||||
@@ -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"
|
||||
@@ -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"
|
||||
@@ -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"
|
||||
@@ -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
|
||||
@@ -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()
|
||||
)
|
||||
@@ -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()
|
||||
)
|
||||
@@ -0,0 +1,7 @@
|
||||
-------------------------Limited Poly Loop------------------------------
|
||||
if CryModelling == undefined then
|
||||
(
|
||||
FileIn (BuildPathFull_crytools + "Tools\\maxscript\\CryModelling.ms")
|
||||
)
|
||||
|
||||
CryModelling.SelPolyLoop()
|
||||
@@ -0,0 +1,7 @@
|
||||
-------------------------Limited Vert Loop----------------------------
|
||||
if CryModelling == undefined then
|
||||
(
|
||||
FileIn (BuildPathFull_crytools + "Tools\\maxscript\\CryModelling.ms")
|
||||
)
|
||||
|
||||
CryModelling.SelVertLoop()
|
||||
@@ -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
|
||||
@@ -0,0 +1 @@
|
||||
$.modifiers[#unwrap_uvw].unwrap2.ScaleSelectedCenter 0.001 0
|
||||
@@ -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
|
||||
)
|
||||
@@ -0,0 +1,8 @@
|
||||
try
|
||||
(
|
||||
(crytools.retrieveFn "collapseVerts()")()
|
||||
)
|
||||
catch
|
||||
(
|
||||
print "error."
|
||||
)
|
||||
@@ -0,0 +1,3 @@
|
||||
max utility mode
|
||||
UtilityPanel.OpenUtility CryEngine_2_Exporter
|
||||
csexport.export.export_anim()
|
||||
@@ -0,0 +1,3 @@
|
||||
max utility mode
|
||||
UtilityPanel.OpenUtility CryEngine_2_Exporter
|
||||
csexport.export.export_nodes()
|
||||
@@ -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
|
||||
@@ -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
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -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 ) <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;">• 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;">• 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;">• 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;">• have the correct shaders applied</span><br style="font-family: Arial;">
|
||||
|
||||
|
||||
<span style="font-family: Arial;">• are free of extra transformations</span><br style="font-family: Arial;">
|
||||
|
||||
|
||||
<span style="font-family: Arial;">• are facing the right world direction</span><br style="font-family: Arial;">
|
||||
|
||||
|
||||
<span style="font-family: Arial;">• and many more requirements that may be overlooked </span><br style="font-family: Arial;">
|
||||
|
||||
|
||||
<span style="font-family: Arial;">• cryTools run from your local build, so tools are updated automatically and frequently</span><br style="font-family: Arial;">
|
||||
|
||||
|
||||
<span style="font-family: Arial;">• cryTools sync via Perforce, AlienBrain, HTTP, or LAN on demand</span><br style="font-family: Arial;">
|
||||
|
||||
|
||||
<span style="font-family: Arial;">• 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;">• Show all callbacks and important variables (control panel)</span><br style="font-family: Arial;">
|
||||
|
||||
|
||||
<span style="font-family: Arial;">• Dump all vars in global space currently set/used by cryTools</span><br style="font-family: Arial;">
|
||||
|
||||
|
||||
<span style="font-family: Arial;">• Visual indicator of local/latest build number in control panel or splash screen</span><br style="font-family: Arial;">
|
||||
|
||||
|
||||
<span style="font-family: Arial;">• '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;">• Batch convert controllers (example: TCB for CGA)<br>
|
||||
|
||||
</span><span style="font-family: Arial;"></span><span style="font-family: Arial;">• 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;">• Foot / Hand snapshot alignment to custom pivots<br>
|
||||
|
||||
</span><span style="font-family: Arial;">• Move Bip01 to [0,0] / [0,0,0]<br>
|
||||
</span><span style="font-family: Arial;">• 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;">• Reverse a biped animation (Autodesk added this feature to Max 9)</span><br style="font-family: Arial;">
|
||||
|
||||
|
||||
<span style="font-family: Arial;">• Import FBX data directly on to a biped character (Autodesk added this feature to Max 9)</span><br>
|
||||
<span style="font-family: Arial;">• Reset Rotation<br>
|
||||
|
||||
</span><span style="font-family: Arial;">• Create snapshot / + children<br>
|
||||
|
||||
</span><span style="font-family: Arial;">• Copy transformation<br>
|
||||
|
||||
</span><span style="font-family: Arial;">• Paste transformation / position / rotation<br>
|
||||
|
||||
</span><span style="font-family: Arial;">• Everything is available in the quad menu or for shortcuts<br>
|
||||
|
||||
</span><span style="font-family: Arial;">• 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;">• Align selected object to any other object ( rotation, position, create / use offset )</span><br>
|
||||
|
||||
<span style="font-family: Arial;">• Compact structure to apply functions<br>
|
||||
|
||||
</span><span style="font-family: Arial;">• Works with time range ( Start / Stop ; Range )<br>
|
||||
|
||||
</span><span style="font-family: Arial;">• Load often used models to animate with<br>
|
||||
|
||||
</span><span style="font-family: Arial;">• Automatically sets the weapon bone for different kind of weapons (if set)<br>
|
||||
|
||||
</span><span style="font-family: Arial;">• Loads Biped from the working directory ( or last used file )<br>
|
||||
|
||||
</span><span style="font-family: Arial;">• Save Biped directly to the last used biped name<br>
|
||||
|
||||
</span><span style="font-family: Arial;">• Export animation with the Biped name and path structure<br>
|
||||
|
||||
</span><span style="font-family: Arial;">• Save / Export at the same time<br>
|
||||
|
||||
</span><span style="font-family: Arial;">• 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;">• Supported file types: BIP, FBX, MAX<br>
|
||||
|
||||
</span><span style="font-family: Arial;">• Sub folder selection (will be saved)<br>
|
||||
|
||||
</span><span style="font-family: Arial;">• File Mask selection (will be saved)<br>
|
||||
|
||||
</span><span style="font-family: Arial;">• Export Folder (will be saved)</span><br>
|
||||
|
||||
<span style="font-family: Arial;">• Sorted by folders<br>
|
||||
|
||||
</span><span style="font-family: Arial;">• Run pre-export script (if set)<br>
|
||||
|
||||
</span><span style="font-family: Arial;">• Automatic export bone detection (if set)<br>
|
||||
|
||||
</span><span style="font-family: Arial;">• Keep Sub folder structure</span><br>
|
||||
|
||||
<span style="font-family: Arial;">• Check the files (without export)<br>
|
||||
</span><span style="font-family: Arial;">• Add or remove bones and rig elements from thousands of animation assets</span><br style="font-family: Arial;">
|
||||
|
||||
|
||||
<span style="font-family: Arial;">• Manipulate data for thousands of animations (example: flip all assets 180 deg)<br>
|
||||
</span><span style="font-family: Arial;">• 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;">• 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;">• 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;">• auto-importing animation props and weapons from a build/server</span><br style="font-family: Arial;">
|
||||
|
||||
|
||||
<span style="font-family: Arial;">• 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;">• 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;">• Mirror first person arm animation from left arm to right or vice versa</span><br style="font-family: Arial;">
|
||||
|
||||
|
||||
<span style="font-family: Arial;">• 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;">• 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;">• Zero out rotations for all selected items</span><br style="font-family: Arial;">
|
||||
|
||||
|
||||
<span style="font-family: Arial;">• Snap a pivot to that of another object</span><br style="font-family: Arial;">
|
||||
|
||||
|
||||
<span style="font-family: Arial;">• Select just biped bones, excluding helper joints</span><br style="font-family: Arial;">
|
||||
|
||||
|
||||
<span style="font-family: Arial;">• Make sweeping adjustments to the width/height/taper of multiple selected bones</span><br style="font-family: Arial;">
|
||||
|
||||
|
||||
<span style="font-family: Arial;">• Create arbitrary vertex channels, e.g. multiple vertex color channels</span><br style="font-family: Arial;">
|
||||
|
||||
|
||||
<span style="font-family: Arial;">• Create Phys Skeleton from existing Deforming Skeleton</span><br style="font-family: Arial;">
|
||||
|
||||
|
||||
<span style="font-family: Arial;">• 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;">• 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;">• Select the root of a hierarchy by selecting any member of it</span><br style="font-family: Arial;">
|
||||
|
||||
|
||||
<span style="font-family: Arial;">• Select all children of a node</span><br style="font-family: Arial;">
|
||||
|
||||
|
||||
<span style="font-family: Arial;">• Export data about a hierarchy to listener or a spreadsheet (excel/google spreadsheet)</span><br style="font-family: Arial;">
|
||||
|
||||
|
||||
<span style="font-family: Arial;">• Compare multiple hierarchies</span><br style="font-family: Arial;">
|
||||
|
||||
|
||||
<span style="font-family: Arial;">• Query how many bones in a hierarchy have weights effecting a mesh</span><br style="font-family: Arial;">
|
||||
|
||||
|
||||
<span style="font-family: Arial;">• 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;">• 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;">• Transfer morphs between unlike topologies</span><br style="font-family: Arial;">
|
||||
|
||||
|
||||
<span style="font-family: Arial;">• 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;">• 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;">• Delete selected faces from many morph targets while keeping identical point indices</span><br style="font-family: Arial;">
|
||||
|
||||
|
||||
<span style="font-family: Arial;">• 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;">• Can extract a relative pose shape from a skinned and posed mesh</span><br style="font-family: Arial;">
|
||||
|
||||
|
||||
<span style="font-family: Arial;">• 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;">• Head/Neck</span><br style="font-family: Arial;">
|
||||
|
||||
|
||||
<span style="font-family: Arial;">• Auto-generated fleshy eye morphs</span><br style="font-family: Arial;">
|
||||
|
||||
|
||||
<span style="font-family: Arial;">• 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;">• 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;">• 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;">• 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;">• Dump morpher data to the Listener or an excel spreadsheet</span><br style="font-family: Arial;">
|
||||
|
||||
|
||||
<span style="font-family: Arial;">• 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;">• 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;">• 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;">• Copy/paste modifiers to multiple objects without instancing</span><br style="font-family: Arial;">
|
||||
|
||||
|
||||
<span style="font-family: Arial;">• 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;">• 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;">• 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;">• 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;">• 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;">• Perforce and AlienBrain integration</span><br style="font-family: Arial;">
|
||||
|
||||
|
||||
<span style="font-family: Arial;">• 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;">• 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;">• Export functions</span><br style="font-family: Arial;">
|
||||
|
||||
|
||||
<span style="font-family: Arial;">o Get/set node lists for objects and bones</span><br style="font-family: Arial;">
|
||||
|
||||
|
||||
<span style="font-family: Arial;">• Registry functions</span><br style="font-family: Arial;">
|
||||
|
||||
|
||||
<span style="font-family: Arial;">• Silent CMD execution<br>
|
||||
|
||||
|
||||
<br>
|
||||
|
||||
|
||||
<br>
|
||||
|
||||
|
||||
<br style="font-family: Arial;">
|
||||
|
||||
|
||||
</span><span style="font-family: Arial;"></span>
|
||||
</body>
|
||||
</html>
|
||||
@@ -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>
|
||||
|
||||
<a href="#selection">Selection Rollout</a><br>
|
||||
|
||||
</span><span style="font-family: Arial;"><a href="#operation">Operation Rollout</a><br>
|
||||
|
||||
</span><span style="font-family: Arial;"> <a href="#pivot">Pivot</a></span><span style="font-family: Arial;"><a href="#pivot"> Rollout</a><br>
|
||||
|
||||
<a href="#misc">Misc Rollout</a><br>
|
||||
|
||||
<a href="#loadsave">Load/Save/Export Rollout</a><br>
|
||||
|
||||
<a href="#perforce">Perforce Rollout</a><br>
|
||||
|
||||
<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;"> </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;"> </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;"> </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;"> </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;"> </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"> <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"> <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"> <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"> <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"> <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"> <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"> <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 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;"> <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"> <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"> <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"> <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"> <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"> <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"> <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"> <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"> <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"> <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"> <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"> <strong>+ Children</strong> <br>
|
||||
|
||||
|
||||
Creates snapshot from the children of the selected Object and integrates them into a group. </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"> <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"> <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"> <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> </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;"> </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"> <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;"> </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"> <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"> <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"> <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"> <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"> <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"> <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"> <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"> <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"> <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"> <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"> <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"> <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"> <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"> <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"> <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"> <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"> <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"> <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"> <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>
|
||||
@@ -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"> <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"> <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;"> </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;"> </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;"> </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"> <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"> <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"> <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"> <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"> <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>
|
||||
@@ -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;"> 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>
|
||||
@@ -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 </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: < . (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>
|
||||
@@ -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 ' < ' 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 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;"> </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’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 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>
|
||||
@@ -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
|
||||
‘<span style="font-weight: bold;">Dummy_</span>’.
|
||||
The overflow (targets baked out that have no corresponding helper) will
|
||||
default to a row up top, like the ‘dirty’ 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) Select the main head you will model on and click
|
||||
‘<span style="font-weight: bold;">Select Main</span>’<br>
|
||||
|
||||
2) You ‘<span style="font-weight: bold;">collapse</span>’
|
||||
verts on the main head (two at a time) to make an LOD, then click
|
||||
‘<span style="font-weight: bold;">Save Collapse
|
||||
Data</span>’<br>
|
||||
|
||||
3) This then saves an ‘<span style="font-weight: bold;">.i2l</span>’ file
|
||||
with your changes.<br>
|
||||
|
||||
4) Open a file with other heads (different
|
||||
character head)<br>
|
||||
|
||||
5) Select all the heads and click ‘<span style="font-weight: bold;">Select variations</span>’<br>
|
||||
|
||||
6) Then click ‘<span style="font-weight: bold;">Load Collapse Data</span>’
|
||||
and select your ‘<span style="font-weight: bold;">.i2l</span>’
|
||||
file<br>
|
||||
|
||||
7) Then click ‘<span style="font-weight: bold;">Apply</span>’.<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 ‘pose vectors’ like ‘look_up’,
|
||||
‘look_down’, ‘look_left’,
|
||||
‘look_right’, 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> </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 ‘<span style="font-weight: bold;">Select Character Head</span>’ which will then change to HeadName + ‘Head Loaded<br>
|
||||
When you select a pose vector, the ‘<span style="font-weight: bold;">Create Pose Shape</span>’
|
||||
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 ‘<span style="font-weight: bold;">Create Pose Shape</span>’ 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 ‘<span style="font-weight: bold;">Add Pose Shape To Morpher</span>’, 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) Look_Up</span><br style="font-weight: bold;">
|
||||
<span style="font-weight: bold;">2) Look_Down</span><br style="font-weight: bold;">
|
||||
<span style="font-weight: bold;">3) Look_Right</span><br style="font-weight: bold;">
|
||||
<span style="font-weight: bold;">4) Look_Left</span><br style="font-weight: bold;">
|
||||
<span style="font-weight: bold;">5) Tilt_Left</span><br style="font-weight: bold;">
|
||||
<span style="font-weight: bold;">6) Tilt_Right</span><br>
|
||||
<br>
|
||||
You can work on a corrective shape, then click ‘<span style="font-weight: bold;">Add Pose Shape To Morpher</span>’ and it will apply your work over the associated channel so that you can test as you go. If you click ‘<span style="font-weight: bold;">Extract Relative Pose Shape</span>’,
|
||||
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>
|
||||
@@ -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;">
|
||||
|
||||
<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" /></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>
|
||||
@@ -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> </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> </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> </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
|
||||
“Facial Tools”.</p>
|
||||
|
||||
|
||||
<p style="font-family: Arial;" class="MsoNormal">Select your LOD1 and click “Load Morphs From Selected”. </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: “Dummy_Lip_funneler”.</p>
|
||||
|
||||
|
||||
<p style="font-family: Arial;" class="MsoNormal">Now activate “Organize” 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>
|
||||
@@ -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’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 > 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 “Select Source
|
||||
Object” 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 “Save” 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----->left</span> /<span style="font-weight: bold;"> left----->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 “<span style="font-weight: bold;">Same Obj</span>”. 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 “New Obj” instead of
|
||||
“Same Obj”</p>
|
||||
|
||||
<p style="font-family: Arial;"></p>
|
||||
|
||||
|
||||
<p style="font-family: Arial;"></p>
|
||||
|
||||
|
||||
<span style="font-family: Arial;">
|
||||
|
||||
</span>
|
||||
</body>
|
||||
</html>
|
||||
@@ -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"> 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"> 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"> 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"> 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"> 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>
|
||||
@@ -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 <command> 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 <filename_string> </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 <function>
|
||||
<overwrite> </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 <var> <alias>
|
||||
<overwrite> </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
|
||||
<command_argument_string> - </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 <filename_string> </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 <filename_string></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 <Obj1> <Obj2>
|
||||
<MObj> <MAxis> <OAxis></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 <Obj1> <Obj2> </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 <Obj> </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 <Obj></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 <targetNode> <sourceNode> <vertexID></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
|
||||
<targetNode> <sourceNode> <deleteYN>
|
||||
<addMorphYN> <channelNum> <extractedNode></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 <targetNode> </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 <targetNode>
|
||||
<string_array> <echo></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 <string> </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 <string> </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 <path> 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 <data> <path>
|
||||
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 <path> </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 <path> </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 <obj></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 <string input> <string to cut> </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 <pos> <pos> </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 <parentObj>
|
||||
<selOrChild> <copyWhat></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. </span><br style="font-family: Arial;">
|
||||
|
||||
<span style="font-family: Arial;"><br>
|
||||
|
||||
</span>
|
||||
</body>
|
||||
</html>
|
||||
@@ -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> </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’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> </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=""> </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 – 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=""> </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> </o:p></p>
|
||||
|
||||
|
||||
<p style="font-family: Arial;" class="MsoNormal">Open the CryMorphManager and open the “Facial Tools”</p>
|
||||
|
||||
|
||||
<p style="font-family: Arial;" class="MsoNormal">Select the green head and add click on the “Load Morphs From
|
||||
Selection” 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 “Organize” your generated Morphs will be
|
||||
automatically aligned to the helper. Call the helper for this Dummy_+the name
|
||||
of the morph. At example: “Dummy_Lip_funneler”.</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 “Bake Morphs” 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’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>
|
||||
@@ -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"> 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"> 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"> 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"> 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"> 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 =>
|
||||
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"> 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"> 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
Reference in New Issue
Block a user