§
    Á¸Àj(  ã                  óÔ   — d Z ddlmZ ddlZddlmc mZ ddl	Z	ddl
mZmZmZ ddlZddlmZmZmZmZ  G d„ d¦  «        Z G d„ d	¦  «        Z G d
„ d¦  «        Z G d„ d¦  «        ZdS )uE  
Tier 1: Feature Coverage â€” Animation FSM, Target Dummy, Dodge i-Frame & Boss Combat.
Covers Features 7, 14, 15, 17 from PROJECT.md Feature Inventory:
- Feature 7: Animation FSM & Motion Matching
- Feature 14: Target Dummy Combat & Combos
- Feature 15: 0.25s i-frame Dodge Roll
- Feature 17: Strand Executioner Boss & Loot
é    )ÚannotationsN)ÚAnyÚDictÚList)ÚDODGE_BOOSTÚDODGE_IFRAME_DURATIONÚSimulatedCocosPlayerÚresolve_heading_binc                  óB   — e Zd ZdZdd„Zdd„Zdd„Zdd„Zdd„Zdd„Z	dS )Ú&TestTier1AnimationFSMAndMotionMatchingz+Feature 7: Animation FSM & Motion Matching.ÚreturnÚNonec           	     ó  — g d¢}|D �]\  }}}t          ||¦  «        }||k    }|�s[t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }d	d
|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}�Œ�d S )N))ç      ð?ç      ð¿ÚE)r   ç        ÚSE)r   r   ÚS)r   r   ÚSW)r   r   ÚW)r   r   ÚNW)r   r   ÚN)r   r   ÚNE©ú==)z9%(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
} == %(py6)sr
   ÚdxÚdyÚexpected_bin)Úpy0Úpy1Úpy2Úpy4Úpy6úassert %(py8)sÚpy8)	r
   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanation)	ÚselfÚvectors_to_binr   r   r   Ú@py_assert3Ú@py_assert5Ú@py_format7Ú@py_format9s	            úHC:\Projects\FreeExile\tests\e2e_cocos\test_tier1_animation_and_combat.pyÚ!test_t1_f7_eight_way_heading_binszHTestTier1AnimationFSMAndMotionMatching.test_t1_f7_eight_way_heading_bins   s·  € ð	
ð 	
ð 	
ˆð %3ð 	?ñ 	?Ñ ˆB��LÝ& r¨2Ñ.Ô.Ð>Ð.°,Ò>Ð>Ð>Ñ>Õ>Ô>Ð>Ð>Ð>Ð>Ð.°,Ð>Ñ>Ô>Ð>Õ>Ô>Ñ>Ô>Ð>Ð>Õ>Ô>Õ&Ñ>Ô>Ð>Õ>Ô>Õ&Ñ>Ô>Ð>Ð>Ð>Õ>Ô>Ñ>Ô>Ð>Ð>Õ>Ô> rÑ>Ô>Ð>Õ>Ô> rÑ>Ô>Ð>Ð>Ð>Õ>Ô>Ñ>Ô>Ð>Ð>Õ>Ô>¨2Ñ>Ô>Ð>Õ>Ô>¨2Ñ>Ô>Ð>Ð>Õ>Ô>Ð.Ñ>Ô>Ð>Õ>Ô>Ñ>Ô>Ð>Ð>Õ>Ô>°,Ñ>Ô>Ð>Õ>Ô>°,Ñ>Ô>Ð>Ð>Ð>Ð>Ñ>Ð>Ð>Ð>Ð>Ð>Ñ>Ð>Õ>Õ>Ô>Ð>Ñ>Ô>Ñ>Ô>Ð>Ð>Ð>Ð>Ð>Ñ>ð	?ð 	?ó    c                óÂ  — d\  }}d\  }}||z  }||z  }d}||k    }|s—t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }	dd	|	iz  }
t          t          j        |
¦  «        ¦  «        ‚d x}}d
}||k    }|s—t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }	dd	|	iz  }
t          t          j        |
¦  «        ¦  «        ‚d x}}d S )N)g      d@g      h@)ç      à?gÍÌÌÌÌÌì?g      T@r   ©z%(py0)s == %(py3)sÚanchor_px_x©r    Úpy3úassert %(py5)sÚpy5gš™™™™™e@Úanchor_px_y©r'   r(   r)   r*   r+   r,   r-   r.   )r/   Úframe_widthÚframe_heightÚpivot_xÚpivot_yr;   r@   Ú@py_assert2Ú@py_assert1Ú@py_format4Ú@py_format6s              r5   Ú%test_t1_f7_bottom_center_pivot_offsetzLTestTier1AnimationFSMAndMotionMatching.test_t1_f7_bottom_center_pivot_offset2   s´  € à$0Ñ!ˆ�\Ø$Ñˆ�Ø! GÑ+ˆØ" WÑ,ˆØ"Ð"ˆ{˜dÒ"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"ˆ{˜dÐ"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"ˆ{Ñ"Ô"Ð"Õ"Ô"ˆ{Ñ"Ô"Ð"Ð"Õ"Ô"˜dÑ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ø#Ð#ˆ{˜eÒ#Ð#Ð#Ð#Õ#Ô#Ð#Ð#Ð#Ð#ˆ{˜eÐ#Ñ#Ô#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô#ˆ{Ñ#Ô#Ð#Õ#Ô#ˆ{Ñ#Ô#Ð#Ð#Õ#Ô#˜eÑ#Ô#Ð#Ð#Ñ#Ð#Ð#Ð#Ð#Ð#Ñ#Ð#Õ#Õ#Ô#Ð#Ñ#Ô#Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#Ð#r7   c           	     ó  — d}d}|t          dd|z  ¦  «        z  }||k    }|sÂt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndd	œz  }d
d|iz  }t          t          j        |¦  «        ¦  «        ‚d }t          j
        }d}d} ||||¬¦  «        }	|	sùddt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |	¦  «        dœz  }
