When I was rigging with Advanced skeleton in Maya, I found that ADV will match the bottom of the foot exact with XZ plane. I guess it is for the convenience of riggers who wonโ€™t place the big toe and the pinky toe joint exactly on the floor. However, from time to time we needs to rig a character whose foot is not exactly locate at Y=0 plane, maybe it has more than one pair of foots, or wearing a pair of high heel shoes. When it comes, the rock function would not work well on your character.
So this article helps you to solve this issue.
Letโ€™s see the source code first:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//Pinky/index toe side2side rocking
if (`objExists $toes` && `objExists $bigToe` && `objExists $pinkyToe`)
{
addAttr -k 1 -ln rock -at double -dv 0 ("IK"+$fitJointIK[$i]+$side);
createNode -n ("IK"+$fitJointIK[$i]+"FootRockInnerPivot"+$side) -p $parent transform;
// createNode -n ("IK"+$fitJointIK[$i]+"FootRockOuterPivot"+$side) -p $parent transform;
setAttr ("IK"+$fitJointIK[$i]+"FootRockInnerPivot"+$side+".rotateOrder") 5;
asAlign ("IK"+$fitJointIK[$i]+"FootRockInnerPivot"+$side) ("Roll"+$toes+$side) 1 1 0 0;
$pos=`xform -q -ws -t $toes`;
if (`objExists $bigToe`)
$pos=`xform -q -ws -t $bigToe`;
xform -ws -t ($pos[0]*$b) 0 $pos[2] ("IK"+$fitJointIK[$i]+"FootRockInnerPivot"+$side);
parent ("IK"+$fitJointIK[$i]+"FootRockInnerPivot"+$side) ("Roll"+$toes+$side);
duplicate -n ("IK"+$fitJointIK[$i]+"FootRockOuterPivot"+$side) ("IK"+$fitJointIK[$i]+"FootRockInnerPivot"+$side);
$pos=`xform -q -ws -t $toes`;
if (`objExists $pinkyToe`)
$pos=`xform -q -ws -t $pinkyToe`;
xform -ws -t ($pos[0]*$b) 0 $pos[2] ("IK"+$fitJointIK[$i]+"FootRockOuterPivot"+$side);
parent ("IK"+$fitJointIK[$i]+"FootRockInnerPivot"+$side) ("IK"+$fitJointIK[$i]+"FootRockOuterPivot"+$side) $parent;

Looks complex, but we only need to pay attention to the code that clarifies the position of the controller. So here it is.

1
2
3
4
5
...
xform -ws -t ($pos[0]*$b) 0 $pos[2]
...
xform -ws -t ($pos[0]*$b) 0 $pos[2]
...

You see it ignores the Y value and forces it to zero. That is why our foot are always gennerated on the ground.
Letโ€™s modify it into this:

1
2
3
4
5
...
xform -ws -t ($pos[0]*$b) $pos[1] $pos[2]
...
xform -ws -t ($pos[0]*$b) $pos[1] $pos[2]
...

We get its Y value back. Now restart ADV and try generate your ADV skeleton again, you can place your foot at any where you want and the rock function works well!