This topic will give you a quick overview of the MAXScript language changes and improvements in 3ds Max 2022 and updates. For details on each feature, please follow the links to the respective documentation pages.
Note:
New additions to MAXScript in 3ds Max 2022 are marked with NEW in 3ds Max 2022:... throughout the MAXScript Reference. The word NEW links back to this page.
Safe Scene Loading | The new getCurrentScriptSourceType() function returns whether the current script has the Safe Scene Script Execution security policies applied to it. The new SceneScriptSecurityManager interface lets you obtain information about the state of Safe Scene Script Execution. |
Box2 and Box3 | New methods and operators have been added. Operator +, enlargeBy() and expandToInclude() for Box2, and Operator + for Box3 |
Bounding Box property | These value types have a new .boundingBox property that returns a Box3 value representing the contained nodes' bounding box: node, NodeChildrenArray, pathname, SelectionSetArray, and ObjectSet. |
Bounding Box methods | The Node bounding box methods nodeGetBoundingBox() and nodeLocalBoundingBox() now take an optional asBox3:<bool> argument that, when true, cause the methods to return the bounding box as a Box3 value. |
Spinner and Slider controls | The type of the value returned by the .value property and on changed event for both the Spinner and Slider ui controls now matches the type of the control specified when it was created, either #float or #integer. |
Custom Attributes array | The Custom Attributes virtual array class MAXCustAttribArray now supports the isDeleted() method as well as standard comparison operators == and !=. |
Non Localized Name Access | Scripted Plug-in Parameters can take a new nonLocalizedName:<string> that defines the parameter name when it is accessed in a script The maxclass value has a new read-only nonLocalizedName property that contains the non-localized name of the class. |
ATSOps | New keyword arguments have been added to ATSOps methods GetDependencyFileList() and SelectFiles() to control how to repath and compare files. |
Localized Name Access | Several methods now have a localizedName:<bool> parameter (or localizedNames:<bool> when they return an array) to control whether they return the localized or non-localized name for the target object: getObjectName() getSubAnimName() getSubMtlSlotName() getSubTexmapSlotName() getClassName() WM3_MC_GetName() WM3_MC_SetName() getSubAnimNames() |
Previously Undocumented Items | Box2 methods: <bool>intersects(), <box2>copy() Box3 methods: <box3>copy(), <box3>rectify() pathConfig struct methods: doSetProjectFolderSteps() and doSetProjectFolderStepsUsingDirectory() <ViewportViewSettingImpl>.ProgressiveRenderingEnabled |
Deprecated Items | Airflow_Node and Airflow_Spline are now deprecated |
Several terms in the 3ds Max user interface, class, and method names in MAXScript have been changed or removed because they were not aligned with Autodesk values of diversity and inclusion. We want everyone to feel welcome when using 3ds Max as an end user or tool developer.
Therefore, the names of several MAXScript APIs that included words such as "master" or "slave" have been changed to use the terms "driver" and "driven" respectively. We tried to keep MAXScript as backward compatible as possible; however, there may be cases where scripts break.
Here is a list of all the MAXScript API names that were updated, followed by their new name:
BipSlave_Control -> BipDriven_Control GetMasterController -> GetPointControllerContainer NewDefaultMasterPointController -> NewDefaultPointControllerContainer Master_Controller_plugin_not_found -> Driver_Block_Control_plugin_not_found Master_Point_Controller -> Point_Controller_Container MasterPointController -> PointControllerContainer RetimerMasterCtrl -> RetimerDriverCtrl Slave_Control -> Driven_Control Slave_Point3 -> Driven_Point3 SlaveFloat -> DrivenFloat SlaveMatrix3 -> DrivenMatrix3 SlavePoint3 -> DrivenPoint3 SlavePoint4 -> DrivenPoint4 SlavePos -> DrivenPos SlaveRotation -> DrivenRotation SlaveScale -> DrivenScale Daylight_Slave_Controller -> Daylight_Driven_Controller Daylight_Slave_Intensity_Controller -> Daylight_Driven_Intensity_Controller Sunlight_Daylight_Slave_Controller -> Sunlight_Daylight_Driven_Controller Sunlight_Daylight_Slave_ControllerMatrix3Controller -> Sunlight_Daylight_Driven_ControllerMatrix3Controller Sunlight_Daylight_Slave_Intensity_Controller -> Sunlight_Daylight_Driven_Intensity_Controller Sunlight_Daylight_Slave_Intensity_ControllerFloatController -> Sunlight_Daylight_Driven_Intensity_ControllerFloatController Sunlight_Slave_Controller -> Sunlight_Driven_Controller Sunlight_Slave_Intensity_Controller -> Sunlight_Driven_Intensity_Controller MasterBlock -> DriverBlock MasterBlockController -> DriverBlockController MasterList -> BlockControl Master_Layer -> Main_Layer MasterLayer -> MainLayer MasterLayerControlManager -> MainLayerControlManager Master_Motion_Clip -> Driver_Motion_Clip MasterClip -> DriverClip Max_Master_Clip -> Max_Driver_Clip MaxMotionClipMaster -> MaxMotionClipDriver Motion_Clip_SlaveFloat -> Motion_Clip_DrivenFloat Motion_Clip_SlavePoint3 -> Motion_Clip_DrivenPoint3 Motion_Clip_SlavePos -> Motion_Clip_DrivenPos Motion_Clip_SlaveRotation -> Motion_Clip_DrivenRotation Motion_Clip_SlaveScale -> Motion_Clip_DrivenScale Reaction_Master -> Reaction_Driver ReactionMaster -> ReactionDriver SprayMaster -> SprayDriver StereoCameraSlave -> StereoCameraDriven MAXScript properties <ClipAssigner>.masterblocks -> driverblocks <MassFX_RBody>.GetRBMeshOverrideMasterMat -> GetRBMeshOverrideDriverMat <MassFX_RBody>.SetRBMeshOverrideMasterMat -> SetRBMeshOverrideDriverMat <nvpx>.GetRBMeshOverrideMasterMat -> GetRBMeshOverrideDriverMat <nvpx>.SetRBMeshOverrideMasterMat -> SetRBMeshOverrideDriverMat <MaxLiquidSolver>.masterVoxelSize -> baseVoxelSize <Point_Cache>.loadTypeSlave -> loadTypeNetwork <Point_CacheSpacewarpModifier>.loadTypeSlave -> loadTypeNetwork <Select_the_Biped_for_use_as_a_retargeting_reference>.masterMaxClip -> driverMaxClip <Float_Wire>.isMaster -> isDriver <Float_Wire>.isSlave -> isDriven <Float_Wire>.slaveAnimation -> drivenAnimation <Point3_Wire>.isMaster -> isDriver <Point3_Wire>.isSlave -> isDriven <Point3_Wire>.slaveAnimation -> drivenAnimation <Point4_Wire>.isMaster -> isDriver <Point4_Wire>.isSlave -> isDriven <Point4_Wire>.slaveAnimation -> drivenAnimation <Position_Wire>.isMaster -> isDriver <Position_Wire>.isSlave -> isDriven <Position_Wire>.slaveAnimation -> drivenAnimation <Rotation_Wire>.isMaster -> isDriver <Rotation_Wire>.isSlave -> isDriven <Rotation_Wire>.slaveAnimation -> drivenAnimation <Scale_Wire>.isMaster -> isDriver <Scale_Wire>.isSlave -> isDriven <Scale_Wire>.slaveAnimation -> drivenAnimation MAXScript Enums <SchematicView>.testIncludeFilter: #masterPoint -> #pointControllerContainers <SchematicView>.setIncludeFilter: same <SchematicView>.clearIncludeFilter: same MAXScript interfaces Interface: IRingArrayMaster -> IRingArrayDriver MAXScript SubAnim Names #Master_Point_Controller -> #Point_Controller_Container #Master -> #Point_Controller_Container #Master_CV_Control -> #CV_Controller_Container Others gxmlio.wireparams: #(..., #isMaster, #isSlave, #slaveAnimation,...) -> #(..., #isDriver, #isDriven, #drivenAnimation,...)