t          t          j        |
¦  «        ¦  «        ‚d x}x}x}}	d S )Ng      ,@gÍÌÌÌÌÌ@çš™™™™™É?ç      @©ú>)z%(py0)s > %(py2)sÚplayback_fpsÚbase_fps©r    r"   zassert %(py4)sr#   gh‘í|?U2@g{®Gáz„?©Úabs_tolúcassert %(py9)s
{%(py9)s = %(py2)s
{%(py2)s = %(py0)s.isclose
}(%(py3)s, %(py5)s, abs_tol=%(py7)s)
}Úmath©r    r"   r=   r?   Úpy7Úpy9)Úmaxr'   r(   r)   r*   r+   r,   r-   r.   rV   Úisclose)r/   rQ   Úv_baserP   rG   Ú@py_format3Ú@py_format5Ú@py_assert4Ú@py_assert6Ú@py_assert8Ú@py_format10s              r5   Ú)test_t1_f7_footstep_speed_scaling_formulazPTestTier1AnimationFSMAndMotionMatching.test_t1_f7_footstep_speed_scaling_formula;   s*  € àˆØˆà¥# c¨3°©<Ñ"8Ô"8Ñ8ˆØ˜hÒ&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&ˆ|˜hÐ&Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&ˆ|Ñ&Ô&Ð&Õ&Ô&ˆ|Ñ&Ô&Ð&Ð&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&˜hÑ&Ô&Ð&Õ&Ô&˜hÑ&Ô&Ð&Ð&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&ÝŒ|Ð?¨&Ð?¸$Ð?ˆ|ˆ|˜L¨&¸$Ð?Ñ?Ô?Ð?Ð?Ð?Ð?Ð?Õ?Ô?Ñ?Ô?Ð?Ð?Õ?Ô?�tÑ?Ô?Ð?Õ?Ô?�tÑ?Ô?Ð?Ð?Õ?Ô?ˆ|Ñ?Ô?Ð?Õ?Ô?Ñ?Ô?Ð?Ð?Õ?Ô?˜LÑ?Ô?Ð?Õ?Ô?˜LÑ?Ô?Ð?Ð?Õ?Ô?¨&Ñ?Ô?Õ?Ô?¸$Ñ?Ô?Õ?Ô?Ð?Ñ?Ô?Ð?Ð?Ñ?Ð?Õ?Õ?Ô?Ð?Ñ?Ô?Ñ?Ô?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?r7   c                ó¶  — ddh}g }t          d¦  «        D ]}||v r|                     |¦  «         Œddg}||k    }|s—t          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd	|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}}d S )
Nr   é   é   r   r:   Ú	triggeredr<   r>   r?   )
ÚrangeÚappendr'   r(   r)   r*   r+   r,   r-   r.   )r/   Úfootstep_framesrg   ÚfrF   rG   rH   rI   s           r5   Ú%test_t1_f7_footstep_keyframes_triggerzLTestTier1AnimationFSMAndMotionMatching.test_t1_f7_footstep_keyframes_triggerD   s  € à˜a˜&ˆØˆ	Ý�q‘”ð 	$ð 	$ˆAØ�OÐ#Ð#Ø× Ò  Ñ#Ô#Ð#øØ ˜FÐ"ˆy˜FÒ"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"ˆy˜FÐ"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"ˆyÑ"Ô"Ð"Õ"Ô"ˆyÑ"Ô"Ð"Ð"Õ"Ô"˜FÑ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"r7   c                óÊ  — ddiddiddiddiddidœ}d}|                      ¦   «         D ]\  }}d|vr||d         z  }Œd	}||k    }|s—t          j        d
|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}d S )NÚframesrf   é   Ú
atlas_clipÚattack_slashre   )ÚidleÚrunrq   Úattack_thrustÚdodger   é   r   r:   Útotal_framesr<   r>   r?   )	Úitemsr'   r(   r)   r*   r+   r,   r-   r.   )	r/   Úmanifest_clipsrw   ÚnameÚdatarF   rG   rH   rI   s	            r5   Ú+test_t1_f7_atlas_clip_aliasing_global_indexzRTestTier1AnimationFSMAndMotionMatching.test_t1_f7_atlas_clip_aliasing_global_indexM   s<  € ð ˜q�MØ˜a�=Ø% q˜MØ*¨NÐ;Ø �]ð
ð 
ˆð ˆØ(×.Ò.Ñ0Ô0ð 	/ð 	/‰JˆD�$Ø 4Ð'Ð'Ø  X¤Ñ.�øØ!Ð!ˆ|˜rÒ!Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!ˆ|˜rÐ!Ñ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!ˆ|Ñ!Ô!Ð!Õ!Ô!ˆ|Ñ!Ô!Ð!Ð!Õ!Ô!˜rÑ!Ô!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!Ð!Ð!r7   Úsimulated_playerr	   c                óŽ  — |j         }d}||k    }|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}| 	                    dd	d
¦  «         |j         }d}||k    }|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}| 
                    ¦   «          |j         }d}||k    }|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|                     d¦  «         |j         }d}||k    }|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}d S )Nrr   r   )z2%(py2)s
{%(py2)s = %(py0)s.anim_state
} == %(py5)sr}   )r    r"   r?   úassert %(py7)srX   r   r   gü©ñÒMb�?rs   ru   g333333Ó?)Ú
anim_stater'   r(   r)   r*   r+   r,   r-   r.   Úapply_inputÚtrigger_dodgeÚupdate_timers)r/   r}   rG   r_   r1   rI   Ú@py_format8s          r5   Ú test_t1_f7_fsm_valid_transitionszGTestTier1AnimationFSMAndMotionMatching.test_t1_f7_fsm_valid_transitions\   sÒ  € ØÔ*Ð4¨fÐ4Ð*¨fÒ4Ð4Ð4Ð4Õ4Ô4Ð4Ð4Ð4Ð4Ð*¨fÐ4Ñ4Ô4Ð4Õ4Ô4Ñ4Ô4Ð4Ð4Õ4Ô4ÐÑ4Ô4Ð4Õ4Ô4ÐÑ4Ô4Ð4Ð4Õ4Ô4Ð*Ñ4Ô4Õ4Ô4¨fÑ4Ô4Ð4Ð4Ñ4Ð4Ð4Ð4Ð4Ð4Ñ4Ð4Õ4Õ4Ô4Ð4Ñ4Ô4Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ø×$Ò$ S¨#¨uÑ5Ô5Ð5ØÔ*Ð3¨eÐ3Ð*¨eÒ3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3Ð*¨eÐ3Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3ÐÑ3Ô3Ð3Õ3Ô3ÐÑ3Ô3Ð3Ð3Õ3Ô3Ð*Ñ3Ô3Õ3Ô3¨eÑ3Ô3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ø×&Ò&Ñ(Ô(Ð(ØÔ*Ð5¨gÐ5Ð*¨gÒ5Ð5Ð5Ð5Õ5Ô5Ð5Ð5Ð5Ð5Ð*¨gÐ5Ñ5Ô5Ð5Õ5Ô5Ñ5Ô5Ð5Ð5Õ5Ô5ÐÑ5Ô5Ð5Õ5Ô5ÐÑ5Ô5Ð5Ð5Õ5Ô5Ð*Ñ5Ô5Õ5Ô5¨gÑ5Ô5Ð5Ð5Ñ5Ð5Ð5Ð5Ð5Ð5Ñ5Ð5Õ5Õ5Ô5Ð5Ñ5Ô5Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ø×&Ò& sÑ+Ô+Ð+ØÔ*Ð4¨fÐ4Ð*¨fÒ4Ð4Ð4Ð4Õ4Ô4Ð4Ð4Ð4Ð4Ð*¨fÐ4Ñ4Ô4Ð4Õ4Ô4Ñ4Ô4Ð4Ð4Õ4Ô4ÐÑ4Ô4Ð4Õ4Ô4ÐÑ4Ô4Ð4Ð4Õ4Ô4Ð*Ñ4Ô4Õ4Ô4¨fÑ4Ô4Ð4Ð4Ñ4Ð4Ð4Ð4Ð4Ð4Ñ4Ð4Õ4Õ4Ô4Ð4Ñ4Ô4Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4r7   N©r   r   ©r}   r	   r   r   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r6   rJ   rc   rl   r|   r…   © r7   r5   r   r      s–   € € € € € Ø5Ð5ð?ð ?ð ?ð ?ð.$ð $ð $ð $ð@ð @ð @ð @ð#ð #ð #ð #ð"ð "ð "ð "ð5ð 5ð 5ð 5ð 5ð 5r7   r   c                  óB   — e Zd ZdZdd„Zdd„Zdd„Zdd„Zdd„Zdd	„Z	d
S )ÚTestTier1TargetDummyAndCombosz)Feature 14: Target Dummy Combat & Combos.r   r   c                óZ  — ddddœ}d}t          d|d         |z
  ¦  «        |d<   |d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        d	œz  }d
