There are some exes in the root directory (maxscript).
scmd.exe - 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 a directory is synced via perforce:
scmd ("p4 sync \"" + BuildPathFull_crytools + "Tools\\...\"") true
md5.exe- this is a freeware md5 hash generator, it is called from the CryTools md5 function.
These globally available variables can be accessed through the crytools struct.
fnStore, _fnStoreIndex, _varStore, _varStoreIndex - 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.
localBuildNumber - returns the number of the local build. (The build that the current crytools /maxscript dir is loaded from)
print crytools.localBuildNumber
"5571"
BuildPathFull - returns string of the artists build path to the bin32 directory
print crytools.BuildPathFull
"J:\Game02\bin32\"
maxDirTxt - returns string of the max root dir.
print crytools.MaxDirTxt
"C:\3dsmax7\"
editorPath - path string to the Editor
crytools.editorPath
"J:\Game02\bin32\Editor.exe"
cryINI - path string to the CryTools INI file
crytools.cryINI
"C:\Program Files\Autodesk\3ds Max 2008\plugins\CryExport.ini"
maxVersionNum - returns the version number of 3ds Max on which the script is being run
print crytools.maxVersionNum
"8"
project_name - returns the name of the project the artist resides on, taken from the build path.
print crytools.project_name
"Game02"
latest_build - 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.
print crytools.latest_build
"Game02(2670)_03_27_FastBuild"
latestBuildNumber - 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.
print crytools.latestBuildNumber
"2670"
cryExportPresent - set to true or false based on whether or not the exporter plugin is loaded.
print crytools.cryExportPresent
true
cbaPath - returns string of the CBA path.
print crytools.cbaPath
"J:\Game02\Game\Animations\Animations.cba"
rollback_status - 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.
print crytools.rollback_status
"false"
DOMAIN - 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
print crytools.DOMAIN
"INTERN.CRYTEK.DE"
These functions are added on load within AddCryTools.ms, and made available through the crytools struct.
scmd <command> wait - Silently runs a dos command using the cryengine export plugin (csexport.export.execute_command_line).
crytools.scmd ("mkdir \"" + crytools.maxDirTxt + "cry_temp\\bad\\\"") true
OK
md5 <filename_string> - 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.
crytools.md5 "C:
WINDOWS
explorer.exe"
"A0732187050030AE399B241436565E64"
storeFn <FUNCTION> <OVERWRITE> </OVERWRITE></FUNCTION> - 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:
cryTools.storeFn collapseVerts true crytools._fnstore#collapseVerts())crytools.retrieveFn "collapseVerts()")()
OK
storeVar <VAR> </VAR><ALIAS><VAR> </VAR><OVERWRITE><VAR></VAR></OVERWRITE></ALIAS> - 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:
cryTools.storeVar $ "obj1" true crytools._varstorecrytools.retrieveVar "obj1"
#($Box:Box01 @ [-101.424500,-0.000001,25.641026])
$Box:Box01 @ [-101.424500,-0.000001,25.641026]
alienBrain <command_argument_string> - This executes AlienBrain command arugments from within 3ds 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.
crytools.alienBrain "getlatest"
or something more complex like:
crytools.alienBrain ("ab getlatest Bin32\Tools\maxscript -s Server3 -d " + project_name + " -u login -p passwd -forcefileupdate -overwritewritable skip")
existFile <FILENAME_STRING></FILENAME_STRING> - Returns true/false whether file exists or not
crytools.existFile "C:
WINDOWS
explorer.exe"
true
existDir <FILENAME_STRING> </FILENAME_STRING>- Returns true/false whether directory exists or not
crytools.existDir "C:
WINDOWS"
true
or something more complex like:
if (crytools.existDir (maxDirTxt + "cry_temp")) =}} true then (print "cry_temp exists")
"cry_temp exists"
getDNS() - 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.
crytools.getDNS()
"INTERN.CRYTEK.DE"
MirrorObjs <OBJ1> <OBJ2> <MOBJ> <MAXIS> <OAXIS> </OAXIS></MAXIS></MOBJ></OBJ2></OBJ1> - 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.
crytools.MirrorObjs right_arm[i] left_arm[i] $root #x #x
matchPivot <OBJ1> <OBJ2></OBJ2></OBJ1> - Aligns the pivot of an object to that of another
crytools.matchPivot $obj1 $obj2
findRoot <OBJ></OBJ> - Returns the root of the hierarchy the object is a member of
crytools.findroot $Bip01 L Forearm
$Editable_Mesh:Bip01 @ [0.000000,0.000038,90.368042]
getChildren <OBJ></OBJ> - Returns the root of the hierarchy the object is a member of
print (crytools.getchildren $Bip01 L Thigh)
$PolyMesh:Bip01 L Calf @ [12.594235,-1.113732,49.932632]
$PolyMesh:Bip01 L Foot @ [16.074495,4.691678,9.804122]
$Editable_Mesh:Bip01 L Toe0 @ [17.749069,-7.237181,0.444188]
$Dummy:_Bip01LToeHelper @ [19.030598,-16.366177,0.444188]
$Bone:Bip01 L Toe0Nub @ [19.145245,-17.182899,0.149435]
$Bone:Bip01 L Heel @ [16.074499,4.691682,-0.687943]
$Editable_Mesh:Bip01 L knee @ [12.464909,-0.477371,47.556950]
$Dummy:Bip01 L knee_end @ [13.773256,-8.799936,43.612862]
$Editable_Mesh:weaponPos_pistol_L_leg @ [23.779840,-4.798794,68.739929]
getBips - Returns the Bipeds in the current scene
for obj in crytools.getBips() do print obj.name
"Bip01"
"Bip02"
"Bip03"
"Bip04"
getBindPoseVertexTarget <TARGETNODE> <SOURCENODE> <VERTEXID></VERTEXID></SOURCENODE></TARGETNODE>
createBindPoseMorph <TARGETNODE> <SOURCENODE> <DELETEYN> <ADDMORPHYN> <CHANNELNUM> <EXTRACTEDNODE>
</EXTRACTEDNODE></CHANNELNUM></ADDMORPHYN></DELETEYN></SOURCENODE></TARGETNODE>inFromUDP <TARGETNODE> </TARGETNODE>- This function reads the User Defined Properties for an object into an array
crytools.inFromUDP $
#("mass }} 110", "capsule")
outToUDP <TARGETNODE> <STRING_ARRAY> <ECHO></ECHO></STRING_ARRAY></TARGETNODE> - This function reads/writes to the User Defined Properties buffer for an object
crytools.outToUDP #("I have needed this","for quite some time") $ true
"I have needed this for quite some time"
getUserPropBuffer $
"I have needed this for quite some time"
crytools.inFromUDP $
#("I have needed this", "for quite some time")
local2unc <string> - This will convert a local drive letter to a UNC path
crytools.local2unc "p"
"\\192.168.0.9\public"
local2unc "k"
"\\server2\Artists"
forceLowerCase <STRING> </STRING>- This will convert a string to lowercase
crytools.forceLowerCase "MaSs }} 19.9"
"mass }} 19.9"
nFromINI <PATH> echo</PATH> - This will read in a text file line by line and return an array where array element number corresponds to the line number.
crytools.infromINI (crytools.maxDirTxt + "
plugins
CryExport.ini") true
"[Sandbox]"
"path = J:\Game02\Bin32\Editor.exe"
"animlistpath = J:\Game02\Game\Animations\Animations.cba"
"path {{ J:\Game02\Bin32\Editor.exe", "animlistpath }} J:\Game02\Game\Animations\Animations.cba")
outToINI <data> <path> echo - This will export an array to a text file line by line where array element number corresponds to the line number.
crytools.outtoini test (crytools.maxDirTxt + "
plugins
CryExport.ini") true
"[Sandbox]"
"path = J:\Game02\Bin32\Editor.exe"
"animlistpath = J:\Game02\Game\Animations\Animations.cba"
plusR <PATH></PATH> - this will check if the file exists and make it read-only
crytools.plusR (crytools.maxDirTxt + "
plugins
CryExport.ini")
minusR <PATH></PATH> - this will check if the file exists and make it writable
crytools.minusR (crytools.maxDirTxt + "
plugins
CryExport.ini")
objTrajectoryToSpline <OBJ> </OBJ>- this will create a spline showing the trajectory of all selected objects
cutString <STRING input> <STRING cut to> </STRING></STRING>- this removes the string to cut from the string input.
crytools.cutString "Crysis is a beautiful, meticulously designed game" ", meticulously designed"
"Crysis is a beautiful game"
vertDistance <POS> <POS></POS></POS> - this will output the distance between two positions in space
crytools.vertDistance $Box01.pos $Box02.pos
169.997
copyPasteController <PARENTOBJ> <SELORCHILD> <COPYWHAT> </COPYWHAT></SELORCHILD></PARENTOBJ>- this will copy and paste a controller, here is an example from CryRiggingTools:
crytools.copyPasteController mObj "children" "rp"
sliderMan - 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.
A folder named cry_temp is created by AddCryTools.ms, CryTools store many things in this folder, like the following examples:
DOMAIN:INTERN.CRYTEK.DE
WARNMATS:true
REPARENT:true
SUPPRESS:false
NO_UNPARENT_WEAPON:false
RIGGING_POS:1396:78
ANIMATION_POS:1192:78
MORPH_POS:2072:70
ARTIST_POS:698:457
SPLASH:true
UPDATE_COLLECTIONS:false
SYNC_COLLECTIONS:false
LOADOLDANIMTOOLS:false
GENERATEMENU:true
C:\3dsmax7\C:\graphics\Adobe Photoshop CS2\Plug-Ins\