<?xml version="1.0"?>
<ItemRenderer>
  <Data>
    <Sprite name="s_capeBack" fileName="game/particles12.rttex" textureSize="32"/>
    <Sprite name="s_hand_on_top" fileName="game/particles12.rttex" textureSize="32" frame="15,10"/>
    <Sprite name="s_punch_hand" fileName="game/particles12.rttex" textureSize="32"/>
    <Sprite name="s_double_jump_hand" fileName="game/particles12.rttex" textureSize="32" frame="14,10"/>

    <Animations>
      <SpriteAnimation name="a_cape" sprite="s_capeBack" isLoop="true" animTime="100" autoPlay="false" playOnState="Motion.Idle">
        <Frame>7,10</Frame>
      </SpriteAnimation>          
		<SpriteAnimation name="moving" sprite="s_capeBack" isLoop="true" animTime="600" autoPlay="false" playOnState="HandWalking.GoingToTarget">
        <Frame>8,10</Frame>
        <Frame>9,10</Frame>
        <Frame>10,10</Frame>
        <Frame>11,10</Frame>
        <Frame>12,10</Frame>
        <Frame>13,10</Frame>
      </SpriteAnimation>   
		<SpriteAnimation name="fallTopHand" sprite="s_hand_on_top" isLoop="false" animTime="400" autoPlay="false" playOnState="Motion.BeforeFall">
		    <Frame>16,10</Frame>
			<Frame>15,10</Frame>
	    </SpriteAnimation>
	    <SpriteAnimation name="fallTopHand_fall" sprite="s_hand_on_top" isLoop="true" animTime="50" autoPlay="false" playOnState="Motion.Fall">
		    <Frame>15,10</Frame>
	    </SpriteAnimation>

		<SpriteAnimation name="on_punch" sprite="s_punch_hand" isLoop="true" animTime="400" autoPlay="false" playOnState="Action.Punch|Action.PunchAfter">
			<Frame>17,10</Frame>
			<Frame>18,10</Frame>
			<Frame>19,10</Frame>
			<Frame>20,10</Frame>
		</SpriteAnimation>	


		<InterpolationFloatAnimation name="fishMove_afterfall" variableName="fishPositionVariable.x" targetVariableName="targetPosition.x" isLoop="false" animTime="50" playOnState="Motion.AfterFall|Motion.Fall" />
		<InterpolationFloatAnimation name="i_fishSnapped" variableName="fishPositionVariable.x" offsetVariableName="targetOffset.x" targetVariableName="targetPosition.x" isLoop="false" animTime="15000" playOnState="HandWalking.GoingToTarget" />
		
		<InterpolationFloatAnimation name="upperHandMove" variableName="upperhandOffsetTemp.y" targetValue="-26" isLoop="false" animTime="250" playOnState="Motion.BeforeFall" />
		<InterpolationFloatAnimation name="upperHandMoveBack" variableName="upperhandOffsetTemp.y" targetValue="-50" isLoop="false" animTime="350" playOnState="Motion.AfterFall" />

		<SpriteCurveAnimation name="hand_on_top_alpha_on" isLoop="false" autoPlay="false" sprite="s_hand_on_top" animTime="200" playOnState="Motion.BeforeFall">
			<Curve name="alpha">
				<KeyFrame>0.f, 0.f</KeyFrame>
				<KeyFrame>0.4f, 1.f</KeyFrame>
				<KeyFrame>1.f, 1.f</KeyFrame>
			</Curve>
		</SpriteCurveAnimation>

		<SpriteCurveAnimation name="hand_on_top_alpha_off_idle" isLoop="true" sprite="s_hand_on_top" animTime="50" playOnState="Motion.Idle|Motion.Horizontal">
			<Curve name="alpha">
				<KeyFrame>0.f, 0.f</KeyFrame>
				<KeyFrame>1.f, 0.f</KeyFrame>
			</Curve>
		</SpriteCurveAnimation>		
		
		<SpriteCurveAnimation name="hand_on_top_alpha_off_afterfall" isLoop="false" sprite="s_hand_on_top" animTime="200" playOnState="Motion.AfterFall">
			<Curve name="alpha">
				<KeyFrame>0.f, 1.f</KeyFrame>
				<KeyFrame>1.f, 0.f</KeyFrame>
			</Curve>d
		</SpriteCurveAnimation>		

		<SpriteCurveAnimation name="hand_on_left_alpha_on" isLoop="false" sprite="s_capeBack" animTime="200" playOnState="Motion.AfterFall">
			<Curve name="alpha">
				<KeyFrame>0.f, 0</KeyFrame>
				<KeyFrame>1.f, 1.f</KeyFrame>
			</Curve>
		</SpriteCurveAnimation>
		
		<SpriteCurveAnimation name="hand_on_left_alpha_off_duringfall" isLoop="true" sprite="s_capeBack" animTime="50" playOnState="Motion.Fall|Motion.BeforeFall">
			<Curve name="alpha">
				<KeyFrame>0.f, 0.f</KeyFrame>
				<KeyFrame>1.f, 0.f</KeyFrame>
			</Curve>
		</SpriteCurveAnimation>

		<SpriteCurveAnimation name="hand_on_left_alpha_on_idleForce" isLoop="true" sprite="s_capeBack" animTime="50" playOnState="Motion.Idle|Motion.Horizontal">
			<Curve name="alpha">
				<KeyFrame>0.f, 1.f</KeyFrame>
				<KeyFrame>1.f, 1.f</KeyFrame>
			</Curve>
		</SpriteCurveAnimation>

		<SpriteCurveAnimation name="hand_on_left_alpha_off_idle" isLoop="false" sprite="s_capeBack" animTime="200" playOnState="Motion.BeforeJump">
			<Curve name="alpha">
				<KeyFrame>0.f, 1.f</KeyFrame>
				<KeyFrame>1.f, 0.f</KeyFrame>
			</Curve>
		</SpriteCurveAnimation>
    </Animations>
    <ParticleSystems>
	    <ParticleSystem name="punch_start_particle_left">
		    <Emitter attachment="targetPos" onPunchCount="even">
			    <Set name="offset">-8, 0</Set>
		
			    <Set name="checkParticleNumToEmit">true</Set>
			    <Set name="particlesPerEmission">1</Set>
			    <Set name="particlesToEmit">1</Set>
		    </Emitter>
		    <Particle>
			    <Set name="sprite">s_punch_hand</Set>
			    <Set name="offset">0, -38</Set>
			    <Set name="initialVelocity">0,192</Set>
			    <Curve name="initialAlpha">
				    <KeyFrame>0, 1</KeyFrame>
				    <KeyFrame>0.6, 1</KeyFrame>
				    <KeyFrame>1, 0</KeyFrame>
			    </Curve>
			    <Set name="flipX">false</Set>
			    <Set name="inSpecificOrder">true</Set>
			    <Set name="blendingMode">PREMULTIPLIED_ALPHA</Set>
			    <Set name="lifeTime">0.45</Set>
			    <Set name="initialScale">1,1</Set>
		    </Particle>
	    </ParticleSystem>
	    <ParticleSystem name="punch_start_particle_right">
		    <Emitter attachment="targetPos" onPunchCount="odd">
			    <Set name="offset">8, 0</Set>
			    <Set name="checkParticleNumToEmit">true</Set>
			    <Set name="particlesPerEmission">1</Set>
			    <Set name="particlesToEmit">1</Set>
		    </Emitter>
		    <Particle>
			    <Set name="offset">0, -38</Set>
			    <Set name="initialVelocity">0,192</Set>
			    <Curve name="initialAlpha">
				    <KeyFrame>0, 1</KeyFrame>
				    <KeyFrame>0.6, 1</KeyFrame>
				    <KeyFrame>1, 0</KeyFrame>
			    </Curve>
			    <Set name="sprite">s_punch_hand</Set>
			    <Set name="flipX">true</Set>
			    <Set name="inSpecificOrder">true</Set>
			    <Set name="blendingMode">PREMULTIPLIED_ALPHA</Set>
			    <Set name="lifeTime">0.45</Set>
			    <Set name="initialScale">1,1</Set>
		    </Particle>
	    </ParticleSystem>
	    <ParticleSystem name="jumpHand">
		    <Emitter>
			    <Set name="particlesPerEmission">1</Set>
			    <Set name="particlesToEmit">1</Set>
			    <Set name="offset">0,12</Set>
		    </Emitter>
		    <Particle>
			    <Set name="sprite">s_double_jump_hand</Set>
			    <Set name="lifeTime">0.75</Set>
			    <Curve name="initialAlpha">
				    <KeyFrame>0, 1</KeyFrame>
				    <KeyFrame>0.5, 1</KeyFrame>
				    <KeyFrame>1, 0</KeyFrame>
			    </Curve>
			
			    <Set name="initialScale">1.5,1.5</Set>
			    <Set name="offset">0,0</Set>
		    </Particle>
	    </ParticleSystem>
    </ParticleSystems>
	  <StateMachines>
		  <StateMachine name="Action">
			  <States>
				  <State name="None" />
				  <State name="Punch" />
				  <State name="PunchAfter" ExitTime="0.2"/>
			  </States>
			  <Transitions>
				  <Transition to="None" from="PunchAfter">
					  <Condition>
						  <IsAction operatorType="NotEqual">PUNCH</IsAction>
					  </Condition>
				  </Transition>
				  <Transition to="PunchAfter" from="Punch"/>
				  <Transition to="Punch" from="None">
					  <Condition>
						  <IsAction>PUNCH</IsAction>
					  </Condition>
				  </Transition>
			  </Transitions>
		  </StateMachine>
		  <StateMachine name="Facing">
			  <States>
				  <State name="Left" />
				  <State name="Right" />
			  </States>
			  <Transitions>
				  <Transition to="Left" from="Right">
					  <Condition>
						  <IsFacingLeft>true</IsFacingLeft>
					  </Condition>
				  </Transition>
				  <Transition to="Right" from="Left">
					  <Condition>
						  <IsFacingLeft>false</IsFacingLeft>
					  </Condition>
				  </Transition>
			  </Transitions>
		  </StateMachine>
		  <StateMachine name="HandWalking">
			  <States>
				  <State name="GoingToTarget" />
				  <State name="TargetReached" />
			  </States>
			  <Transitions>
				  <Transition to="TargetReached" from="GoingToTarget">
					  <Condition type="and">
						  <CompareCustomVariable operatorType="LessOrEqual" VariableNameToCompare="targetDistance.x">3</CompareCustomVariable>
						  <CompareCustomVariable operatorType="GreaterOrEqual" VariableNameToCompare="targetDistance.x">-3</CompareCustomVariable>
					  </Condition>
				  </Transition>
				  <Transition to="GoingToTarget" from="TargetReached">
					  <Condition type="or">
						  <CompareCustomVariable operatorType="Greater" VariableNameToCompare="targetDistance.x">3</CompareCustomVariable>
						  <CompareCustomVariable operatorType="Less" VariableNameToCompare="targetDistance.x">-3</CompareCustomVariable>
					  </Condition>
				  </Transition>
			  </Transitions>
		  </StateMachine>
		  <StateMachine name="Motion">
			  <States>
				  <State name="Idle"/>
				  <State name="BeforeJump" ExitTime="0.125"/>
				  <State name="Jump" />
				  <State name="Fall"/>
				  <State name="BeforeFall" ExitTime="0.125"/>
				  <State name="AfterFall" ExitTime="0.2"/>
				  <State name="Horizontal"/>
			  </States>
			  <Transitions>
				  <Transition to="Idle" from="Jump|Horizontal">
					  <Condition>
						  <IsVariableFloat name="speed.length" operator="Less" abs="true">0.1</IsVariableFloat>
					  </Condition>
				  </Transition>
				  <Transition to="BeforeJump" from="Idle|Horizontal">
					  <Condition>
						  <IsVariableFloat name="speed.y" operator="Less">0</IsVariableFloat>
					  </Condition>
				  </Transition>		  
				  <Transition to="Jump" from="BeforeJump"/>
				  <Transition to="BeforeFall" from="Idle|Jump|Horizontal">
					  <Condition>
						  <IsVariableBool name="onGround">false</IsVariableBool>
					  </Condition>
				  </Transition>
				  <Transition to="Fall" from="BeforeFall"/>
				  <Transition to="AfterFall" from="Fall">
					  <Condition>
						  <IsVariableBool name="onGround">true</IsVariableBool>
					  </Condition>
				  </Transition>
				  <Transition to="Idle" from="AfterFall">
					  <Condition type="and">
						  <IsVariableFloat name="speed.length" operator="Less" abs="true">0.1</IsVariableFloat>
						  <IsVariableBool name="onGround">true</IsVariableBool>
					  </Condition>
				  </Transition>
				  <Transition to="BeforeJump" from="AfterFall">
					  <Condition>
						  <IsAction>JUMPSTART</IsAction>
					  </Condition>
				  </Transition>
				  <Transition to="Horizontal" from="AfterFall">
					  <Condition type="and">
						  <IsVariableFloat name="speed.x" operator="Greater" abs="true">0.1</IsVariableFloat>
						  <IsVariableFloat name="speed.y" operator="Less" abs="true">0.1</IsVariableFloat>
						  <IsVariableBool name="onGround">true</IsVariableBool>
					  </Condition>
				  </Transition>
				  <Transition to="Horizontal" from="Idle">
					  <Condition type="and">
						  <IsVariableFloat name="speed.x" operator="Greater" abs="true">0.1</IsVariableFloat>
						  <IsVariableFloat name="speed.y" operator="Less" abs="true">0.1</IsVariableFloat>
					  </Condition>
				  </Transition>
			  </Transitions>
		  </StateMachine>
	  </StateMachines>
    <RenderOptions>
	    <Default>
		    <Set name="IgnorePunchTypeCheck">false</Set>
		    <Set name="IgnoreDefaultDamagedTileEffect">false</Set>
	    </Default>
    </RenderOptions>
    <VariableMap>
	    <Set name="baloonOffsetIdle">0, 0, 0</Set>
	    <Set name="baloonOffset">0, 0, 0</Set>
	    <Set name="baloonOffsetRight">-50, 0, 0</Set>
	    <Set name="baloonOffsetLeft">50, 0, 0</Set>
	    <Set name="playerPositionVariable">0, 0, 0</Set>
	    <Set name="fishPositionVariable">0, 0, 0</Set>
	    <Set name="fishPositionVariableTemp">0, 0, 0</Set>
	    <Set name="facingVariable">1, 1, 1</Set>
	    <Set name="sittingOffset">0, 0, 0</Set>
	    <Set name="localScale">1, 1, 1</Set>
	    <Set name="upperhandOffset">0, -50, 0</Set>
	    <Set name="upperhandOffsetTemp">0, -50, 0</Set>
	    <Set name="targetPosition">0, 0, 0</Set>
	    <Set name="targetDistance">0, 0, 0</Set>
	    <Set name="targetOffset">32, 0, 0</Set>

    </VariableMap>
  </Data>
  <RenderRules>
	  <OnEnteredToWorld>
		  <ArithmethicOperation LeftHandVariableName="fishPositionVariable.x" RightHandVariableName="playerPositionVariable.x" OperationType="Set" />
		  <ArithmethicOperation LeftHandVariableName="fishPositionVariableTemp.x" RightHandVariableName="playerPositionVariable.x" OperationType="Set" />
	  </OnEnteredToWorld>		
	  <OnRespawned>
		  <ArithmethicOperation LeftHandVariableName="fishPositionVariable.x" RightHandVariableName="playerPositionVariable.x" OperationType="Set" />
		  <ArithmethicOperation LeftHandVariableName="fishPositionVariableTemp.x" RightHandVariableName="playerPositionVariable.x" OperationType="Set" />
	  </OnRespawned>
	  <OnItemEquipped>
		  <ArithmethicOperation LeftHandVariableName="fishPositionVariable.x" RightHandVariableName="playerPositionVariable.x" OperationType="Set" />
		  <ArithmethicOperation LeftHandVariableName="fishPositionVariableTemp.x" RightHandVariableName="playerPositionVariable.x" OperationType="Set" />
	  </OnItemEquipped>
    <RenderBackpack>
	    <StopIf>
		    <IsVariableBool name="isMannequin">true</IsVariableBool>
	    </StopIf>
	    <StopIf type="or">
		    <IsWearing slot="SHIRT">ITEM_ID_TACTICAL_STEALTH_DEVICE</IsWearing>
		    <IsRenderMod>RENDER_MOD_SPIRIT_GUIDE</IsRenderMod>
		    <IsRenderMod>RENDER_MOD_RAINBOW_GUY</IsRenderMod>
	    </StopIf>
	    <Group>
		    <StopIf>
			    <IsRenderMod>RENDER_MOD_MINI_YOU</IsRenderMod>
		    </StopIf>
		    <ArithmethicOperation LeftHandVariableName="baloonOffset" RightHandVariableName="baloonOffsetRight" OperationType="Set" onState="Facing.Right" />
		    <ArithmethicOperation LeftHandVariableName="baloonOffset" RightHandVariableName="baloonOffsetLeft" OperationType="Set" onState="Facing.Left" />
			
		    <ArithmethicOperation LeftHandVariableName="fishPositionVariableTemp.x" RightHandVariableName="fishPositionVariable.x" OperationType="Set" />
		    <ArithmethicOperation LeftHandVariableName="fishPositionVariableTemp.x" RightHandVariableName="playerPositionVariable.x" OperationType="Substract" />
		    <ArithmethicOperation LeftHandVariableName="fishPositionVariableTemp.x" RightHandVariableName="facingVariable.x" OperationType="Multiply"/>
			
		    <ArithmethicOperation LeftHandVariableName="baloonOffsetIdle" RightHandVariableName="sittingOffset" OperationType="Set" />

			
		    <ArithmethicOperation LeftHandVariableName="playerPositionVariable.x" RightHandVariableName="baloonOffsetIdle.x" OperationType="Substract" />

		    <ArithmethicOperation LeftHandVariableName="targetPosition" RightHandVariableName="playerPositionVariable" OperationType="Set" />
		    <ArithmethicOperation LeftHandVariableName="targetPosition" RightHandVariableName="baloonOffset" OperationType="Add"/>
			
		    <ArithmethicOperation LeftHandVariableName="targetDistance.x" RightHandVariableName="targetPosition.x" OperationType="Set"/>
		    <ArithmethicOperation LeftHandVariableName="targetDistance.x" RightHandVariableName="fishPositionVariable.x" OperationType="Substract"/>

		    <ArithmethicOperation LeftHandVariableName="targetOffset.x" RightHandVariableName="-32" OperationType="Set" onState="HandWalking.GoingToTarget"/>
		    <ArithmethicOperation LeftHandVariableName="targetOffset.x" RightHandVariableName="0" OperationType="Set" onState="HandWalking.TargetReached"/>
			<ArithmethicOperation LeftHandVariableName="targetOffset.x" RightHandVariableName="facingVariable.x" OperationType="Multiply"/>
			
		
			
	
		</Group>
	    <Translate>baloonOffsetIdle</Translate>
	    <Translate>fishPositionVariableTemp</Translate>
	    <SpriteRender name="s_capeBack" alignment="DOWN_CENTER" />
	</RenderBackpack>
	<RenderFrontpack>
		<Translate>upperhandOffsetTemp</Translate>
		<SpriteRender name="s_hand_on_top" offset="0,0" alignment="DOWN_CENTER" />
	 </RenderFrontpack>
	  <OnPunchUpdate>
		  <AvatarTransform class="Face">
			  <Set name="face">MAD</Set>
		  </AvatarTransform>
		  <AvatarTransform class="ArmAngle">
			  <Set name="armName">arm2Angle</Set>
			  <Set name="pointTowardsPunchTarget">true</Set>
		  </AvatarTransform>
	  </OnPunchUpdate>
	  <OnPunchStart>
		  <ParticleSystemUpdate name="punch_start_particle_left" />
		  <ParticleSystemUpdate name="punch_start_particle_right" />
	  </OnPunchStart>	  
	  <OnPunchStop>
		  <ParticleSystemOff name="punch_start_particle_left" />
		  <ParticleSystemOff name="punch_start_particle_right" />
	  </OnPunchStop>
	  <AddClothingParticles>
		  <ParticleSystemUpdate name="jumpHand" onAction="JUMPDOUBLE"/>

	  </AddClothingParticles>
	  <SwitchOffClothingParticles>
		  <ParticleSystemOff name="jumpHand"/>
		  <ParticleSystemOff name="punch_start_particle_left"/>
		  <ParticleSystemOff name="punch_start_particle_right"/>
	  </SwitchOffClothingParticles>
	  <RenderInFront>
		  <ParticleSystemRender name="punch_start_particle_left" />
		  <ParticleSystemRender name="punch_start_particle_right" />
		  <StopIf>
			  <IsVariableBool name="isMannequin">false</IsVariableBool>
		  </StopIf>
		  <SpriteRender name="s_capeBack" offset="-32,2" alignment="DOWN_CENTER" />
	  </RenderInFront>
  </RenderRules>
</ItemRenderer>