d|iz  }t	          t          j        |¦  «        ¦  «        ‚d x}x}}|d         }d}||u }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        d	œz  }d
d|iz  }t	          t          j        |¦  «        ¦  «        ‚d x}x}}d S )Ni€8 T)ÚhpÚmax_hpÚisDummyi?B é   r�   r   ©z%(py1)s == %(py4)s©r!   r#   úassert %(py6)sr$   r’   )Úis)z%(py1)s is %(py4)s)rZ   r'   r(   r,   r-   r.   )r/   ÚdummyÚdamageÚ@py_assert0r1   rF   r^   r3   s           r5   Ú.test_t1_f14_dummy_immortality_and_health_clampzLTestTier1TargetDummyAndCombos.test_t1_f14_dummy_immortality_and_health_clampi   s†  € Ø¨¸$Ð?Ð?ˆàˆÝ˜!˜U 4œ[¨6Ñ1Ñ2Ô2ˆˆd‰Ø�TŒ{Ð˜aÐˆ{˜aÒÐÐÐÕÔÐÐÐÐˆ{˜aÐÑÔÕÔˆ{ÑÔÕÔ˜aÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐØ�YÔÐ' 4Ð'Ð 4Ð'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'Ð 4Ð'Ñ'Ô'Õ'Ô'ÐÑ'Ô'Õ'Ô' 4Ñ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'r7   c                óH  ‡— dŠg d¢}ˆfd„|D ¦   «         }|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd	|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|d
         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd	|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd	|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}d S )Ng      Y@)r   gÍÌÌÌÌÌô?g      ü?c                ó   •— g | ]}‰|z  ‘ŒS rŒ   rŒ   )Ú.0ÚmÚbase_damages     €r5   ú
