<?xml version="1.0"?>
<ItemRenderer>
  <Data>
    <Sprite name="s_foot1" fileName="game/player_feet16.rttex" textureSize="32" frame="31,22" />
    <Sprite name="s_foot2" fileName="game/player_feet16.rttex" textureSize="32" frame="31,23" />
    <Sprite name="s_transform" fileName="game/tf_page4.rttex" textureSize="64" frame="0,7" />
    <Sprite name="s_punchFlash" fileName="game/tf_page4.rttex" textureSize="64" frame="4,8" />
    <Sprite name="s_tire" fileName="game/particles12.rttex" textureSize="32" frame="22,8" />
    <Sprite name="s_tireTrail" fileName="game/particles12.rttex" textureSize="32" frame="20,8" />
    <Sprite name="s_transformSmoke" fileName="game/particles10.rttex" textureSize="32" frame="17,22" />
    <Sprite name="s_bikeBack" fileName="game/player_feet16.rttex" textureSize="32" frame="0,24" />
    <Sprite name="s_bikeFront" fileName="game/player_feet16.rttex" textureSize="32" frame="0,25" />
    <Sprite name="s_wings" fileName="game/particles12.rttex" textureSize="32" frame="16,8" />
    
    <StateMachines>
      <StateMachine name="Motion">
        <States>
          <State name="Idle" />
          <State name="Move" />
        </States>
        <Transitions>
          <Transition to="Idle" from="Move">
            <Condition>
              <IsVariableFloat name="speed.length" operator="Less" abs="true">0.1</IsVariableFloat>
            </Condition>
          </Transition>
          <Transition to="Move" from="Idle">
            <Condition>
              <IsVariableFloat name="speed.length" operator="Greater" abs="true">0.1</IsVariableFloat>
            </Condition>
          </Transition>
        </Transitions>
      </StateMachine>
      <StateMachine name="Transform">
        <States>
          <State name="Idle" />
          <State name="Walk" />
          <State name="Jump" />
          <State name="Fall" />
          <State name="StartPunch" />
          <State name="Punch" />
        </States>
        <Transitions>
          <Transition to="Idle" from="Walk|Fall|Punch|StartPunch|Jump">
            <Condition type="and">
              <IsVariableBool name="onGround">true</IsVariableBool>
              <IsVariableFloat name="speed.length" operator="Less" abs="true">0.1</IsVariableFloat>
              <IsAction operator="NotEqual">PUNCH</IsAction>
            </Condition>
          </Transition>
          <Transition to="Walk" from="Idle|Fall|Punch|StartPunch|Jump">
            <Condition type="and">
              <IsVariableBool name="onGround">true</IsVariableBool>
              <IsVariableFloat name="speed.length" operator="Greater" abs="true">0.1</IsVariableFloat>
              <IsAction operator="NotEqual">PUNCH</IsAction>
            </Condition>
          </Transition>
          <Transition to="Jump" from="Idle|Walk|Fall|Punch|StartPunch">
            <Condition type="and">
              <IsVariableBool name="onGround">false</IsVariableBool>
              <IsVariableFloat name="speed.y" operator="Less">-0.1</IsVariableFloat>
              <IsAction operator="NotEqual">PUNCH</IsAction>
            </Condition>
          </Transition>
          <Transition to="Fall" from="Jump|Idle|Walk|Punch|StartPunch">
            <Condition type="and">
              <IsVariableBool name="onGround">false</IsVariableBool>
              <IsVariableFloat name="speed.y" operator="Greater">0.1</IsVariableFloat>
              <IsAction operator="NotEqual">PUNCH</IsAction>
            </Condition>
          </Transition>
          <Transition to="StartPunch" from="Idle|Walk|Jump|Fall">
            <Condition type="and">
              <IsAction>PUNCH</IsAction>
            </Condition>
          </Transition>
          <Transition to="Punch" from="StartPunch">
            <Condition type="and">
              <IsAction>PUNCH</IsAction>
              <IsAnimationFinished>a_startPunch</IsAnimationFinished>
            </Condition>
          </Transition>
        </Transitions>
      </StateMachine>
      <StateMachine name="IsTransformed">
        <States>
          <State name="No" />
          <State name="Transition" />
          <State name="Yes" />
        </States>
        <Transitions>
          <Transition to="Yes" from="Transition">
            <Condition>
              <IsItemTransformed>true</IsItemTransformed>
            </Condition>
          </Transition>
          <Transition to="No" from="Transition">
            <Condition>
              <IsItemTransformed>false</IsItemTransformed>
            </Condition>
          </Transition>
          <Transition to="Transition" from="No">
            <Condition>
              <IsItemTransformed>true</IsItemTransformed>
            </Condition>
          </Transition>
          <Transition to="Transition" from="Yes">
            <Condition>
              <IsItemTransformed>false</IsItemTransformed>
            </Condition>
          </Transition>
        </Transitions>
      </StateMachine>
      <StateMachine name="Float">
        <States>
          <State name="No" />
          <State name="Yes" />
        </States>
        <Transitions>
          <Transition to="Yes" from="No">
            <Condition type="and">
              <IsItemTransformed>true</IsItemTransformed>
              <IsVariableBool name="onGround">true</IsVariableBool>
            </Condition>
          </Transition>
          <Transition to="No" from="Yes">
            <Condition type="or">
              <IsItemTransformed>false</IsItemTransformed>
              <IsVariableBool name="onGround">false</IsVariableBool>
            </Condition>
          </Transition>
        </Transitions>
      </StateMachine>
      <StateMachine name="PunchAnim">
        <States>
          <State name="Off"/>
          <State name="Start" ExitTime="0.1" />
          <State name="Continue"/>
          <State name="End" ExitTime="0.1" />
        </States>
        <Transitions>
          <Transition from="Off" to="Start">
            <Condition type="and">
              <IsAction>PUNCH</IsAction>
              <IsZombified>false</IsZombified>
            </Condition>
          </Transition>
          <Transition from="Start" to="Continue"/>
          <Transition from="Continue" to="End">
            <Condition>
              <IsAction operatorType="NotEqual">PUNCH</IsAction>
            </Condition>
          </Transition>
          <Transition from="End" to="Off"/>
        </Transitions>
      </StateMachine>
    </StateMachines>
    <Animations>
      <InterpolationVec2Animation name="a_punchStart" variableName="calculatedPos" targetVariableName="target.pos" animTime="100" playOnState="PunchAnim.Start"/>
      <InterpolationVec2Animation name="a_punchContinue" variableName="calculatedPos" targetVariableName="target.pos" animTime="30" isLoop="true" playOnState="PunchAnim.Continue"/>
      <InterpolationVec2Animation name="a_punchEnd" variableName="calculatedPos" targetVariableName="context.pos" animTime="100" playOnState="PunchAnim.End"/>

      <InterpolationVec2Animation name="a_asdfStartL" variableName="tire.Offset.Left" targetValue="0,0" animTime="100" playOnState="PunchAnim.Start"/>
      <CurveAnimationVec2 name="a_asdfContinueL" isLoop="true" animTime="400" playOnState="PunchAnim.Continue">
        <Curve name="tire.Offset.Left">
          <KeyFrame>0, 0,0</KeyFrame>
          <KeyFrame>0.5,-12,0</KeyFrame>
          <KeyFrame>1, 0,0</KeyFrame>
        </Curve>
      </CurveAnimationVec2>
      <InterpolationVec2Animation name="a_dfyjrtEndL" variableName="tire.Offset.Left" targetValue="-20,-32" animTime="100" playOnState="PunchAnim.End"/>

      <InterpolationVec2Animation name="a_asdfStartR" variableName="tire.Offset.Right" targetValue="0,0" animTime="100" playOnState="PunchAnim.Start"/>
      <CurveAnimationVec2 name="a_asdfContinueR" isLoop="true" animTime="400" playOnState="PunchAnim.Continue">
        <Curve name="tire.Offset.Right">
          <KeyFrame>0, 0,0</KeyFrame>
          <KeyFrame>0.5,12,0</KeyFrame>
          <KeyFrame>1, 0,0</KeyFrame>
        </Curve>
      </CurveAnimationVec2>
      <InterpolationVec2Animation name="a_dfyjrtEndR" variableName="tire.Offset.Right" targetValue="20,-32" animTime="100" playOnState="PunchAnim.End"/>

      <CurveAnimationFloat name="a_tireRotationRight" playOnState="PunchAnim.Start|PunchAnim.Continue|PunchAnim.End" isLoop="true" useFacing="RIGHT" animTime="250">
        <Curve name="tireAngle">
          <KeyFrame>0, 0</KeyFrame>
          <KeyFrame>1, 360</KeyFrame>
        </Curve>
      </CurveAnimationFloat>
      <CurveAnimationFloat name="a_tireRotationLeft" playOnState="PunchAnim.Start|PunchAnim.Continue|PunchAnim.End" isLoop="true" useFacing="LEFT" animTime="250">
        <Curve name="tireAngle">
          <KeyFrame>0, 0</KeyFrame>
          <KeyFrame>1, -360</KeyFrame>
        </Curve>
      </CurveAnimationFloat>
      
      <SpriteAnimation name="a_wings" sprite="s_wings" animTime="400" isLoop="true" autoPlay="true">
        <Frame>16,8</Frame>
        <Frame>17,8</Frame>
        <Frame>18,8</Frame>
        <Frame>19,8</Frame>
      </SpriteAnimation>
      <SpriteAnimation name="a_bikeBackMove" sprite="s_bikeBack" animTime="400" isLoop="true" playOnState="Motion.Move">
        <Frame>1,24</Frame>
        <Frame>2,24</Frame>
        <Frame>3,24</Frame>
        <Frame>4,24</Frame>
      </SpriteAnimation>
      <SpriteAnimation name="a_bikeFrontMove" sprite="s_bikeFront" animTime="400" isLoop="true" playOnState="Motion.Move">
        <Frame>1,25</Frame>
        <Frame>2,25</Frame>
        <Frame>3,25</Frame>
        <Frame>4,25</Frame>
      </SpriteAnimation>
      <SpriteAnimation name="a_bikeBackIdle" sprite="s_bikeBack" animTime="400" isLoop="true" playOnState="Motion.Idle">
        <Frame>0,24</Frame>
      </SpriteAnimation>
      <SpriteAnimation name="a_bikeFrontIdle" sprite="s_bikeFront" animTime="400" isLoop="true" playOnState="Motion.Idle">
        <Frame>0,25</Frame>
      </SpriteAnimation>
      <SpriteAnimation name="a_idle" sprite="s_transform" animTime="400" isLoop="true" playOnState="Transform.Idle">
        <Frame>0,7</Frame>
        <Frame>1,7</Frame>
        <Frame>2,7</Frame>
        <Frame>3,7</Frame>
      </SpriteAnimation>
      <SpriteAnimation name="a_walk" sprite="s_transform" animTime="400" isLoop="true" playOnState="Transform.Walk">
        <Frame>0,7</Frame>
        <Frame>1,7</Frame>
        <Frame>2,7</Frame>
        <Frame>3,7</Frame>
      </SpriteAnimation>
      <SpriteAnimation name="a_jump" sprite="s_transform" animTime="400" isLoop="true" playOnState="Transform.Jump">
        <Frame>4,7</Frame>
        <Frame>5,7</Frame>
        <Frame>6,7</Frame>
        <Frame>7,7</Frame>
      </SpriteAnimation>
      <SpriteAnimation name="a_fall" sprite="s_transform" animTime="200" isLoop="true" playOnState="Transform.Fall">
        <Frame>8,7</Frame>
        <Frame>9,7</Frame>
        <Frame>10,7</Frame>
        <Frame>11,7</Frame>
      </SpriteAnimation>
      <SpriteAnimation name="a_punch" sprite="s_transform" animTime="400" isLoop="true" playOnState="Transform.Punch">
        <Frame>0,8</Frame>
        <Frame>1,8</Frame>
        <Frame>2,8</Frame>
        <Frame>3,8</Frame>
      </SpriteAnimation>
      <SpriteAnimation name="a_startPunch" sprite="s_transform" animTime="400" playOnState="Transform.StartPunch">
        <Frame>12,7</Frame>
        <Frame>13,7</Frame>
        <Frame>14,7</Frame>
        <Frame>15,7</Frame>
      </SpriteAnimation>
      <SpriteAnimation name="a_tireTrail" sprite="s_tireTrail">
        <Frame>20,8</Frame>
        <Frame>21,8</Frame>
      </SpriteAnimation>
      <CurveAnimationVec3 name="a_Offset" isLoop="true" animTime="1000" playOnState="Float.Yes">
        <Curve name="floatingOffset">
          <KeyFrame>0, 0</KeyFrame>
          <KeyFrame>0.5, 0,-10,0</KeyFrame>
          <KeyFrame>1, 0</KeyFrame>
        </Curve>
      </CurveAnimationVec3>
      <CurveAnimationVec3 name="a_OffsetAir" isLoop="true" animTime="700" playOnState="Float.No">
        <Curve name="floatingOffset">
          <KeyFrame>0, 0,0,0</KeyFrame>
        </Curve>
      </CurveAnimationVec3>
    </Animations>
    <ParticleSystems>
      <ParticleSystem name="ps_flash" updateStage="AddClothingParticles" renderStage="RenderTransform" updateState="Transform.StartPunch">
        <Emitter>
          <Set name="offset">0, -36</Set>
          <Set name="emissionInterval">0.4</Set>
          <Set name="infParticles">true</Set>
          <Set name="infLifeTime">true</Set>
          <Set name="checkParticleNumToEmit">true</Set>
          <Set name="particlesPerEmission">1</Set>
          <Set name="particlesToEmit">1</Set>
        </Emitter>
        <Particle usePlayerFacing="true">
          <Set name="sprite">s_punchFlash</Set>
          <Set name="relativeToEmitter">true</Set>
          <Set name="blendingMode">PREMULTIPLIED_ALPHA</Set>
          <Curve name="initialAlpha">
            <KeyFrame>0, 1</KeyFrame>
            <KeyFrame>1, 0</KeyFrame>
          </Curve>
          <Curve name="initialScale">
            <KeyFrame>0, 0.75,0.75</KeyFrame>
            <KeyFrame>0.6, 1.25,1.25</KeyFrame>
            <KeyFrame>1, 1.35,1.35</KeyFrame>
          </Curve>
          <Set name="lifeTime">0.4</Set>
          <Set name="inSpecificOrder">true</Set>
        </Particle>
      </ParticleSystem>
      <ParticleSystem name="p_flashShards" updateStage="AddClothingParticles" updateState="IsTransformed.Transition">
        <Emitter>
          <Set name="offset">0, -16</Set>
          <Set name="emissionInterval">0.1</Set>
          <Set name="infParticles">true</Set>
          <Set name="infLifeTime">true</Set>
          <Set name="checkParticleNumToEmit">true</Set>
          <Set name="particlesPerEmission">32</Set>
          <Set name="particlesToEmit">1</Set>
        </Emitter>
        <Particle usePlayerFacing="true">
          <Set name="sprite">s_transformSmoke</Set>
          <Set name="blendingMode">PREMULTIPLIED_ALPHA</Set>
          <Curve name="initialAlpha">
            <KeyFrame>0, 1</KeyFrame>
            <KeyFrame>0.5, 1</KeyFrame>
            <KeyFrame>1, 0</KeyFrame>
          </Curve>
          <Random name="offset" min="-16,-16" max="16,16"/>
          <Set name="initialScale">1.5,1.5</Set>
          <Set name="lifeTime">1</Set>
          <RandomRadial name="initialVelocity" angleRange="0,360" radiusRange="20,60" />
        </Particle>
      </ParticleSystem>
      <ParticleSystem name="p_flashShardsRespawn" updateStage="OnRespawned" updateState="IsTransformed.Yes">
        <Emitter>
          <Set name="offset">0, -16</Set>
          <Set name="emissionInterval">0.1</Set>
          <Set name="infParticles">true</Set>
          <Set name="infLifeTime">true</Set>
          <Set name="checkParticleNumToEmit">true</Set>
          <Set name="particlesPerEmission">32</Set>
          <Set name="particlesToEmit">1</Set>
        </Emitter>
        <Particle usePlayerFacing="true">
          <Set name="sprite">s_transformSmoke</Set>
          <Set name="blendingMode">PREMULTIPLIED_ALPHA</Set>
          <Curve name="initialAlpha">
            <KeyFrame>0, 1</KeyFrame>
            <KeyFrame>0.5, 1</KeyFrame>
            <KeyFrame>1, 0</KeyFrame>
          </Curve>
          <Random name="offset" min="-16,-16" max="16,16"/>
          <Set name="initialScale">1.5,1.5</Set>
          <Set name="lifeTime">1</Set>
          <RandomRadial name="initialVelocity" angleRange="0,360" radiusRange="20,60" />
        </Particle>
      </ParticleSystem>
      <ParticleSystem name="punch_particle_left" secondary="punch_particle_trail">
        <Emitter>
          <Set name="lifeTime">0.02</Set>
          <Set name="particlesPerEmission">1</Set>
          <Set name="particlesToEmit">1</Set>
          <Set name="emissionInterval">0.02</Set>
        </Emitter>
        <Particle>
          <Set name="sprite">s_tire</Set>
          <Set name="relativeToEmitter">false</Set>
          <Set name="offset" source="tire.Offset.Left"/>
          <Set name="worldPos" source="calculatedPos"/>
          <Set name="initialAngle" source="tireAngle"/>
          <Set name="blendingMode">PREMULTIPLIED_ALPHA</Set>
          <Set name="lifeTime">0.04</Set>
          <Set name="initialScale">1,1</Set>
        </Particle>
      </ParticleSystem>
      <ParticleSystem name="punch_particle_right" secondary="punch_particle_trail">
        <Emitter>
          <Set name="lifeTime">0.02</Set>
          <Set name="particlesPerEmission">1</Set>
          <Set name="particlesToEmit">1</Set>
          <Set name="emissionInterval">0.02</Set>
        </Emitter>
        <Particle>
          <Set name="sprite">s_tire</Set>
          <Set name="relativeToEmitter">false</Set>
          <Set name="offset" source="tire.Offset.Right"/>
          <Set name="worldPos" source="calculatedPos"/>
          <Set name="initialAngle" source="tireAngle"/>
          <Set name="blendingMode">PREMULTIPLIED_ALPHA</Set>
          <Set name="lifeTime">0.04</Set>
          <Set name="initialScale">1,1</Set>
        </Particle>
      </ParticleSystem>
      <ParticleSystem name="punch_particle_trail">
        <Emitter>
          <Set name="lifeTime">1</Set>
          <Set name="particlesPerEmission">1</Set>
          <Set name="particlesToEmit">2</Set>
          <Set name="emissionInterval">0.01</Set>
          <Set name="checkParticleNumToEmit">true</Set>
        </Emitter>
        <Particle randomSpriteFrame="true">
          <Set name="sprite">s_tireTrail</Set>
          <Set name="blendingMode">PREMULTIPLIED_ALPHA</Set>
          <Set name="lifeTime">0.35</Set>
          <Curve name="initialAlpha">
            <KeyFrame>0, 1</KeyFrame>
            <KeyFrame>1, 0</KeyFrame>
          </Curve>
        </Particle>
      </ParticleSystem>
    </ParticleSystems>
    <VariableMap>
      <Set name="floatingOffset">0,0,0</Set>
      <Set name="punchOffset">0,-16</Set>
      <Set name="context.pos">0, 0</Set>
      <Set name="target.pos">0, 0</Set>
      <Set name="calculatedPos">0, 0</Set>
      <Set name="tireAngle">0</Set>
      <Set name="tire.Offset.Left">-20,-32</Set>
      <Set name="tire.Offset.Right">20,-32</Set>
    </VariableMap>
    <RenderOptions>
      <Default>
        <Set name="IncludeAllActions">true</Set>
        <Set name="AllowChangePunchType">true</Set>
        <Set name="ClothingOffsetFromShoes">-4</Set>
        <Set name="IgnorePunchTypeCheck">true</Set>
        <Set name="IsCar">true</Set>
      </Default>
      <Override overrideOnState="IsTransformed.Yes">
        <Set name="UserNameOffset">16</Set>
      </Override>
    </RenderOptions>
  </Data>
  <RenderRules>
    <Update>
      <ArithmethicOperation LeftHandVariableName="calculatedPos" RightHandVariableName="context.pos" OperationType="Set" onState="PunchAnim.Off"/>
      <StopIf type="or">
        <IsZombified>true</IsZombified>
        <IsTrnsformed>true</IsTrnsformed>
        <IsSitting>true</IsSitting>
        <IsSleepingOnaBed>true</IsSleepingOnaBed>
        <IsWearing slot="SHIRT">ITEM_ID_TACTICAL_STEALTH_DEVICE</IsWearing>
      </StopIf>
      <AvatarTransform class="FootPosition">
        <Set name="foot1dy">0</Set>
        <Set name="foot2dy">0</Set>
        <Set name="foot1y">0</Set>
        <Set name="foot2y">0</Set>
      </AvatarTransform>
      <AvatarTransform class="ArmAngle">
        <Set name="armName">arm2Angle</Set>
        <Set name="armAngle">280</Set>
      </AvatarTransform>
      <StopIf>
        <IsAction>PUNCH</IsAction>
        <IsAction>BUILD</IsAction>
      </StopIf>
      <AvatarTransform class="ArmAngle">
        <Set name="armName">arm1Angle</Set>
        <Set name="armAngle">280</Set>
      </AvatarTransform>
    </Update>
    <RenderShoes>
      <StopIf type="or">
        <IsWearing slot="PANTS">ITEM_ID_RAPTOR_LEGS</IsWearing>
        <IsRenderObjectFlag>RENDER_OBJECT_FLAG_NO_FEET</IsRenderObjectFlag>
        <IsVariableBool name="isInvisible">true</IsVariableBool>
      </StopIf>
      <Group>
        <SpriteRender name="s_foot1" offset="3,0" alignment="DOWN_CENTER" />
      </Group>
      <Group>
        <SpriteRender name="s_foot2" offset="4,0" alignment="DOWN_CENTER" />
      </Group>
    </RenderShoes>
    <RenderTransform>
      <Translate>floatingOffset</Translate>
      <SpriteRender name="s_transform" blend="PREMULTIPLIED_ALPHA" offset="0,-8" />
      <ParticleSystemUpdate name="punch_particle_left" onState="PunchAnim.Start|PunchAnim.Continue|PunchAnim.End"/>
      <ParticleSystemUpdate name="punch_particle_right" onState="PunchAnim.Start|PunchAnim.Continue|PunchAnim.End"/>
    </RenderTransform>
    <OnDamagedTile>
      <StopIf>
        <IsItemTransformed>false</IsItemTransformed>
      </StopIf>
    </OnDamagedTile>
    <OnDestroyedTile>
      <StopIf>
        <IsItemTransformed>false</IsItemTransformed>
      </StopIf>
    </OnDestroyedTile>
    <RenderInFront>
      <StopIf>
        <IsZombified>true</IsZombified>
        <IsTrnsformed>true</IsTrnsformed>
        <IsSitting>true</IsSitting>
        <IsSleepingOnaBed>true</IsSleepingOnaBed>
        <IsWearing slot="SHIRT">ITEM_ID_TACTICAL_STEALTH_DEVICE</IsWearing>
      </StopIf>
      <SpriteRender name="s_bikeFront" offset="33,4" alignmentLeft="DOWN_LEFT" alignmentRight="DOWN_RIGHT"/>
      <SpriteRender name="s_wings" offset="0,4" alignmentLeft="DOWN_LEFT" alignmentRight="DOWN_RIGHT"/>
    </RenderInFront>
    <RenderBehind>
      <StopIf>
        <IsZombified>true</IsZombified>
        <IsTrnsformed>true</IsTrnsformed>
        <IsSitting>true</IsSitting>
        <IsSleepingOnaBed>true</IsSleepingOnaBed>
        <IsWearing slot="SHIRT">ITEM_ID_TACTICAL_STEALTH_DEVICE</IsWearing>
      </StopIf>
      <SpriteRender name="s_bikeBack" offset="-31,28" alignmentLeft="DOWN_RIGHT" alignmentRight="DOWN_LEFT"/>
    </RenderBehind>
    <OnPunchStart>
      <ArithmethicOperation LeftHandVariableName="punchOffset" RightHandVariableName="0,-30" OperationType="Set"/>
      <ArithmethicOperation LeftHandVariableName="punchOffset.y" RightHandVariableName="floatingOffset.y" OperationType="Add" />
    </OnPunchStart>
  </RenderRules>
</ItemRenderer>
