<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.3//EN" "https://www.web3d.org/specifications/x3d-3.3.dtd">
<X3D profile='Immersive' version='3.3' xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation='https://www.web3d.org/specifications/x3d-3.3.xsd'>
  <head>
    <meta content='LOA1_WalkAnimation.x3d' name='title'/>
    <meta content='Humanoid animation prototype reusable by any Humanoid.' name='description'/>
    <meta content='Cindy Ballreich cindy@ballreich.net 3Name3D' name='creator'/>
    <meta content='1997 3Name3D / Yglesias, Wallock, Divekar, Inc., all rights reserved.' name='rights'/>
    <meta content='Don Brutzman' name='translator'/>
    <meta content='1 October 2001' name='translated'/>
    <meta content='16 March 2026' name='modified'/>
    <meta content='http://www.ballreich.net/vrml/HAnim/nancy_HAnim.wrl' name='reference'/>
    <meta content='http://HAnim.org/Specifications/HAnim2001' name='reference'/>
    <meta content='http://HAnim.org/Models' name='reference'/>
    <meta content='http://HAnim.org/Nodes' name='reference'/>
    <meta content='Nancy Walk Animation HAnim 2001' name='subject'/>
    <meta content='https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Prototypes/LOA1_WalkAnimation.x3d' name='identifier'/>
    <meta content='X3D-Edit 3.3, https://www.web3d.org/x3d/tools/X3D-Edit' name='generator'/>
    <meta content='../license.html' name='license'/>
  </head>
  <Scene>
    <WorldInfo title='LOA1_WalkAnimation.x3d'/>
    <ProtoDeclare name='LOA1_WalkAnimation'>
      <ProtoInterface>
        <field accessType='inputOutput' name='cycleInterval' type='SFTime' value='2'/>
        <field accessType='inputOutput' name='enabled' type='SFBool' value='true'/>
        <field accessType='inputOutput' name='loop' type='SFBool' value='true'/>
        <field accessType='inputOutput' name='startTime' type='SFTime' value='0'/>
        <field accessType='inputOutput' name='stopTime' type='SFTime' value='-1'/>
        <field accessType='outputOnly' name='fraction_changed' type='SFFloat'/>
        <field accessType='outputOnly' name='isActive' type='SFBool'/>
        <field accessType='outputOnly' name='HumanoidRoot_translation_changed' type='SFVec3f'/>
        <field accessType='outputOnly' name='HumanoidRoot_rotation_changed' type='SFRotation'/>
        <field accessType='outputOnly' name='lower_body_rotation_changed' type='SFRotation'/>
        <field accessType='outputOnly' name='l_hip_rotation_changed' type='SFRotation'/>
        <field accessType='outputOnly' name='l_knee_rotation_changed' type='SFRotation'/>
        <field accessType='outputOnly' name='l_ankle_rotation_changed' type='SFRotation'/>
        <field accessType='outputOnly' name='l_midtarsal_rotation_changed' type='SFRotation'/>
        <field accessType='outputOnly' name='r_hip_rotation_changed' type='SFRotation'/>
        <field accessType='outputOnly' name='r_knee_rotation_changed' type='SFRotation'/>
        <field accessType='outputOnly' name='r_ankle_rotation_changed' type='SFRotation'/>
        <field accessType='outputOnly' name='r_midtarsal_rotation_changed' type='SFRotation'/>
        <field accessType='outputOnly' name='vl5_rotation_changed' type='SFRotation'/>
        <field accessType='outputOnly' name='skullbase_rotation_changed' type='SFRotation'/>
        <field accessType='outputOnly' name='l_shoulder_rotation_changed' type='SFRotation'/>
        <field accessType='outputOnly' name='l_elbow_rotation_changed' type='SFRotation'/>
        <field accessType='outputOnly' name='l_wrist_rotation_changed' type='SFRotation'/>
        <field accessType='outputOnly' name='r_shoulder_rotation_changed' type='SFRotation'/>
        <field accessType='outputOnly' name='r_elbow_rotation_changed' type='SFRotation'/>
        <field accessType='outputOnly' name='r_wrist_rotation_changed' type='SFRotation'/>
      </ProtoInterface>
      <ProtoBody>
        <Group>
          <TimeSensor DEF='TIMER'>
            <IS>
              <connect nodeField='cycleInterval' protoField='cycleInterval'/>
              <connect nodeField='enabled' protoField='enabled'/>
              <connect nodeField='loop' protoField='loop'/>
              <connect nodeField='startTime' protoField='startTime'/>
              <connect nodeField='stopTime' protoField='stopTime'/>
              <connect nodeField='fraction_changed' protoField='fraction_changed'/>
              <connect nodeField='isActive' protoField='isActive'/>
            </IS>
          </TimeSensor>
          <PositionInterpolator DEF='HUMANOIDROOT_POSITION_ANIMATOR' key='0 0.0417 0.125 0.1667 0.2083 0.25 0.2917 0.375 0.4583 0.5 0.5417 0.5833 0.625 0.7083 0.75 0.7917 0.875 0.9167 1' keyValue='0 -0.0093 0 0 -0.0039 0 0 -0.0088 0 0 -0.0149 0 0 -0.0264 0 0 -0.0393 0 0 -0.0502 0 0 -0.0747 0 0 -0.0273 0 0 -0.0161 0 0 -0.0113 0 0 -0.0058 0 0 -0.002 0 0 -0.0026 0 0 -0.0143 0 0 -0.038 0 0 -0.0565 0 0 -0.045 0 0 -0.0093 0'>
            <IS>
              <connect nodeField='value_changed' protoField='HumanoidRoot_translation_changed'/>
            </IS>
          </PositionInterpolator>
          <OrientationInterpolator DEF='HUMANOIDROOT_ANIMATOR' key='0 1' keyValue='0 1 0 0 0 1 0 0'>
            <IS>
              <connect nodeField='value_changed' protoField='HumanoidRoot_rotation_changed'/>
            </IS>
          </OrientationInterpolator>
          <OrientationInterpolator DEF='SACROILIAC_ANIMATOR' key='0 0.5 1' keyValue='0 0 -1 0.1056 0 0 1 0.0902 0 0 -1 0.1056'>
            <IS>
              <connect nodeField='value_changed' protoField='lower_body_rotation_changed'/>
            </IS>
          </OrientationInterpolator>
          <OrientationInterpolator DEF='L_HIP_ANIMATOR' key='0 0.25 0.375 0.5 0.6667 0.7917 0.9167 1' keyValue='-0.873 0.0609 0.484 0.2865 0.9963 -0.0106 0.0848 0.2488 0.9965 0.0159 -0.0822 0.3836 -0.7018 -0.0322 -0.7117 0.1289 -1 0 0 0.5518 -0.9964 0.0223 0.0817 0.5351 -0.9809 0.0491 0.1881 0.5204 -0.873 0.0609 0.484 0.2865'>
            <IS>
              <connect nodeField='value_changed' protoField='l_hip_rotation_changed'/>
            </IS>
          </OrientationInterpolator>
          <OrientationInterpolator DEF='L_KNEE_ANIMATOR' key='0 0.2083 0.375 0.5 0.6667 0.7917 0.9167 1' keyValue='1 0 0 0.3226 1 0 0 0.1556 1 0 0 0.0868 1 0 0 0.8751 1 0 0 1.131 1 0 0 0.0996 1 0 0 0.3942 1 0 0 0.3226'>
            <IS>
              <connect nodeField='value_changed' protoField='l_knee_rotation_changed'/>
            </IS>
          </OrientationInterpolator>
          <OrientationInterpolator DEF='L_ANKLE_ANIMATOR' key='0 0.125 0.2083 0.375 0.6667 0.9167 1' keyValue='-1 0 0 0.0671 -1 0 0 0.2152 -1 0 0 0.3184 -1 0 0 0.4717 -1 0 0 0.2912 1 0 0 0.1222 -1 0 0 0.0671'>
            <IS>
              <connect nodeField='value_changed' protoField='l_ankle_rotation_changed'/>
            </IS>
          </OrientationInterpolator>
          <OrientationInterpolator DEF='L_MIDTARSAL_ANIMATOR' key='0 0.5 1' keyValue='1 0 0 0 1 0 0 -0.2 1 0 0 0'>
            <IS>
              <connect nodeField='value_changed' protoField='l_midtarsal_rotation_changed'/>
            </IS>
          </OrientationInterpolator>
          <OrientationInterpolator DEF='R_HIP_ANIMATOR' key='0 0.125 0.2083 0.2917 0.375 0.5 0.6667 0.7917 0.9167 1' keyValue='-0.5831 0.0351 0.8116 0.1481 -0.995 0.023 0.0967 0.4683 -1 0.0019 0.008 0.4732 -0.998 -0.0158 -0.061 0.5079 -0.9911 -0.0354 -0.1286 0.5419 -0.9131 -0.0624 -0.403 0.3361 -0.4306 -0.0796 -0.899 0.0704 1 0 0 0.2571 0.9891 -0.0281 0.1444 0.3879 -0.5831 0.0351 0.8116 0.1481'>
            <IS>
              <connect nodeField='value_changed' protoField='r_hip_rotation_changed'/>
            </IS>
          </OrientationInterpolator>
          <OrientationInterpolator DEF='R_KNEE_ANIMATOR' key='0 0.125 0.2083 0.2917 0.375 0.5 0.6667 0.7917 0.9167 1' keyValue='1 0 0 0.8573 1 0 0 0.8926 1 0 0 0.5351 1 0 0 0.1756 1 0 0 0.1194 1 0 0 0.3153 1 -0 -0 0.0935 1 0 0 0.0856 1 0 0 0.2475 1 0 0 0.8573'>
            <IS>
              <connect nodeField='value_changed' protoField='r_knee_rotation_changed'/>
            </IS>
          </OrientationInterpolator>
          <OrientationInterpolator DEF='R_ANKLE_ANIMATOR' key='0 0.125 0.2083 0.375 0.4583 0.5 0.6667 0.75 0.7917 0.9167 1' keyValue='0 0 1 0 -1 0 0 0.3533 -1 0 0 0.1072 1 0 0 0.2612 1 -0 0 0.1268 -1 0 0 0.0179 -1 0 0 0.0582 -1 0 0 0.2398 -1 0 0 0.35 -1 0 0 0.3322 0 0 1 0'>
            <IS>
              <connect nodeField='value_changed' protoField='r_ankle_rotation_changed'/>
            </IS>
          </OrientationInterpolator>
          <OrientationInterpolator DEF='R_MIDTARSAL_ANIMATOR' key='0 0.5 1' keyValue='1 0 0 -0.2 1 0 0 0 1 0 0 -0.2'>
            <IS>
              <connect nodeField='value_changed' protoField='r_midtarsal_rotation_changed'/>
            </IS>
          </OrientationInterpolator>
          <OrientationInterpolator DEF='VL5_ANIMATOR' key='0 0.2083 0.375 0.75 0.8333 1' keyValue='0 1 0 0.0826 -0.0197 -0.5974 0.8017 0.0823 0.0093 -0.9648 0.2627 0.1734 -0.0124 0.9549 -0.2968 0.0873 -0.0081 0.9691 -0.2463 0.158 0 1 0 0.0826'>
            <IS>
              <connect nodeField='value_changed' protoField='vl5_rotation_changed'/>
            </IS>
          </OrientationInterpolator>
          <OrientationInterpolator DEF='SKULLBASE_ANIMATOR' key='0 0.375 0.4167 0.5 0.5833 0.6667 0.75 0.8333 0.9167 1' keyValue='0 -1 0 0.0864 0 1 0 0.1825 0 1 0 0.1505 0 1 0 0.1053 0 1 0 0.0439 0 -1 0 0.0312 0 -1 0 0.0794 0 -1 0 0.1616 0 -1 0 0.155 0 -1 0 0.0864'>
            <IS>
              <connect nodeField='value_changed' protoField='skullbase_rotation_changed'/>
            </IS>
          </OrientationInterpolator>
          <OrientationInterpolator DEF='L_SHOULDER_ANIMATOR' key='0 0.375 0.9167 1' keyValue='1 0 0 0.1189 -1 -0 0 0.1861 1 -0 -0 0.3357 1 0 0 0.1189'>
            <IS>
              <connect nodeField='value_changed' protoField='l_shoulder_rotation_changed'/>
            </IS>
          </OrientationInterpolator>
          <OrientationInterpolator DEF='L_ELBOW_ANIMATOR' key='0 0.375 0.9167 1' keyValue='-1 -0 0 0.066 -1 -0 -0 0.4884 -1 0 -0 0.0178 -1 -0 0 0.066'>
            <IS>
              <connect nodeField='value_changed' protoField='l_elbow_rotation_changed'/>
            </IS>
          </OrientationInterpolator>
          <OrientationInterpolator DEF='L_WRIST_ANIMATOR' key='0 0.375 0.9167 1' keyValue='0 -1 0 0.4611 -0.3302 -0.9275 0.1755 0.5389 0.0328 -0.9993 -0.0172 0.492 0 -1 0 0.4611'>
            <IS>
              <connect nodeField='value_changed' protoField='l_wrist_rotation_changed'/>
            </IS>
          </OrientationInterpolator>
          <OrientationInterpolator DEF='R_SHOULDER_ANIMATOR' key='0 0.375 0.9167 1' keyValue='-1 -0 -0 0.0935 1 0 0 0.3197 -1 -0 0 0.1564 -1 -0 -0 0.0935'>
            <IS>
              <connect nodeField='value_changed' protoField='r_shoulder_rotation_changed'/>
            </IS>
          </OrientationInterpolator>
          <OrientationInterpolator DEF='R_ELBOW_ANIMATOR' key='0 0.375 0.9167 1' keyValue='-1 -0 0 0.4115 -1 0 -0 0.0925 -1 -0 -0 0.5726 -1 -0 0 0.4115'>
            <IS>
              <connect nodeField='value_changed' protoField='r_elbow_rotation_changed'/>
            </IS>
          </OrientationInterpolator>
          <OrientationInterpolator DEF='R_WRIST_ANIMATOR' key='0 0.375 0.9167 1' keyValue='-0.8129 0.4759 -0.3357 0.1346 0.1533 -0.9878 0.0258 0.3902 -0.5701 0.7604 -0.311 0.366 -0.8129 0.4759 -0.3357 0.1346'>
            <IS>
              <connect nodeField='value_changed' protoField='r_wrist_rotation_changed'/>
            </IS>
          </OrientationInterpolator>
        </Group>
        <ROUTE fromField='fraction_changed' fromNode='TIMER' toField='set_fraction' toNode='HUMANOIDROOT_POSITION_ANIMATOR'/>
        <ROUTE fromField='fraction_changed' fromNode='TIMER' toField='set_fraction' toNode='HUMANOIDROOT_ANIMATOR'/>
        <ROUTE fromField='fraction_changed' fromNode='TIMER' toField='set_fraction' toNode='SACROILIAC_ANIMATOR'/>
        <ROUTE fromField='fraction_changed' fromNode='TIMER' toField='set_fraction' toNode='L_HIP_ANIMATOR'/>
        <ROUTE fromField='fraction_changed' fromNode='TIMER' toField='set_fraction' toNode='L_KNEE_ANIMATOR'/>
        <ROUTE fromField='fraction_changed' fromNode='TIMER' toField='set_fraction' toNode='L_ANKLE_ANIMATOR'/>
        <ROUTE fromField='fraction_changed' fromNode='TIMER' toField='set_fraction' toNode='L_MIDTARSAL_ANIMATOR'/>
        <ROUTE fromField='fraction_changed' fromNode='TIMER' toField='set_fraction' toNode='R_HIP_ANIMATOR'/>
        <ROUTE fromField='fraction_changed' fromNode='TIMER' toField='set_fraction' toNode='R_KNEE_ANIMATOR'/>
        <ROUTE fromField='fraction_changed' fromNode='TIMER' toField='set_fraction' toNode='R_ANKLE_ANIMATOR'/>
        <ROUTE fromField='fraction_changed' fromNode='TIMER' toField='set_fraction' toNode='R_MIDTARSAL_ANIMATOR'/>
        <ROUTE fromField='fraction_changed' fromNode='TIMER' toField='set_fraction' toNode='VL5_ANIMATOR'/>
        <ROUTE fromField='fraction_changed' fromNode='TIMER' toField='set_fraction' toNode='SKULLBASE_ANIMATOR'/>
        <ROUTE fromField='fraction_changed' fromNode='TIMER' toField='set_fraction' toNode='L_SHOULDER_ANIMATOR'/>
        <ROUTE fromField='fraction_changed' fromNode='TIMER' toField='set_fraction' toNode='L_ELBOW_ANIMATOR'/>
        <ROUTE fromField='fraction_changed' fromNode='TIMER' toField='set_fraction' toNode='L_WRIST_ANIMATOR'/>
        <ROUTE fromField='fraction_changed' fromNode='TIMER' toField='set_fraction' toNode='R_SHOULDER_ANIMATOR'/>
        <ROUTE fromField='fraction_changed' fromNode='TIMER' toField='set_fraction' toNode='R_ELBOW_ANIMATOR'/>
        <ROUTE fromField='fraction_changed' fromNode='TIMER' toField='set_fraction' toNode='R_WRIST_ANIMATOR'/>
      </ProtoBody>
    </ProtoDeclare>
    <!-- ====================================== -->
    <!-- Point to example use in case someone inspects this file -->
    <Anchor description='InterchangableActorsViaDynamicRouting' parameter='"target=_blank"' url='"InterchangableActorsViaDynamicRoutingPrototypes.x3d" "https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Prototypes/InterchangableActorsViaDynamicRoutingPrototypes.x3d" "InterchangableActorsViaDynamicRoutingPrototypes.wrl" "https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Prototypes/InterchangableActorsViaDynamicRoutingPrototypes.wrl"'>
      <Shape>
        <Text string='"LOA1_WalkAnimation.x3d" "defines a prototype" "for animating a humanoid." "" "Click this text to see" "InterchangableActorsViaDynamicRouting example."'>
          <FontStyle justify='"MIDDLE" "MIDDLE"' size='0.8'/>
        </Text>
        <Appearance>
          <Material diffuseColor='1 1 0.2'/>
        </Appearance>
      </Shape>
    </Anchor>
  </Scene>
</X3D>