<listcomp>zaTestTier1TargetDummyAndCombos.test_t1_f14_three_step_combo_damage_multipliers.<locals>.<listcomp>t   s   ø€ Ð>Ð>Ð>¨Q˜ q™Ð>Ð>Ð>r7   r   r   r”   r•   r–   r$   r“   g     @`@é   g     àe@©r'   r(   r,   r-   r.   )	r/   ÚmultipliersÚcombo_damagesrš   r1   rF   r^   r3   r    s	           @r5   Ú/test_t1_f14_three_step_combo_damage_multiplierszMTestTier1TargetDummyAndCombos.test_t1_f14_three_step_combo_damage_multipliersq   s-  ø€ ØˆØ&Ð&Ð&ˆØ>Ð>Ð>Ð>°+Ð>Ñ>Ô>ˆØ˜QÔÐ( 5Ð(Ð 5Ò(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(Ð 5Ð(Ñ(Ô(Õ(Ô(ÐÑ(Ô(Õ(Ô( 5Ñ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ø˜QÔÐ( 5Ð(Ð 5Ò(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(Ð 5Ð(Ñ(Ô(Õ(Ô(ÐÑ(Ô(Õ(Ô( 5Ñ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ø˜QÔÐ( 5Ð(Ð 5Ò(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(Ð 5Ð(Ñ(Ô(Õ(Ô(ÐÑ(Ô(Õ(Ô( 5Ñ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(r7   c                óî  — d}d}d}|dz  }d}d|z
  |k    r|dz  }d}d}||k    }|s—t          j        d|fd	||f¦  «        d
t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd
t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}d|z
  |k    rd}d}d}||k    }|s—t          j        d|fd	||f¦  «        d
t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd
t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}d S )Nr   r   ç       @r“   r9   ç333333ó?r¢   r   r:   Úcombo_countr<   r>   r?   g      @rA   )r/   rª   Úlast_hit_timeÚcombo_windowrF   rG   rH   rI   s           r5   Ú0test_t1_f14_combo_streak_counter_and_timer_resetzNTestTier1TargetDummyAndCombos.test_t1_f14_combo_streak_counter_and_timer_resety   sç  € ØˆØˆØˆð 	�qÑˆØˆà�Ñ ,Ò.Ð.Ø˜1ÑˆKØˆMØÐˆ{˜aÒÐÐÐÕÔÐÐÐÐˆ{˜aÐÑÔÐÕÔÑÔÐÐÕÔˆ{ÑÔÐÕÔˆ{ÑÔÐÐÕÔ˜aÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐð �Ñ Ò-Ð-ØˆKØˆMØÐˆ{˜aÒÐÐÐÕÔÐÐÐÐˆ{˜aÐÑÔÐÕÔÑÔÐÐÕÔˆ{ÑÔÐÕÔˆ{ÑÔÐÐÕÔ˜aÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐr7   c                óè  ‡— g d¢}dŠt          ˆfd„|D ¦   «         ¦  «        }|‰z  }d}||k    }|s—t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }d	d
|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}d}||k    }|s—t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }d	d
|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}d S )N))çš™™™™™¹?é–   )r9   éÈ   )r   i^  )çÍÌÌÌÌÌü?iô  r¨   c              3  ó.   •K  — | ]\  }}|‰k    ¯|V — Œd S )NrŒ   )rž   ÚtÚdmgÚwindow_durations      €r5   ú	<genexpr>z[TestTier1TargetDummyAndCombos.test_t1_f14_rolling_dps_window_calculation.<locals>.<genexpr>�   s1   øè è € ÐMÐM¡  3¸¸_Ò8LÐ8L˜Ð8LÐ8LÐ8LÐ8LÐMÐMr7   i°  r   r:   Ú	total_dmgr<   r>   r?   g     À‚@Údps)	Úsumr'   r(   r)   r*   r+   r,   r-   r.   )	r/   Ú
damage_logr¸   r¹   rF   rG   rH   rI   r¶   s	           @r5   Ú*test_t1_f14_rolling_dps_window_calculationzHTestTier1TargetDummyAndCombos.test_t1_f14_rolling_dps_window_calculation�   sÈ  ø€ ØEÐEÐEˆ
ØˆÝÐMÐMÐMÐM¨*ÐMÑMÔMÑMÔMˆ	Ø˜/Ñ)ˆØ Ð ˆy˜DÒ Ð Ð Ð Õ Ô Ð Ð Ð Ð ˆy˜DÐ Ñ Ô Ð Õ Ô Ñ Ô Ð Ð Õ Ô ˆyÑ Ô Ð Õ Ô ˆyÑ Ô Ð Ð Õ Ô ˜DÑ Ô Ð Ð Ñ Ð Ð Ð Ð Ð Ñ Ð Õ Õ Ô Ð Ñ Ô Ñ Ô Ð Ð Ð Ð Ð ØÐˆs�eŠ|ÐÐÐÕÔÐÐÐÐˆs�eÐÑÔÐÕÔÑÔÐÐÕÔˆsÑÔÐÕÔˆsÑÔÐÐÕÔ�eÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐr7   c                óš  — d}d}||k    }d}||k    }|r|s¬t          j        d||fd|||f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd	|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}}d S )
Ng     €F@g     €@@g     €P@)ú<=r¾   )z%(py1)s <= %(py4)sz%(py4)s <= %(py6)sÚhit_stop_ms)r!   r#   r$   r%   r&   )r'   r(   r,   r)   r*   r+   r-   r.   )r/   r¿   rš   rF   r2   r1   r3   r4   s           r5   Ú*test_t1_f14_hit_stop_micro_freeze_durationzHTestTier1TargetDummyAndCombos.test_t1_f14_hit_stop_micro_freeze_duration•   s  € àˆØÐ*ˆt�{Ò*Ð* dÐ*�{ dÒ*Ð*Ð*Ð*Ð*Ð*Õ*Ô*Ð*Ð*Ð*Ð*Ð*ˆt�{ dÐ*Ñ*Ô*Õ*Ô*ˆtÑ*Ô*Ð*Õ*Ô*Ñ*Ô*Ð*Ð*Õ*Ô*�{Ñ*Ô*Ð*Õ*Ô*�{Ñ*Ô*Ð*Ð*Õ*Ô* dÑ*Ô*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*r7   c                ó  — d}d„ t          |¦  «        D ¦   «         }t          d¦  «        D ]}|||z           }d|d<   ||d<   Œt          |¦  «        }||k    }|�st          j        d|fd||f¦  «        d	t	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nd	d
t	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd
t          j        |¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}}|d         d         }	d}
|	|
k    }|slt          j        d|fd|	|
f¦  «        t          j        |	¦  «        t          j        |
¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}	x}}
d S )Né@   c                ó   — g | ]}d ddœ‘ŒS )Fr   )ÚactiveÚvalrŒ   )rž   Ú_s     r5   r¡   zcTestTier1TargetDummyAndCombos.test_t1_f14_damage_text_pool_ring_buffer_64_slots.<locals>.<listcomp>œ   s    € ÐFÐFÐF°˜5¨Ð+Ð+ÐFÐFÐFr7   éF   TrÄ   rÅ   r   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py5)sÚlenÚpoolÚ	pool_size)r    r!   r=   r?   r   rX   r   r”   r•   r–   r$   )
rh   rÈ   r'   r(   r)   r*   r+   r,   r-   r.   )r/   rÊ   rÉ   ÚiÚslotrF   r_   rI   r„   rš   r1   r^   r3   s                r5   Ú1test_t1_f14_damage_text_pool_ring_buffer_64_slotszOTestTier1TargetDummyAndCombos.test_t1_f14_damage_text_pool_ring_buffer_64_slotsš   sD  € Øˆ	ØFÐFµU¸9Ñ5EÔ5EÐFÑFÔFˆå�r‘”ð 	ð 	ˆAØ˜˜I™Ô&ˆDØ!ˆD�‰NØˆD�‰KˆKÝ�4‰yŒyÐ%ˆy˜IÒ%Ð%Ð%Ñ%Õ%Ô%Ð%Ð%Ð%Ð%ˆy˜IÐ%Ñ%Ô%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%�sÑ%Ô%Ð%Õ%Ô%�sÑ%Ô%Ð%Ð%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%�4Ñ%Ô%Ð%Õ%Ô%�4Ñ%Ô%Ð%Ð%Õ%Ô%ˆyÑ%Ô%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%˜IÑ%Ô%Ð%Õ%Ô%˜IÑ%Ô%Ð%Ð%Ð%Ð%Ñ%Ð%Ð%Ð%Ð%Ð%Ñ%Ð%Õ%Õ%Ô%Ð%Ñ%Ô%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ø�AŒw�uŒ~Ð# Ð#ˆ~ Ò#Ð#Ð#Ð#Õ#Ô#Ð#Ð#Ð#Ð#ˆ~ Ð#Ñ#Ô#Õ#Ô#ˆ~Ñ#Ô#Õ#Ô# Ñ#Ô#Ð#Ð#Ñ#Ð#Ð#Ð#Ð#Ð#Ñ#Ð#Õ#Õ#Ô#Ð#Ñ#Ô#Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#r7   Nr†   )
rˆ   r‰   rŠ   r‹   r›   r¦   r­   r¼   rÀ   rÍ   rŒ   r7   r5   rŽ   rŽ   f   s’   € € € € € Ø3Ð3ð(ð (ð (ð (ð)ð )ð )ð )ð ð  ð  ð  ð(ð ð ð ð+ð +ð +ð +ð
	$ð 	$ð 	$ð 	$ð 	$ð 	$r7   rŽ   c                  ó:   — e Zd ZdZdd„Zdd„Zdd„Zdd	„Zdd
„ZdS )ÚTestTier1PhantomEvasionDodgez%Feature 15: 0.25s i-frame Dodge Roll.r}   r	   r   r   c                ó<  — |j         }| }|sxddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }t          t          j        |¦  «        ¦  «        ‚d x}}|                     ¦   «          |j         }|sxddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }t          t          j        |¦  «        ¦  «        ‚d }|j	        }|t          k    }|sät          j        d|fd|t          f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddœz  }d	d
|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}d S )Nú1assert not %(py2)s
{%(py2)s = %(py0)s.is_iframe
}r}   rR   ú-assert %(py2)s
{%(py2)s = %(py0)s.is_iframe
}r   )z4%(py2)s
{%(py2)s = %(py0)s.iframe_timer
} == %(py4)sr   )r    r"   r#   r–   r$   )Ú	is_iframer)   r*   r'   r+   r,   r-   r.   r‚   Úiframe_timerr   r(   )r/   r}   rG   r1   rH   r]   r^   r3   s           r5   Ú*test_t1_f15_iframe_activation_and_durationzGTestTier1PhantomEvasionDodge.test_t1_f15_iframe_activation_and_duration©   sE  € Ø#Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô-Ð#Ñ-Ô-Ð-Õ-Ô-Ð#Ñ-Ô-Ð-Ð-Õ-Ô-Ð-Ñ-Ô-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ø×&Ò&Ñ(Ô(Ð(ØÔ)Ð)Ð)Ð)Ð)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)ÐÑ)Ô)Ð)Õ)Ô)ÐÑ)Ô)Ð)Ð)Õ)Ô)Ð)Ñ)Ô)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)ØÔ,ÐEÐ,Õ0EÒEÐEÐEÐEÕEÔEÐEÐEÐEÐEÐ,Õ0EÐEÑEÔEÐEÕEÔEÑEÔEÐEÐEÕEÔEÐÑEÔEÐEÕEÔEÐÑEÔEÐEÐEÕEÔEÐ,ÑEÔEÐEÕEÔEÑEÔEÐEÐEÕEÔEÕ0EÑEÔEÐEÕEÔEÕ0EÑEÔEÐEÐEÐEÐEÑEÐEÐEÐEÐEÐEÑEÐEÕEÕEÔEÐEÑEÔEÑEÔEÐEÐEÐEÐEÐEÐEÐEr7   c           
     ó<  — |                      ¦   «          |                     ddd¬¦  «         dt          z  }t          j        }|j        }d} ||||¬¦  «        }|�s7dd	t          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        nd	t          j
        |¦  «        d
t          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        nd
t          j
        |¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        t          j
        |¦  «        dœz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}}d S )Nr   r   r¯   )ÚdtrM   ç-Cëâ6?rS   z}assert %(py10)s
{%(py10)s = %(py2)s
{%(py2)s = %(py0)s.isclose
}(%(py5)s
{%(py5)s = %(py3)s.vx
}, %(py6)s, abs_tol=%(py8)s)
}rV   r}   Úexpected_vx)r    r"   r=   r?   r$   r&   Úpy10)r‚   r�   r   rV   r[   Úvxr)   r*   r'   r+   r,   r-   r.   )r/   r}   rÙ   rG   r_   Ú@py_assert7Ú@py_assert9Ú@py_format11s           r5   Ú/test_t1_f15_speed_boost_multiplier_during_dodgezLTestTier1PhantomEvasionDodge.test_t1_f15_speed_boost_multiplier_during_dodge¯   sž  € Ø×&Ò&Ñ(Ô(Ð(Ø×$Ò$ S¨#°#Ð$Ñ6Ô6Ð6à�KÑ'ˆÝŒ|ÐKÐ,Ô/ÐKÀdÐKˆ|ˆ|Ð/°ÀdÐKÑKÔKÐKÐKÑKÐKÐKÕKÔKÑKÔKÐKÐKÕKÔK�tÑKÔKÐKÕKÔK�tÑKÔKÐKÐKÕKÔKˆ|ÑKÔKÐKÕKÔKÑKÔKÐKÐKÕKÔKÐ,ÑKÔKÐKÕKÔKÐ,ÑKÔKÐKÐKÕKÔKÐ/ÑKÔKÐKÕKÔKÑKÔKÐKÐKÕKÔK°ÑKÔKÐKÕKÔK°ÑKÔKÐKÐKÕKÔKÀdÑKÔKÕKÔKÐKÑKÔKÐKÐKÑKÐKÕKÕKÔKÐKÑKÔKÑKÔKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKr7   c                ó’  — |                      ¦   «          d}|j        rdn|}d}||k    }|s—t          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}}d S )	Ng      I@r   r   r:   Úactual_damager<   r>   r?   )
r‚   rÓ   r'   r(   r)   r*   r+   r,   r-   r.   )r/   r}   Úincoming_damagerá   rF   rG   rH   rI   s           r5   Ú*test_t1_f15_invulnerability_cancels_damagezGTestTier1PhantomEvasionDodge.test_t1_f15_invulnerability_cancels_damage¶   sò   € Ø×&Ò&Ñ(Ô(Ð(Øˆà/Ô9ÐN˜˜¸ˆØ #Ð#ˆ} Ò#Ð#Ð#Ð#Õ#Ô#Ð#Ð#Ð#Ð#ˆ} Ð#Ñ#Ô#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô#ˆ}Ñ#Ô#Ð#Õ#Ô#ˆ}Ñ#Ô#Ð#Ð#Õ#Ô# Ñ#Ô#Ð#Ð#Ñ#Ð#Ð#Ð#Ð#Ð#Ñ#Ð#Õ#Õ#Ô#Ð#Ñ#Ô#Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#Ð#r7   c                ón  — |                      ¦   «          |j        }|sxddt          j        ¦   «         v st	          j        |¦  «        rt	          j        |¦  «        ndt	          j        |¦  «        dœz  }t          t	          j        |¦  «        ¦  «        ‚d }| 	                    d¦  «         |j        }| }|sxddt          j        ¦   «         v st	          j        |¦  «        rt	          j        |¦  «        ndt	          j        |¦  «        dœz  }t          t	          j        |¦  «        ¦  «        ‚d x}}d S )NrÒ   r}   rR   g¤p=
×£Ð?rÑ   )
r‚   rÓ   r)   r*   r'   r+   r,   r-   r.   rƒ   )r/   r}   rG   r]   r1   rH   s         r5   Ú4test_t1_f15_iframe_expiration_restores_vulnerabilityzQTestTier1PhantomEvasionDodge.test_t1_f15_iframe_expiration_restores_vulnerability½   sQ  € Ø×&Ò&Ñ(Ô(Ð(ØÔ)Ð)Ð)Ð)Ð)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)ÐÑ)Ô)Ð)Õ)Ô)ÐÑ)Ô)Ð)Ð)Õ)Ô)Ð)Ñ)Ô)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ø×&Ò& tÑ,Ô,Ð,Ø#Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô-Ð#Ñ-Ô-Ð-Õ-Ô-Ð#Ñ-Ô-Ð-Ð-Õ-Ô-Ð-Ñ-Ô-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-r7   c                ó¼  — |                      ¦   «          g }|j        r#|                     |j        |j        ddœ¦  «         t          |¦  «        }d}||k    }|sòt          j        d|fd||f¦  «        dt          j	        ¦   «         v st          j
        t
          ¦  «        rt          j        t
          ¦  «        nddt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }d	d
|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|d         d         }d}	||	k    }|slt          j        d|fd||	f¦  «        t          j        |¦  «        t          j        |	¦  «        dœz  }
dd|
iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}	d S )Nçš™™™™™é?)ÚxÚyÚalphar“   r   ©z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)srÈ   Úghost_trails©r    r!   r=   r$   r%   r&   r   rê   r”   r•   r–   r$   )r‚   rÓ   ri   ÚwxÚwyrÈ   r'   r(   r)   r*   r+   r,   r-   r.   )r/   r}   rì   rF   r2   r_   r3   r4   rš   r1   r^   s              r5   Ú)test_t1_f15_ghost_trail_particle_emissionzFTestTier1PhantomEvasionDodge.test_t1_f15_ghost_trail_particle_emissionÃ   s  € Ø×&Ò&Ñ(Ô(Ð(ØˆàÔ%ð 	dØ×ÒÐ&6Ô&9Ð@PÔ@SÐ^aÐ bÐ bÑcÔcÐcÝ�<Ñ Ô Ð% AÐ%Ð  AÒ%Ð%Ð%Ð%Õ%Ô%Ð%Ð%Ð%Ð%Ð  AÐ%Ñ%Ô%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%�sÑ%Ô%Ð%Õ%Ô%�sÑ%Ô%Ð%Ð%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%�<Ñ%Ô%Ð%Õ%Ô%�<Ñ%Ô%Ð%Ð%Õ%Ô%Ð Ñ%Ô%Õ%Ô% AÑ%Ô%Ð%Ð%Ñ%Ð%Ð%Ð%Ð%Ð%Ñ%Ð%Õ%Õ%Ô%Ð%Ñ%Ô%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ø˜AŒ˜wÔ'Ð.¨3Ð.Ð'¨3Ò.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð'¨3Ð.Ñ.Ô.Õ.Ô.Ð'Ñ.Ô.Õ.Ô.¨3Ñ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.r7   Nr‡   )	rˆ   r‰   rŠ   r‹   rÕ   rß   rã   rå   rð   rŒ   r7   r5   rÏ   rÏ   ¦   s†   € € € € € Ø/Ð/ðFð Fð Fð FðLð Lð Lð Lð$ð $ð $ð $ð.ð .ð .ð .ð/ð /ð /ð /ð /ð /r7   rÏ   c                  óB   — e Zd ZdZdd„Zdd„Zdd„Zdd„Zdd„Zdd	„Z	d
S )Ú"TestTier1BossCombatAndLootFountainz+Feature 17: Strand Executioner Boss & Loot.r   r   c                ó(  — dddddddœ}|d         }d}||k    }|slt          j        d|fd	||f¦  «        t          j        |¦  «        t          j        |¦  «        d
œz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|d         }d}||k    }|slt          j        d|fd	||f¦  «        t          j        |¦  «        t          j        |¦  «        d
œz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}d S )NÚboss_strand_executioneru   Ä�ao Phá»§ Bá»� Biá»ƒniDH  éŒ   i,  )Úidrz   r�   r‘   r™   Úpoiser�   r   r”   r•   r–   r$   r™   r£   )r/   Úbossrš   r1   rF   r^   r3   s          r5   Ú.test_t1_f17_strand_executioner_canonical_statszQTestTier1BossCombatAndLootFountain.test_t1_f17_strand_executioner_canonical_statsÐ   sr  € à+Ø,ØØØØð
ð 
ˆð �DŒzÐ"˜UÐ"ˆz˜UÒ"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"ˆz˜UÐ"Ñ"Ô"Õ"Ô"ˆzÑ"Ô"Õ"Ô"˜UÑ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ø�HŒ~Ð$ Ð$ˆ~ Ò$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$ˆ~ Ð$Ñ$Ô$Õ$Ô$ˆ~Ñ$Ô$Õ$Ô$ Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ð$r7   c           	     óv  — d}d}t          d||z  ¦  «        }t          j        }d}d} ||||¬¦  «        }|sùddt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        d	t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd	t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d
œz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}x}}d S )Nr©   g333333ã?r   r9   rØ   rS   rU   rV   ÚprogressrW   )
ÚminrV   r[   r)   r*   r'   r+   r,   r-   r.   )	r/   Úwindup_durationÚelapsedrû   rG   r_   r`   ra   rb   s	            r5   Ú(test_t1_f17_telegraph_progression_windupzKTestTier1BossCombatAndLootFountain.test_t1_f17_telegraph_progression_windupÜ   sC  € ØˆØˆÝ�s˜G oÑ5Ñ6Ô6ˆÝŒ|Ð8 cÐ8°4Ð8ˆ|ˆ|˜H c°4Ð8Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8�tÑ8Ô8Ð8Õ8Ô8�tÑ8Ô8Ð8Ð8Õ8Ô8ˆ|Ñ8Ô8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8˜HÑ8Ô8Ð8Õ8Ô8˜HÑ8Ô8Ð8Ð8Õ8Ô8 cÑ8Ô8Õ8Ô8°4Ñ8Ô8Õ8Ô8Ð8Ñ8Ô8Ð8Ð8Ñ8Ð8Õ8Õ8Ô8Ð8Ñ8Ô8Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8r7   c                óº   — ddddœ}d}|rd|d<   |d         }| }|s:ddt          j        |¦  «        iz  }t          t          j        |¦  «        ¦  «        ‚d x}}d S )	NTÚslam_circlerç   )rÄ   Útyperû   FrÄ   zassert not %(py1)sr!   )r'   r,   r-   r.   )r/   Ú	telegraphÚboss_staggerrš   rF   r]   s         r5   Ú2test_t1_f17_telegraph_stagger_instant_cancellationzUTestTier1BossCombatAndLootFountain.test_t1_f17_telegraph_stagger_instant_cancellationâ   s�   € Ø#¨]ÈÐLÐLˆ	ØˆØð 	(Ø"'ˆI�hÑØ˜XÔ&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Õ&Ô&Ð&Ñ&Ô&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&r7   c                ó‚  — g d¢}d\  }}g }t          |¦  «        D ]|\  }}dt          j        z  t          |¦  «        z  |z  }d|dz  z   }|t          j        |¦  «        |z  z   }	|t          j        |¦  «        |z  z   }
|                     ||	|
dœ¦  «         Œ}t          |¦  «        }d}||k    }|sòt          j        d|fd	||f¦  «        d
t          j
        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nd
dt          j
        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|d         d         }|d         d         }||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}d S )N)Úblood_soul_orbÚnether_bone_nailÚblood_reaper_scythe)ç      $@r
  r¨   g      ø?rL   )rö   rè   ré   é   r   rë   rÈ   Údropsrí   r%   r&   r   rè   r“   )ú!=)z%(py1)s != %(py4)sr•   r–   r$   )Ú	enumeraterV   ÚpirÈ   ÚcosÚsinri   r'   r(   r)   r*   r+   r,   r-   r.   )r/   Ú
loot_itemsÚboss_xÚboss_yr  rË   ÚitemÚangleÚdistÚdrop_xÚdrop_yrF   r2   r_   r3   r4   rš   r1   r^   s                      r5   Ú(test_t1_f17_loot_fountain_dispersion_arczKTestTier1BossCombatAndLootFountain.test_t1_f17_loot_fountain_dispersion_arcé   s~  € ØRÐRÐRˆ
Ø#‰ˆ�ØˆÝ  Ñ,Ô,ð 	Að 	A‰GˆAˆtØ�4œ7‘]¥S¨¡_¤_Ñ4¸Ñ9ˆEØ˜!˜c™'‘?ˆDØ�dœh u™oœo°Ñ4Ñ4ˆFØ�dœh u™oœo°Ñ4Ñ4ˆFØ�LŠL ¨6¸Ð?Ð?Ñ@Ô@Ð@Ð@Ý�5‰zŒzÐ˜QÐˆz˜QŠÐÐÐÕÔÐÐÐÐˆz˜QÐÑÔÐÕÔÑÔÐÐÕÔ�sÑÔÐÕÔ�sÑÔÐÐÐÕÔÑÔÐÐÕÔ�5ÑÔÐÕÔ�5ÑÔÐÐÕÔˆzÑÔÕÔ˜QÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐØ�QŒx˜Œ}Ð-  a¤¨¤Ð-ˆ} Ò-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-ˆ} Ð-Ñ-Ô-Õ-Ô-ˆ}Ñ-Ô-Õ-Ô- Ñ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-r7   c                ó$  — dddddœ}|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        d	œz  }d
d|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        d	œz  }d
d|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}d S )Nz#ffffffz#3b82f6z#f59e0bz#ef4444)ÚCOMMONÚMAGICÚRAREÚMYTHICr  r   r”   r•   r–   r$   r  r£   )r/   Úrarity_colorsrš   r1   rF   r^   r3   s          r5   Ú$test_t1_f17_rarity_light_beam_colorszGTestTier1BossCombatAndLootFountain.test_t1_f17_rarity_light_beam_colorsö   st  € àØØØð	
ð 
ˆð ˜WÔ%Ð2¨Ð2Ð%¨Ò2Ð2Ð2Ð2Õ2Ô2Ð2Ð2Ð2Ð2Ð%¨Ð2Ñ2Ô2Õ2Ô2Ð%Ñ2Ô2Õ2Ô2¨Ñ2Ô2Ð2Ð2Ñ2Ð2Ð2Ð2Ð2Ð2Ñ2Ð2Õ2Õ2Ô2Ð2Ñ2Ô2Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ø˜XÔ&Ð3¨)Ð3Ð&¨)Ò3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3Ð&¨)Ð3Ñ3Ô3Õ3Ô3Ð&Ñ3Ô3Õ3Ô3¨)Ñ3Ô3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3r7   c                óœ  — d\  }}d}dddœ}dddœ}t           j        }|d         }||z
  }|d         }	|	|z
  }
 |||
¦  «        }||k    }|�s”t          j        d	|fd
||f¦  «        dt	          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        ndt          j        |¦  «        t          j        |¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}x}x}	x}
x}}t           j        }|d         }||z
  }|d         }	|	|z
  }
 |||
¦  «        }||k    }|�s”t          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        ndt          j        |¦  «        t          j        |¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}x}x}	x}
x}}d S )N)ç      @r#  r²   g333333@gffffff@)rè   ré   g      @rè   ré   )r¾   )zo%(py12)s
{%(py12)s = %(py2)s
{%(py2)s = %(py0)s.hypot
}((%(py4)s - %(py5)s), (%(py8)s - %(py9)s))
} <= %(py14)srV   Úplayer_xÚplayer_yÚpickup_radius)r    r"   r#   r?   r&   rY   Úpy12Úpy14zassert %(py16)sÚpy16rN   )zn%(py12)s
{%(py12)s = %(py2)s
{%(py2)s = %(py0)s.hypot
}((%(py4)s - %(py5)s), (%(py8)s - %(py9)s))
} > %(py14)s)
rV   Úhypotr'   r(   r)   r*   r+   r,   r-   r.   )r/   r$  r%  r&  Ú	drop_nearÚdrop_farrG   r1   r`   rÜ   Ú@py_assert10Ú@py_assert11Ú@py_assert13Ú@py_format15Ú@py_format17s                  r5   Ú(test_t1_f17_auto_pickup_radius_thresholdzKTestTier1BossCombatAndLootFountain.test_t1_f17_auto_pickup_radius_threshold   s%  € Ø%Ñˆ�(ØˆØ CÐ(Ð(ˆ	Ø 3Ð'Ð'ˆÝŒzÐ`˜) Cœ.Ð`˜.¨8Ñ3Ð`°Y¸s´^Ð`°^ÀhÑ5NÐ`ˆzˆzÐ3Ð5NÑOÔOÐ`ÐOÐS`Ò`Ð`Ð`Ñ`Õ`Ô`Ð`Ð`Ð`Ð`ÐOÐS`Ð`Ñ`Ô`Ð`Õ`Ô`Ñ`Ô`Ð`Ð`Õ`Ô`�tÑ`Ô`Ð`Õ`Ô`�tÑ`Ô`Ð`Ð`Õ`Ô`ˆzÑ`Ô`Õ`Ô`˜.Ñ`Ô`Ð`Õ`Ô`Ñ`Ô`Ð`Ð`Õ`Ô`¨8Ñ`Ô`Ð`Õ`Ô`¨8Ñ`Ô`Ð`Ð`Õ`Ô`°^Ñ`Ô`Ð`Õ`Ô`Ñ`Ô`Ð`Ð`Õ`Ô`ÀhÑ`Ô`Ð`Õ`Ô`ÀhÑ`Ô`Ð`Ð`Õ`Ô`ÐOÑ`Ô`Ð`Õ`Ô`Ñ`Ô`Ð`Ð`Õ`Ô`ÐS`Ñ`Ô`Ð`Õ`Ô`ÐS`Ñ`Ô`Ð`Ð`Ð`Ð`Ñ`Ð`Ð`Ð`Ð`Ð`Ñ`Ð`Õ`Õ`Ô`Ð`Ñ`Ô`Ñ`Ô`Ð`Ð`Ð`Ð`Ð`Ð`Ð`Ð`Ð`Ð`Ð`Ð`Ð`Ð`Ð`ÝŒzÐ]˜( 3œ-Ð]˜-¨(Ñ2Ð]°H¸S´MÐ]°MÀHÑ4LÐ]ˆzˆzÐ2Ð4LÑMÔMÐ]ÐMÐP]Ò]Ð]Ð]Ñ]Õ]Ô]Ð]Ð]Ð]Ð]ÐMÐP]Ð]Ñ]Ô]Ð]Õ]Ô]Ñ]Ô]Ð]Ð]Õ]Ô]�tÑ]Ô]Ð]Õ]Ô]�tÑ]Ô]Ð]Ð]Õ]Ô]ˆzÑ]Ô]Õ]Ô]˜-Ñ]Ô]Ð]Õ]Ô]Ñ]Ô]Ð]Ð]Õ]Ô]¨(Ñ]Ô]Ð]Õ]Ô]¨(Ñ]Ô]Ð]Ð]Õ]Ô]°MÑ]Ô]Ð]Õ]Ô]Ñ]Ô]Ð]Ð]Õ]Ô]ÀHÑ]Ô]Ð]Õ]Ô]ÀHÑ]Ô]Ð]Ð]Õ]Ô]ÐMÑ]Ô]Ð]Õ]Ô]Ñ]Ô]Ð]Ð]Õ]Ô]ÐP]Ñ]Ô]Ð]Õ]Ô]ÐP]Ñ]Ô]Ð]Ð]Ð]Ð]Ñ]Ð]Ð]Ð]Ð]Ð]Ñ]Ð]Õ]Õ]Ô]Ð]Ñ]Ô]Ñ]Ô]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]r7   Nr†   )
rˆ   r‰   rŠ   r‹   rù   rÿ   r  r  r!  r2  rŒ   r7   r5   rò   rò   Í   s˜   € € € € € Ø5Ð5ð
%ð 
%ð 
%ð 
%ð9ð 9ð 9ð 9ð'ð 'ð 'ð 'ð.ð .ð .ð .ð4ð 4ð 4ð 4ð^ð ^ð ^ð ^ð ^ð ^r7   rò   )r‹   Ú
__future__r   Úbuiltinsr)   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter'   rV   Útypingr   r   r   ÚpytestÚtests.e2e_cocos.conftestr   r   r	   r
   r   rŽ   rÏ   rò   rŒ   r7   r5   ú<module>r;     sh  ððð ð #Ð "Ð "Ð "Ð "Ð "à  € € € € € € € € € € € € €€€€Ø "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ø €€€ðð ð ð ð ð ð ð ð ð ð ð ðK5ð K5ð K5ð K5ð K5ñ K5ô K5ð K5ð\=$ð =$ð =$ð =$ð =$ñ =$ô =$ð =$ð@$/ð $/ð $/ð $/ð $/ñ $/ô $/ð $/ðN9^ð 9^ð 9^ð 9^ð 9^ñ 9^ô 9^ð 9^ð 9^ð 9^r7   