blacktrigram 0.7.47 → 0.7.48

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (450) hide show
  1. package/lib/App2.js.map +1 -1
  2. package/lib/audio/AudioAssetLoader.js.map +1 -1
  3. package/lib/audio/AudioAssetRegistry.js.map +1 -1
  4. package/lib/audio/AudioCache.js.map +1 -1
  5. package/lib/audio/AudioManager.js.map +1 -1
  6. package/lib/audio/AudioMonitor.js.map +1 -1
  7. package/lib/audio/AudioPool.js.map +1 -1
  8. package/lib/audio/AudioProvider.js.map +1 -1
  9. package/lib/audio/AudioUtils.js.map +1 -1
  10. package/lib/audio/BoneImpactAudioMap.js.map +1 -1
  11. package/lib/audio/VariantSelector.js.map +1 -1
  12. package/lib/audio/types.js.map +1 -1
  13. package/lib/components/screens/combat/CombatScreen3D.d.ts.map +1 -1
  14. package/lib/components/screens/combat/CombatScreen3D.js +22 -11
  15. package/lib/components/screens/combat/CombatScreen3D.js.map +1 -1
  16. package/lib/components/screens/combat/components/controls/CombatButtons.js.map +1 -1
  17. package/lib/components/screens/combat/components/controls/CombatControlsPanel.js.map +1 -1
  18. package/lib/components/screens/combat/components/controls/ControlsGuide.js.map +1 -1
  19. package/lib/components/screens/combat/components/controls/KeyboardHints.js.map +1 -1
  20. package/lib/components/screens/combat/components/controls/PauseMenu.js.map +1 -1
  21. package/lib/components/screens/combat/components/controls/PauseMenuButton.js.map +1 -1
  22. package/lib/components/screens/combat/components/controls/QuickSettings.js.map +1 -1
  23. package/lib/components/screens/combat/components/effects/BloodDecals3D.js.map +1 -1
  24. package/lib/components/screens/combat/components/effects/BloodLossOverlayHtml.js.map +1 -1
  25. package/lib/components/screens/combat/components/effects/BloodParticles3D.js.map +1 -1
  26. package/lib/components/screens/combat/components/effects/BloodViscosity3D.js.map +1 -1
  27. package/lib/components/screens/combat/components/effects/CombatParticleEffects3D.js.map +1 -1
  28. package/lib/components/screens/combat/components/effects/ConsciousnessBlur.js.map +1 -1
  29. package/lib/components/screens/combat/components/effects/InternalDamage3D.js.map +1 -1
  30. package/lib/components/screens/combat/components/effects/PainVignette.js.map +1 -1
  31. package/lib/components/screens/combat/components/effects/ParticleAudio3D.js.map +1 -1
  32. package/lib/components/screens/combat/components/effects/TraumaOverlay3D.js.map +1 -1
  33. package/lib/components/screens/combat/components/feedback/MatchCountdown.js.map +1 -1
  34. package/lib/components/screens/combat/components/feedback/RoundAnnouncementOverlayHtml.js.map +1 -1
  35. package/lib/components/screens/combat/components/feedback/RoundDisplayStatus.js.map +1 -1
  36. package/lib/components/screens/combat/components/feedback/RoundStartAnnouncementOverlayHtml.js.map +1 -1
  37. package/lib/components/screens/combat/components/hud/CombatBottomHUD.js.map +1 -1
  38. package/lib/components/screens/combat/components/hud/CombatLeftHUD.js.map +1 -1
  39. package/lib/components/screens/combat/components/hud/CombatPortraitStatusStrip.js.map +1 -1
  40. package/lib/components/screens/combat/components/hud/CombatRightHUD.js.map +1 -1
  41. package/lib/components/screens/combat/components/hud/CombatTopHUD.js.map +1 -1
  42. package/lib/components/screens/combat/components/hud/DifficultyIndicator.js.map +1 -1
  43. package/lib/components/screens/combat/components/hud/FPSMonitor.js.map +1 -1
  44. package/lib/components/screens/combat/components/hud/MobileControlsWrapper.js.map +1 -1
  45. package/lib/components/screens/combat/components/hud/PlayerStateOverlayHtml.js.map +1 -1
  46. package/lib/components/screens/combat/components/indicators/BalanceIndicator.js.map +1 -1
  47. package/lib/components/screens/combat/components/indicators/InputBufferDisplay.js.map +1 -1
  48. package/lib/components/screens/combat/components/indicators/StaminaWarning.js.map +1 -1
  49. package/lib/components/screens/combat/components/indicators/TechniqueNameDisplay.js.map +1 -1
  50. package/lib/components/screens/combat/helpers/AnimationUpdater.d.ts.map +1 -1
  51. package/lib/components/screens/combat/helpers/AnimationUpdater.js +4 -2
  52. package/lib/components/screens/combat/helpers/AnimationUpdater.js.map +1 -1
  53. package/lib/components/screens/combat/helpers/combatHelpers.js.map +1 -1
  54. package/lib/components/screens/combat/hooks/useAICombat.js.map +1 -1
  55. package/lib/components/screens/combat/hooks/useCombatActions.js.map +1 -1
  56. package/lib/components/screens/combat/hooks/useCombatAttackMovement.js.map +1 -1
  57. package/lib/components/screens/combat/hooks/useCombatAudio.js.map +1 -1
  58. package/lib/components/screens/combat/hooks/useCombatLayout.js.map +1 -1
  59. package/lib/components/screens/combat/hooks/useCombatState.js.map +1 -1
  60. package/lib/components/screens/controls/ControlsScreen3D.js.map +1 -1
  61. package/lib/components/screens/controls/components/ControlBindingsOverlayHtml.js.map +1 -1
  62. package/lib/components/screens/controls/components/ControlCategoryTabsOverlayHtml.js.map +1 -1
  63. package/lib/components/screens/controls/components/GamepadVisualization3D.js.map +1 -1
  64. package/lib/components/screens/controls/components/InteractiveControlDemoOverlayHtml.js.map +1 -1
  65. package/lib/components/screens/controls/components/Key3D.js.map +1 -1
  66. package/lib/components/screens/controls/components/VisualKeyboard3D.js.map +1 -1
  67. package/lib/components/screens/controls/constants/ControlsConstants.js.map +1 -1
  68. package/lib/components/screens/controls/hooks/useControlsState.js.map +1 -1
  69. package/lib/components/screens/endscreen/EndScreen3D.js.map +1 -1
  70. package/lib/components/screens/endscreen/components/DefeatAnimation3D.js.map +1 -1
  71. package/lib/components/screens/endscreen/components/MatchStatisticsDisplayOverlayHtml.js.map +1 -1
  72. package/lib/components/screens/endscreen/components/NavigationButtonsOverlayHtml.js.map +1 -1
  73. package/lib/components/screens/endscreen/components/PerformanceBreakdownOverlayHtml.js.map +1 -1
  74. package/lib/components/screens/endscreen/components/PerformanceRatingOverlayHtml.js.map +1 -1
  75. package/lib/components/screens/endscreen/components/VictoryAnimation3D.js.map +1 -1
  76. package/lib/components/screens/endscreen/components/WinnerDisplayOverlayHtml.js.map +1 -1
  77. package/lib/components/screens/intro/IntroScreen3D.js +1 -1
  78. package/lib/components/screens/intro/IntroScreen3D.js.map +1 -1
  79. package/lib/components/screens/intro/components/AbilityListOverlayHtml.js.map +1 -1
  80. package/lib/components/screens/intro/components/ArchetypeCardGridOverlayHtml.js.map +1 -1
  81. package/lib/components/screens/intro/components/ArchetypeCardOverlayHtml.js.map +1 -1
  82. package/lib/components/screens/intro/components/ArchetypeDisplayOverlayHtml.js.map +1 -1
  83. package/lib/components/screens/intro/components/EnhancedArchetypeDisplayOverlayHtml.js.map +1 -1
  84. package/lib/components/screens/intro/components/MenuButtonsOverlayHtml.js.map +1 -1
  85. package/lib/components/screens/intro/components/MenuSectionOverlayHtml.js.map +1 -1
  86. package/lib/components/screens/intro/components/StatBarOverlayHtml.js.map +1 -1
  87. package/lib/components/screens/philosophy/PhilosophyScreen3D.js.map +1 -1
  88. package/lib/components/screens/training/TrainingScreen3D.d.ts.map +1 -1
  89. package/lib/components/screens/training/TrainingScreen3D.js +1 -0
  90. package/lib/components/screens/training/TrainingScreen3D.js.map +1 -1
  91. package/lib/components/screens/training/components/AnatomyControlsOverlayHtml.js.map +1 -1
  92. package/lib/components/screens/training/components/AnatomyOverlay3D.js.map +1 -1
  93. package/lib/components/screens/training/components/FootPlacementMarkers3D.js.map +1 -1
  94. package/lib/components/screens/training/components/FootworkDrillsOverlayHtml.js.map +1 -1
  95. package/lib/components/screens/training/components/HitFeedbackEffect3D.js.map +1 -1
  96. package/lib/components/screens/training/components/TrainingButtonsOverlayHtml.js.map +1 -1
  97. package/lib/components/screens/training/components/TrainingControlsOverlayHtml.js.map +1 -1
  98. package/lib/components/screens/training/components/TrainingDummy3D.js.map +1 -1
  99. package/lib/components/screens/training/components/TrainingFeedbackOverlayHtml.js.map +1 -1
  100. package/lib/components/screens/training/components/TrainingModeSelectorOverlayHtml.js.map +1 -1
  101. package/lib/components/screens/training/components/TrainingStatsOverlayHtml.js.map +1 -1
  102. package/lib/components/screens/training/components/VitalPointMarker3D.js.map +1 -1
  103. package/lib/components/screens/training/components/VitalPointTrainingOverlayHtml.js.map +1 -1
  104. package/lib/components/screens/training/components/hud/TrainingBottomHUD.js.map +1 -1
  105. package/lib/components/screens/training/components/hud/TrainingLeftHUD.js.map +1 -1
  106. package/lib/components/screens/training/components/hud/TrainingRightHUD.js.map +1 -1
  107. package/lib/components/screens/training/components/hud/TrainingTopHUD.js.map +1 -1
  108. package/lib/components/screens/training/hooks/useAttackMovement.js.map +1 -1
  109. package/lib/components/screens/training/hooks/useTrainingActions.d.ts +1 -0
  110. package/lib/components/screens/training/hooks/useTrainingActions.d.ts.map +1 -1
  111. package/lib/components/screens/training/hooks/useTrainingActions.js +6 -4
  112. package/lib/components/screens/training/hooks/useTrainingActions.js.map +1 -1
  113. package/lib/components/screens/training/hooks/useTrainingLayout.js.map +1 -1
  114. package/lib/components/screens/training/hooks/useTrainingState.js.map +1 -1
  115. package/lib/components/shared/base/BaseButton.js.map +1 -1
  116. package/lib/components/shared/base/BaseButtonOverlayHtml.js.map +1 -1
  117. package/lib/components/shared/base/BasePanel.js.map +1 -1
  118. package/lib/components/shared/base/BaseText.js.map +1 -1
  119. package/lib/components/shared/base/useKoreanTheme.js.map +1 -1
  120. package/lib/components/shared/debug/PerformanceDebugOverlayHtml.js.map +1 -1
  121. package/lib/components/shared/mobile/ActionButtons.js.map +1 -1
  122. package/lib/components/shared/mobile/GestureRecognizerPure.js.map +1 -1
  123. package/lib/components/shared/mobile/HapticController.js.map +1 -1
  124. package/lib/components/shared/mobile/MobileControlsPure.js.map +1 -1
  125. package/lib/components/shared/mobile/StanceWheelPure.js.map +1 -1
  126. package/lib/components/shared/mobile/TouchOptimizer.js.map +1 -1
  127. package/lib/components/shared/mobile/VirtualDPad.js.map +1 -1
  128. package/lib/components/shared/three/anatomy/BodySurface.js.map +1 -1
  129. package/lib/components/shared/three/anatomy/BoneAttachedMuscles.js.map +1 -1
  130. package/lib/components/shared/three/anatomy/BoneClothing.js.map +1 -1
  131. package/lib/components/shared/three/anatomy/BoneRenderer.js.map +1 -1
  132. package/lib/components/shared/three/anatomy/Face3D.js.map +1 -1
  133. package/lib/components/shared/three/anatomy/Foot3D.js.map +1 -1
  134. package/lib/components/shared/three/anatomy/Hand3D.js.map +1 -1
  135. package/lib/components/shared/three/effects/ActionFeedback.js.map +1 -1
  136. package/lib/components/shared/three/effects/DamageNumbers.js.map +1 -1
  137. package/lib/components/shared/three/effects/HitEffects3D.js.map +1 -1
  138. package/lib/components/shared/three/effects/PlayerStateIndicators.js.map +1 -1
  139. package/lib/components/shared/three/effects/StanceSymbol3D.js.map +1 -1
  140. package/lib/components/shared/three/effects/StanceTransitionEffect.js.map +1 -1
  141. package/lib/components/shared/three/effects/VitalPointMarkers3D.js.map +1 -1
  142. package/lib/components/shared/three/indicators/ElementalColorSystem.js.map +1 -1
  143. package/lib/components/shared/three/indicators/GuardIndicator.js.map +1 -1
  144. package/lib/components/shared/three/indicators/HapticFeedback.js.map +1 -1
  145. package/lib/components/shared/three/indicators/StanceChangeIndicator.js.map +1 -1
  146. package/lib/components/shared/three/models/Player3DWithTransitions.js.map +1 -1
  147. package/lib/components/shared/three/models/SkeletalPlayer3D.d.ts.map +1 -1
  148. package/lib/components/shared/three/models/SkeletalPlayer3D.js +7 -5
  149. package/lib/components/shared/three/models/SkeletalPlayer3D.js.map +1 -1
  150. package/lib/components/shared/three/optimization/AdaptiveQuality.js.map +1 -1
  151. package/lib/components/shared/three/scene/AtmosphericParticles3D.js.map +1 -1
  152. package/lib/components/shared/three/scene/BackgroundScene3D.js.map +1 -1
  153. package/lib/components/shared/three/scene/CombatArena3D.js.map +1 -1
  154. package/lib/components/shared/three/scene/KoreanSignage3D.js.map +1 -1
  155. package/lib/components/shared/three/ui/ArchetypeCard.js.map +1 -1
  156. package/lib/components/shared/three/ui/BodyPartHealthDisplay.js.map +1 -1
  157. package/lib/components/shared/three/ui/BreathingIndicator2.js.map +1 -1
  158. package/lib/components/shared/three/ui/CombatReadinessBar.js.map +1 -1
  159. package/lib/components/shared/three/ui/ComboCounter.js.map +1 -1
  160. package/lib/components/shared/three/ui/HealthBar.js.map +1 -1
  161. package/lib/components/shared/three/ui/KoreanButton.js.map +1 -1
  162. package/lib/components/shared/three/ui/KoreanPanel.js.map +1 -1
  163. package/lib/components/shared/three/ui/KoreanText.js.map +1 -1
  164. package/lib/components/shared/three/ui/MenuList.js.map +1 -1
  165. package/lib/components/shared/three/ui/PlayerHUD.js.map +1 -1
  166. package/lib/components/shared/three/ui/ProgressBar.js.map +1 -1
  167. package/lib/components/shared/three/ui/SpeedIndicatorHUD.js.map +1 -1
  168. package/lib/components/shared/three/ui/StaminaBar.js.map +1 -1
  169. package/lib/components/shared/three/ui/TechniqueBar.js.map +1 -1
  170. package/lib/components/shared/three/ui/TechniqueCard.js.map +1 -1
  171. package/lib/components/shared/three/ui/VitalPointOverlayControlsHtml.js.map +1 -1
  172. package/lib/components/shared/ui/BackButton.js.map +1 -1
  173. package/lib/components/shared/ui/BaseHUDContainer.js.map +1 -1
  174. package/lib/components/shared/ui/CombatTimer.js.map +1 -1
  175. package/lib/components/shared/ui/ErrorModal.js.map +1 -1
  176. package/lib/components/shared/ui/LoadingState.js.map +1 -1
  177. package/lib/components/shared/ui/SplashScreen.js +2 -2
  178. package/lib/components/shared/ui/SplashScreen.js.map +1 -1
  179. package/lib/components/shared/ui/VitalPointOverlayControlsPure.js.map +1 -1
  180. package/lib/components/shared/ui/VolumeControl.js.map +1 -1
  181. package/lib/components/shared/ui/shared/ConfirmDialog.js.map +1 -1
  182. package/lib/components/ui/combat/BalanceIndicatorOverlayHtml.js.map +1 -1
  183. package/lib/constants/bodyDimensions.js.map +1 -1
  184. package/lib/constants/bodyRenderingConstants.js.map +1 -1
  185. package/lib/data/archetypeClothing.js.map +1 -1
  186. package/lib/data/archetypePhysicalAttributes.js.map +1 -1
  187. package/lib/data/techniqueMappings.js.map +1 -1
  188. package/lib/data/techniques.js.map +1 -1
  189. package/lib/hooks/useActionFeedback.js.map +1 -1
  190. package/lib/hooks/useBalanceAnimations.js.map +1 -1
  191. package/lib/hooks/useCombatTimer.js.map +1 -1
  192. package/lib/hooks/useDebounce.js.map +1 -1
  193. package/lib/hooks/useHUDLayout.js.map +1 -1
  194. package/lib/hooks/useHandPoseTransitions.js.map +1 -1
  195. package/lib/hooks/useKeyboardControls.js.map +1 -1
  196. package/lib/hooks/useMatchCountdown.js.map +1 -1
  197. package/lib/hooks/useMuscleActivation.js.map +1 -1
  198. package/lib/hooks/usePauseMenu.js.map +1 -1
  199. package/lib/hooks/usePlayerAnimation.js.map +1 -1
  200. package/lib/hooks/useResponsiveLayout.js.map +1 -1
  201. package/lib/hooks/useRoundTransition.js.map +1 -1
  202. package/lib/hooks/useSkeletalAnimation.d.ts.map +1 -1
  203. package/lib/hooks/useSkeletalAnimation.js +1 -1
  204. package/lib/hooks/useSkeletalAnimation.js.map +1 -1
  205. package/lib/hooks/useTechniqueSelection.js.map +1 -1
  206. package/lib/hooks/useThrottle.js.map +1 -1
  207. package/lib/hooks/useTouchControls.js.map +1 -1
  208. package/lib/hooks/useWebGLContextLossHandler.js.map +1 -1
  209. package/lib/hooks/useWindowSize.js.map +1 -1
  210. package/lib/systems/CombatSystem.js.map +1 -1
  211. package/lib/systems/EffectCalculator.js.map +1 -1
  212. package/lib/systems/LayoutSystem.js.map +1 -1
  213. package/lib/systems/PlayerEffectManager.js.map +1 -1
  214. package/lib/systems/ResponsiveScaling.js.map +1 -1
  215. package/lib/systems/TrigramSystem.js.map +1 -1
  216. package/lib/systems/VitalPointSystem.js.map +1 -1
  217. package/lib/systems/ai/AIPersonality.js.map +1 -1
  218. package/lib/systems/ai/AdaptiveDifficulty.js +16 -16
  219. package/lib/systems/ai/AdaptiveDifficulty.js.map +1 -1
  220. package/lib/systems/ai/ArchetypeEnforcer.js.map +1 -1
  221. package/lib/systems/ai/ComboSystem.js.map +1 -1
  222. package/lib/systems/ai/DecisionTree.js.map +1 -1
  223. package/lib/systems/ai/TrainingAI.js.map +1 -1
  224. package/lib/systems/ai/types.js.map +1 -1
  225. package/lib/systems/animation/builders/AnimationBuilder.js.map +1 -1
  226. package/lib/systems/animation/builders/HandPoseApplicator.js.map +1 -1
  227. package/lib/systems/animation/builders/HandPoses.js.map +1 -1
  228. package/lib/systems/animation/builders/KeyframeConfig.js.map +1 -1
  229. package/lib/systems/animation/builders/KeyframeInterpolation.js.map +1 -1
  230. package/lib/systems/animation/builders/KickPhaseApplicator.d.ts +6 -0
  231. package/lib/systems/animation/builders/KickPhaseApplicator.d.ts.map +1 -1
  232. package/lib/systems/animation/builders/KickPhaseApplicator.js +16 -9
  233. package/lib/systems/animation/builders/KickPhaseApplicator.js.map +1 -1
  234. package/lib/systems/animation/builders/KoreanGuardPositions.d.ts +4 -4
  235. package/lib/systems/animation/builders/KoreanGuardPositions.js.map +1 -1
  236. package/lib/systems/animation/builders/MartialArtsAnimationBuilder.d.ts +1 -1
  237. package/lib/systems/animation/builders/MartialArtsAnimationBuilder.d.ts.map +1 -1
  238. package/lib/systems/animation/builders/MartialArtsAnimationBuilder.js +5 -5
  239. package/lib/systems/animation/builders/MartialArtsAnimationBuilder.js.map +1 -1
  240. package/lib/systems/animation/builders/MartialArtsConstants.d.ts +112 -71
  241. package/lib/systems/animation/builders/MartialArtsConstants.d.ts.map +1 -1
  242. package/lib/systems/animation/builders/MartialArtsConstants.js +113 -72
  243. package/lib/systems/animation/builders/MartialArtsConstants.js.map +1 -1
  244. package/lib/systems/animation/builders/MartialPoseApplicator.js.map +1 -1
  245. package/lib/systems/animation/builders/PunchPhaseApplicator.js.map +1 -1
  246. package/lib/systems/animation/builders/SkeletonRig.js.map +1 -1
  247. package/lib/systems/animation/builders/TrigramGuardApplicator.js.map +1 -1
  248. package/lib/systems/animation/catalogs/AttackAnimations.js.map +1 -1
  249. package/lib/systems/animation/catalogs/BasicAnimations.js.map +1 -1
  250. package/lib/systems/animation/catalogs/ComboAnimations.js.map +1 -1
  251. package/lib/systems/animation/catalogs/DarkOpsAnimations.js.map +1 -1
  252. package/lib/systems/animation/catalogs/DefensiveAnimations.js.map +1 -1
  253. package/lib/systems/animation/catalogs/ElbowKneeAnimations.js.map +1 -1
  254. package/lib/systems/animation/catalogs/EnhancedAttackAnimations.js.map +1 -1
  255. package/lib/systems/animation/catalogs/EnhancedElbowKneeAnimations.js.map +1 -1
  256. package/lib/systems/animation/catalogs/FootworkSkeletalAnimations.js.map +1 -1
  257. package/lib/systems/animation/catalogs/GamRedirectionAnimations.js.map +1 -1
  258. package/lib/systems/animation/catalogs/GamStanceAnimations.js +21 -0
  259. package/lib/systems/animation/catalogs/GamStanceAnimations.js.map +1 -0
  260. package/lib/systems/animation/catalogs/GamTechniqueAnimations.js +34 -2
  261. package/lib/systems/animation/catalogs/GamTechniqueAnimations.js.map +1 -1
  262. package/lib/systems/animation/catalogs/GanStanceAnimations.js.map +1 -1
  263. package/lib/systems/animation/catalogs/GanTechniqueAnimations.js.map +1 -1
  264. package/lib/systems/animation/catalogs/GeonStanceAnimations.js.map +1 -1
  265. package/lib/systems/animation/catalogs/GonTechniqueAnimations.d.ts +9 -0
  266. package/lib/systems/animation/catalogs/GonTechniqueAnimations.d.ts.map +1 -1
  267. package/lib/systems/animation/catalogs/GonTechniqueAnimations.js +288 -0
  268. package/lib/systems/animation/catalogs/GonTechniqueAnimations.js.map +1 -0
  269. package/lib/systems/animation/catalogs/GrapplingAnimations.js.map +1 -1
  270. package/lib/systems/animation/catalogs/JinStanceAnimations.js.map +1 -1
  271. package/lib/systems/animation/catalogs/JinTechniqueAnimations.js.map +1 -1
  272. package/lib/systems/animation/catalogs/KickAnimations.d.ts +2 -2
  273. package/lib/systems/animation/catalogs/KickAnimations.js +2 -2
  274. package/lib/systems/animation/catalogs/KickAnimations.js.map +1 -1
  275. package/lib/systems/animation/catalogs/LiStanceAnimations.js +14 -1
  276. package/lib/systems/animation/catalogs/LiStanceAnimations.js.map +1 -1
  277. package/lib/systems/animation/catalogs/LiTechniqueAnimations.js.map +1 -1
  278. package/lib/systems/animation/catalogs/MovementAnimations.js.map +1 -1
  279. package/lib/systems/animation/catalogs/PunchAnimations.d.ts +1 -1
  280. package/lib/systems/animation/catalogs/PunchAnimations.js +1 -1
  281. package/lib/systems/animation/catalogs/PunchAnimations.js.map +1 -1
  282. package/lib/systems/animation/catalogs/RecoveryAnimations.js.map +1 -1
  283. package/lib/systems/animation/catalogs/SonStanceAnimations.js.map +1 -1
  284. package/lib/systems/animation/catalogs/SonTechniqueAnimations.js.map +1 -1
  285. package/lib/systems/animation/catalogs/SpecializedPunchAnimations.js.map +1 -1
  286. package/lib/systems/animation/catalogs/StanceAnimations.js.map +1 -1
  287. package/lib/systems/animation/catalogs/StanceAttackAnimations.js.map +1 -1
  288. package/lib/systems/animation/catalogs/StanceGuardPoses.d.ts +6 -6
  289. package/lib/systems/animation/catalogs/StanceGuardPoses.js +36 -36
  290. package/lib/systems/animation/catalogs/StanceGuardPoses.js.map +1 -1
  291. package/lib/systems/animation/catalogs/StanceIdleAnimations.js.map +1 -1
  292. package/lib/systems/animation/catalogs/StanceLocomotionAnimations.js.map +1 -1
  293. package/lib/systems/animation/catalogs/StepSkeletalAnimations.js.map +1 -1
  294. package/lib/systems/animation/catalogs/TaeJointLockAnimations.js.map +1 -1
  295. package/lib/systems/animation/catalogs/TaeStanceAnimations.js.map +1 -1
  296. package/lib/systems/animation/constants/AnatomicalLimits.js.map +1 -1
  297. package/lib/systems/animation/core/AnimationHitTiming.js.map +1 -1
  298. package/lib/systems/animation/core/AnimationOptimizations.js.map +1 -1
  299. package/lib/systems/animation/core/AnimationPriority.js +15 -15
  300. package/lib/systems/animation/core/AnimationPriority.js.map +1 -1
  301. package/lib/systems/animation/core/AnimationRegistry.d.ts +30 -0
  302. package/lib/systems/animation/core/AnimationRegistry.d.ts.map +1 -1
  303. package/lib/systems/animation/core/AnimationRegistry.js +74 -12
  304. package/lib/systems/animation/core/AnimationRegistry.js.map +1 -1
  305. package/lib/systems/animation/core/AnimationStateMachine.js +16 -16
  306. package/lib/systems/animation/core/AnimationStateMachine.js.map +1 -1
  307. package/lib/systems/animation/core/AnimationTransitions.d.ts.map +1 -1
  308. package/lib/systems/animation/core/AnimationTransitions.js +34 -0
  309. package/lib/systems/animation/core/AnimationTransitions.js.map +1 -1
  310. package/lib/systems/animation/core/LateralityTransform.js.map +1 -1
  311. package/lib/systems/animation/core/RecoveryPhaseEnhancer.js.map +1 -1
  312. package/lib/systems/animation/core/TechniqueAnimationMapper.js.map +1 -1
  313. package/lib/systems/animation/core/TechniqueAnimationMapping.js.map +1 -1
  314. package/lib/systems/animation/core/index.d.ts +1 -1
  315. package/lib/systems/animation/core/index.d.ts.map +1 -1
  316. package/lib/systems/animation/core/types.d.ts +24 -0
  317. package/lib/systems/animation/core/types.d.ts.map +1 -1
  318. package/lib/systems/animation/core/types.js +27 -11
  319. package/lib/systems/animation/core/types.js.map +1 -1
  320. package/lib/systems/animation/systems/AdvancedJointMovements.js.map +1 -1
  321. package/lib/systems/animation/systems/BodyFacingSystem.js.map +1 -1
  322. package/lib/systems/animation/systems/FacialExpressions.js.map +1 -1
  323. package/lib/systems/animation/systems/FallAnimations.js.map +1 -1
  324. package/lib/systems/animation/systems/MuscleActivation.js.map +1 -1
  325. package/lib/systems/bodypart/BodyPartDamageIntegration.js.map +1 -1
  326. package/lib/systems/bodypart/BodyPartHealthSystem.js.map +1 -1
  327. package/lib/systems/bodypart/BodyPartPositionMapping.js.map +1 -1
  328. package/lib/systems/bodypart/CombatInjuryIntegration.js.map +1 -1
  329. package/lib/systems/bodypart/InjuryIntegration.js.map +1 -1
  330. package/lib/systems/bodypart/InjuryTracker.js.map +1 -1
  331. package/lib/systems/bodypart/MovementPenaltySystem.js.map +1 -1
  332. package/lib/systems/bodypart/PlayerInjuryTrackingManager.js.map +1 -1
  333. package/lib/systems/bodypart/types.js.map +1 -1
  334. package/lib/systems/breathing/BreathingDisruptionSystem.js +19 -19
  335. package/lib/systems/breathing/BreathingDisruptionSystem.js.map +1 -1
  336. package/lib/systems/breathing/feedback.js.map +1 -1
  337. package/lib/systems/breathing/integration.js.map +1 -1
  338. package/lib/systems/combat/BalanceSystem.js +19 -19
  339. package/lib/systems/combat/BalanceSystem.js.map +1 -1
  340. package/lib/systems/combat/BreakingStatusEffects.js.map +1 -1
  341. package/lib/systems/combat/CombatStateSystem.js +17 -17
  342. package/lib/systems/combat/CombatStateSystem.js.map +1 -1
  343. package/lib/systems/combat/ConsciousnessSystem.js +24 -24
  344. package/lib/systems/combat/ConsciousnessSystem.js.map +1 -1
  345. package/lib/systems/combat/FallIntegration.js.map +1 -1
  346. package/lib/systems/combat/GrappleSystem.js.map +1 -1
  347. package/lib/systems/combat/LimbExposureSystem.js.map +1 -1
  348. package/lib/systems/combat/PainResponseSystem.js +21 -21
  349. package/lib/systems/combat/PainResponseSystem.js.map +1 -1
  350. package/lib/systems/combat/TrainingCombatSystem.js.map +1 -1
  351. package/lib/systems/combat/painConsciousnessUtils.js.map +1 -1
  352. package/lib/systems/combat/typeGuards.js.map +1 -1
  353. package/lib/systems/effects.js.map +1 -1
  354. package/lib/systems/game.js.map +1 -1
  355. package/lib/systems/movement/InjuryMovementModifier.js.map +1 -1
  356. package/lib/systems/movement/helpers/AccelerationUpdater.js.map +1 -1
  357. package/lib/systems/movement/helpers/accelerationUtils.js.map +1 -1
  358. package/lib/systems/movement/integration.js.map +1 -1
  359. package/lib/systems/physics/AttackMovementPhysics.js.map +1 -1
  360. package/lib/systems/physics/CollisionDetection.js.map +1 -1
  361. package/lib/systems/physics/CoordinateMapper.js.map +1 -1
  362. package/lib/systems/physics/KnockbackPhysics.js.map +1 -1
  363. package/lib/systems/physics/MovementPhysics.js.map +1 -1
  364. package/lib/systems/physics/PhysicalReachCalculator.js.map +1 -1
  365. package/lib/systems/physics/SpeedModifierSystem.js +6 -6
  366. package/lib/systems/physics/SpeedModifierSystem.js.map +1 -1
  367. package/lib/systems/trigram/KoreanCulture.js.map +1 -1
  368. package/lib/systems/trigram/KoreanTechniques.js.map +1 -1
  369. package/lib/systems/trigram/StanceManager.js.map +1 -1
  370. package/lib/systems/trigram/TransitionCalculator.js.map +1 -1
  371. package/lib/systems/trigram/TrigramCalculator.js.map +1 -1
  372. package/lib/systems/trigram/techniques/DarkOpsTechniques.js.map +1 -1
  373. package/lib/systems/trigram/techniques/GamTechniques.js.map +1 -1
  374. package/lib/systems/trigram/techniques/GanTechniques.js.map +1 -1
  375. package/lib/systems/trigram/techniques/GeonTechniques.js.map +1 -1
  376. package/lib/systems/trigram/techniques/GonTechniques.js.map +1 -1
  377. package/lib/systems/trigram/techniques/JinTechniques.js.map +1 -1
  378. package/lib/systems/trigram/techniques/LiTechniques.js.map +1 -1
  379. package/lib/systems/trigram/techniques/SonTechniques.js.map +1 -1
  380. package/lib/systems/trigram/techniques/TaeTechniques.js.map +1 -1
  381. package/lib/systems/trigram/techniques/TechniqueConfig.js.map +1 -1
  382. package/lib/systems/trigram/techniques/index.js.map +1 -1
  383. package/lib/systems/trigram/types/GonTechniqueExtensions.js.map +1 -1
  384. package/lib/systems/trigram/types.js.map +1 -1
  385. package/lib/systems/types.js.map +1 -1
  386. package/lib/systems/vitalpoint/DamageCalculator.js.map +1 -1
  387. package/lib/systems/vitalpoint/HitDetection.js.map +1 -1
  388. package/lib/systems/vitalpoint/KoreanAnatomy.js.map +1 -1
  389. package/lib/systems/vitalpoint/KoreanVitalPoints.js.map +1 -1
  390. package/lib/systems/vitalpoint/MeridianVitalPointMapping.js.map +1 -1
  391. package/lib/systems/vitalpoint/VitalPointsData.js.map +1 -1
  392. package/lib/types/AccessibilityTypes.js.map +1 -1
  393. package/lib/types/LayoutTypes.js.map +1 -1
  394. package/lib/types/PhysicsTypes.js.map +1 -1
  395. package/lib/types/common.js.map +1 -1
  396. package/lib/types/constants/animations.js.map +1 -1
  397. package/lib/types/constants/colors.js.map +1 -1
  398. package/lib/types/constants/designSystem.js.map +1 -1
  399. package/lib/types/constants/index.js.map +1 -1
  400. package/lib/types/constants/layout.js.map +1 -1
  401. package/lib/types/constants/performance.js.map +1 -1
  402. package/lib/types/constants/typography.js.map +1 -1
  403. package/lib/types/constants/ui.js.map +1 -1
  404. package/lib/types/facial.js +19 -19
  405. package/lib/types/facial.js.map +1 -1
  406. package/lib/types/hand-animation.js.map +1 -1
  407. package/lib/types/injury.js.map +1 -1
  408. package/lib/types/muscle.js.map +1 -1
  409. package/lib/types/physics.js.map +1 -1
  410. package/lib/types/physicsConstants.js.map +1 -1
  411. package/lib/types/player-visual.d.ts +1 -1
  412. package/lib/types/player-visual.d.ts.map +1 -1
  413. package/lib/types/skeletal.js.map +1 -1
  414. package/lib/types/techniqueId.js.map +1 -1
  415. package/lib/utils/accessibility.js.map +1 -1
  416. package/lib/utils/arenaWorldDimensions.js.map +1 -1
  417. package/lib/utils/assetConfig.js.map +1 -1
  418. package/lib/utils/characterScaling.js.map +1 -1
  419. package/lib/utils/colorHelpers.js.map +1 -1
  420. package/lib/utils/colorUtils.js.map +1 -1
  421. package/lib/utils/combatReadiness.js.map +1 -1
  422. package/lib/utils/controlMapping.js.map +1 -1
  423. package/lib/utils/deviceDetection.js +6 -7
  424. package/lib/utils/deviceDetection.js.map +1 -1
  425. package/lib/utils/effectUtils.js.map +1 -1
  426. package/lib/utils/fabricTextures.js.map +1 -1
  427. package/lib/utils/hapticFeedback.js.map +1 -1
  428. package/lib/utils/haptics.js.map +1 -1
  429. package/lib/utils/htmlOverlayHelpers.js.map +1 -1
  430. package/lib/utils/inputSystem.js.map +1 -1
  431. package/lib/utils/koreanThemeHelpers.js.map +1 -1
  432. package/lib/utils/math.js.map +1 -1
  433. package/lib/utils/mobileLayoutHelpers.js.map +1 -1
  434. package/lib/utils/mobileUIUtils.js.map +1 -1
  435. package/lib/utils/performance/PerformanceMonitor.js.map +1 -1
  436. package/lib/utils/performance/PerformanceOverlay3D.js.map +1 -1
  437. package/lib/utils/performance/usePerformanceMonitor.js.map +1 -1
  438. package/lib/utils/performanceOptimization.js.map +1 -1
  439. package/lib/utils/player3DHelpers.js.map +1 -1
  440. package/lib/utils/playerUtils.js.map +1 -1
  441. package/lib/utils/responsiveLayout.js.map +1 -1
  442. package/lib/utils/responsiveLayoutHelpers.js.map +1 -1
  443. package/lib/utils/responsiveOrientationConstants.js.map +1 -1
  444. package/lib/utils/safeAreaUtils.js.map +1 -1
  445. package/lib/utils/sharedPhysicsConfig.js.map +1 -1
  446. package/lib/utils/skeletonScaling.js.map +1 -1
  447. package/lib/utils/stanceHelpers.js.map +1 -1
  448. package/lib/utils/threeObjectPool.js.map +1 -1
  449. package/lib/utils/visualEffects.js.map +1 -1
  450. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"AttackAnimations.js","names":[],"sources":["../../../../src/systems/animation/catalogs/AttackAnimations.ts"],"sourcesContent":["/**\n * Korean martial arts attack animations with proper guard positions (막기자세)\n *\n * All animations implement proper Korean martial arts defensive positioning:\n * - Start from guard (준비자세)\n * - Maintain non-striking hand guard during technique (방어 유지)\n * - Return to guard after technique (복귀)\n *\n * @module systems/animation/AttackAnimations\n * @category Animation System\n * @korean 공격애니메이션\n */\n\nimport type { SkeletalAnimation } from \"@/types/skeletal\";\nimport { BoneName } from \"@/types/skeletal\";\nimport { AnimationBuilder } from \"../builders/AnimationBuilder\";\nimport {\n MartialArtsAnimationBuilder,\n TECHNIQUE_TIMING,\n} from \"../builders/MartialArtsAnimationBuilder\";\n\n/**\n * Jab animation with guard (잽 - 막기자세)\n *\n * Fast straight punch with proper middle guard maintained.\n * Traditional Taekwondo 정권지르기 with defensive posture.\n *\n * Guard cycle:\n * - Start: MIDDLE_GUARD both hands (중단막기)\n * - During: MIDDLE_GUARD left hand (방어 유지)\n * - End: MIDDLE_GUARD both hands (복귀)\n *\n * Duration: 550ms (TECHNIQUE_TIMING.FAST)\n *\n * @korean 잽애니메이션\n */\nexport const JAB_ANIMATION: SkeletalAnimation =\n MartialArtsAnimationBuilder.create(\"jab\", \"잽\")\n .asAttack(TECHNIQUE_TIMING.FAST.total)\n // Start in middle guard\n .at(0.0)\n .withGuard(\"MIDDLE_GUARD\")\n .done<MartialArtsAnimationBuilder>()\n // Wind-up: right arm prepares, left maintains guard (준비)\n .at(TECHNIQUE_TIMING.FAST.chamber * 0.5)\n .rotate(BoneName.SHOULDER_R, 0.3, 0, -0.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.8)\n .rotate(BoneName.SPINE_UPPER, 0, -0.15, 0)\n .withGuard(\"MIDDLE_GUARD\", \"left\")\n .done<MartialArtsAnimationBuilder>()\n // Extension: arm snaps forward (실행)\n .at(TECHNIQUE_TIMING.FAST.chamber)\n .rotate(BoneName.SHOULDER_R, -0.5, 0, 0.4)\n .rotate(BoneName.ELBOW_R, 0, 0, 0.3)\n .rotate(BoneName.SPINE_UPPER, 0, 0.25, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0, 0.15, 0)\n .rotate(BoneName.PELVIS, 0, 0.1, 0)\n .withGuard(\"MIDDLE_GUARD\", \"left\")\n .done<MartialArtsAnimationBuilder>()\n // Full extension with peak hold (정점)\n .at(TECHNIQUE_TIMING.FAST.chamber + TECHNIQUE_TIMING.FAST.extend)\n .rotate(BoneName.SHOULDER_R, -0.7, 0, 0.5)\n .rotate(BoneName.ELBOW_R, 0, 0, 0.05)\n .rotate(BoneName.WRIST_R, 0, 0, -0.2)\n .rotate(BoneName.SPINE_UPPER, 0, 0.35, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0, 0.25, 0)\n .rotate(BoneName.PELVIS, 0, 0.2, 0)\n .withGuard(\"MIDDLE_GUARD\", \"left\")\n .done<MartialArtsAnimationBuilder>()\n // Peak hold for impact clarity\n .at(\n TECHNIQUE_TIMING.FAST.chamber +\n TECHNIQUE_TIMING.FAST.extend +\n TECHNIQUE_TIMING.FAST.peak,\n )\n .rotate(BoneName.SHOULDER_R, -0.7, 0, 0.5)\n .rotate(BoneName.ELBOW_R, 0, 0, 0.05)\n .rotate(BoneName.WRIST_R, 0, 0, -0.2)\n .withGuard(\"MIDDLE_GUARD\", \"left\")\n .done<MartialArtsAnimationBuilder>()\n // Retraction (회수)\n .at(\n TECHNIQUE_TIMING.FAST.chamber +\n TECHNIQUE_TIMING.FAST.extend +\n TECHNIQUE_TIMING.FAST.peak +\n TECHNIQUE_TIMING.FAST.retract,\n )\n .rotate(BoneName.SHOULDER_R, 0.1, 0, -0.2)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.2)\n .rotate(BoneName.SPINE_UPPER, 0, 0.05, 0)\n .withGuard(\"MIDDLE_GUARD\", \"left\")\n .done<MartialArtsAnimationBuilder>()\n // Recovery: return to guard (복귀)\n .at(TECHNIQUE_TIMING.FAST.total)\n .withGuard(\"MIDDLE_GUARD\")\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.WRIST_R, 0, 0, 0)\n .done<MartialArtsAnimationBuilder>()\n .build();\n\n/**\n * Cross punch with guard (크로스 - 막기자세)\n *\n * Power punch with proper middle guard maintained.\n * Traditional Taekwondo 역권지르기 with defensive posture.\n *\n * Guard cycle:\n * - Start: MIDDLE_GUARD both hands (중단막기)\n * - During: MIDDLE_GUARD right hand (방어 유지)\n * - End: MIDDLE_GUARD both hands (복귀)\n *\n * Duration: 600ms (TECHNIQUE_TIMING.FAST_MEDIUM)\n *\n * @korean 크로스펀치애니메이션\n */\nexport const CROSS_ANIMATION: SkeletalAnimation =\n MartialArtsAnimationBuilder.create(\"cross\", \"크로스\")\n .asAttack(TECHNIQUE_TIMING.FAST_MEDIUM.total)\n // Start in middle guard\n .at(0.0)\n .withGuard(\"MIDDLE_GUARD\")\n .done<MartialArtsAnimationBuilder>()\n // Wind-up: left arm prepares, right maintains guard (준비)\n .at(TECHNIQUE_TIMING.FAST_MEDIUM.chamber * 0.6)\n .rotate(BoneName.SHOULDER_L, 0.2, 0, 0.3)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.8)\n .rotate(BoneName.SPINE_UPPER, 0, -0.2, 0)\n .rotate(BoneName.PELVIS, 0, -0.15, 0)\n .withGuard(\"MIDDLE_GUARD\", \"right\")\n .done<MartialArtsAnimationBuilder>()\n // Hip rotation begins\n .at(TECHNIQUE_TIMING.FAST_MEDIUM.chamber)\n .rotate(BoneName.PELVIS, 0, 0.15, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0.2, 0)\n .rotate(BoneName.HIP_R, 0, 0.1, 0)\n .withGuard(\"MIDDLE_GUARD\", \"right\")\n .done<MartialArtsAnimationBuilder>()\n // Extension: arm snaps forward (실행)\n .at(\n TECHNIQUE_TIMING.FAST_MEDIUM.chamber +\n TECHNIQUE_TIMING.FAST_MEDIUM.extend * 0.5,\n )\n .rotate(BoneName.SHOULDER_L, -0.5, 0, -0.4)\n .rotate(BoneName.ELBOW_L, 0, 0, -0.3)\n .rotate(BoneName.SPINE_UPPER, 0, 0.35, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0, 0.3, 0)\n .rotate(BoneName.PELVIS, 0, 0.25, 0)\n .withGuard(\"MIDDLE_GUARD\", \"right\")\n .done<MartialArtsAnimationBuilder>()\n // Full extension (정점)\n .at(\n TECHNIQUE_TIMING.FAST_MEDIUM.chamber +\n TECHNIQUE_TIMING.FAST_MEDIUM.extend,\n )\n .rotate(BoneName.SHOULDER_L, -0.7, 0, -0.5)\n .rotate(BoneName.ELBOW_L, 0, 0, -0.05)\n .rotate(BoneName.WRIST_L, 0, 0, 0.2)\n .rotate(BoneName.SPINE_UPPER, 0, 0.45, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0, 0.35, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0.25, 0)\n .rotate(BoneName.PELVIS, 0, 0.3, 0)\n .withGuard(\"MIDDLE_GUARD\", \"right\")\n .done<MartialArtsAnimationBuilder>()\n // Peak hold for impact clarity\n .at(\n TECHNIQUE_TIMING.FAST_MEDIUM.chamber +\n TECHNIQUE_TIMING.FAST_MEDIUM.extend +\n TECHNIQUE_TIMING.FAST_MEDIUM.peak,\n )\n .rotate(BoneName.SHOULDER_L, -0.7, 0, -0.5)\n .rotate(BoneName.ELBOW_L, 0, 0, -0.05)\n .rotate(BoneName.WRIST_L, 0, 0, 0.2)\n .withGuard(\"MIDDLE_GUARD\", \"right\")\n .done<MartialArtsAnimationBuilder>()\n // Retraction (회수)\n .at(\n TECHNIQUE_TIMING.FAST_MEDIUM.chamber +\n TECHNIQUE_TIMING.FAST_MEDIUM.extend +\n TECHNIQUE_TIMING.FAST_MEDIUM.peak +\n TECHNIQUE_TIMING.FAST_MEDIUM.retract,\n )\n .rotate(BoneName.SHOULDER_L, 0.1, 0, 0.2)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2)\n .rotate(BoneName.SPINE_UPPER, 0, 0.05, 0)\n .withGuard(\"MIDDLE_GUARD\", \"right\")\n .done<MartialArtsAnimationBuilder>()\n // Recovery: return to guard (복귀)\n .at(TECHNIQUE_TIMING.FAST_MEDIUM.total)\n .withGuard(\"MIDDLE_GUARD\")\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.WRIST_L, 0, 0, 0)\n .done<MartialArtsAnimationBuilder>()\n .build();\n\n/**\n * Front kick animation (앞차기) - ENHANCED\n *\n * Traditional Taekwondo front kick with knee lift, leg extension,\n * ankle dorsiflexion, support leg adjustments, and balance recovery.\n * Hands maintain guard position throughout for face protection.\n *\n * Animation phases:\n * 1. Chamber (0.0s-0.1s): Knee lifts to waist height, hands guard face\n * 2. Extension (0.1s-0.2s): Lower leg extends forward with ankle flexion\n * 3. Impact (0.2s): Maximum extension point with dorsiflexion\n * 4. Retraction (0.2s-0.35s): Leg returns to chamber\n * 5. Set down (0.35s-0.45s): Foot returns to ground with balance recovery\n * 6. Recovery shuffle (0.45s-0.55s): Return to fighting guard\n *\n * Duration: 550ms (enhanced with recovery)\n *\n * @korean 앞차기애니메이션향상\n */\nexport const FRONT_KICK_ANIMATION = AnimationBuilder.create(\"front_kick\")\n .withKoreanName(\"앞차기\")\n .withDuration(0.55)\n .withType(\"attack\")\n // Frame 1: Chamber - knee lifts, hands protect face\n // Hip flexion ~90° lifts thigh to horizontal, knee bent tight\n .keyframe(0.1, \"ease-out\")\n .rotate(BoneName.HIP_R, 1.57, 0, 0) // 90 degrees - thigh horizontal\n .rotate(BoneName.KNEE_R, -2.0, 0, 0) // Tight chamber\n .rotate(BoneName.KNEE_L, -0.25, 0, 0) // Support leg slightly bent\n .rotate(BoneName.FOOT_L, 0, 0, 0.05) // Slight outward pivot\n .rotate(BoneName.PELVIS, -0.1, 0, 0) // Tilts slightly back for balance\n .rotate(BoneName.SPINE_LOWER, -0.05, 0, 0) // Spine counters\n // HIGH GUARD - protect face during kick\n .rotate(BoneName.SHOULDER_L, -0.9, 0.3, 0.4) // Left hand high, near temple\n .rotate(BoneName.ELBOW_L, 0, 0, -1.6) // Tight bend\n .rotate(BoneName.SHOULDER_R, -0.9, -0.3, -0.4) // Right hand high, near temple\n .rotate(BoneName.ELBOW_R, 0, 0, 1.6) // Tight bend\n .build()\n // Frame 2: Extension - leg snaps forward, hands stay up\n // Knee extends while hip drives forward, creating reach\n .keyframe(0.2, \"ease-out\")\n .rotate(BoneName.HIP_R, 1.7, 0, 0) // Hip drives slightly higher for reach\n .rotate(BoneName.KNEE_R, 0.1, 0, 0) // Knee fully extends\n .rotate(BoneName.FOOT_R, 0.5, 0, 0) // Ball of foot strikes (dorsiflexion)\n .rotate(BoneName.KNEE_L, -0.35, 0, 0) // Support leg bends for balance\n .rotate(BoneName.FOOT_L, 0, 0, 0.08)\n .rotate(BoneName.PELVIS, 0.15, 0, 0) // Pelvis tilts forward to drive kick\n .rotate(BoneName.SPINE_LOWER, 0.1, 0, 0) // Spine drives forward\n .rotate(BoneName.SPINE_MIDDLE, 0.05, 0, 0)\n // Maintain high guard\n .rotate(BoneName.SHOULDER_L, -0.85, 0.25, 0.35)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.7)\n .rotate(BoneName.SHOULDER_R, -0.85, -0.25, -0.35)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.7)\n .build()\n // Frame 3: Retraction to chamber, guard stays up\n .keyframe(0.35, \"ease-in\")\n .rotate(BoneName.HIP_R, 1.57, 0, 0)\n .rotate(BoneName.KNEE_R, -2.0, 0, 0)\n .rotate(BoneName.FOOT_R, 0, 0, 0) // Foot relaxes\n .rotate(BoneName.KNEE_L, -0.25, 0, 0)\n .rotate(BoneName.FOOT_L, 0, 0, 0.05)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0, 0, 0)\n .rotate(BoneName.SHOULDER_L, -0.9, 0.3, 0.4)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.6)\n .rotate(BoneName.SHOULDER_R, -0.9, -0.3, -0.4)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.6)\n .build()\n // Frame 4: Set down, transition to fighting guard\n .keyframe(0.45, \"ease-in\")\n .rotate(BoneName.HIP_R, 0, 0, 0)\n .rotate(BoneName.KNEE_R, -0.15, 0, 0) // Slight bend on landing\n .rotate(BoneName.FOOT_R, 0, 0, 0)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.FOOT_L, 0, 0, 0.03)\n // Transition to fighting guard\n .rotate(BoneName.SHOULDER_L, -0.7, 0.35, 0.25)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.7)\n .rotate(BoneName.SHOULDER_R, -0.7, -0.35, -0.25)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.7)\n .build()\n // Frame 5: Balance recovery - fighting guard\n .keyframe(0.55, \"ease-in\")\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.FOOT_R, 0, 0, 0)\n .rotate(BoneName.FOOT_L, 0, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n // Return to standard fighting guard\n .rotate(BoneName.SHOULDER_L, -0.6, 0.4, 0.3)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.8)\n .rotate(BoneName.SHOULDER_R, -0.6, -0.4, -0.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.8)\n .build()\n .build();\n\n/**\n * Roundhouse kick animation (돌려차기) - ENHANCED\n *\n * Traditional Taekwondo roundhouse kick with hip rotation,\n * ankle flexion, support leg adjustments, and balance recovery.\n * Hands maintain high guard position throughout for face protection.\n *\n * Animation phases:\n * 1. Chamber (0.0s-0.1s): Knee lifts, hip begins rotation, hands guard face\n * 2. Rotation (0.1s-0.2s): Hip rotates 90 degrees\n * 3. Extension (0.2s-0.25s): Leg extends in arc with ankle flexion\n * 4. Impact (0.25s): Maximum extension with support leg adjustment\n * 5. Retraction (0.25s-0.4s): Return to chamber\n * 6. Set down (0.4s-0.5s): Foot to ground with balance recovery\n * 7. Recovery shuffle (0.5s-0.6s): Return to fighting guard\n *\n * Duration: 600ms (enhanced with recovery)\n *\n * @korean 돌려차기애니메이션향상\n */\nexport const ROUNDHOUSE_KICK_ANIMATION = AnimationBuilder.create(\n \"roundhouse_kick\",\n)\n .withKoreanName(\"돌려차기\")\n .withDuration(0.6)\n .withType(\"attack\")\n // Frame 1: Chamber with rotation start, hands protect face\n .keyframe(0.1, \"ease-out\")\n .rotate(BoneName.HIP_R, 1.2, 0, 0.8) // Right leg chambers\n .rotate(BoneName.KNEE_R, -1.5, 0, 0)\n .rotate(BoneName.PELVIS, 0, -0.5, 0) // Hips rotate\n .rotate(BoneName.SPINE_UPPER, 0, 0.3, 0) // Torso counter-rotates\n // HIGH GUARD - protect face during kick\n .rotate(BoneName.SHOULDER_L, -0.9, 0.3, 0.4)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.6)\n .rotate(BoneName.SHOULDER_R, -0.85, -0.25, -0.35)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.65)\n .build()\n // Frame 2: Full hip rotation, maintain guard\n .keyframe(0.2, \"ease-out\")\n .rotate(BoneName.HIP_R, 1.2, 0, 1.4)\n .rotate(BoneName.KNEE_R, -1.2, 0, 0)\n .rotate(BoneName.PELVIS, 0, -1.2, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0.6, 0)\n .rotate(BoneName.SHOULDER_L, -0.85, 0.25, 0.35)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.7)\n .rotate(BoneName.SHOULDER_R, -0.85, -0.25, -0.35)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.7)\n .build()\n // Frame 3: Extension and impact with ankle flexion\n .keyframe(0.25, \"linear\")\n .rotate(BoneName.HIP_R, 1.2, 0, 1.6) // Leg fully extends\n .rotate(BoneName.KNEE_R, -0.1, 0, 0)\n .rotate(BoneName.PELVIS, 0, -1.5, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0.8, 0)\n .rotate(BoneName.FOOT_R, 0.4, 0, 0.3) // Foot plantar flexion\n .rotate(BoneName.KNEE_L, -0.35, 0, 0) // Support leg micro-adjustment\n .rotate(BoneName.FOOT_L, 0, 0, -0.1) // Pivot for power\n // Maintain high guard at impact\n .rotate(BoneName.SHOULDER_L, -0.85, 0.25, 0.35)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.7)\n .rotate(BoneName.SHOULDER_R, -0.85, -0.25, -0.35)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.7)\n .position(BoneName.FOOT_R, 0.8, 0, 0) // Side strike\n .position(BoneName.PELVIS, 0, -0.02, 0) // Slight drop for power\n .build()\n // Frame 4: Retraction, guard remains up\n .keyframe(0.4, \"ease-in\")\n .rotate(BoneName.HIP_R, 1.2, 0, 0.8)\n .rotate(BoneName.KNEE_R, -1.5, 0, 0)\n .rotate(BoneName.FOOT_R, 0, 0, 0)\n .rotate(BoneName.PELVIS, 0, -0.3, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0.2, 0)\n .rotate(BoneName.KNEE_L, -0.25, 0, 0)\n .rotate(BoneName.FOOT_L, 0, 0, 0)\n .rotate(BoneName.SHOULDER_L, -0.9, 0.3, 0.4)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.6)\n .rotate(BoneName.SHOULDER_R, -0.9, -0.3, -0.4)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.6)\n .position(BoneName.FOOT_R, 0, 0, 0)\n .position(BoneName.PELVIS, 0, 0, 0)\n .build()\n // Frame 5: Set down, transition to fighting guard\n .keyframe(0.5, \"ease-in\")\n .rotate(BoneName.HIP_R, 0, 0, 0)\n .rotate(BoneName.KNEE_R, -0.15, 0, 0)\n .rotate(BoneName.FOOT_R, 0, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.FOOT_L, 0, 0, 0)\n // Transition to fighting guard\n .rotate(BoneName.SHOULDER_L, -0.7, 0.35, 0.25)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.7)\n .rotate(BoneName.SHOULDER_R, -0.7, -0.35, -0.25)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.7)\n .position(BoneName.PELVIS, 0, -0.01, 0)\n .build()\n // Frame 6: Recovery - fighting guard\n .keyframe(0.6, \"ease-in\")\n .rotate(BoneName.HIP_R, 0, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.FOOT_R, 0, 0, 0)\n .rotate(BoneName.FOOT_L, 0, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n // Return to standard fighting guard\n .rotate(BoneName.SHOULDER_L, -0.6, 0.4, 0.3)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.8)\n .rotate(BoneName.SHOULDER_R, -0.6, -0.4, -0.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.8)\n .position(BoneName.PELVIS, 0, 0, 0)\n .build()\n .build();\n\n/**\n * Block animation (막기)\n *\n * Traditional Taekwondo block with both arms raised.\n *\n * Animation phases:\n * 1. Raise (0.0s-0.1s): Both arms lift to blocking position\n * 2. Hold (0.1s-0.3s): Maintain block\n * 3. Lower (0.3s-0.4s): Return to guard\n *\n * Duration: 400ms\n *\n * @korean 막기애니메이션\n */\nexport const BLOCK_ANIMATION = AnimationBuilder.create(\"block\")\n .withKoreanName(\"막기\")\n .withDuration(0.4)\n .withType(\"defense\")\n .keyframe(0.08, \"ease-out\")\n .rotate(BoneName.SHOULDER_L, 0, 0, -1.3)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.6)\n .rotate(BoneName.SHOULDER_R, 0, 0, 1.1)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.3)\n .rotate(BoneName.KNEE_L, -0.35, 0, 0)\n .rotate(BoneName.KNEE_R, -0.35, 0, 0)\n .build()\n .keyframe(0.27, \"linear\")\n .rotate(BoneName.SHOULDER_L, 0, 0, -1.3)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.6)\n .rotate(BoneName.SHOULDER_R, 0, 0, 1.1)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.3)\n .rotate(BoneName.KNEE_L, -0.35, 0, 0)\n .rotate(BoneName.KNEE_R, -0.35, 0, 0)\n .build()\n .keyframe(0.35, \"ease-in\")\n .rotate(BoneName.SHOULDER_L, 0, 0, 0)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2)\n .rotate(BoneName.SHOULDER_R, 0, 0, 0)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.2)\n .rotate(BoneName.KNEE_L, 0, 0, 0)\n .rotate(BoneName.KNEE_R, 0, 0, 0)\n .build()\n .build();\n\n/**\n * Walking cycle animation (앞으로 걷기 - 보행 사이클)\n *\n * Natural walking gait with alternating leg movement. Includes hip swing,\n * knee bend during swing phase, foot placement, and pelvis tilt.\n *\n * Animation phases:\n * 1. Left foot forward (0.0s): Left leg extends, right leg pushes off\n * 2. Left mid-stance (0.2s): Left foot plants, right leg swings forward\n * 3. Right foot forward (0.4s): Right leg extends, left leg pushes off\n * 4. Right mid-stance (0.6s): Right foot plants, left leg swings forward\n *\n * Duration: 800ms (complete left-right step cycle)\n *\n * @korean 걷기애니메이션\n */\nexport const WALK_ANIMATION = AnimationBuilder.create(\"walk\")\n .withKoreanName(\"걷기\")\n .withDuration(0.8)\n .withType(\"movement\")\n .withLoop(true)\n .keyframe(0.0, \"ease-out\")\n .rotate(BoneName.PELVIS, 0.1, 0.05, 0)\n .rotate(BoneName.HIP_L, -0.3, 0, 0)\n .rotate(BoneName.KNEE_L, -0.1, 0, 0)\n .rotate(BoneName.FOOT_L, 0.1, 0, 0)\n .rotate(BoneName.HIP_R, 0.4, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.FOOT_R, -0.3, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.3, 0, 0)\n .rotate(BoneName.ELBOW_L, 0, 0, -0.3)\n .rotate(BoneName.SHOULDER_R, -0.4, 0, 0)\n .rotate(BoneName.ELBOW_R, 0, 0, 0.4)\n .rotate(BoneName.SPINE_LOWER, 0, -0.05, 0)\n .position(BoneName.PELVIS, 0, 0.02, 0)\n .build()\n .keyframe(0.2, \"linear\")\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.HIP_L, 0, 0, 0)\n .rotate(BoneName.KNEE_L, -0.15, 0, 0)\n .rotate(BoneName.FOOT_L, 0, 0, 0)\n .rotate(BoneName.HIP_R, -0.2, 0, 0)\n .rotate(BoneName.KNEE_R, -0.8, 0, 0)\n .rotate(BoneName.FOOT_R, 0.2, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0, 0, 0)\n .rotate(BoneName.ELBOW_L, 0, 0, -0.2)\n .rotate(BoneName.SHOULDER_R, -0.2, 0, 0)\n .rotate(BoneName.ELBOW_R, 0, 0, 0.3)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .position(BoneName.PELVIS, 0, -0.01, 0)\n .build()\n .keyframe(0.4, \"ease-out\")\n .rotate(BoneName.PELVIS, 0.1, -0.05, 0)\n .rotate(BoneName.HIP_R, -0.3, 0, 0)\n .rotate(BoneName.KNEE_R, -0.1, 0, 0)\n .rotate(BoneName.FOOT_R, 0.1, 0, 0)\n .rotate(BoneName.HIP_L, 0.4, 0, 0)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.FOOT_L, -0.3, 0, 0)\n .rotate(BoneName.SHOULDER_R, 0.3, 0, 0)\n .rotate(BoneName.ELBOW_R, 0, 0, 0.3)\n .rotate(BoneName.SHOULDER_L, -0.4, 0, 0)\n .rotate(BoneName.ELBOW_L, 0, 0, -0.4)\n .rotate(BoneName.SPINE_LOWER, 0, 0.05, 0)\n .position(BoneName.PELVIS, 0, 0.02, 0)\n .build()\n .keyframe(0.6, \"linear\")\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.HIP_R, 0, 0, 0)\n .rotate(BoneName.KNEE_R, -0.15, 0, 0)\n .rotate(BoneName.FOOT_R, 0, 0, 0)\n .rotate(BoneName.HIP_L, -0.2, 0, 0)\n .rotate(BoneName.KNEE_L, -0.8, 0, 0)\n .rotate(BoneName.FOOT_L, 0.2, 0, 0)\n .rotate(BoneName.SHOULDER_R, 0, 0, 0)\n .rotate(BoneName.ELBOW_R, 0, 0, 0.2)\n .rotate(BoneName.SHOULDER_L, -0.2, 0, 0)\n .rotate(BoneName.ELBOW_L, 0, 0, -0.3)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .position(BoneName.PELVIS, 0, -0.01, 0)\n .build()\n .keyframe(0.8, \"ease-in\")\n .rotate(BoneName.PELVIS, 0.1, 0.05, 0)\n .rotate(BoneName.HIP_L, -0.3, 0, 0)\n .rotate(BoneName.KNEE_L, -0.1, 0, 0)\n .rotate(BoneName.FOOT_L, 0.1, 0, 0)\n .rotate(BoneName.HIP_R, 0.4, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.FOOT_R, -0.3, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.3, 0, 0)\n .rotate(BoneName.ELBOW_L, 0, 0, -0.3)\n .rotate(BoneName.SHOULDER_R, -0.4, 0, 0)\n .rotate(BoneName.ELBOW_R, 0, 0, 0.4)\n .rotate(BoneName.SPINE_LOWER, 0, -0.05, 0)\n .position(BoneName.PELVIS, 0, 0.02, 0)\n .build()\n .build();\n\n/**\n * Idle stance animation (대기 자세)\n *\n * Fighting stance with slight weight shift and breathing motion.\n *\n * Animation phases:\n * 1. Center (0.0s): Neutral fighting stance\n * 2. Weight left (0.8s): Shift weight to left leg\n * 3. Center (1.6s): Return to neutral\n * 4. Weight right (2.4s): Shift weight to right leg\n * 5. Center (3.0s): Return to neutral (loops)\n *\n * Duration: 3000ms (looping)\n *\n * @korean 대기자세애니메이션\n */\nexport const IDLE_STANCE_ANIMATION = AnimationBuilder.create(\"idle_stance\")\n .withKoreanName(\"대기 자세\")\n .withDuration(3.0)\n .withType(\"idle\")\n .withLoop(true)\n .keyframe(0.0, \"ease-in-out\")\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.5, 0, -0.8)\n .rotate(BoneName.SHOULDER_R, 0.5, 0, 0.8)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.2)\n .position(BoneName.PELVIS, 0, 0, 0)\n .build()\n .keyframe(0.8, \"ease-in-out\")\n .rotate(BoneName.KNEE_L, -0.3, 0, 0)\n .rotate(BoneName.KNEE_R, -0.15, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, -0.05)\n .rotate(BoneName.SPINE_LOWER, -0.02, 0, 0)\n .rotate(BoneName.SPINE_MIDDLE, -0.03, 0, 0)\n .rotate(BoneName.SPINE_UPPER, -0.02, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.5, 0, -0.8)\n .rotate(BoneName.SHOULDER_R, 0.5, 0, 0.8)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.2)\n .position(BoneName.PELVIS, -0.02, 0, 0)\n .build()\n .keyframe(1.6, \"ease-in-out\")\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0.02, 0, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0.03, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0.02, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.5, 0, -0.8)\n .rotate(BoneName.SHOULDER_R, 0.5, 0, 0.8)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.2)\n .position(BoneName.PELVIS, 0, 0, 0)\n .build()\n .keyframe(2.4, \"ease-in-out\")\n .rotate(BoneName.KNEE_L, -0.15, 0, 0)\n .rotate(BoneName.KNEE_R, -0.3, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0.05)\n .rotate(BoneName.SPINE_LOWER, -0.02, 0, 0)\n .rotate(BoneName.SPINE_MIDDLE, -0.03, 0, 0)\n .rotate(BoneName.SPINE_UPPER, -0.02, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.5, 0, -0.8)\n .rotate(BoneName.SHOULDER_R, 0.5, 0, 0.8)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.2)\n .position(BoneName.PELVIS, 0.02, 0, 0)\n .build()\n .keyframe(3.0, \"ease-in-out\")\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.5, 0, -0.8)\n .rotate(BoneName.SHOULDER_R, 0.5, 0, 0.8)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.2)\n .position(BoneName.PELVIS, 0, 0, 0)\n .build()\n .build();\n\n/**\n * Forward dash animation (앞으로 돌진)\n *\n * Explosive forward movement with rapid knee extension and hip drive.\n *\n * Animation phases:\n * 1. Crouch (0.0s): Deep knee bend, ready to explode\n * 2. Drive (0.15s): Rapid knee extension, forward momentum\n * 3. Glide (0.3s): Extended stride position\n * 4. Recovery (0.4s): Return to stance\n *\n * Duration: 400ms\n *\n * @korean 앞으로돌진애니메이션\n */\nexport const FORWARD_DASH_ANIMATION = AnimationBuilder.create(\"forward_dash\")\n .withKoreanName(\"앞으로 돌진\")\n .withDuration(0.4)\n .withType(\"movement\")\n .keyframe(0.0, \"ease-in\")\n .rotate(BoneName.KNEE_L, -0.8, 0, 0)\n .rotate(BoneName.KNEE_R, -0.8, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0.3, 0, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0.25, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0.2, 0, 0)\n .rotate(BoneName.SHOULDER_L, -0.5, 0, -0.3)\n .rotate(BoneName.SHOULDER_R, -0.5, 0, 0.3)\n .position(BoneName.PELVIS, 0, -0.15, 0)\n .build()\n .keyframe(0.15, \"ease-out\")\n .rotate(BoneName.KNEE_L, -0.1, 0, 0)\n .rotate(BoneName.KNEE_R, -0.1, 0, 0)\n .rotate(BoneName.PELVIS, 0.2, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0.15, 0, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0.1, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0.05, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.5, 0, -0.5)\n .rotate(BoneName.SHOULDER_R, 0.5, 0, 0.5)\n .position(BoneName.PELVIS, 0, 0.05, 0.8)\n .build()\n .keyframe(0.3, \"linear\")\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.3, 0, -0.6)\n .rotate(BoneName.SHOULDER_R, 0.3, 0, 0.6)\n .position(BoneName.PELVIS, 0, 0, 1.2)\n .build()\n .keyframe(0.4, \"ease-in\")\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.5, 0, -0.8)\n .rotate(BoneName.SHOULDER_R, 0.5, 0, 0.8)\n .position(BoneName.PELVIS, 0, 0, 0)\n .build()\n .build();\n\n/**\n * Backward retreat animation (뒤로 물러서기)\n *\n * Coordinated leg backpedaling with defensive posture.\n *\n * Animation phases:\n * 1. Push back (0.0s): Back foot plants, front foot lifts\n * 2. Slide (0.2s): Smooth backward movement\n * 3. Plant (0.35s): Front foot plants\n * 4. Reset (0.45s): Return to guard stance\n *\n * Duration: 450ms\n *\n * @korean 뒤로물러서기애니메이션\n */\nexport const BACKWARD_RETREAT_ANIMATION = AnimationBuilder.create(\n \"backward_retreat\",\n)\n .withKoreanName(\"뒤로 물러서기\")\n .withDuration(0.45)\n .withType(\"movement\")\n .keyframe(0.0, \"ease-out\")\n .rotate(BoneName.KNEE_R, -0.3, 0, 0)\n .rotate(BoneName.HIP_L, 0.2, 0, 0)\n .rotate(BoneName.KNEE_L, -0.4, 0, 0)\n .rotate(BoneName.SPINE_LOWER, -0.1, 0, 0)\n .rotate(BoneName.SPINE_UPPER, -0.05, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.6, 0, -0.9)\n .rotate(BoneName.SHOULDER_R, 0.6, 0, 0.9)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.3)\n .position(BoneName.PELVIS, 0, 0, 0)\n .build()\n .keyframe(0.2, \"linear\")\n .rotate(BoneName.KNEE_R, -0.25, 0, 0)\n .rotate(BoneName.HIP_L, 0.1, 0, 0)\n .rotate(BoneName.KNEE_L, -0.3, 0, 0)\n .rotate(BoneName.SPINE_LOWER, -0.08, 0, 0)\n .rotate(BoneName.SPINE_UPPER, -0.04, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.6, 0, -0.9)\n .rotate(BoneName.SHOULDER_R, 0.6, 0, 0.9)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.3)\n .position(BoneName.PELVIS, 0, 0, -0.6)\n .build()\n .keyframe(0.35, \"ease-in\")\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.HIP_L, 0, 0, 0)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.5, 0, -0.8)\n .rotate(BoneName.SHOULDER_R, 0.5, 0, 0.8)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.2)\n .position(BoneName.PELVIS, 0, 0, -0.8)\n .build()\n .keyframe(0.45, \"ease-in\")\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.5, 0, -0.8)\n .rotate(BoneName.SHOULDER_R, 0.5, 0, 0.8)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.2)\n .position(BoneName.PELVIS, 0, 0, 0)\n .build()\n .build();\n\n/**\n * Side step animation (옆으로 스텝)\n *\n * Lateral hip shift with trailing leg for quick evasion.\n *\n * Animation phases:\n * 1. Shift left (0.0s): Weight to left leg\n * 2. Slide (0.15s): Right leg follows\n * 3. Plant (0.25s): Both feet grounded\n * 4. Reset (0.3s): Return to center\n *\n * Duration: 300ms\n *\n * @korean 옆으로스텝애니메이션\n */\nexport const SIDE_STEP_ANIMATION = AnimationBuilder.create(\"side_step\")\n .withKoreanName(\"옆으로 스텝\")\n .withDuration(0.3)\n .withType(\"movement\")\n .keyframe(0.0, \"ease-out\")\n .rotate(BoneName.KNEE_L, -0.4, 0, 0)\n .rotate(BoneName.KNEE_R, -0.15, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, -0.15)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0.05)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0.08)\n .rotate(BoneName.SHOULDER_L, 0.5, 0, -0.8)\n .rotate(BoneName.SHOULDER_R, 0.5, 0, 0.8)\n .position(BoneName.PELVIS, -0.3, -0.05, 0)\n .build()\n .keyframe(0.15, \"linear\")\n .rotate(BoneName.KNEE_L, -0.25, 0, 0)\n .rotate(BoneName.KNEE_R, -0.25, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, -0.08)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0.03)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0.04)\n .rotate(BoneName.SHOULDER_L, 0.5, 0, -0.8)\n .rotate(BoneName.SHOULDER_R, 0.5, 0, 0.8)\n .position(BoneName.PELVIS, -0.5, 0, 0)\n .build()\n .keyframe(0.25, \"ease-in\")\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.5, 0, -0.8)\n .rotate(BoneName.SHOULDER_R, 0.5, 0, 0.8)\n .position(BoneName.PELVIS, -0.5, 0, 0)\n .build()\n .keyframe(0.3, \"ease-in\")\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.5, 0, -0.8)\n .rotate(BoneName.SHOULDER_R, 0.5, 0, 0.8)\n .position(BoneName.PELVIS, 0, 0, 0)\n .build()\n .build();\n\n/**\n * Elbow strike animation (팔꿈치 타격 - Palgumchi Tagyeok)\n *\n * Close-range horizontal elbow strike from Hapkido.\n * Authentic Korean martial arts technique with proper shoulder rotation,\n * elbow positioning, and torso twist for maximum impact.\n *\n * Animation phases:\n * 1. Chamber (0.0s): Right arm chambers across body, elbow bent 90 degrees\n * 2. Rotation (0.05s): Torso rotates right, building momentum\n * 3. Strike (0.1s-0.12s): Elbow drives through target with hip rotation\n * 4. Impact (0.12s): Maximum extension with full body weight transfer\n * 5. Recovery (0.2s): Return to guard position\n *\n * Duration: 200ms (10 frames @ 60fps)\n *\n * @korean 팔꿈치타격애니메이션\n */\nexport const ELBOW_STRIKE_ANIMATION = AnimationBuilder.create(\"elbow_strike\")\n .withKoreanName(\"팔꿈치타격\")\n .withDuration(0.2)\n .withType(\"attack\")\n // Frame 1: Chamber position\n .keyframe(0.0, \"linear\")\n .rotate(BoneName.SHOULDER_R, 0, 0.8, -0.3) // Shoulder forward and across\n .rotate(BoneName.ELBOW_R, 0, 0, 1.57) // 90 degree bend\n .rotate(BoneName.FOREARM_R, 0, -0.5, 0) // Forearm rotates in\n .rotate(BoneName.SPINE_UPPER, 0, -0.3, 0) // Torso winds up\n .rotate(BoneName.SPINE_MIDDLE, 0, -0.2, 0)\n .rotate(BoneName.PELVIS, 0, -0.15, 0)\n .rotate(BoneName.SHOULDER_L, 0, -0.5, 0.5) // Left arm guards\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2)\n .position(BoneName.HAND_R, -0.2, 0, 0.3) // Hand near opposite shoulder\n .build()\n // Frame 2: Rotation begins\n .keyframe(0.05, \"ease-out\")\n .rotate(BoneName.SHOULDER_R, 0, 0.5, 0)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.57) // Maintain 90 degree bend\n .rotate(BoneName.FOREARM_R, 0, -0.3, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0.1, 0) // Torso begins rotation\n .rotate(BoneName.SPINE_MIDDLE, 0, 0.05, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .position(BoneName.HAND_R, -0.1, 0, 0.4)\n .build()\n // Frame 3: Strike through target\n .keyframe(0.1, \"linear\")\n .rotate(BoneName.SHOULDER_R, 0, 0, 0.3) // Elbow drives forward\n .rotate(BoneName.ELBOW_R, 0, 0, 1.4) // Slightly opens for power\n .rotate(BoneName.FOREARM_R, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0.5, 0.1) // Full torso rotation\n .rotate(BoneName.SPINE_MIDDLE, 0, 0.4, 0.05)\n .rotate(BoneName.PELVIS, 0, 0.3, 0)\n .rotate(BoneName.HIP_R, 0, 0.2, 0) // Hip engagement\n .position(BoneName.ELBOW_R, 0, 0, 0.6) // Elbow extends forward\n .build()\n // Frame 4: Impact point\n .keyframe(0.12, \"linear\")\n .rotate(BoneName.SHOULDER_R, 0, 0, 0.5)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.3)\n .rotate(BoneName.FOREARM_R, 0, 0.1, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0.6, 0.15) // Maximum rotation\n .rotate(BoneName.SPINE_MIDDLE, 0, 0.5, 0.1)\n .rotate(BoneName.PELVIS, 0, 0.4, 0)\n .rotate(BoneName.HIP_R, 0, 0.3, 0)\n .position(BoneName.ELBOW_R, 0, 0, 0.7)\n .position(BoneName.PELVIS, 0, 0, 0.1) // Weight shift forward\n .build()\n // Frame 5: Recovery\n .keyframe(0.2, \"ease-in\")\n .rotate(BoneName.SHOULDER_R, 0, 0, -0.1) // Return to guard\n .rotate(BoneName.ELBOW_R, 0, 0, 1.2)\n .rotate(BoneName.FOREARM_R, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.HIP_R, 0, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0, 0, 0.5)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2)\n .position(BoneName.ELBOW_R, 0, 0, 0)\n .position(BoneName.HAND_R, 0, 0, 0)\n .position(BoneName.PELVIS, 0, 0, 0)\n .build()\n .build();\n\n/**\n * Knee strike animation (무릎 타격 - Mureup Tagyeok)\n *\n * Close-range knee strike from Muay Thai-influenced Korean martial arts.\n * Clinch position with explosive knee drive and proper hip engagement.\n *\n * Animation phases:\n * 1. Clinch setup (0.0s): Arms position for control, weight on support leg\n * 2. Chamber (0.05s): Knee begins to lift, hip flexes\n * 3. Drive (0.1s-0.12s): Knee drives upward with hip thrust\n * 4. Impact (0.12s): Maximum extension with full body weight\n * 5. Retraction (0.15s): Knee returns to chamber\n * 6. Recovery (0.2s): Return to fighting stance\n *\n * Duration: 200ms (10 frames @ 60fps)\n *\n * @korean 무릎타격애니메이션\n */\nexport const KNEE_STRIKE_ANIMATION = AnimationBuilder.create(\"knee_strike\")\n .withKoreanName(\"무릎타격\")\n .withDuration(0.2)\n .withType(\"attack\")\n // Frame 1: Clinch setup\n .keyframe(0.0, \"linear\")\n .rotate(BoneName.SHOULDER_L, 0.8, 0, -0.5) // Arms in clinch position\n .rotate(BoneName.SHOULDER_R, 0.8, 0, 0.5)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.3) // Bent for control\n .rotate(BoneName.ELBOW_R, 0, 0, 1.3)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0) // Support leg stabilizes\n .rotate(BoneName.FOOT_L, 0, 0, 0.03)\n .rotate(BoneName.HIP_R, 0, 0, 0) // Striking leg neutral\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .position(BoneName.PELVIS, 0, -0.01, 0)\n .build()\n // Frame 2: Chamber begins\n .keyframe(0.05, \"ease-out\")\n .rotate(BoneName.SHOULDER_L, 0.5, 0, -0.6) // Arms pull opponent down\n .rotate(BoneName.SHOULDER_R, 0.5, 0, 0.6)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.4)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.4)\n .rotate(BoneName.HIP_R, 1.0, 0, 0) // Hip flexes\n .rotate(BoneName.KNEE_R, -1.3, 0, 0) // Knee bends tight\n .rotate(BoneName.KNEE_L, -0.25, 0, 0) // Support leg adjusts\n .rotate(BoneName.FOOT_L, 0, 0, 0.05)\n .rotate(BoneName.SPINE_UPPER, -0.1, 0, 0) // Torso leans back slightly\n .position(BoneName.PELVIS, 0, -0.02, -0.05)\n .build()\n // Frame 3: Knee drive begins\n .keyframe(0.1, \"ease-out\")\n .rotate(BoneName.SHOULDER_L, 0.3, 0, -0.7) // Arms maintain clinch\n .rotate(BoneName.SHOULDER_R, 0.3, 0, 0.7)\n .rotate(BoneName.HIP_R, 1.3, 0, 0) // Knee drives upward\n .rotate(BoneName.KNEE_R, -0.8, 0, 0) // Opens slightly\n .rotate(BoneName.FOOT_R, 0.3, 0, 0) // Ankle plantarflexion\n .rotate(BoneName.PELVIS, 0.15, 0, 0) // Forward thrust\n .rotate(BoneName.SPINE_LOWER, 0.1, 0, 0)\n .rotate(BoneName.KNEE_L, -0.15, 0, 0) // Support leg extends\n .position(BoneName.KNEE_R, 0, 0.3, 0.4) // Knee rises forward\n .position(BoneName.PELVIS, 0, 0, 0.15) // Hip drives forward\n .build()\n // Frame 4: Impact point\n .keyframe(0.12, \"linear\")\n .rotate(BoneName.SHOULDER_L, 0.2, 0, -0.8) // Maximum pull down\n .rotate(BoneName.SHOULDER_R, 0.2, 0, 0.8)\n .rotate(BoneName.HIP_R, 1.4, 0, 0) // Maximum knee extension\n .rotate(BoneName.KNEE_R, -0.5, 0, 0)\n .rotate(BoneName.FOOT_R, 0.4, 0, 0)\n .rotate(BoneName.PELVIS, 0.2, 0, 0) // Full hip thrust\n .rotate(BoneName.SPINE_LOWER, 0.15, 0, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0.05, 0, 0)\n .rotate(BoneName.KNEE_L, -0.1, 0, 0) // Support leg fully extended\n .position(BoneName.KNEE_R, 0, 0.4, 0.5)\n .position(BoneName.PELVIS, 0, 0.02, 0.2)\n .build()\n // Frame 5: Retraction\n .keyframe(0.15, \"ease-in\")\n .rotate(BoneName.HIP_R, 1.0, 0, 0) // Return to chamber\n .rotate(BoneName.KNEE_R, -1.3, 0, 0)\n .rotate(BoneName.FOOT_R, 0, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0, 0, 0)\n .position(BoneName.KNEE_R, 0, 0.2, 0.2)\n .position(BoneName.PELVIS, 0, -0.01, 0)\n .build()\n // Frame 6: Recovery\n .keyframe(0.2, \"ease-in\")\n .rotate(BoneName.SHOULDER_L, 0, 0, 0.5) // Arms return to guard\n .rotate(BoneName.SHOULDER_R, 0, 0, -0.5)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.2)\n .rotate(BoneName.HIP_R, 0, 0, 0) // Leg returns to stance\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.FOOT_R, 0, 0, 0)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.FOOT_L, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0) // Body neutral\n .position(BoneName.KNEE_R, 0, 0, 0)\n .position(BoneName.PELVIS, 0, 0, 0)\n .build()\n .build();\n\n/**\n * Side kick animation (옆차기 - Yeopchagi)\n *\n * Traditional Taekwondo side kick with lateral hip rotation,\n * leg extension to the side, and proper chamber-drive-retract sequence.\n *\n * Animation phases:\n * 1. Chamber (0.0s-0.1s): Knee lifts with hip turning sideways\n * 2. Drive (0.1s-0.15s): Leg drives laterally with hip thrust\n * 3. Extension (0.15s-0.2s): Full extension with heel strike\n * 4. Impact (0.2s): Maximum lateral extension\n * 5. Retraction (0.2s-0.35s): Return to chamber\n * 6. Recovery (0.35s-0.5s): Foot returns to ground, stance reset\n *\n * Duration: 500ms (30 frames @ 60fps)\n *\n * @korean 옆차기애니메이션\n */\nexport const SIDE_KICK_ANIMATION = AnimationBuilder.create(\"side_kick\")\n .withKoreanName(\"옆차기\")\n .withDuration(0.5)\n .withType(\"attack\")\n // Frame 1: Chamber with sideways turn\n .keyframe(0.1, \"ease-out\")\n .rotate(BoneName.HIP_R, 1.3, 0, 0.3) // Lift and turn\n .rotate(BoneName.KNEE_R, -1.6, 0, 0) // Tight chamber\n .rotate(BoneName.PELVIS, 0, -1.57, 0) // Turn left (90 degrees)\n .rotate(BoneName.SPINE_LOWER, 0, -1.4, 0)\n .rotate(BoneName.SPINE_UPPER, 0, -1.2, 0.2) // Lean away\n .rotate(BoneName.KNEE_L, -0.3, 0, 0) // Support leg adjusts\n .rotate(BoneName.FOOT_L, 0, 0, 0.1)\n .rotate(BoneName.SHOULDER_L, 0, 0, -1.2) // Arms for balance\n .rotate(BoneName.SHOULDER_R, 0, 0, 0.8)\n .position(BoneName.PELVIS, 0, -0.02, 0)\n .build()\n // Frame 2: Drive begins\n .keyframe(0.15, \"ease-out\")\n .rotate(BoneName.HIP_R, 1.3, 0, 0.5) // Leg begins lateral extension\n .rotate(BoneName.KNEE_R, -1.0, 0, 0)\n .rotate(BoneName.FOOT_R, 0, 0.3, 0) // Heel positioning\n .rotate(BoneName.PELVIS, 0, -1.57, 0) // Hip thrust lateral\n .rotate(BoneName.SPINE_LOWER, 0, -1.4, 0)\n .rotate(BoneName.SPINE_UPPER, 0, -1.2, 0.3)\n .rotate(BoneName.KNEE_L, -0.25, 0, 0) // Support leg stabilizes\n .position(BoneName.FOOT_R, 0.4, 0, 0) // Lateral movement\n .build()\n // Frame 3: Full extension and impact\n .keyframe(0.2, \"linear\")\n .rotate(BoneName.HIP_R, 1.3, 0, 0.7) // Maximum lateral extension\n .rotate(BoneName.KNEE_R, -0.1, 0, 0) // Nearly straight\n .rotate(BoneName.FOOT_R, 0, 0.4, 0) // Heel strike position\n .rotate(BoneName.PELVIS, 0, -1.57, 0) // Maximum hip drive\n .rotate(BoneName.SPINE_LOWER, 0, -1.4, 0)\n .rotate(BoneName.SPINE_UPPER, 0, -1.2, 0.4) // Maximum lean\n .rotate(BoneName.KNEE_L, -0.15, 0, 0) // Support leg extends\n .position(BoneName.FOOT_R, 0.7, 0, 0) // Maximum reach\n .position(BoneName.PELVIS, 0.1, 0, 0) // Slight lateral shift\n .build()\n // Frame 4: Retraction\n .keyframe(0.35, \"ease-in\")\n .rotate(BoneName.HIP_R, 1.3, 0, 0.3) // Return to chamber\n .rotate(BoneName.KNEE_R, -1.6, 0, 0)\n .rotate(BoneName.FOOT_R, 0, 0, 0)\n .rotate(BoneName.PELVIS, 0, -1.2, 0) // Begin turning back\n .rotate(BoneName.SPINE_LOWER, 0, -1.0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, -0.8, 0.2)\n .position(BoneName.FOOT_R, 0.3, 0, 0)\n .position(BoneName.PELVIS, 0, -0.01, 0)\n .build()\n // Frame 5: Recovery\n .keyframe(0.5, \"ease-in\")\n .rotate(BoneName.HIP_R, 0, 0, 0) // Return to neutral stance\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.FOOT_R, 0, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.FOOT_L, 0, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0, 0, 0.5)\n .rotate(BoneName.SHOULDER_R, 0, 0, -0.5)\n .position(BoneName.FOOT_R, 0, 0, 0)\n .position(BoneName.PELVIS, 0, 0, 0)\n .build()\n .build();\n\n/**\n * Elbow uppercut animation (팔꿈치 올려치기 - Palgumchi Ollyeochigi)\n *\n * Upward elbow strike from Hapkido, targeting chin/jaw area.\n * Close-range technique with explosive upward drive and leg spring.\n *\n * Animation phases:\n * 1. Crouch (0.0s): Lower stance, elbow chambers low\n * 2. Spring (0.05s): Legs drive upward with explosive force\n * 3. Drive (0.1s-0.12s): Elbow drives upward with hip thrust\n * 4. Impact (0.12s): Maximum upward extension at chin level\n * 5. Recovery (0.18s): Return to guard position\n *\n * Duration: 180ms (11 frames @ 60fps)\n *\n * @korean 팔꿈치올려치기애니메이션\n */\nexport const ELBOW_UPPERCUT_ANIMATION = AnimationBuilder.create(\n \"elbow_uppercut\",\n)\n .withKoreanName(\"팔꿈치올려치기\")\n .withDuration(0.18)\n .withType(\"attack\")\n .keyframe(0.0, \"linear\")\n .rotate(BoneName.SHOULDER_R, -0.3, 0, 0.5)\n .rotate(BoneName.ELBOW_R, 0, 0, 2.0)\n .rotate(BoneName.FOREARM_R, 0, -0.8, 0)\n .rotate(BoneName.KNEE_L, -0.5, 0, 0)\n .rotate(BoneName.KNEE_R, -0.5, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0.2, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0.15, 0, 0)\n .rotate(BoneName.PELVIS, 0.1, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0, 0, 0.5)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2)\n .position(BoneName.PELVIS, 0, -0.1, 0)\n .build()\n .keyframe(0.05, \"ease-out\")\n .rotate(BoneName.SHOULDER_R, 0, 0, 0.8)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.8)\n .rotate(BoneName.FOREARM_R, 0, -0.5, 0)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .position(BoneName.PELVIS, 0, -0.02, 0)\n .position(BoneName.ELBOW_R, 0, 0.2, 0.3)\n .build()\n .keyframe(0.1, \"ease-out\")\n .rotate(BoneName.SHOULDER_R, 0.5, 0, 1.0)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.5)\n .rotate(BoneName.FOREARM_R, 0, -0.2, 0)\n .rotate(BoneName.KNEE_L, -0.1, 0, 0)\n .rotate(BoneName.KNEE_R, -0.1, 0, 0)\n .rotate(BoneName.PELVIS, -0.1, 0, 0)\n .rotate(BoneName.SPINE_LOWER, -0.05, 0, 0)\n .position(BoneName.PELVIS, 0, 0.05, 0.1)\n .position(BoneName.ELBOW_R, 0, 0.5, 0.4)\n .build()\n .keyframe(0.12, \"linear\")\n .rotate(BoneName.SHOULDER_R, 0.8, 0, 1.2)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.4)\n .rotate(BoneName.FOREARM_R, 0, 0, 0)\n .rotate(BoneName.KNEE_L, -0.05, 0, 0)\n .rotate(BoneName.KNEE_R, -0.05, 0, 0)\n .rotate(BoneName.PELVIS, -0.15, 0, 0)\n .rotate(BoneName.SPINE_LOWER, -0.1, 0, 0)\n .rotate(BoneName.SPINE_UPPER, -0.05, 0, 0)\n .position(BoneName.PELVIS, 0, 0.08, 0.15)\n .position(BoneName.ELBOW_R, 0, 0.7, 0.5)\n .build()\n .keyframe(0.18, \"ease-in\")\n .rotate(BoneName.SHOULDER_R, 0, 0, -0.1)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.2)\n .rotate(BoneName.FOREARM_R, 0, 0, 0)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0, 0, 0.5)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2)\n .position(BoneName.PELVIS, 0, 0, 0)\n .position(BoneName.ELBOW_R, 0, 0, 0)\n .build()\n .build();\n\n/**\n * Axe kick animation (내려차기 - Naeryeochagi)\n *\n * Traditional Taekwondo downward axe kick targeting head/shoulder.\n * Leg rises high then chops downward with heel strike.\n *\n * Animation phases:\n * 1. Chamber (0.0s-0.15s): Leg rises high in front\n * 2. Peak (0.15s-0.2s): Maximum height, leg nearly vertical\n * 3. Chop (0.2s-0.3s): Leg descends rapidly with heel strike\n * 4. Impact (0.3s): Maximum downward force\n * 5. Recovery (0.3s-0.5s): Return to stance\n *\n * Duration: 500ms\n *\n * @korean 내려차기애니메이션\n */\nexport const AXE_KICK_ANIMATION = AnimationBuilder.create(\"axe_kick\")\n .withKoreanName(\"내려차기\")\n .withDuration(0.5)\n .withType(\"attack\")\n // Frame 1: Leg rises in front\n .keyframe(0.15, \"ease-out\")\n .rotate(BoneName.HIP_R, 2.0, 0, 0) // High lift (>120 degrees)\n .rotate(BoneName.KNEE_R, -0.3, 0, 0) // Nearly straight\n .rotate(BoneName.FOOT_R, 0.5, 0, 0) // Dorsiflexion\n .rotate(BoneName.KNEE_L, -0.3, 0, 0) // Support leg bent\n .rotate(BoneName.PELVIS, -0.2, 0, 0) // Tilts back\n .rotate(BoneName.SPINE_LOWER, -0.15, 0, 0)\n .rotate(BoneName.SPINE_UPPER, -0.1, 0, 0) // Lean back for balance\n .rotate(BoneName.SHOULDER_L, -0.8, 0.3, 0.4) // Guard position\n .rotate(BoneName.ELBOW_L, 0, 0, -1.6)\n .rotate(BoneName.SHOULDER_R, -0.8, -0.3, -0.4)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.6)\n .position(BoneName.PELVIS, 0, -0.05, -0.1)\n .build()\n // Frame 2: Peak height (nearly vertical)\n .keyframe(0.2, \"linear\")\n .rotate(BoneName.HIP_R, 2.5, 0, 0) // Maximum height (>140 degrees)\n .rotate(BoneName.KNEE_R, -0.1, 0, 0) // Fully extended\n .rotate(BoneName.FOOT_R, 0.6, 0, 0)\n .rotate(BoneName.KNEE_L, -0.35, 0, 0)\n .rotate(BoneName.PELVIS, -0.25, 0, 0)\n .rotate(BoneName.SPINE_LOWER, -0.2, 0, 0)\n .rotate(BoneName.SPINE_UPPER, -0.15, 0, 0)\n .position(BoneName.FOOT_R, 0, 1.5, 0.3) // High above\n .position(BoneName.PELVIS, 0, -0.08, -0.15)\n .build()\n // Frame 3: Downward chop\n .keyframe(0.3, \"ease-in\")\n .rotate(BoneName.HIP_R, 0.8, 0, 0) // Descending rapidly\n .rotate(BoneName.KNEE_R, -0.15, 0, 0)\n .rotate(BoneName.FOOT_R, -0.3, 0, 0) // Heel strike angle\n .rotate(BoneName.KNEE_L, -0.25, 0, 0)\n .rotate(BoneName.PELVIS, 0.1, 0, 0) // Pelvis drives forward\n .rotate(BoneName.SPINE_LOWER, 0.1, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0.05, 0, 0)\n .position(BoneName.FOOT_R, 0, 0.5, 0.4) // Striking down\n .position(BoneName.PELVIS, 0, 0, 0.1)\n .build()\n // Frame 4: Recovery\n .keyframe(0.5, \"ease-in\")\n .rotate(BoneName.HIP_R, 0, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.FOOT_R, 0, 0, 0)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.SHOULDER_L, -0.6, 0.4, 0.3)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.8)\n .rotate(BoneName.SHOULDER_R, -0.6, -0.4, -0.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.8)\n .position(BoneName.FOOT_R, 0, 0, 0)\n .position(BoneName.PELVIS, 0, 0, 0)\n .build()\n .build();\n\n/**\n * Back kick animation (뒤차기 - Dwichagi)\n *\n * Traditional Taekwondo spinning back kick with powerful heel thrust.\n * Turn 180 degrees and deliver straight back kick.\n *\n * Animation phases:\n * 1. Turn start (0.0s-0.1s): Begin spinning left\n * 2. Chamber (0.1s-0.15s): Look over shoulder, leg chambers\n * 3. Thrust (0.15s-0.2s): Heel drives backward\n * 4. Impact (0.2s-0.25s): Full extension\n * 5. Recovery (0.25s-0.45s): Complete rotation, return to stance\n *\n * Duration: 450ms\n *\n * @korean 뒤차기애니메이션\n */\nexport const BACK_KICK_ANIMATION = AnimationBuilder.create(\"back_kick\")\n .withKoreanName(\"뒤차기\")\n .withDuration(0.45)\n .withType(\"attack\")\n // Frame 1: Begin spin\n .keyframe(0.1, \"ease-out\")\n .rotate(BoneName.PELVIS, 0, -1.5, 0) // Turn left ~90 degrees\n .rotate(BoneName.SPINE_LOWER, 0, -1.3, 0)\n .rotate(BoneName.SPINE_UPPER, 0, -1.0, 0.1) // Look over shoulder\n .rotate(BoneName.HEAD, 0, 0.5, 0) // Look back at target\n .rotate(BoneName.HIP_R, 0.3, 0, 0) // Begin lift\n .rotate(BoneName.KNEE_R, -0.8, 0, 0) // Chamber\n .rotate(BoneName.KNEE_L, -0.3, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.3, 0, -0.5)\n .rotate(BoneName.SHOULDER_R, 0.3, 0, 0.5)\n .position(BoneName.PELVIS, 0, -0.02, 0)\n .build()\n // Frame 2: Full chamber\n .keyframe(0.15, \"linear\")\n .rotate(BoneName.PELVIS, 0, -2.8, 0) // Turn ~160 degrees\n .rotate(BoneName.SPINE_LOWER, 0, -2.5, 0)\n .rotate(BoneName.SPINE_UPPER, 0, -2.2, 0.15)\n .rotate(BoneName.HEAD, 0, 0.8, 0)\n .rotate(BoneName.HIP_R, 0.8, 0, 0) // Knee lifts\n .rotate(BoneName.KNEE_R, -1.5, 0, 0) // Tight chamber\n .rotate(BoneName.KNEE_L, -0.25, 0, 0)\n .position(BoneName.PELVIS, 0, -0.01, -0.05)\n .build()\n // Frame 3: Thrust backward\n .keyframe(0.2, \"ease-out\")\n .rotate(BoneName.PELVIS, 0, -3.14, 0) // Full 180 degrees\n .rotate(BoneName.SPINE_LOWER, 0, -3.0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, -2.8, 0.2)\n .rotate(BoneName.HEAD, 0, 1.0, 0)\n .rotate(BoneName.HIP_R, 0.5, 0, 0) // Extends backward\n .rotate(BoneName.KNEE_R, -0.2, 0, 0) // Leg straightens\n .rotate(BoneName.FOOT_R, -0.4, 0, 0) // Heel strike\n .rotate(BoneName.KNEE_L, -0.15, 0, 0)\n .position(BoneName.FOOT_R, 0, 0, -0.8) // Thrust back\n .position(BoneName.PELVIS, 0, 0, 0.15)\n .build()\n // Frame 4: Impact\n .keyframe(0.25, \"linear\")\n .rotate(BoneName.PELVIS, 0, -3.14, 0)\n .rotate(BoneName.SPINE_LOWER, 0, -3.0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, -2.8, 0.25)\n .rotate(BoneName.HIP_R, 0.3, 0, 0) // Full extension\n .rotate(BoneName.KNEE_R, -0.05, 0, 0) // Straight\n .rotate(BoneName.FOOT_R, -0.5, 0, 0)\n .position(BoneName.FOOT_R, 0, 0.2, -1.0) // Maximum reach\n .position(BoneName.PELVIS, 0, 0, 0.2)\n .build()\n // Frame 5: Recovery (complete rotation)\n .keyframe(0.45, \"ease-in\")\n .rotate(BoneName.PELVIS, 0, 0, 0) // Return to forward\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.HEAD, 0, 0, 0)\n .rotate(BoneName.HIP_R, 0, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.FOOT_R, 0, 0, 0)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.SHOULDER_L, -0.6, 0.4, 0.3)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.8)\n .rotate(BoneName.SHOULDER_R, -0.6, -0.4, -0.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.8)\n .position(BoneName.FOOT_R, 0, 0, 0)\n .position(BoneName.PELVIS, 0, 0, 0)\n .build()\n .build();\n\n/**\n * Tornado kick animation (회오리차기 - Hoeori Chagi)\n *\n * 360-degree spinning kick with explosive roundhouse at peak rotation.\n *\n * Animation phases:\n * 1. Wind-up (0.0s-0.15s): Begin 360 spin\n * 2. Half turn (0.15s-0.25s): Continue rotation, leg chambers\n * 3. Kick (0.25s-0.35s): Roundhouse executes at peak rotation\n * 4. Complete spin (0.35s-0.55s): Finish rotation, land\n *\n * Duration: 550ms\n *\n * @korean 회오리차기애니메이션\n */\nexport const TORNADO_KICK_ANIMATION = AnimationBuilder.create(\"tornado_kick\")\n .withKoreanName(\"회오리차기\")\n .withDuration(0.55)\n .withType(\"attack\")\n // Frame 1: Begin spin\n .keyframe(0.15, \"ease-out\")\n .rotate(BoneName.PELVIS, 0, -2.0, 0) // Spin ~115 degrees\n .rotate(BoneName.SPINE_LOWER, 0, -1.8, 0)\n .rotate(BoneName.SPINE_UPPER, 0, -1.5, 0)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.FOOT_L, 0, 0, -0.2) // Pivot foot\n .rotate(BoneName.HIP_R, 0.4, 0, 0.3) // Leg begins lift\n .rotate(BoneName.KNEE_R, -0.8, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.5, 0, -0.5)\n .rotate(BoneName.SHOULDER_R, 0.5, 0, 0.5)\n .position(BoneName.PELVIS, 0, 0.1, 0) // Slight jump\n .build()\n // Frame 2: Continue spin, chamber\n .keyframe(0.25, \"linear\")\n .rotate(BoneName.PELVIS, 0, -4.0, 0) // Spin ~230 degrees\n .rotate(BoneName.SPINE_LOWER, 0, -3.8, 0)\n .rotate(BoneName.SPINE_UPPER, 0, -3.5, 0)\n .rotate(BoneName.KNEE_L, -0.15, 0, 0)\n .rotate(BoneName.FOOT_L, 0, 0, -0.3)\n .rotate(BoneName.HIP_R, 1.2, 0, 0.8) // Chamber for roundhouse\n .rotate(BoneName.KNEE_R, -1.5, 0, 0)\n .position(BoneName.PELVIS, 0, 0.15, 0) // Jump peak\n .build()\n // Frame 3: Execute kick at peak rotation\n .keyframe(0.35, \"ease-out\")\n .rotate(BoneName.PELVIS, 0, -5.5, 0) // Spin ~315 degrees\n .rotate(BoneName.SPINE_LOWER, 0, -5.3, 0)\n .rotate(BoneName.SPINE_UPPER, 0, -5.0, 0.3)\n .rotate(BoneName.KNEE_L, -0.1, 0, 0)\n .rotate(BoneName.HIP_R, 1.2, 0, 1.6) // Full roundhouse extension\n .rotate(BoneName.KNEE_R, -0.1, 0, 0)\n .rotate(BoneName.FOOT_R, 0.4, 0, 0.3)\n .position(BoneName.FOOT_R, 0.8, 0, 0) // Lateral strike\n .position(BoneName.PELVIS, 0, 0.1, 0) // Descending\n .build()\n // Frame 4: Complete rotation and land\n .keyframe(0.55, \"ease-in\")\n .rotate(BoneName.PELVIS, 0, -6.28, 0) // Full 360 degrees\n .rotate(BoneName.SPINE_LOWER, 0, -6.28, 0)\n .rotate(BoneName.SPINE_UPPER, 0, -6.28, 0)\n .rotate(BoneName.HIP_R, 0, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.FOOT_R, 0, 0, 0)\n .rotate(BoneName.KNEE_L, -0.25, 0, 0) // Absorb landing\n .rotate(BoneName.SHOULDER_L, -0.6, 0.4, 0.3)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.8)\n .rotate(BoneName.SHOULDER_R, -0.6, -0.4, -0.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.8)\n .position(BoneName.FOOT_R, 0, 0, 0)\n .position(BoneName.PELVIS, 0, -0.05, 0) // Land\n .build()\n .build();\n\n/**\n * Jumping kick animation (뛰어차기 - Ttwieo Chagi)\n *\n * Jumping front kick with explosive upward momentum.\n *\n * Animation phases:\n * 1. Crouch (0.0s-0.1s): Load legs for jump\n * 2. Jump (0.1s-0.2s): Explosive upward, front kick chambers\n * 3. Kick (0.2s-0.3s): Front kick at peak height\n * 4. Retract (0.3s-0.4s): Leg pulls back\n * 5. Land (0.4s-0.5s): Absorb landing\n *\n * Duration: 500ms\n *\n * @korean 뛰어차기애니메이션\n */\nexport const JUMPING_KICK_ANIMATION = AnimationBuilder.create(\"jumping_kick\")\n .withKoreanName(\"뛰어차기\")\n .withDuration(0.5)\n .withType(\"attack\")\n // Frame 1: Crouch to load\n .keyframe(0.1, \"ease-out\")\n .rotate(BoneName.KNEE_L, -0.6, 0, 0)\n .rotate(BoneName.KNEE_R, -0.6, 0, 0)\n .rotate(BoneName.PELVIS, 0.1, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0.1, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.3, 0, -0.5)\n .rotate(BoneName.SHOULDER_R, 0.3, 0, 0.5)\n .position(BoneName.PELVIS, 0, -0.15, 0)\n .build()\n // Frame 2: Jump and chamber\n .keyframe(0.2, \"ease-out\")\n .rotate(BoneName.KNEE_L, -0.1, 0, 0) // Jump leg extends\n .rotate(BoneName.HIP_R, 1.6, 0, 0) // Chamber\n .rotate(BoneName.KNEE_R, -2.0, 0, 0)\n .rotate(BoneName.PELVIS, -0.1, 0, 0)\n .rotate(BoneName.SPINE_LOWER, -0.05, 0, 0)\n .rotate(BoneName.SHOULDER_L, -0.9, 0.3, 0.4)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.6)\n .rotate(BoneName.SHOULDER_R, -0.9, -0.3, -0.4)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.6)\n .position(BoneName.PELVIS, 0, 0.3, 0) // Airborne\n .build()\n // Frame 3: Kick extends at peak\n .keyframe(0.3, \"linear\")\n .rotate(BoneName.KNEE_L, -0.05, 0, 0)\n .rotate(BoneName.HIP_R, 1.7, 0, 0)\n .rotate(BoneName.KNEE_R, 0.1, 0, 0) // Full extension\n .rotate(BoneName.FOOT_R, 0.5, 0, 0) // Dorsiflexion\n .rotate(BoneName.PELVIS, 0.15, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0.1, 0, 0)\n .position(BoneName.PELVIS, 0, 0.35, 0.1) // Peak height\n .build()\n // Frame 4: Retract\n .keyframe(0.4, \"ease-in\")\n .rotate(BoneName.KNEE_L, -0.1, 0, 0)\n .rotate(BoneName.HIP_R, 1.4, 0, 0)\n .rotate(BoneName.KNEE_R, -1.5, 0, 0)\n .rotate(BoneName.FOOT_R, 0, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .position(BoneName.PELVIS, 0, 0.15, 0) // Descending\n .build()\n // Frame 5: Land\n .keyframe(0.5, \"ease-in\")\n .rotate(BoneName.KNEE_L, -0.35, 0, 0) // Absorb landing\n .rotate(BoneName.KNEE_R, -0.35, 0, 0)\n .rotate(BoneName.HIP_R, 0, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SHOULDER_L, -0.6, 0.4, 0.3)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.8)\n .rotate(BoneName.SHOULDER_R, -0.6, -0.4, -0.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.8)\n .position(BoneName.PELVIS, 0, -0.05, 0)\n .build()\n .build();\n\n/**\n * Sweep animation (다리걸기 - Dari Geolgi)\n *\n * Low sweeping kick targeting opponent's ankles for takedown.\n *\n * Animation phases:\n * 1. Drop (0.0s-0.1s): Lower stance, weight on one leg\n * 2. Sweep (0.1s-0.2s): Leg sweeps low in arc\n * 3. Follow through (0.2s-0.3s): Complete sweep arc\n * 4. Recovery (0.3s-0.45s): Return to stance\n *\n * Duration: 450ms\n *\n * @korean 다리걸기애니메이션\n */\nexport const SWEEP_ANIMATION = AnimationBuilder.create(\"sweep\")\n .withKoreanName(\"다리걸기\")\n .withDuration(0.45)\n .withType(\"attack\")\n // Frame 1: Drop low\n .keyframe(0.1, \"ease-out\")\n .rotate(BoneName.KNEE_L, -1.2, 0, 0) // Deep crouch\n .rotate(BoneName.KNEE_R, -0.3, 0, 0) // Sweep leg lighter\n .rotate(BoneName.PELVIS, 0.2, 0, 0) // Lean forward\n .rotate(BoneName.SPINE_LOWER, 0.3, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0.4, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.6, 0, -0.8) // Arms for balance\n .rotate(BoneName.SHOULDER_R, 0.6, 0, 0.8)\n .position(BoneName.PELVIS, 0, -0.3, 0) // Low position\n .build()\n // Frame 2: Sweep begins\n .keyframe(0.2, \"ease-out\")\n .rotate(BoneName.KNEE_L, -1.3, 0, 0)\n .rotate(BoneName.HIP_R, 0.3, 0, 1.0) // Leg sweeps outward\n .rotate(BoneName.KNEE_R, -0.2, 0, 0) // Nearly straight\n .rotate(BoneName.FOOT_R, 0, 0, 0.3) // Foot sweeps\n .rotate(BoneName.PELVIS, 0.25, -0.5, 0) // Rotate into sweep\n .rotate(BoneName.SPINE_LOWER, 0.35, -0.4, 0)\n .rotate(BoneName.SPINE_UPPER, 0.45, -0.3, 0)\n .position(BoneName.FOOT_R, 0.5, 0, 0) // Lateral sweep\n .position(BoneName.PELVIS, 0, -0.35, 0)\n .build()\n // Frame 3: Follow through\n .keyframe(0.3, \"linear\")\n .rotate(BoneName.KNEE_L, -1.2, 0, 0)\n .rotate(BoneName.HIP_R, 0.5, 0, 1.5) // Maximum sweep\n .rotate(BoneName.KNEE_R, -0.15, 0, 0)\n .rotate(BoneName.FOOT_R, 0, 0, 0.4)\n .rotate(BoneName.PELVIS, 0.3, -0.8, 0)\n .rotate(BoneName.SPINE_LOWER, 0.4, -0.6, 0)\n .rotate(BoneName.SPINE_UPPER, 0.5, -0.4, 0)\n .position(BoneName.FOOT_R, 0.8, -0.1, 0) // Low and wide\n .position(BoneName.PELVIS, 0.1, -0.3, 0)\n .build()\n // Frame 4: Recovery\n .keyframe(0.45, \"ease-in\")\n .rotate(BoneName.KNEE_L, -0.3, 0, 0)\n .rotate(BoneName.KNEE_R, -0.3, 0, 0)\n .rotate(BoneName.HIP_R, 0, 0, 0)\n .rotate(BoneName.FOOT_R, 0, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.SHOULDER_L, -0.6, 0.4, 0.3)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.8)\n .rotate(BoneName.SHOULDER_R, -0.6, -0.4, -0.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.8)\n .position(BoneName.FOOT_R, 0, 0, 0)\n .position(BoneName.PELVIS, 0, 0, 0)\n .build()\n .build();\n\n/**\n * Throw animation (던지기 - Deonjigi)\n *\n * Hapkido/Judo style hip throw technique.\n *\n * Animation phases:\n * 1. Entry (0.0s-0.15s): Step in, grab opponent\n * 2. Load (0.15s-0.25s): Hip under opponent\n * 3. Throw (0.25s-0.4s): Execute throw over hip\n * 4. Recovery (0.4s-0.55s): Return to stance\n *\n * Duration: 550ms\n *\n * @korean 던지기애니메이션\n */\nexport const THROW_ANIMATION = AnimationBuilder.create(\"throw\")\n .withKoreanName(\"던지기\")\n .withDuration(0.55)\n .withType(\"attack\")\n // Frame 1: Entry and grab\n .keyframe(0.15, \"ease-out\")\n .rotate(BoneName.SHOULDER_L, 0.6, 0.5, -0.3) // Reach for collar\n .rotate(BoneName.ELBOW_L, 0, 0, -1.0)\n .rotate(BoneName.SHOULDER_R, 0.8, -0.3, 0.2) // Reach for sleeve/hip\n .rotate(BoneName.ELBOW_R, 0, 0, 1.2)\n .rotate(BoneName.PELVIS, 0, 0.8, 0) // Turn into opponent\n .rotate(BoneName.SPINE_LOWER, 0, 0.7, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0.5, 0)\n .rotate(BoneName.KNEE_L, -0.4, 0, 0) // Step in\n .rotate(BoneName.KNEE_R, -0.3, 0, 0)\n .position(BoneName.PELVIS, 0, -0.05, 0.2) // Move into opponent\n .build()\n // Frame 2: Load hip under opponent\n .keyframe(0.25, \"linear\")\n .rotate(BoneName.SHOULDER_L, 0.3, 0.7, -0.5) // Pull collar\n .rotate(BoneName.ELBOW_L, 0, 0, -1.3)\n .rotate(BoneName.SHOULDER_R, 0.5, -0.5, 0.4) // Pull sleeve\n .rotate(BoneName.ELBOW_R, 0, 0, 1.0)\n .rotate(BoneName.PELVIS, 0.2, 1.2, 0) // Hip under, body turns\n .rotate(BoneName.SPINE_LOWER, 0.3, 1.0, 0)\n .rotate(BoneName.SPINE_UPPER, 0.4, 0.8, 0)\n .rotate(BoneName.KNEE_L, -0.6, 0, 0) // Knees bend to get under\n .rotate(BoneName.KNEE_R, -0.5, 0, 0)\n .position(BoneName.PELVIS, 0, -0.15, 0.15)\n .build()\n // Frame 3: Execute throw\n .keyframe(0.4, \"ease-out\")\n .rotate(BoneName.SHOULDER_L, -0.4, 0.8, -0.8) // Drive down with pull\n .rotate(BoneName.ELBOW_L, 0, 0, -0.8)\n .rotate(BoneName.SHOULDER_R, -0.2, -0.6, 0.6) // Lift and rotate\n .rotate(BoneName.ELBOW_R, 0, 0, 0.6)\n .rotate(BoneName.PELVIS, 0.5, 1.8, 0) // Hip drives through\n .rotate(BoneName.SPINE_LOWER, 0.6, 1.5, 0)\n .rotate(BoneName.SPINE_UPPER, 0.7, 1.2, -0.2) // Bend forward\n .rotate(BoneName.KNEE_L, -0.3, 0, 0) // Legs straighten for lift\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .position(BoneName.PELVIS, 0, 0.05, 0.1)\n .build()\n // Frame 4: Recovery\n .keyframe(0.55, \"ease-in\")\n .rotate(BoneName.SHOULDER_L, -0.6, 0.4, 0.3)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.8)\n .rotate(BoneName.SHOULDER_R, -0.6, -0.4, -0.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.8)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.KNEE_L, -0.25, 0, 0)\n .rotate(BoneName.KNEE_R, -0.25, 0, 0)\n .position(BoneName.PELVIS, 0, 0, 0)\n .build()\n .build();\n\n/**\n * Grapple animation (잡기/꺾기 - Japgi/Kkeokgi)\n *\n * Joint lock/grapple technique from Hapkido.\n *\n * Animation phases:\n * 1. Catch (0.0s-0.12s): Grab opponent's arm\n * 2. Control (0.12s-0.25s): Apply joint pressure\n * 3. Lock (0.25s-0.4s): Full joint lock applied\n * 4. Hold (0.4s-0.5s): Maintain control\n *\n * Duration: 500ms\n *\n * @korean 잡기꺾기애니메이션\n */\nexport const GRAPPLE_ANIMATION = AnimationBuilder.create(\"grapple\")\n .withKoreanName(\"잡기/꺾기\")\n .withDuration(0.5)\n .withType(\"attack\")\n // Frame 1: Catch arm\n .keyframe(0.12, \"ease-out\")\n .rotate(BoneName.SHOULDER_L, 0.4, 0.6, -0.2) // Both hands reach\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2)\n .rotate(BoneName.WRIST_L, 0, -0.3, 0) // Rotate to grab\n .rotate(BoneName.SHOULDER_R, 0.6, -0.4, 0.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 0.8)\n .rotate(BoneName.WRIST_R, 0, 0.3, 0)\n .rotate(BoneName.PELVIS, 0, 0.3, 0) // Body turns slightly\n .rotate(BoneName.SPINE_LOWER, 0, 0.25, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0.2, -0.1)\n .rotate(BoneName.KNEE_L, -0.25, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .position(BoneName.PELVIS, 0, -0.03, 0.1)\n .build()\n // Frame 2: Apply control\n .keyframe(0.25, \"linear\")\n .rotate(BoneName.SHOULDER_L, 0.2, 0.8, -0.4) // Pull down\n .rotate(BoneName.ELBOW_L, 0, 0, -1.5)\n .rotate(BoneName.WRIST_L, 0, -0.5, -0.3)\n .rotate(BoneName.SHOULDER_R, 0.3, -0.6, 0.5) // Rotate opponent's arm\n .rotate(BoneName.ELBOW_R, 0, 0, 1.2)\n .rotate(BoneName.WRIST_R, 0, 0.5, 0.2)\n .rotate(BoneName.PELVIS, 0.1, 0.5, 0)\n .rotate(BoneName.SPINE_LOWER, 0.15, 0.4, 0)\n .rotate(BoneName.SPINE_UPPER, 0.2, 0.3, -0.15)\n .rotate(BoneName.KNEE_L, -0.35, 0, 0)\n .rotate(BoneName.KNEE_R, -0.3, 0, 0)\n .position(BoneName.PELVIS, 0, -0.08, 0.08)\n .build()\n // Frame 3: Lock position\n .keyframe(0.4, \"ease-in\")\n .rotate(BoneName.SHOULDER_L, -0.1, 1.0, -0.6) // Secure lock\n .rotate(BoneName.ELBOW_L, 0, 0, -1.7)\n .rotate(BoneName.WRIST_L, 0, -0.6, -0.4)\n .rotate(BoneName.SHOULDER_R, 0.1, -0.8, 0.7)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.4)\n .rotate(BoneName.WRIST_R, 0, 0.6, 0.3)\n .rotate(BoneName.PELVIS, 0.15, 0.6, 0)\n .rotate(BoneName.SPINE_LOWER, 0.2, 0.5, 0)\n .rotate(BoneName.SPINE_UPPER, 0.25, 0.4, -0.2)\n .rotate(BoneName.KNEE_L, -0.4, 0, 0)\n .rotate(BoneName.KNEE_R, -0.35, 0, 0)\n .position(BoneName.PELVIS, 0, -0.1, 0.05)\n .build()\n // Frame 4: Hold\n .keyframe(0.5, \"linear\")\n .rotate(BoneName.SHOULDER_L, -0.1, 1.0, -0.6)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.7)\n .rotate(BoneName.SHOULDER_R, 0.1, -0.8, 0.7)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.4)\n .rotate(BoneName.PELVIS, 0.15, 0.6, 0)\n .rotate(BoneName.SPINE_LOWER, 0.2, 0.5, 0)\n .rotate(BoneName.SPINE_UPPER, 0.25, 0.4, -0.2)\n .rotate(BoneName.KNEE_L, -0.4, 0, 0)\n .rotate(BoneName.KNEE_R, -0.35, 0, 0)\n .position(BoneName.PELVIS, 0, -0.1, 0.05)\n .build()\n .build();\n\n/**\n * Counter attack animation (반격 - Bangyeok)\n *\n * Parry and counter technique from Hapkido.\n *\n * Animation phases:\n * 1. Parry (0.0s-0.1s): Deflect incoming attack\n * 2. Redirect (0.1s-0.18s): Guide opponent's momentum\n * 3. Counter (0.18s-0.28s): Strike to vulnerable point\n * 4. Recovery (0.28s-0.4s): Return to guard\n *\n * Duration: 400ms\n *\n * @korean 반격애니메이션\n */\nexport const COUNTER_ATTACK_ANIMATION = AnimationBuilder.create(\n \"counter_attack\",\n)\n .withKoreanName(\"반격\")\n .withDuration(0.4)\n .withType(\"attack\")\n // Frame 1: Parry\n .keyframe(0.1, \"ease-out\")\n .rotate(BoneName.SHOULDER_L, 0.2, 0.5, -0.8) // Parry hand\n .rotate(BoneName.ELBOW_L, 0, 0, -0.8)\n .rotate(BoneName.WRIST_L, 0, 0.4, 0)\n .rotate(BoneName.SHOULDER_R, 0, 0, 0.5) // Ready to strike\n .rotate(BoneName.ELBOW_R, 0, 0, 1.5)\n .rotate(BoneName.PELVIS, 0, -0.3, 0) // Turn away from attack\n .rotate(BoneName.SPINE_LOWER, 0, -0.25, 0)\n .rotate(BoneName.SPINE_UPPER, 0, -0.2, 0)\n .rotate(BoneName.KNEE_L, -0.3, 0, 0)\n .rotate(BoneName.KNEE_R, -0.25, 0, 0)\n .position(BoneName.PELVIS, 0, -0.02, -0.1) // Slight retreat\n .build()\n // Frame 2: Redirect\n .keyframe(0.18, \"linear\")\n .rotate(BoneName.SHOULDER_L, 0.3, 0.8, -0.5) // Guide opponent\n .rotate(BoneName.ELBOW_L, 0, 0, -1.0)\n .rotate(BoneName.WRIST_L, 0, 0.3, -0.2)\n .rotate(BoneName.SHOULDER_R, 0.2, 0, 0) // Chamber counter\n .rotate(BoneName.ELBOW_R, 0, 0, 1.8)\n .rotate(BoneName.PELVIS, 0, 0.2, 0) // Begin rotation into counter\n .rotate(BoneName.SPINE_LOWER, 0, 0.15, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0.1, 0)\n .position(BoneName.PELVIS, 0, -0.01, 0)\n .build()\n // Frame 3: Counter strike\n .keyframe(0.28, \"ease-out\")\n .rotate(BoneName.SHOULDER_L, 0.1, 0.5, -0.3) // Maintain control\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2)\n .rotate(BoneName.SHOULDER_R, -0.5, 0, 0.4) // Drive counter\n .rotate(BoneName.ELBOW_R, 0, 0, 0.3)\n .rotate(BoneName.WRIST_R, 0, 0, -0.2)\n .rotate(BoneName.PELVIS, 0, 0.5, 0) // Full rotation into strike\n .rotate(BoneName.SPINE_LOWER, 0, 0.4, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0.3, 0)\n .rotate(BoneName.KNEE_L, -0.25, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .position(BoneName.PELVIS, 0, 0, 0.1)\n .build()\n // Frame 4: Recovery\n .keyframe(0.4, \"ease-in\")\n .rotate(BoneName.SHOULDER_L, -0.6, 0.4, 0.3)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.8)\n .rotate(BoneName.SHOULDER_R, -0.6, -0.4, -0.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.8)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .position(BoneName.PELVIS, 0, 0, 0)\n .build()\n .build();\n\n/**\n * Palm strike animation (장권 - Janggwon)\n *\n * Open palm heel strike from Taekwondo.\n *\n * Animation phases:\n * 1. Chamber (0.0s-0.08s): Palm pulls back\n * 2. Drive (0.08s-0.15s): Hip rotation and palm drives forward\n * 3. Impact (0.15s-0.18s): Maximum extension\n * 4. Recovery (0.18s-0.3s): Return to guard\n *\n * Duration: 300ms\n *\n * @korean 장권애니메이션\n */\nexport const PALM_STRIKE_ANIMATION = AnimationBuilder.create(\"palm_strike\")\n .withKoreanName(\"장권\")\n .withDuration(0.3)\n .withType(\"attack\")\n // Frame 1: Chamber\n .keyframe(0.08, \"linear\")\n .rotate(BoneName.SHOULDER_R, 0.2, 0, -0.3) // Pull back\n .rotate(BoneName.ELBOW_R, 0, 0, 1.6)\n .rotate(BoneName.WRIST_R, -0.8, 0, 0) // Palm faces forward\n .rotate(BoneName.SPINE_UPPER, 0, -0.2, 0) // Wind up\n .rotate(BoneName.SPINE_MIDDLE, 0, -0.15, 0)\n .rotate(BoneName.PELVIS, 0, -0.1, 0)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2) // Guard\n .build()\n // Frame 2: Drive\n .keyframe(0.15, \"ease-out\")\n .rotate(BoneName.SHOULDER_R, -0.5, 0, 0.4) // Drive forward\n .rotate(BoneName.ELBOW_R, 0, 0, 0.3) // Extend\n .rotate(BoneName.WRIST_R, -0.6, 0, 0) // Heel of palm forward\n .rotate(BoneName.SPINE_UPPER, 0, 0.3, 0) // Torso rotates\n .rotate(BoneName.SPINE_MIDDLE, 0, 0.25, 0)\n .rotate(BoneName.PELVIS, 0, 0.2, 0)\n .build()\n // Frame 3: Impact\n .keyframe(0.18, \"linear\")\n .rotate(BoneName.SHOULDER_R, -0.7, 0, 0.5) // Full extension\n .rotate(BoneName.ELBOW_R, 0, 0, 0.05)\n .rotate(BoneName.WRIST_R, -0.5, 0, 0.1)\n .rotate(BoneName.SPINE_UPPER, 0, 0.4, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0, 0.35, 0)\n .rotate(BoneName.PELVIS, 0, 0.25, 0)\n .build()\n // Frame 4: Recovery\n .keyframe(0.3, \"ease-in\")\n .rotate(BoneName.SHOULDER_R, -0.6, -0.4, -0.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.8)\n .rotate(BoneName.WRIST_R, 0, 0, 0)\n .rotate(BoneName.SHOULDER_L, -0.6, 0.4, 0.3)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.8)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .build()\n .build();\n\n/**\n * Hook punch animation (후크 - 횡타)\n *\n * Circular punch targeting the side of the head. Power technique.\n *\n * Animation phases:\n * 1. Wind-up (0.0s): Arm pulls to side\n * 2. Arc swing (0.1s): Arm swings in horizontal arc\n * 3. Impact (0.15s): Fist connects at temple level\n * 4. Recovery (0.3s): Return to guard\n *\n * Duration: 300ms\n *\n * @korean 후크애니메이션\n */\nexport const HOOK_ANIMATION = AnimationBuilder.create(\"hook\")\n .withKoreanName(\"후크\")\n .withDuration(0.3)\n .withType(\"attack\")\n // Wind-up: arm pulls back and to side\n .keyframe(0.0, \"linear\")\n .rotate(BoneName.SHOULDER_R, 0.1, -0.6, -0.5) // Shoulder rotated out\n .rotate(BoneName.ELBOW_R, 0, 0, 1.57) // 90° bend\n .rotate(BoneName.SPINE_UPPER, 0, -0.3, 0) // Torso twisted back\n .rotate(BoneName.PELVIS, 0, -0.2, 0) // Hip loaded\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2) // Guard\n .build()\n // Arc swing: horizontal sweep\n .keyframe(0.1, \"ease-out\")\n .rotate(BoneName.SHOULDER_R, 0, 0.4, 0.3) // Shoulder drives across\n .rotate(BoneName.ELBOW_R, 0, 0, 1.4) // Elbow stays bent\n .rotate(BoneName.SPINE_UPPER, 0, 0.4, 0) // Torso rotates into punch\n .rotate(BoneName.SPINE_MIDDLE, 0, 0.3, 0)\n .rotate(BoneName.PELVIS, 0, 0.25, 0) // Hip rotation for power\n .build()\n // Impact: full rotation\n .keyframe(0.15, \"linear\")\n .rotate(BoneName.SHOULDER_R, -0.1, 0.6, 0.4) // Full horizontal\n .rotate(BoneName.ELBOW_R, 0, 0, 1.35) // Elbow locked at angle\n .rotate(BoneName.WRIST_R, 0, 0.2, 0) // Wrist aligned\n .rotate(BoneName.SPINE_UPPER, 0, 0.5, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0, 0.4, 0)\n .rotate(BoneName.PELVIS, 0, 0.35, 0)\n .build()\n // Recovery: return to guard\n .keyframe(0.3, \"ease-in\")\n .rotate(BoneName.SHOULDER_R, -0.6, -0.4, -0.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.8)\n .rotate(BoneName.SHOULDER_L, -0.6, 0.4, 0.3)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.8)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .build()\n .build();\n\n/**\n * Low kick animation (하단차기 - 낮은차기)\n *\n * Low sweeping kick targeting opponent's thighs or calves.\n * Used to destabilize and damage legs.\n *\n * Animation phases:\n * 1. Chamber (0.0s): Small knee lift\n * 2. Swing (0.12s): Leg sweeps low horizontally\n * 3. Impact (0.18s): Shin connects at thigh height\n * 4. Recovery (0.35s): Return to stance\n *\n * Duration: 350ms\n *\n * @korean 하단차기애니메이션\n */\nexport const LOW_KICK_ANIMATION = AnimationBuilder.create(\"low_kick\")\n .withKoreanName(\"하단차기\")\n .withDuration(0.35)\n .withType(\"attack\")\n // Chamber: small lift\n .keyframe(0.0, \"linear\")\n .rotate(BoneName.HIP_R, 0.5, 0, 0.3) // Low hip flexion\n .rotate(BoneName.KNEE_R, -0.8, 0, 0) // Knee bent\n .rotate(BoneName.KNEE_L, -0.2, 0, 0) // Support knee bent\n .rotate(BoneName.PELVIS, 0, -0.2, 0) // Slight turn\n .rotate(BoneName.SHOULDER_L, -0.6, 0.4, 0.3) // High guard\n .rotate(BoneName.ELBOW_L, 0, 0, -1.6)\n .build()\n // Swing: low horizontal sweep\n .keyframe(0.12, \"ease-out\")\n .rotate(BoneName.HIP_R, 0.4, 0, 1.2) // Hip rotates out\n .rotate(BoneName.KNEE_R, -0.3, 0, 0) // Leg extends\n .rotate(BoneName.FOOT_R, 0.2, 0, 0.2) // Ankle pointed\n .rotate(BoneName.PELVIS, 0, -0.8, 0) // Full hip rotation\n .rotate(BoneName.SPINE_UPPER, 0, 0.4, 0) // Counter-rotate\n .rotate(BoneName.KNEE_L, -0.4, 0, 0) // Lower for stability\n .build()\n // Impact: shin at thigh height\n .keyframe(0.18, \"linear\")\n .rotate(BoneName.HIP_R, 0.3, 0, 1.5) // Full rotation\n .rotate(BoneName.KNEE_R, -0.15, 0, 0) // Nearly straight\n .rotate(BoneName.FOOT_R, 0.3, 0, 0.3)\n .rotate(BoneName.PELVIS, 0, -1.2, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0.6, 0)\n .build()\n // Recovery: return to stance\n .keyframe(0.35, \"ease-in\")\n .rotate(BoneName.HIP_R, 0, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.FOOT_R, 0, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.SHOULDER_R, -0.6, -0.4, -0.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.8)\n .build()\n .build();\n\n/**\n * Slam animation (슬램 - 내던지기)\n *\n * Powerful lifting and slamming throw. High damage grappling technique.\n *\n * Animation phases:\n * 1. Clinch (0.0s): Grab and secure opponent\n * 2. Lift (0.2s): Hoist opponent up\n * 3. Slam (0.35s): Drive opponent down\n * 4. Recovery (0.5s): Return to stance\n *\n * Duration: 500ms\n *\n * @korean 슬램애니메이션\n */\nexport const SLAM_ANIMATION = AnimationBuilder.create(\"slam\")\n .withKoreanName(\"슬램\")\n .withDuration(0.5)\n .withType(\"attack\")\n // Clinch: grab opponent\n .keyframe(0.0, \"linear\")\n .rotate(BoneName.SHOULDER_L, 0.6, 0.4, -0.5) // Arms wrap around\n .rotate(BoneName.ELBOW_L, 0, 0, -1.3)\n .rotate(BoneName.SHOULDER_R, 0.6, -0.4, 0.5)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.3)\n .rotate(BoneName.KNEE_L, -0.4, 0, 0) // Deep stance\n .rotate(BoneName.KNEE_R, -0.4, 0, 0)\n .rotate(BoneName.PELVIS, 0.2, 0, 0) // Lean in\n .build()\n // Lift: hoist up\n .keyframe(0.2, \"ease-out\")\n .rotate(BoneName.SHOULDER_L, 0.9, 0.2, -0.3) // Arms lift high\n .rotate(BoneName.ELBOW_L, 0, 0, -0.8)\n .rotate(BoneName.SHOULDER_R, 0.9, -0.2, 0.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 0.8)\n .rotate(BoneName.KNEE_L, -0.1, 0, 0) // Standing tall\n .rotate(BoneName.KNEE_R, -0.1, 0, 0)\n .rotate(BoneName.PELVIS, -0.3, 0, 0) // Lean back\n .rotate(BoneName.SPINE_UPPER, -0.2, 0, 0) // Arched back\n .position(BoneName.PELVIS, 0, 0.1, 0) // Slight rise\n .build()\n // Slam: drive down\n .keyframe(0.35, \"ease-in\")\n .rotate(BoneName.SHOULDER_L, 0.3, 0.3, -0.6) // Arms drive down\n .rotate(BoneName.ELBOW_L, 0, 0, -1.4)\n .rotate(BoneName.SHOULDER_R, 0.3, -0.3, 0.6)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.4)\n .rotate(BoneName.KNEE_L, -0.6, 0, 0) // Deep squat\n .rotate(BoneName.KNEE_R, -0.6, 0, 0)\n .rotate(BoneName.PELVIS, 0.4, 0, 0) // Lean forward\n .rotate(BoneName.SPINE_UPPER, 0.3, 0, 0) // Forward bend\n .rotate(BoneName.SPINE_MIDDLE, 0.2, 0, 0)\n .position(BoneName.PELVIS, 0, -0.15, 0.2) // Low position\n .build()\n // Recovery\n .keyframe(0.5, \"ease-in\")\n .rotate(BoneName.SHOULDER_L, -0.6, 0.4, 0.3)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.8)\n .rotate(BoneName.SHOULDER_R, -0.6, -0.4, -0.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.8)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0, 0, 0)\n .position(BoneName.PELVIS, 0, 0, 0)\n .build()\n .build();\n\n/**\n * Wrist lock animation (손목꺾기 - 손목관절기)\n *\n * Joint lock targeting the wrist. Painful control technique.\n *\n * Animation phases:\n * 1. Grab (0.0s): Secure opponent's wrist\n * 2. Control (0.15s): Two-hand grip\n * 3. Lock (0.3s): Apply rotational pressure\n * 4. Hold (0.4s): Maintain lock position\n *\n * Duration: 400ms\n *\n * @korean 손목꺾기애니메이션\n */\nexport const WRIST_LOCK_ANIMATION = AnimationBuilder.create(\"wrist_lock\")\n .withKoreanName(\"손목꺾기\")\n .withDuration(0.4)\n .withType(\"attack\")\n // Grab: secure wrist\n .keyframe(0.0, \"linear\")\n .rotate(BoneName.SHOULDER_R, 0.4, 0, 0.2) // Reach forward\n .rotate(BoneName.ELBOW_R, 0, 0, 0.6) // Arm extended\n .rotate(BoneName.WRIST_R, 0, -0.3, 0) // Palm faces opponent\n .rotate(BoneName.SHOULDER_L, 0.3, 0.2, -0.1) // Support hand\n .rotate(BoneName.ELBOW_L, 0, 0, -0.8)\n .rotate(BoneName.KNEE_L, -0.3, 0, 0) // Stable stance\n .rotate(BoneName.KNEE_R, -0.3, 0, 0)\n .build()\n // Control: two-hand grip\n .keyframe(0.15, \"ease-out\")\n .rotate(BoneName.SHOULDER_R, 0.2, 0.3, 0.4) // Hands come together\n .rotate(BoneName.ELBOW_R, 0, 0, 1.0)\n .rotate(BoneName.WRIST_R, 0.3, -0.4, 0.2) // Grip position\n .rotate(BoneName.SHOULDER_L, 0.3, 0.4, -0.3) // Both hands on wrist\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2)\n .rotate(BoneName.WRIST_L, -0.2, 0.3, 0)\n .rotate(BoneName.PELVIS, 0, 0.2, 0) // Body turns\n .rotate(BoneName.SPINE_UPPER, 0, 0.15, 0)\n .build()\n // Lock: apply pressure\n .keyframe(0.3, \"ease-in\")\n .rotate(BoneName.SHOULDER_R, -0.1, 0.5, 0.6) // Rotate wrist down\n .rotate(BoneName.ELBOW_R, 0, 0, 1.3)\n .rotate(BoneName.WRIST_R, 0.5, -0.5, 0.4) // Twist\n .rotate(BoneName.SHOULDER_L, 0.1, 0.6, -0.4) // Counter-pressure\n .rotate(BoneName.ELBOW_L, 0, 0, -1.4)\n .rotate(BoneName.WRIST_L, -0.3, 0.4, -0.2)\n .rotate(BoneName.PELVIS, 0, 0.4, 0) // Body supports lock\n .rotate(BoneName.SPINE_UPPER, 0.1, 0.3, 0) // Lean in\n .rotate(BoneName.KNEE_L, -0.4, 0, 0) // Lower for control\n .build()\n // Hold: maintain position\n .keyframe(0.4, \"linear\")\n .rotate(BoneName.SHOULDER_R, -0.1, 0.5, 0.6)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.3)\n .rotate(BoneName.WRIST_R, 0.5, -0.5, 0.4)\n .rotate(BoneName.SHOULDER_L, 0.1, 0.6, -0.4)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.4)\n .rotate(BoneName.WRIST_L, -0.3, 0.4, -0.2)\n .rotate(BoneName.PELVIS, 0, 0.4, 0)\n .rotate(BoneName.SPINE_UPPER, 0.1, 0.3, 0)\n .rotate(BoneName.KNEE_L, -0.4, 0, 0)\n .build()\n .build();\n\n/**\n * Arm bar animation (팔꺾기 - 팔관절기)\n *\n * Arm lock submission technique. Hyperextends the elbow.\n *\n * Animation phases:\n * 1. Grab (0.0s): Secure opponent's arm\n * 2. Control (0.2s): Pull arm across body\n * 3. Drop (0.35s): Go to ground position\n * 4. Lock (0.5s): Apply elbow pressure\n *\n * Duration: 500ms\n *\n * @korean 팔꺾기애니메이션\n */\nexport const ARM_BAR_ANIMATION = AnimationBuilder.create(\"arm_bar\")\n .withKoreanName(\"팔꺾기\")\n .withDuration(0.5)\n .withType(\"attack\")\n // Grab: secure arm\n .keyframe(0.0, \"linear\")\n .rotate(BoneName.SHOULDER_R, 0.5, 0.3, 0.3) // Reach for arm\n .rotate(BoneName.ELBOW_R, 0, 0, 0.8)\n .rotate(BoneName.SHOULDER_L, 0.4, -0.2, -0.2) // Support hand\n .rotate(BoneName.ELBOW_L, 0, 0, -0.9)\n .rotate(BoneName.KNEE_L, -0.3, 0, 0)\n .rotate(BoneName.KNEE_R, -0.3, 0, 0)\n .build()\n // Control: pull across\n .keyframe(0.2, \"ease-out\")\n .rotate(BoneName.SHOULDER_R, 0.2, 0.6, 0.5) // Arms wrap arm\n .rotate(BoneName.ELBOW_R, 0, 0, 1.4)\n .rotate(BoneName.SHOULDER_L, 0.3, 0.5, -0.4)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.3)\n .rotate(BoneName.PELVIS, 0.2, 0.5, 0) // Turn body\n .rotate(BoneName.SPINE_UPPER, 0.1, 0.4, 0)\n .build()\n // Drop: go to ground\n .keyframe(0.35, \"ease-in\")\n .rotate(BoneName.SHOULDER_R, -0.2, 0.8, 0.7)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.5)\n .rotate(BoneName.SHOULDER_L, 0.1, 0.7, -0.5)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.5)\n .rotate(BoneName.PELVIS, 0.8, 0.3, 0) // Lean back for drop\n .rotate(BoneName.SPINE_UPPER, 0.6, 0.2, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0.4, 0.1, 0)\n .rotate(BoneName.HIP_R, 1.2, 0, 0.3) // Legs go up\n .rotate(BoneName.KNEE_R, -0.5, 0, 0)\n .rotate(BoneName.HIP_L, 1.0, 0, -0.2)\n .rotate(BoneName.KNEE_L, -0.4, 0, 0)\n .position(BoneName.PELVIS, 0, -0.3, 0) // Lower position\n .build()\n // Lock: apply pressure\n .keyframe(0.5, \"linear\")\n .rotate(BoneName.SHOULDER_R, -0.3, 0.9, 0.8)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.6)\n .rotate(BoneName.SHOULDER_L, 0, 0.8, -0.6)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.6)\n .rotate(BoneName.PELVIS, 1.0, 0.2, 0) // Full recline\n .rotate(BoneName.SPINE_UPPER, 0.7, 0.15, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0.5, 0.1, 0)\n .rotate(BoneName.HIP_R, 1.4, 0, 0.4) // Legs over opponent\n .rotate(BoneName.KNEE_R, -0.3, 0, 0)\n .rotate(BoneName.HIP_L, 1.2, 0, -0.3)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .position(BoneName.PELVIS, 0, -0.4, -0.1) // Ground position\n .build()\n .build();\n\n/**\n * Counter strike animation (반격 - 반격타격)\n *\n * Quick counter-attack after parrying. Exploits opponent's opening.\n *\n * Animation phases:\n * 1. Parry (0.0s): Deflect incoming attack\n * 2. Open (0.08s): Create opening\n * 3. Strike (0.15s): Fast counter punch\n * 4. Recovery (0.25s): Return to guard\n *\n * Duration: 250ms\n *\n * @korean 반격애니메이션\n */\nexport const COUNTER_STRIKE_ANIMATION = AnimationBuilder.create(\n \"counter_strike\",\n)\n .withKoreanName(\"반격\")\n .withDuration(0.25)\n .withType(\"attack\")\n // Parry: deflect\n .keyframe(0.0, \"linear\")\n .rotate(BoneName.SHOULDER_L, 0.2, 0.5, -0.6) // Parrying arm\n .rotate(BoneName.ELBOW_L, 0, 0, -0.9)\n .rotate(BoneName.WRIST_L, 0, 0.3, 0) // Palm out\n .rotate(BoneName.SHOULDER_R, 0.1, 0, -0.2) // Counter arm ready\n .rotate(BoneName.ELBOW_R, 0, 0, 1.5)\n .rotate(BoneName.PELVIS, 0, -0.2, 0) // Slight turn\n .rotate(BoneName.KNEE_L, -0.25, 0, 0)\n .rotate(BoneName.KNEE_R, -0.3, 0, 0)\n .build()\n // Open: create gap\n .keyframe(0.08, \"ease-out\")\n .rotate(BoneName.SHOULDER_L, 0.3, 0.7, -0.5) // Push away\n .rotate(BoneName.ELBOW_L, 0, 0, -0.7)\n .rotate(BoneName.SHOULDER_R, 0.2, 0, -0.3) // Load counter\n .rotate(BoneName.ELBOW_R, 0, 0, 1.6)\n .rotate(BoneName.SPINE_UPPER, 0, -0.2, 0)\n .rotate(BoneName.PELVIS, 0, -0.15, 0)\n .build()\n // Strike: counter punch\n .keyframe(0.15, \"ease-out\")\n .rotate(BoneName.SHOULDER_R, -0.6, 0, 0.4) // Fast extension\n .rotate(BoneName.ELBOW_R, 0, 0, 0.1) // Full extend\n .rotate(BoneName.WRIST_R, 0, 0, -0.2)\n .rotate(BoneName.SHOULDER_L, 0.1, 0.3, -0.4) // Guard returns\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2)\n .rotate(BoneName.SPINE_UPPER, 0, 0.35, 0) // Torso rotates\n .rotate(BoneName.SPINE_MIDDLE, 0, 0.25, 0)\n .rotate(BoneName.PELVIS, 0, 0.2, 0)\n .build()\n // Recovery: guard\n .keyframe(0.25, \"ease-in\")\n .rotate(BoneName.SHOULDER_R, -0.6, -0.4, -0.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.8)\n .rotate(BoneName.SHOULDER_L, -0.6, 0.4, 0.3)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.8)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.WRIST_R, 0, 0, 0)\n .build()\n .build();\n\n/**\n * All skeletal animations mapped by name\n *\n * Includes attack, defense, movement, and idle animations.\n *\n * @korean 모든골격애니메이션\n */\nexport const ATTACK_ANIMATIONS = new Map<string, SkeletalAnimation>([\n [\"jab\", JAB_ANIMATION],\n [\"cross\", CROSS_ANIMATION],\n [\"hook\", HOOK_ANIMATION],\n [\"front_kick\", FRONT_KICK_ANIMATION],\n [\"roundhouse_kick\", ROUNDHOUSE_KICK_ANIMATION],\n [\"side_kick\", SIDE_KICK_ANIMATION],\n [\"axe_kick\", AXE_KICK_ANIMATION],\n [\"back_kick\", BACK_KICK_ANIMATION],\n [\"tornado_kick\", TORNADO_KICK_ANIMATION],\n [\"jumping_kick\", JUMPING_KICK_ANIMATION],\n [\"low_kick\", LOW_KICK_ANIMATION],\n [\"elbow_strike\", ELBOW_STRIKE_ANIMATION],\n [\"elbow_uppercut\", ELBOW_UPPERCUT_ANIMATION],\n [\"knee_strike\", KNEE_STRIKE_ANIMATION],\n [\"block\", BLOCK_ANIMATION],\n [\"sweep\", SWEEP_ANIMATION],\n [\"throw\", THROW_ANIMATION],\n [\"slam\", SLAM_ANIMATION],\n [\"grapple\", GRAPPLE_ANIMATION],\n [\"wrist_lock\", WRIST_LOCK_ANIMATION],\n [\"arm_bar\", ARM_BAR_ANIMATION],\n [\"counter_attack\", COUNTER_ATTACK_ANIMATION],\n [\"counter_strike\", COUNTER_STRIKE_ANIMATION],\n [\"palm_strike\", PALM_STRIKE_ANIMATION],\n [\"walk\", WALK_ANIMATION],\n [\"idle_stance\", IDLE_STANCE_ANIMATION],\n [\"forward_dash\", FORWARD_DASH_ANIMATION],\n [\"backward_retreat\", BACKWARD_RETREAT_ANIMATION],\n [\"side_step\", SIDE_STEP_ANIMATION],\n]);\n\n/**\n * Get animation by name\n *\n * @param name - Animation name\n * @returns Skeletal animation or undefined\n *\n * @korean 애니메이션가져오기\n * @deprecated Use getAnimation from AnimationRegistry instead for full animation support\n */\nexport const getAnimation = (name: string): SkeletalAnimation | undefined => {\n return ATTACK_ANIMATIONS.get(name);\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"AttackAnimations.js","names":[],"sources":["../../../../src/systems/animation/catalogs/AttackAnimations.ts"],"sourcesContent":["/**\n * Korean martial arts attack animations with proper guard positions (막기자세)\n *\n * All animations implement proper Korean martial arts defensive positioning:\n * - Start from guard (준비자세)\n * - Maintain non-striking hand guard during technique (방어 유지)\n * - Return to guard after technique (복귀)\n *\n * @module systems/animation/AttackAnimations\n * @category Animation System\n * @korean 공격애니메이션\n */\n\nimport type { SkeletalAnimation } from \"@/types/skeletal\";\nimport { BoneName } from \"@/types/skeletal\";\nimport { AnimationBuilder } from \"../builders/AnimationBuilder\";\nimport {\n MartialArtsAnimationBuilder,\n TECHNIQUE_TIMING,\n} from \"../builders/MartialArtsAnimationBuilder\";\n\n/**\n * Jab animation with guard (잽 - 막기자세)\n *\n * Fast straight punch with proper middle guard maintained.\n * Traditional Taekwondo 정권지르기 with defensive posture.\n *\n * Guard cycle:\n * - Start: MIDDLE_GUARD both hands (중단막기)\n * - During: MIDDLE_GUARD left hand (방어 유지)\n * - End: MIDDLE_GUARD both hands (복귀)\n *\n * Duration: 550ms (TECHNIQUE_TIMING.FAST)\n *\n * @korean 잽애니메이션\n */\nexport const JAB_ANIMATION: SkeletalAnimation =\n MartialArtsAnimationBuilder.create(\"jab\", \"잽\")\n .asAttack(TECHNIQUE_TIMING.FAST.total)\n // Start in middle guard\n .at(0.0)\n .withGuard(\"MIDDLE_GUARD\")\n .done<MartialArtsAnimationBuilder>()\n // Wind-up: right arm prepares, left maintains guard (준비)\n .at(TECHNIQUE_TIMING.FAST.chamber * 0.5)\n .rotate(BoneName.SHOULDER_R, 0.3, 0, -0.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.8)\n .rotate(BoneName.SPINE_UPPER, 0, -0.15, 0)\n .withGuard(\"MIDDLE_GUARD\", \"left\")\n .done<MartialArtsAnimationBuilder>()\n // Extension: arm snaps forward (실행)\n .at(TECHNIQUE_TIMING.FAST.chamber)\n .rotate(BoneName.SHOULDER_R, -0.5, 0, 0.4)\n .rotate(BoneName.ELBOW_R, 0, 0, 0.3)\n .rotate(BoneName.SPINE_UPPER, 0, 0.25, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0, 0.15, 0)\n .rotate(BoneName.PELVIS, 0, 0.1, 0)\n .withGuard(\"MIDDLE_GUARD\", \"left\")\n .done<MartialArtsAnimationBuilder>()\n // Full extension with peak hold (정점)\n .at(TECHNIQUE_TIMING.FAST.chamber + TECHNIQUE_TIMING.FAST.extend)\n .rotate(BoneName.SHOULDER_R, -0.7, 0, 0.5)\n .rotate(BoneName.ELBOW_R, 0, 0, 0.05)\n .rotate(BoneName.WRIST_R, 0, 0, -0.2)\n .rotate(BoneName.SPINE_UPPER, 0, 0.35, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0, 0.25, 0)\n .rotate(BoneName.PELVIS, 0, 0.2, 0)\n .withGuard(\"MIDDLE_GUARD\", \"left\")\n .done<MartialArtsAnimationBuilder>()\n // Peak hold for impact clarity\n .at(\n TECHNIQUE_TIMING.FAST.chamber +\n TECHNIQUE_TIMING.FAST.extend +\n TECHNIQUE_TIMING.FAST.peak,\n )\n .rotate(BoneName.SHOULDER_R, -0.7, 0, 0.5)\n .rotate(BoneName.ELBOW_R, 0, 0, 0.05)\n .rotate(BoneName.WRIST_R, 0, 0, -0.2)\n .withGuard(\"MIDDLE_GUARD\", \"left\")\n .done<MartialArtsAnimationBuilder>()\n // Retraction (회수)\n .at(\n TECHNIQUE_TIMING.FAST.chamber +\n TECHNIQUE_TIMING.FAST.extend +\n TECHNIQUE_TIMING.FAST.peak +\n TECHNIQUE_TIMING.FAST.retract,\n )\n .rotate(BoneName.SHOULDER_R, 0.1, 0, -0.2)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.2)\n .rotate(BoneName.SPINE_UPPER, 0, 0.05, 0)\n .withGuard(\"MIDDLE_GUARD\", \"left\")\n .done<MartialArtsAnimationBuilder>()\n // Recovery: return to guard (복귀)\n .at(TECHNIQUE_TIMING.FAST.total)\n .withGuard(\"MIDDLE_GUARD\")\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.WRIST_R, 0, 0, 0)\n .done<MartialArtsAnimationBuilder>()\n .build();\n\n/**\n * Cross punch with guard (크로스 - 막기자세)\n *\n * Power punch with proper middle guard maintained.\n * Traditional Taekwondo 역권지르기 with defensive posture.\n *\n * Guard cycle:\n * - Start: MIDDLE_GUARD both hands (중단막기)\n * - During: MIDDLE_GUARD right hand (방어 유지)\n * - End: MIDDLE_GUARD both hands (복귀)\n *\n * Duration: 600ms (TECHNIQUE_TIMING.FAST_MEDIUM)\n *\n * @korean 크로스펀치애니메이션\n */\nexport const CROSS_ANIMATION: SkeletalAnimation =\n MartialArtsAnimationBuilder.create(\"cross\", \"크로스\")\n .asAttack(TECHNIQUE_TIMING.FAST_MEDIUM.total)\n // Start in middle guard\n .at(0.0)\n .withGuard(\"MIDDLE_GUARD\")\n .done<MartialArtsAnimationBuilder>()\n // Wind-up: left arm prepares, right maintains guard (준비)\n .at(TECHNIQUE_TIMING.FAST_MEDIUM.chamber * 0.6)\n .rotate(BoneName.SHOULDER_L, 0.2, 0, 0.3)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.8)\n .rotate(BoneName.SPINE_UPPER, 0, -0.2, 0)\n .rotate(BoneName.PELVIS, 0, -0.15, 0)\n .withGuard(\"MIDDLE_GUARD\", \"right\")\n .done<MartialArtsAnimationBuilder>()\n // Hip rotation begins\n .at(TECHNIQUE_TIMING.FAST_MEDIUM.chamber)\n .rotate(BoneName.PELVIS, 0, 0.15, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0.2, 0)\n .rotate(BoneName.HIP_R, 0, 0.1, 0)\n .withGuard(\"MIDDLE_GUARD\", \"right\")\n .done<MartialArtsAnimationBuilder>()\n // Extension: arm snaps forward (실행)\n .at(\n TECHNIQUE_TIMING.FAST_MEDIUM.chamber +\n TECHNIQUE_TIMING.FAST_MEDIUM.extend * 0.5,\n )\n .rotate(BoneName.SHOULDER_L, -0.5, 0, -0.4)\n .rotate(BoneName.ELBOW_L, 0, 0, -0.3)\n .rotate(BoneName.SPINE_UPPER, 0, 0.35, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0, 0.3, 0)\n .rotate(BoneName.PELVIS, 0, 0.25, 0)\n .withGuard(\"MIDDLE_GUARD\", \"right\")\n .done<MartialArtsAnimationBuilder>()\n // Full extension (정점)\n .at(\n TECHNIQUE_TIMING.FAST_MEDIUM.chamber +\n TECHNIQUE_TIMING.FAST_MEDIUM.extend,\n )\n .rotate(BoneName.SHOULDER_L, -0.7, 0, -0.5)\n .rotate(BoneName.ELBOW_L, 0, 0, -0.05)\n .rotate(BoneName.WRIST_L, 0, 0, 0.2)\n .rotate(BoneName.SPINE_UPPER, 0, 0.45, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0, 0.35, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0.25, 0)\n .rotate(BoneName.PELVIS, 0, 0.3, 0)\n .withGuard(\"MIDDLE_GUARD\", \"right\")\n .done<MartialArtsAnimationBuilder>()\n // Peak hold for impact clarity\n .at(\n TECHNIQUE_TIMING.FAST_MEDIUM.chamber +\n TECHNIQUE_TIMING.FAST_MEDIUM.extend +\n TECHNIQUE_TIMING.FAST_MEDIUM.peak,\n )\n .rotate(BoneName.SHOULDER_L, -0.7, 0, -0.5)\n .rotate(BoneName.ELBOW_L, 0, 0, -0.05)\n .rotate(BoneName.WRIST_L, 0, 0, 0.2)\n .withGuard(\"MIDDLE_GUARD\", \"right\")\n .done<MartialArtsAnimationBuilder>()\n // Retraction (회수)\n .at(\n TECHNIQUE_TIMING.FAST_MEDIUM.chamber +\n TECHNIQUE_TIMING.FAST_MEDIUM.extend +\n TECHNIQUE_TIMING.FAST_MEDIUM.peak +\n TECHNIQUE_TIMING.FAST_MEDIUM.retract,\n )\n .rotate(BoneName.SHOULDER_L, 0.1, 0, 0.2)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2)\n .rotate(BoneName.SPINE_UPPER, 0, 0.05, 0)\n .withGuard(\"MIDDLE_GUARD\", \"right\")\n .done<MartialArtsAnimationBuilder>()\n // Recovery: return to guard (복귀)\n .at(TECHNIQUE_TIMING.FAST_MEDIUM.total)\n .withGuard(\"MIDDLE_GUARD\")\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.WRIST_L, 0, 0, 0)\n .done<MartialArtsAnimationBuilder>()\n .build();\n\n/**\n * Front kick animation (앞차기) - ENHANCED\n *\n * Traditional Taekwondo front kick with knee lift, leg extension,\n * ankle dorsiflexion, support leg adjustments, and balance recovery.\n * Hands maintain guard position throughout for face protection.\n *\n * Animation phases:\n * 1. Chamber (0.0s-0.1s): Knee lifts to waist height, hands guard face\n * 2. Extension (0.1s-0.2s): Lower leg extends forward with ankle flexion\n * 3. Impact (0.2s): Maximum extension point with dorsiflexion\n * 4. Retraction (0.2s-0.35s): Leg returns to chamber\n * 5. Set down (0.35s-0.45s): Foot returns to ground with balance recovery\n * 6. Recovery shuffle (0.45s-0.55s): Return to fighting guard\n *\n * Duration: 550ms (enhanced with recovery)\n *\n * @korean 앞차기애니메이션향상\n */\nexport const FRONT_KICK_ANIMATION = AnimationBuilder.create(\"front_kick\")\n .withKoreanName(\"앞차기\")\n .withDuration(0.55)\n .withType(\"attack\")\n // Frame 1: Chamber - knee lifts, hands protect face\n // Hip flexion ~90° lifts thigh to horizontal, knee bent tight\n .keyframe(0.1, \"ease-out\")\n .rotate(BoneName.HIP_R, 1.57, 0, 0) // 90 degrees - thigh horizontal\n .rotate(BoneName.KNEE_R, -2.0, 0, 0) // Tight chamber\n .rotate(BoneName.KNEE_L, -0.25, 0, 0) // Support leg slightly bent\n .rotate(BoneName.FOOT_L, 0, 0, 0.05) // Slight outward pivot\n .rotate(BoneName.PELVIS, -0.1, 0, 0) // Tilts slightly back for balance\n .rotate(BoneName.SPINE_LOWER, -0.05, 0, 0) // Spine counters\n // HIGH GUARD - protect face during kick\n .rotate(BoneName.SHOULDER_L, -0.9, 0.3, 0.4) // Left hand high, near temple\n .rotate(BoneName.ELBOW_L, 0, 0, -1.6) // Tight bend\n .rotate(BoneName.SHOULDER_R, -0.9, -0.3, -0.4) // Right hand high, near temple\n .rotate(BoneName.ELBOW_R, 0, 0, 1.6) // Tight bend\n .build()\n // Frame 2: Extension - leg snaps forward, hands stay up\n // Knee extends while hip drives forward, creating reach\n .keyframe(0.2, \"ease-out\")\n .rotate(BoneName.HIP_R, 1.7, 0, 0) // Hip drives slightly higher for reach\n .rotate(BoneName.KNEE_R, 0.1, 0, 0) // Knee fully extends\n .rotate(BoneName.FOOT_R, 0.5, 0, 0) // Ball of foot strikes (dorsiflexion)\n .rotate(BoneName.KNEE_L, -0.35, 0, 0) // Support leg bends for balance\n .rotate(BoneName.FOOT_L, 0, 0, 0.08)\n .rotate(BoneName.PELVIS, 0.15, 0, 0) // Pelvis tilts forward to drive kick\n .rotate(BoneName.SPINE_LOWER, 0.1, 0, 0) // Spine drives forward\n .rotate(BoneName.SPINE_MIDDLE, 0.05, 0, 0)\n // Maintain high guard\n .rotate(BoneName.SHOULDER_L, -0.85, 0.25, 0.35)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.7)\n .rotate(BoneName.SHOULDER_R, -0.85, -0.25, -0.35)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.7)\n .build()\n // Frame 3: Retraction to chamber, guard stays up\n .keyframe(0.35, \"ease-in\")\n .rotate(BoneName.HIP_R, 1.57, 0, 0)\n .rotate(BoneName.KNEE_R, -2.0, 0, 0)\n .rotate(BoneName.FOOT_R, 0, 0, 0) // Foot relaxes\n .rotate(BoneName.KNEE_L, -0.25, 0, 0)\n .rotate(BoneName.FOOT_L, 0, 0, 0.05)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0, 0, 0)\n .rotate(BoneName.SHOULDER_L, -0.9, 0.3, 0.4)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.6)\n .rotate(BoneName.SHOULDER_R, -0.9, -0.3, -0.4)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.6)\n .build()\n // Frame 4: Set down, transition to fighting guard\n .keyframe(0.45, \"ease-in\")\n .rotate(BoneName.HIP_R, 0, 0, 0)\n .rotate(BoneName.KNEE_R, -0.15, 0, 0) // Slight bend on landing\n .rotate(BoneName.FOOT_R, 0, 0, 0)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.FOOT_L, 0, 0, 0.03)\n // Transition to fighting guard\n .rotate(BoneName.SHOULDER_L, -0.7, 0.35, 0.25)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.7)\n .rotate(BoneName.SHOULDER_R, -0.7, -0.35, -0.25)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.7)\n .build()\n // Frame 5: Balance recovery - fighting guard\n .keyframe(0.55, \"ease-in\")\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.FOOT_R, 0, 0, 0)\n .rotate(BoneName.FOOT_L, 0, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n // Return to standard fighting guard\n .rotate(BoneName.SHOULDER_L, -0.6, 0.4, 0.3)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.8)\n .rotate(BoneName.SHOULDER_R, -0.6, -0.4, -0.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.8)\n .build()\n .build();\n\n/**\n * Roundhouse kick animation (돌려차기) - ENHANCED\n *\n * Traditional Taekwondo roundhouse kick with hip rotation,\n * ankle flexion, support leg adjustments, and balance recovery.\n * Hands maintain high guard position throughout for face protection.\n *\n * Animation phases:\n * 1. Chamber (0.0s-0.1s): Knee lifts, hip begins rotation, hands guard face\n * 2. Rotation (0.1s-0.2s): Hip rotates 90 degrees\n * 3. Extension (0.2s-0.25s): Leg extends in arc with ankle flexion\n * 4. Impact (0.25s): Maximum extension with support leg adjustment\n * 5. Retraction (0.25s-0.4s): Return to chamber\n * 6. Set down (0.4s-0.5s): Foot to ground with balance recovery\n * 7. Recovery shuffle (0.5s-0.6s): Return to fighting guard\n *\n * Duration: 600ms (enhanced with recovery)\n *\n * @korean 돌려차기애니메이션향상\n */\nexport const ROUNDHOUSE_KICK_ANIMATION = AnimationBuilder.create(\n \"roundhouse_kick\",\n)\n .withKoreanName(\"돌려차기\")\n .withDuration(0.6)\n .withType(\"attack\")\n // Frame 1: Chamber with rotation start, hands protect face\n .keyframe(0.1, \"ease-out\")\n .rotate(BoneName.HIP_R, 1.2, 0, 0.8) // Right leg chambers\n .rotate(BoneName.KNEE_R, -1.5, 0, 0)\n .rotate(BoneName.PELVIS, 0, -0.5, 0) // Hips rotate\n .rotate(BoneName.SPINE_UPPER, 0, 0.3, 0) // Torso counter-rotates\n // HIGH GUARD - protect face during kick\n .rotate(BoneName.SHOULDER_L, -0.9, 0.3, 0.4)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.6)\n .rotate(BoneName.SHOULDER_R, -0.85, -0.25, -0.35)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.65)\n .build()\n // Frame 2: Full hip rotation, maintain guard\n .keyframe(0.2, \"ease-out\")\n .rotate(BoneName.HIP_R, 1.2, 0, 1.4)\n .rotate(BoneName.KNEE_R, -1.2, 0, 0)\n .rotate(BoneName.PELVIS, 0, -1.2, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0.6, 0)\n .rotate(BoneName.SHOULDER_L, -0.85, 0.25, 0.35)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.7)\n .rotate(BoneName.SHOULDER_R, -0.85, -0.25, -0.35)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.7)\n .build()\n // Frame 3: Extension and impact with ankle flexion\n .keyframe(0.25, \"linear\")\n .rotate(BoneName.HIP_R, 1.2, 0, 1.6) // Leg fully extends\n .rotate(BoneName.KNEE_R, -0.1, 0, 0)\n .rotate(BoneName.PELVIS, 0, -1.5, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0.8, 0)\n .rotate(BoneName.FOOT_R, 0.4, 0, 0.3) // Foot plantar flexion\n .rotate(BoneName.KNEE_L, -0.35, 0, 0) // Support leg micro-adjustment\n .rotate(BoneName.FOOT_L, 0, 0, -0.1) // Pivot for power\n // Maintain high guard at impact\n .rotate(BoneName.SHOULDER_L, -0.85, 0.25, 0.35)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.7)\n .rotate(BoneName.SHOULDER_R, -0.85, -0.25, -0.35)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.7)\n .position(BoneName.FOOT_R, 0.8, 0, 0) // Side strike\n .position(BoneName.PELVIS, 0, -0.02, 0) // Slight drop for power\n .build()\n // Frame 4: Retraction, guard remains up\n .keyframe(0.4, \"ease-in\")\n .rotate(BoneName.HIP_R, 1.2, 0, 0.8)\n .rotate(BoneName.KNEE_R, -1.5, 0, 0)\n .rotate(BoneName.FOOT_R, 0, 0, 0)\n .rotate(BoneName.PELVIS, 0, -0.3, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0.2, 0)\n .rotate(BoneName.KNEE_L, -0.25, 0, 0)\n .rotate(BoneName.FOOT_L, 0, 0, 0)\n .rotate(BoneName.SHOULDER_L, -0.9, 0.3, 0.4)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.6)\n .rotate(BoneName.SHOULDER_R, -0.9, -0.3, -0.4)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.6)\n .position(BoneName.FOOT_R, 0, 0, 0)\n .position(BoneName.PELVIS, 0, 0, 0)\n .build()\n // Frame 5: Set down, transition to fighting guard\n .keyframe(0.5, \"ease-in\")\n .rotate(BoneName.HIP_R, 0, 0, 0)\n .rotate(BoneName.KNEE_R, -0.15, 0, 0)\n .rotate(BoneName.FOOT_R, 0, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.FOOT_L, 0, 0, 0)\n // Transition to fighting guard\n .rotate(BoneName.SHOULDER_L, -0.7, 0.35, 0.25)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.7)\n .rotate(BoneName.SHOULDER_R, -0.7, -0.35, -0.25)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.7)\n .position(BoneName.PELVIS, 0, -0.01, 0)\n .build()\n // Frame 6: Recovery - fighting guard\n .keyframe(0.6, \"ease-in\")\n .rotate(BoneName.HIP_R, 0, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.FOOT_R, 0, 0, 0)\n .rotate(BoneName.FOOT_L, 0, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n // Return to standard fighting guard\n .rotate(BoneName.SHOULDER_L, -0.6, 0.4, 0.3)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.8)\n .rotate(BoneName.SHOULDER_R, -0.6, -0.4, -0.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.8)\n .position(BoneName.PELVIS, 0, 0, 0)\n .build()\n .build();\n\n/**\n * Block animation (막기)\n *\n * Traditional Taekwondo block with both arms raised.\n *\n * Animation phases:\n * 1. Raise (0.0s-0.1s): Both arms lift to blocking position\n * 2. Hold (0.1s-0.3s): Maintain block\n * 3. Lower (0.3s-0.4s): Return to guard\n *\n * Duration: 400ms\n *\n * @korean 막기애니메이션\n */\nexport const BLOCK_ANIMATION = AnimationBuilder.create(\"block\")\n .withKoreanName(\"막기\")\n .withDuration(0.4)\n .withType(\"defense\")\n .keyframe(0.08, \"ease-out\")\n .rotate(BoneName.SHOULDER_L, 0, 0, -1.3)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.6)\n .rotate(BoneName.SHOULDER_R, 0, 0, 1.1)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.3)\n .rotate(BoneName.KNEE_L, -0.35, 0, 0)\n .rotate(BoneName.KNEE_R, -0.35, 0, 0)\n .build()\n .keyframe(0.27, \"linear\")\n .rotate(BoneName.SHOULDER_L, 0, 0, -1.3)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.6)\n .rotate(BoneName.SHOULDER_R, 0, 0, 1.1)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.3)\n .rotate(BoneName.KNEE_L, -0.35, 0, 0)\n .rotate(BoneName.KNEE_R, -0.35, 0, 0)\n .build()\n .keyframe(0.35, \"ease-in\")\n .rotate(BoneName.SHOULDER_L, 0, 0, 0)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2)\n .rotate(BoneName.SHOULDER_R, 0, 0, 0)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.2)\n .rotate(BoneName.KNEE_L, 0, 0, 0)\n .rotate(BoneName.KNEE_R, 0, 0, 0)\n .build()\n .build();\n\n/**\n * Walking cycle animation (앞으로 걷기 - 보행 사이클)\n *\n * Natural walking gait with alternating leg movement. Includes hip swing,\n * knee bend during swing phase, foot placement, and pelvis tilt.\n *\n * Animation phases:\n * 1. Left foot forward (0.0s): Left leg extends, right leg pushes off\n * 2. Left mid-stance (0.2s): Left foot plants, right leg swings forward\n * 3. Right foot forward (0.4s): Right leg extends, left leg pushes off\n * 4. Right mid-stance (0.6s): Right foot plants, left leg swings forward\n *\n * Duration: 800ms (complete left-right step cycle)\n *\n * @korean 걷기애니메이션\n */\nexport const WALK_ANIMATION = AnimationBuilder.create(\"walk\")\n .withKoreanName(\"걷기\")\n .withDuration(0.8)\n .withType(\"movement\")\n .withLoop(true)\n .keyframe(0.0, \"ease-out\")\n .rotate(BoneName.PELVIS, 0.1, 0.05, 0)\n .rotate(BoneName.HIP_L, -0.3, 0, 0)\n .rotate(BoneName.KNEE_L, -0.1, 0, 0)\n .rotate(BoneName.FOOT_L, 0.1, 0, 0)\n .rotate(BoneName.HIP_R, 0.4, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.FOOT_R, -0.3, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.3, 0, 0)\n .rotate(BoneName.ELBOW_L, 0, 0, -0.3)\n .rotate(BoneName.SHOULDER_R, -0.4, 0, 0)\n .rotate(BoneName.ELBOW_R, 0, 0, 0.4)\n .rotate(BoneName.SPINE_LOWER, 0, -0.05, 0)\n .position(BoneName.PELVIS, 0, 0.02, 0)\n .build()\n .keyframe(0.2, \"linear\")\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.HIP_L, 0, 0, 0)\n .rotate(BoneName.KNEE_L, -0.15, 0, 0)\n .rotate(BoneName.FOOT_L, 0, 0, 0)\n .rotate(BoneName.HIP_R, -0.2, 0, 0)\n .rotate(BoneName.KNEE_R, -0.8, 0, 0)\n .rotate(BoneName.FOOT_R, 0.2, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0, 0, 0)\n .rotate(BoneName.ELBOW_L, 0, 0, -0.2)\n .rotate(BoneName.SHOULDER_R, -0.2, 0, 0)\n .rotate(BoneName.ELBOW_R, 0, 0, 0.3)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .position(BoneName.PELVIS, 0, -0.01, 0)\n .build()\n .keyframe(0.4, \"ease-out\")\n .rotate(BoneName.PELVIS, 0.1, -0.05, 0)\n .rotate(BoneName.HIP_R, -0.3, 0, 0)\n .rotate(BoneName.KNEE_R, -0.1, 0, 0)\n .rotate(BoneName.FOOT_R, 0.1, 0, 0)\n .rotate(BoneName.HIP_L, 0.4, 0, 0)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.FOOT_L, -0.3, 0, 0)\n .rotate(BoneName.SHOULDER_R, 0.3, 0, 0)\n .rotate(BoneName.ELBOW_R, 0, 0, 0.3)\n .rotate(BoneName.SHOULDER_L, -0.4, 0, 0)\n .rotate(BoneName.ELBOW_L, 0, 0, -0.4)\n .rotate(BoneName.SPINE_LOWER, 0, 0.05, 0)\n .position(BoneName.PELVIS, 0, 0.02, 0)\n .build()\n .keyframe(0.6, \"linear\")\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.HIP_R, 0, 0, 0)\n .rotate(BoneName.KNEE_R, -0.15, 0, 0)\n .rotate(BoneName.FOOT_R, 0, 0, 0)\n .rotate(BoneName.HIP_L, -0.2, 0, 0)\n .rotate(BoneName.KNEE_L, -0.8, 0, 0)\n .rotate(BoneName.FOOT_L, 0.2, 0, 0)\n .rotate(BoneName.SHOULDER_R, 0, 0, 0)\n .rotate(BoneName.ELBOW_R, 0, 0, 0.2)\n .rotate(BoneName.SHOULDER_L, -0.2, 0, 0)\n .rotate(BoneName.ELBOW_L, 0, 0, -0.3)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .position(BoneName.PELVIS, 0, -0.01, 0)\n .build()\n .keyframe(0.8, \"ease-in\")\n .rotate(BoneName.PELVIS, 0.1, 0.05, 0)\n .rotate(BoneName.HIP_L, -0.3, 0, 0)\n .rotate(BoneName.KNEE_L, -0.1, 0, 0)\n .rotate(BoneName.FOOT_L, 0.1, 0, 0)\n .rotate(BoneName.HIP_R, 0.4, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.FOOT_R, -0.3, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.3, 0, 0)\n .rotate(BoneName.ELBOW_L, 0, 0, -0.3)\n .rotate(BoneName.SHOULDER_R, -0.4, 0, 0)\n .rotate(BoneName.ELBOW_R, 0, 0, 0.4)\n .rotate(BoneName.SPINE_LOWER, 0, -0.05, 0)\n .position(BoneName.PELVIS, 0, 0.02, 0)\n .build()\n .build();\n\n/**\n * Idle stance animation (대기 자세)\n *\n * Fighting stance with slight weight shift and breathing motion.\n *\n * Animation phases:\n * 1. Center (0.0s): Neutral fighting stance\n * 2. Weight left (0.8s): Shift weight to left leg\n * 3. Center (1.6s): Return to neutral\n * 4. Weight right (2.4s): Shift weight to right leg\n * 5. Center (3.0s): Return to neutral (loops)\n *\n * Duration: 3000ms (looping)\n *\n * @korean 대기자세애니메이션\n */\nexport const IDLE_STANCE_ANIMATION = AnimationBuilder.create(\"idle_stance\")\n .withKoreanName(\"대기 자세\")\n .withDuration(3.0)\n .withType(\"idle\")\n .withLoop(true)\n .keyframe(0.0, \"ease-in-out\")\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.5, 0, -0.8)\n .rotate(BoneName.SHOULDER_R, 0.5, 0, 0.8)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.2)\n .position(BoneName.PELVIS, 0, 0, 0)\n .build()\n .keyframe(0.8, \"ease-in-out\")\n .rotate(BoneName.KNEE_L, -0.3, 0, 0)\n .rotate(BoneName.KNEE_R, -0.15, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, -0.05)\n .rotate(BoneName.SPINE_LOWER, -0.02, 0, 0)\n .rotate(BoneName.SPINE_MIDDLE, -0.03, 0, 0)\n .rotate(BoneName.SPINE_UPPER, -0.02, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.5, 0, -0.8)\n .rotate(BoneName.SHOULDER_R, 0.5, 0, 0.8)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.2)\n .position(BoneName.PELVIS, -0.02, 0, 0)\n .build()\n .keyframe(1.6, \"ease-in-out\")\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0.02, 0, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0.03, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0.02, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.5, 0, -0.8)\n .rotate(BoneName.SHOULDER_R, 0.5, 0, 0.8)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.2)\n .position(BoneName.PELVIS, 0, 0, 0)\n .build()\n .keyframe(2.4, \"ease-in-out\")\n .rotate(BoneName.KNEE_L, -0.15, 0, 0)\n .rotate(BoneName.KNEE_R, -0.3, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0.05)\n .rotate(BoneName.SPINE_LOWER, -0.02, 0, 0)\n .rotate(BoneName.SPINE_MIDDLE, -0.03, 0, 0)\n .rotate(BoneName.SPINE_UPPER, -0.02, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.5, 0, -0.8)\n .rotate(BoneName.SHOULDER_R, 0.5, 0, 0.8)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.2)\n .position(BoneName.PELVIS, 0.02, 0, 0)\n .build()\n .keyframe(3.0, \"ease-in-out\")\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.5, 0, -0.8)\n .rotate(BoneName.SHOULDER_R, 0.5, 0, 0.8)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.2)\n .position(BoneName.PELVIS, 0, 0, 0)\n .build()\n .build();\n\n/**\n * Forward dash animation (앞으로 돌진)\n *\n * Explosive forward movement with rapid knee extension and hip drive.\n *\n * Animation phases:\n * 1. Crouch (0.0s): Deep knee bend, ready to explode\n * 2. Drive (0.15s): Rapid knee extension, forward momentum\n * 3. Glide (0.3s): Extended stride position\n * 4. Recovery (0.4s): Return to stance\n *\n * Duration: 400ms\n *\n * @korean 앞으로돌진애니메이션\n */\nexport const FORWARD_DASH_ANIMATION = AnimationBuilder.create(\"forward_dash\")\n .withKoreanName(\"앞으로 돌진\")\n .withDuration(0.4)\n .withType(\"movement\")\n .keyframe(0.0, \"ease-in\")\n .rotate(BoneName.KNEE_L, -0.8, 0, 0)\n .rotate(BoneName.KNEE_R, -0.8, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0.3, 0, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0.25, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0.2, 0, 0)\n .rotate(BoneName.SHOULDER_L, -0.5, 0, -0.3)\n .rotate(BoneName.SHOULDER_R, -0.5, 0, 0.3)\n .position(BoneName.PELVIS, 0, -0.15, 0)\n .build()\n .keyframe(0.15, \"ease-out\")\n .rotate(BoneName.KNEE_L, -0.1, 0, 0)\n .rotate(BoneName.KNEE_R, -0.1, 0, 0)\n .rotate(BoneName.PELVIS, 0.2, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0.15, 0, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0.1, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0.05, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.5, 0, -0.5)\n .rotate(BoneName.SHOULDER_R, 0.5, 0, 0.5)\n .position(BoneName.PELVIS, 0, 0.05, 0.8)\n .build()\n .keyframe(0.3, \"linear\")\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.3, 0, -0.6)\n .rotate(BoneName.SHOULDER_R, 0.3, 0, 0.6)\n .position(BoneName.PELVIS, 0, 0, 1.2)\n .build()\n .keyframe(0.4, \"ease-in\")\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.5, 0, -0.8)\n .rotate(BoneName.SHOULDER_R, 0.5, 0, 0.8)\n .position(BoneName.PELVIS, 0, 0, 0)\n .build()\n .build();\n\n/**\n * Backward retreat animation (뒤로 물러서기)\n *\n * Coordinated leg backpedaling with defensive posture.\n *\n * Animation phases:\n * 1. Push back (0.0s): Back foot plants, front foot lifts\n * 2. Slide (0.2s): Smooth backward movement\n * 3. Plant (0.35s): Front foot plants\n * 4. Reset (0.45s): Return to guard stance\n *\n * Duration: 450ms\n *\n * @korean 뒤로물러서기애니메이션\n */\nexport const BACKWARD_RETREAT_ANIMATION = AnimationBuilder.create(\n \"backward_retreat\",\n)\n .withKoreanName(\"뒤로 물러서기\")\n .withDuration(0.45)\n .withType(\"movement\")\n .keyframe(0.0, \"ease-out\")\n .rotate(BoneName.KNEE_R, -0.3, 0, 0)\n .rotate(BoneName.HIP_L, 0.2, 0, 0)\n .rotate(BoneName.KNEE_L, -0.4, 0, 0)\n .rotate(BoneName.SPINE_LOWER, -0.1, 0, 0)\n .rotate(BoneName.SPINE_UPPER, -0.05, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.6, 0, -0.9)\n .rotate(BoneName.SHOULDER_R, 0.6, 0, 0.9)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.3)\n .position(BoneName.PELVIS, 0, 0, 0)\n .build()\n .keyframe(0.2, \"linear\")\n .rotate(BoneName.KNEE_R, -0.25, 0, 0)\n .rotate(BoneName.HIP_L, 0.1, 0, 0)\n .rotate(BoneName.KNEE_L, -0.3, 0, 0)\n .rotate(BoneName.SPINE_LOWER, -0.08, 0, 0)\n .rotate(BoneName.SPINE_UPPER, -0.04, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.6, 0, -0.9)\n .rotate(BoneName.SHOULDER_R, 0.6, 0, 0.9)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.3)\n .position(BoneName.PELVIS, 0, 0, -0.6)\n .build()\n .keyframe(0.35, \"ease-in\")\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.HIP_L, 0, 0, 0)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.5, 0, -0.8)\n .rotate(BoneName.SHOULDER_R, 0.5, 0, 0.8)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.2)\n .position(BoneName.PELVIS, 0, 0, -0.8)\n .build()\n .keyframe(0.45, \"ease-in\")\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.5, 0, -0.8)\n .rotate(BoneName.SHOULDER_R, 0.5, 0, 0.8)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.2)\n .position(BoneName.PELVIS, 0, 0, 0)\n .build()\n .build();\n\n/**\n * Side step animation (옆으로 스텝)\n *\n * Lateral hip shift with trailing leg for quick evasion.\n *\n * Animation phases:\n * 1. Shift left (0.0s): Weight to left leg\n * 2. Slide (0.15s): Right leg follows\n * 3. Plant (0.25s): Both feet grounded\n * 4. Reset (0.3s): Return to center\n *\n * Duration: 300ms\n *\n * @korean 옆으로스텝애니메이션\n */\nexport const SIDE_STEP_ANIMATION = AnimationBuilder.create(\"side_step\")\n .withKoreanName(\"옆으로 스텝\")\n .withDuration(0.3)\n .withType(\"movement\")\n .keyframe(0.0, \"ease-out\")\n .rotate(BoneName.KNEE_L, -0.4, 0, 0)\n .rotate(BoneName.KNEE_R, -0.15, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, -0.15)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0.05)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0.08)\n .rotate(BoneName.SHOULDER_L, 0.5, 0, -0.8)\n .rotate(BoneName.SHOULDER_R, 0.5, 0, 0.8)\n .position(BoneName.PELVIS, -0.3, -0.05, 0)\n .build()\n .keyframe(0.15, \"linear\")\n .rotate(BoneName.KNEE_L, -0.25, 0, 0)\n .rotate(BoneName.KNEE_R, -0.25, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, -0.08)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0.03)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0.04)\n .rotate(BoneName.SHOULDER_L, 0.5, 0, -0.8)\n .rotate(BoneName.SHOULDER_R, 0.5, 0, 0.8)\n .position(BoneName.PELVIS, -0.5, 0, 0)\n .build()\n .keyframe(0.25, \"ease-in\")\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.5, 0, -0.8)\n .rotate(BoneName.SHOULDER_R, 0.5, 0, 0.8)\n .position(BoneName.PELVIS, -0.5, 0, 0)\n .build()\n .keyframe(0.3, \"ease-in\")\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.5, 0, -0.8)\n .rotate(BoneName.SHOULDER_R, 0.5, 0, 0.8)\n .position(BoneName.PELVIS, 0, 0, 0)\n .build()\n .build();\n\n/**\n * Elbow strike animation (팔꿈치 타격 - Palgumchi Tagyeok)\n *\n * Close-range horizontal elbow strike from Hapkido.\n * Authentic Korean martial arts technique with proper shoulder rotation,\n * elbow positioning, and torso twist for maximum impact.\n *\n * Animation phases:\n * 1. Chamber (0.0s): Right arm chambers across body, elbow bent 90 degrees\n * 2. Rotation (0.05s): Torso rotates right, building momentum\n * 3. Strike (0.1s-0.12s): Elbow drives through target with hip rotation\n * 4. Impact (0.12s): Maximum extension with full body weight transfer\n * 5. Recovery (0.2s): Return to guard position\n *\n * Duration: 200ms (10 frames @ 60fps)\n *\n * @korean 팔꿈치타격애니메이션\n */\nexport const ELBOW_STRIKE_ANIMATION = AnimationBuilder.create(\"elbow_strike\")\n .withKoreanName(\"팔꿈치타격\")\n .withDuration(0.2)\n .withType(\"attack\")\n // Frame 1: Chamber position\n .keyframe(0.0, \"linear\")\n .rotate(BoneName.SHOULDER_R, 0, 0.8, -0.3) // Shoulder forward and across\n .rotate(BoneName.ELBOW_R, 0, 0, 1.57) // 90 degree bend\n .rotate(BoneName.FOREARM_R, 0, -0.5, 0) // Forearm rotates in\n .rotate(BoneName.SPINE_UPPER, 0, -0.3, 0) // Torso winds up\n .rotate(BoneName.SPINE_MIDDLE, 0, -0.2, 0)\n .rotate(BoneName.PELVIS, 0, -0.15, 0)\n .rotate(BoneName.SHOULDER_L, 0, -0.5, 0.5) // Left arm guards\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2)\n .position(BoneName.HAND_R, -0.2, 0, 0.3) // Hand near opposite shoulder\n .build()\n // Frame 2: Rotation begins\n .keyframe(0.05, \"ease-out\")\n .rotate(BoneName.SHOULDER_R, 0, 0.5, 0)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.57) // Maintain 90 degree bend\n .rotate(BoneName.FOREARM_R, 0, -0.3, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0.1, 0) // Torso begins rotation\n .rotate(BoneName.SPINE_MIDDLE, 0, 0.05, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .position(BoneName.HAND_R, -0.1, 0, 0.4)\n .build()\n // Frame 3: Strike through target\n .keyframe(0.1, \"linear\")\n .rotate(BoneName.SHOULDER_R, 0, 0, 0.3) // Elbow drives forward\n .rotate(BoneName.ELBOW_R, 0, 0, 1.4) // Slightly opens for power\n .rotate(BoneName.FOREARM_R, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0.5, 0.1) // Full torso rotation\n .rotate(BoneName.SPINE_MIDDLE, 0, 0.4, 0.05)\n .rotate(BoneName.PELVIS, 0, 0.3, 0)\n .rotate(BoneName.HIP_R, 0, 0.2, 0) // Hip engagement\n .position(BoneName.ELBOW_R, 0, 0, 0.6) // Elbow extends forward\n .build()\n // Frame 4: Impact point\n .keyframe(0.12, \"linear\")\n .rotate(BoneName.SHOULDER_R, 0, 0, 0.5)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.3)\n .rotate(BoneName.FOREARM_R, 0, 0.1, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0.6, 0.15) // Maximum rotation\n .rotate(BoneName.SPINE_MIDDLE, 0, 0.5, 0.1)\n .rotate(BoneName.PELVIS, 0, 0.4, 0)\n .rotate(BoneName.HIP_R, 0, 0.3, 0)\n .position(BoneName.ELBOW_R, 0, 0, 0.7)\n .position(BoneName.PELVIS, 0, 0, 0.1) // Weight shift forward\n .build()\n // Frame 5: Recovery\n .keyframe(0.2, \"ease-in\")\n .rotate(BoneName.SHOULDER_R, 0, 0, -0.1) // Return to guard\n .rotate(BoneName.ELBOW_R, 0, 0, 1.2)\n .rotate(BoneName.FOREARM_R, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.HIP_R, 0, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0, 0, 0.5)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2)\n .position(BoneName.ELBOW_R, 0, 0, 0)\n .position(BoneName.HAND_R, 0, 0, 0)\n .position(BoneName.PELVIS, 0, 0, 0)\n .build()\n .build();\n\n/**\n * Knee strike animation (무릎 타격 - Mureup Tagyeok)\n *\n * Close-range knee strike from Muay Thai-influenced Korean martial arts.\n * Clinch position with explosive knee drive and proper hip engagement.\n *\n * Animation phases:\n * 1. Clinch setup (0.0s): Arms position for control, weight on support leg\n * 2. Chamber (0.05s): Knee begins to lift, hip flexes\n * 3. Drive (0.1s-0.12s): Knee drives upward with hip thrust\n * 4. Impact (0.12s): Maximum extension with full body weight\n * 5. Retraction (0.15s): Knee returns to chamber\n * 6. Recovery (0.2s): Return to fighting stance\n *\n * Duration: 200ms (10 frames @ 60fps)\n *\n * @korean 무릎타격애니메이션\n */\nexport const KNEE_STRIKE_ANIMATION = AnimationBuilder.create(\"knee_strike\")\n .withKoreanName(\"무릎타격\")\n .withDuration(0.2)\n .withType(\"attack\")\n // Frame 1: Clinch setup\n .keyframe(0.0, \"linear\")\n .rotate(BoneName.SHOULDER_L, 0.8, 0, -0.5) // Arms in clinch position\n .rotate(BoneName.SHOULDER_R, 0.8, 0, 0.5)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.3) // Bent for control\n .rotate(BoneName.ELBOW_R, 0, 0, 1.3)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0) // Support leg stabilizes\n .rotate(BoneName.FOOT_L, 0, 0, 0.03)\n .rotate(BoneName.HIP_R, 0, 0, 0) // Striking leg neutral\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .position(BoneName.PELVIS, 0, -0.01, 0)\n .build()\n // Frame 2: Chamber begins\n .keyframe(0.05, \"ease-out\")\n .rotate(BoneName.SHOULDER_L, 0.5, 0, -0.6) // Arms pull opponent down\n .rotate(BoneName.SHOULDER_R, 0.5, 0, 0.6)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.4)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.4)\n .rotate(BoneName.HIP_R, 1.0, 0, 0) // Hip flexes\n .rotate(BoneName.KNEE_R, -1.3, 0, 0) // Knee bends tight\n .rotate(BoneName.KNEE_L, -0.25, 0, 0) // Support leg adjusts\n .rotate(BoneName.FOOT_L, 0, 0, 0.05)\n .rotate(BoneName.SPINE_UPPER, -0.1, 0, 0) // Torso leans back slightly\n .position(BoneName.PELVIS, 0, -0.02, -0.05)\n .build()\n // Frame 3: Knee drive begins\n .keyframe(0.1, \"ease-out\")\n .rotate(BoneName.SHOULDER_L, 0.3, 0, -0.7) // Arms maintain clinch\n .rotate(BoneName.SHOULDER_R, 0.3, 0, 0.7)\n .rotate(BoneName.HIP_R, 1.3, 0, 0) // Knee drives upward\n .rotate(BoneName.KNEE_R, -0.8, 0, 0) // Opens slightly\n .rotate(BoneName.FOOT_R, 0.3, 0, 0) // Ankle plantarflexion\n .rotate(BoneName.PELVIS, 0.15, 0, 0) // Forward thrust\n .rotate(BoneName.SPINE_LOWER, 0.1, 0, 0)\n .rotate(BoneName.KNEE_L, -0.15, 0, 0) // Support leg extends\n .position(BoneName.KNEE_R, 0, 0.3, 0.4) // Knee rises forward\n .position(BoneName.PELVIS, 0, 0, 0.15) // Hip drives forward\n .build()\n // Frame 4: Impact point\n .keyframe(0.12, \"linear\")\n .rotate(BoneName.SHOULDER_L, 0.2, 0, -0.8) // Maximum pull down\n .rotate(BoneName.SHOULDER_R, 0.2, 0, 0.8)\n .rotate(BoneName.HIP_R, 1.4, 0, 0) // Maximum knee extension\n .rotate(BoneName.KNEE_R, -0.5, 0, 0)\n .rotate(BoneName.FOOT_R, 0.4, 0, 0)\n .rotate(BoneName.PELVIS, 0.2, 0, 0) // Full hip thrust\n .rotate(BoneName.SPINE_LOWER, 0.15, 0, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0.05, 0, 0)\n .rotate(BoneName.KNEE_L, -0.1, 0, 0) // Support leg fully extended\n .position(BoneName.KNEE_R, 0, 0.4, 0.5)\n .position(BoneName.PELVIS, 0, 0.02, 0.2)\n .build()\n // Frame 5: Retraction\n .keyframe(0.15, \"ease-in\")\n .rotate(BoneName.HIP_R, 1.0, 0, 0) // Return to chamber\n .rotate(BoneName.KNEE_R, -1.3, 0, 0)\n .rotate(BoneName.FOOT_R, 0, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0, 0, 0)\n .position(BoneName.KNEE_R, 0, 0.2, 0.2)\n .position(BoneName.PELVIS, 0, -0.01, 0)\n .build()\n // Frame 6: Recovery\n .keyframe(0.2, \"ease-in\")\n .rotate(BoneName.SHOULDER_L, 0, 0, 0.5) // Arms return to guard\n .rotate(BoneName.SHOULDER_R, 0, 0, -0.5)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.2)\n .rotate(BoneName.HIP_R, 0, 0, 0) // Leg returns to stance\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.FOOT_R, 0, 0, 0)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.FOOT_L, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0) // Body neutral\n .position(BoneName.KNEE_R, 0, 0, 0)\n .position(BoneName.PELVIS, 0, 0, 0)\n .build()\n .build();\n\n/**\n * Side kick animation (옆차기 - Yeopchagi)\n *\n * Traditional Taekwondo side kick with lateral hip rotation,\n * leg extension to the side, and proper chamber-drive-retract sequence.\n *\n * Animation phases:\n * 1. Chamber (0.0s-0.1s): Knee lifts with hip turning sideways\n * 2. Drive (0.1s-0.15s): Leg drives laterally with hip thrust\n * 3. Extension (0.15s-0.2s): Full extension with heel strike\n * 4. Impact (0.2s): Maximum lateral extension\n * 5. Retraction (0.2s-0.35s): Return to chamber\n * 6. Recovery (0.35s-0.5s): Foot returns to ground, stance reset\n *\n * Duration: 500ms (30 frames @ 60fps)\n *\n * @korean 옆차기애니메이션\n */\nexport const SIDE_KICK_ANIMATION = AnimationBuilder.create(\"side_kick\")\n .withKoreanName(\"옆차기\")\n .withDuration(0.5)\n .withType(\"attack\")\n // Frame 1: Chamber with sideways turn\n .keyframe(0.1, \"ease-out\")\n .rotate(BoneName.HIP_R, 1.3, 0, 0.3) // Lift and turn\n .rotate(BoneName.KNEE_R, -1.6, 0, 0) // Tight chamber\n .rotate(BoneName.PELVIS, 0, -1.57, 0) // Turn left (90 degrees)\n .rotate(BoneName.SPINE_LOWER, 0, -1.4, 0)\n .rotate(BoneName.SPINE_UPPER, 0, -1.2, 0.2) // Lean away\n .rotate(BoneName.KNEE_L, -0.3, 0, 0) // Support leg adjusts\n .rotate(BoneName.FOOT_L, 0, 0, 0.1)\n .rotate(BoneName.SHOULDER_L, 0, 0, -1.2) // Arms for balance\n .rotate(BoneName.SHOULDER_R, 0, 0, 0.8)\n .position(BoneName.PELVIS, 0, -0.02, 0)\n .build()\n // Frame 2: Drive begins\n .keyframe(0.15, \"ease-out\")\n .rotate(BoneName.HIP_R, 1.3, 0, 0.5) // Leg begins lateral extension\n .rotate(BoneName.KNEE_R, -1.0, 0, 0)\n .rotate(BoneName.FOOT_R, 0, 0.3, 0) // Heel positioning\n .rotate(BoneName.PELVIS, 0, -1.57, 0) // Hip thrust lateral\n .rotate(BoneName.SPINE_LOWER, 0, -1.4, 0)\n .rotate(BoneName.SPINE_UPPER, 0, -1.2, 0.3)\n .rotate(BoneName.KNEE_L, -0.25, 0, 0) // Support leg stabilizes\n .position(BoneName.FOOT_R, 0.4, 0, 0) // Lateral movement\n .build()\n // Frame 3: Full extension and impact\n .keyframe(0.2, \"linear\")\n .rotate(BoneName.HIP_R, 1.3, 0, 0.7) // Maximum lateral extension\n .rotate(BoneName.KNEE_R, -0.1, 0, 0) // Nearly straight\n .rotate(BoneName.FOOT_R, 0, 0.4, 0) // Heel strike position\n .rotate(BoneName.PELVIS, 0, -1.57, 0) // Maximum hip drive\n .rotate(BoneName.SPINE_LOWER, 0, -1.4, 0)\n .rotate(BoneName.SPINE_UPPER, 0, -1.2, 0.4) // Maximum lean\n .rotate(BoneName.KNEE_L, -0.15, 0, 0) // Support leg extends\n .position(BoneName.FOOT_R, 0.7, 0, 0) // Maximum reach\n .position(BoneName.PELVIS, 0.1, 0, 0) // Slight lateral shift\n .build()\n // Frame 4: Retraction\n .keyframe(0.35, \"ease-in\")\n .rotate(BoneName.HIP_R, 1.3, 0, 0.3) // Return to chamber\n .rotate(BoneName.KNEE_R, -1.6, 0, 0)\n .rotate(BoneName.FOOT_R, 0, 0, 0)\n .rotate(BoneName.PELVIS, 0, -1.2, 0) // Begin turning back\n .rotate(BoneName.SPINE_LOWER, 0, -1.0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, -0.8, 0.2)\n .position(BoneName.FOOT_R, 0.3, 0, 0)\n .position(BoneName.PELVIS, 0, -0.01, 0)\n .build()\n // Frame 5: Recovery\n .keyframe(0.5, \"ease-in\")\n .rotate(BoneName.HIP_R, 0, 0, 0) // Return to neutral stance\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.FOOT_R, 0, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.FOOT_L, 0, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0, 0, 0.5)\n .rotate(BoneName.SHOULDER_R, 0, 0, -0.5)\n .position(BoneName.FOOT_R, 0, 0, 0)\n .position(BoneName.PELVIS, 0, 0, 0)\n .build()\n .build();\n\n/**\n * Elbow uppercut animation (팔꿈치 올려치기 - Palgumchi Ollyeochigi)\n *\n * Upward elbow strike from Hapkido, targeting chin/jaw area.\n * Close-range technique with explosive upward drive and leg spring.\n *\n * Animation phases:\n * 1. Crouch (0.0s): Lower stance, elbow chambers low\n * 2. Spring (0.05s): Legs drive upward with explosive force\n * 3. Drive (0.1s-0.12s): Elbow drives upward with hip thrust\n * 4. Impact (0.12s): Maximum upward extension at chin level\n * 5. Recovery (0.18s): Return to guard position\n *\n * Duration: 180ms (11 frames @ 60fps)\n *\n * @korean 팔꿈치올려치기애니메이션\n */\nexport const ELBOW_UPPERCUT_ANIMATION = AnimationBuilder.create(\n \"elbow_uppercut\",\n)\n .withKoreanName(\"팔꿈치올려치기\")\n .withDuration(0.18)\n .withType(\"attack\")\n .keyframe(0.0, \"linear\")\n .rotate(BoneName.SHOULDER_R, -0.3, 0, 0.5)\n .rotate(BoneName.ELBOW_R, 0, 0, 2.0)\n .rotate(BoneName.FOREARM_R, 0, -0.8, 0)\n .rotate(BoneName.KNEE_L, -0.5, 0, 0)\n .rotate(BoneName.KNEE_R, -0.5, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0.2, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0.15, 0, 0)\n .rotate(BoneName.PELVIS, 0.1, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0, 0, 0.5)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2)\n .position(BoneName.PELVIS, 0, -0.1, 0)\n .build()\n .keyframe(0.05, \"ease-out\")\n .rotate(BoneName.SHOULDER_R, 0, 0, 0.8)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.8)\n .rotate(BoneName.FOREARM_R, 0, -0.5, 0)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .position(BoneName.PELVIS, 0, -0.02, 0)\n .position(BoneName.ELBOW_R, 0, 0.2, 0.3)\n .build()\n .keyframe(0.1, \"ease-out\")\n .rotate(BoneName.SHOULDER_R, 0.5, 0, 1.0)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.5)\n .rotate(BoneName.FOREARM_R, 0, -0.2, 0)\n .rotate(BoneName.KNEE_L, -0.1, 0, 0)\n .rotate(BoneName.KNEE_R, -0.1, 0, 0)\n .rotate(BoneName.PELVIS, -0.1, 0, 0)\n .rotate(BoneName.SPINE_LOWER, -0.05, 0, 0)\n .position(BoneName.PELVIS, 0, 0.05, 0.1)\n .position(BoneName.ELBOW_R, 0, 0.5, 0.4)\n .build()\n .keyframe(0.12, \"linear\")\n .rotate(BoneName.SHOULDER_R, 0.8, 0, 1.2)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.4)\n .rotate(BoneName.FOREARM_R, 0, 0, 0)\n .rotate(BoneName.KNEE_L, -0.05, 0, 0)\n .rotate(BoneName.KNEE_R, -0.05, 0, 0)\n .rotate(BoneName.PELVIS, -0.15, 0, 0)\n .rotate(BoneName.SPINE_LOWER, -0.1, 0, 0)\n .rotate(BoneName.SPINE_UPPER, -0.05, 0, 0)\n .position(BoneName.PELVIS, 0, 0.08, 0.15)\n .position(BoneName.ELBOW_R, 0, 0.7, 0.5)\n .build()\n .keyframe(0.18, \"ease-in\")\n .rotate(BoneName.SHOULDER_R, 0, 0, -0.1)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.2)\n .rotate(BoneName.FOREARM_R, 0, 0, 0)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0, 0, 0.5)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2)\n .position(BoneName.PELVIS, 0, 0, 0)\n .position(BoneName.ELBOW_R, 0, 0, 0)\n .build()\n .build();\n\n/**\n * Axe kick animation (내려차기 - Naeryeochagi)\n *\n * Traditional Taekwondo downward axe kick targeting head/shoulder.\n * Leg rises high then chops downward with heel strike.\n *\n * Animation phases:\n * 1. Chamber (0.0s-0.15s): Leg rises high in front\n * 2. Peak (0.15s-0.2s): Maximum height, leg nearly vertical\n * 3. Chop (0.2s-0.3s): Leg descends rapidly with heel strike\n * 4. Impact (0.3s): Maximum downward force\n * 5. Recovery (0.3s-0.5s): Return to stance\n *\n * Duration: 500ms\n *\n * @korean 내려차기애니메이션\n */\nexport const AXE_KICK_ANIMATION = AnimationBuilder.create(\"axe_kick\")\n .withKoreanName(\"내려차기\")\n .withDuration(0.5)\n .withType(\"attack\")\n // Frame 1: Leg rises in front\n .keyframe(0.15, \"ease-out\")\n .rotate(BoneName.HIP_R, 2.0, 0, 0) // High lift (>120 degrees)\n .rotate(BoneName.KNEE_R, -0.3, 0, 0) // Nearly straight\n .rotate(BoneName.FOOT_R, 0.5, 0, 0) // Dorsiflexion\n .rotate(BoneName.KNEE_L, -0.3, 0, 0) // Support leg bent\n .rotate(BoneName.PELVIS, -0.2, 0, 0) // Tilts back\n .rotate(BoneName.SPINE_LOWER, -0.15, 0, 0)\n .rotate(BoneName.SPINE_UPPER, -0.1, 0, 0) // Lean back for balance\n .rotate(BoneName.SHOULDER_L, -0.8, 0.3, 0.4) // Guard position\n .rotate(BoneName.ELBOW_L, 0, 0, -1.6)\n .rotate(BoneName.SHOULDER_R, -0.8, -0.3, -0.4)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.6)\n .position(BoneName.PELVIS, 0, -0.05, -0.1)\n .build()\n // Frame 2: Peak height (nearly vertical)\n .keyframe(0.2, \"linear\")\n .rotate(BoneName.HIP_R, 2.5, 0, 0) // Maximum height (>140 degrees)\n .rotate(BoneName.KNEE_R, -0.1, 0, 0) // Fully extended\n .rotate(BoneName.FOOT_R, 0.6, 0, 0)\n .rotate(BoneName.KNEE_L, -0.35, 0, 0)\n .rotate(BoneName.PELVIS, -0.25, 0, 0)\n .rotate(BoneName.SPINE_LOWER, -0.2, 0, 0)\n .rotate(BoneName.SPINE_UPPER, -0.15, 0, 0)\n .position(BoneName.FOOT_R, 0, 1.5, 0.3) // High above\n .position(BoneName.PELVIS, 0, -0.08, -0.15)\n .build()\n // Frame 3: Downward chop\n .keyframe(0.3, \"ease-in\")\n .rotate(BoneName.HIP_R, 0.8, 0, 0) // Descending rapidly\n .rotate(BoneName.KNEE_R, -0.15, 0, 0)\n .rotate(BoneName.FOOT_R, -0.3, 0, 0) // Heel strike angle\n .rotate(BoneName.KNEE_L, -0.25, 0, 0)\n .rotate(BoneName.PELVIS, 0.1, 0, 0) // Pelvis drives forward\n .rotate(BoneName.SPINE_LOWER, 0.1, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0.05, 0, 0)\n .position(BoneName.FOOT_R, 0, 0.5, 0.4) // Striking down\n .position(BoneName.PELVIS, 0, 0, 0.1)\n .build()\n // Frame 4: Recovery\n .keyframe(0.5, \"ease-in\")\n .rotate(BoneName.HIP_R, 0, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.FOOT_R, 0, 0, 0)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.SHOULDER_L, -0.6, 0.4, 0.3)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.8)\n .rotate(BoneName.SHOULDER_R, -0.6, -0.4, -0.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.8)\n .position(BoneName.FOOT_R, 0, 0, 0)\n .position(BoneName.PELVIS, 0, 0, 0)\n .build()\n .build();\n\n/**\n * Back kick animation (뒤차기 - Dwichagi)\n *\n * Traditional Taekwondo spinning back kick with powerful heel thrust.\n * Turn 180 degrees and deliver straight back kick.\n *\n * Animation phases:\n * 1. Turn start (0.0s-0.1s): Begin spinning left\n * 2. Chamber (0.1s-0.15s): Look over shoulder, leg chambers\n * 3. Thrust (0.15s-0.2s): Heel drives backward\n * 4. Impact (0.2s-0.25s): Full extension\n * 5. Recovery (0.25s-0.45s): Complete rotation, return to stance\n *\n * Duration: 450ms\n *\n * @korean 뒤차기애니메이션\n */\nexport const BACK_KICK_ANIMATION = AnimationBuilder.create(\"back_kick\")\n .withKoreanName(\"뒤차기\")\n .withDuration(0.45)\n .withType(\"attack\")\n // Frame 1: Begin spin\n .keyframe(0.1, \"ease-out\")\n .rotate(BoneName.PELVIS, 0, -1.5, 0) // Turn left ~90 degrees\n .rotate(BoneName.SPINE_LOWER, 0, -1.3, 0)\n .rotate(BoneName.SPINE_UPPER, 0, -1.0, 0.1) // Look over shoulder\n .rotate(BoneName.HEAD, 0, 0.5, 0) // Look back at target\n .rotate(BoneName.HIP_R, 0.3, 0, 0) // Begin lift\n .rotate(BoneName.KNEE_R, -0.8, 0, 0) // Chamber\n .rotate(BoneName.KNEE_L, -0.3, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.3, 0, -0.5)\n .rotate(BoneName.SHOULDER_R, 0.3, 0, 0.5)\n .position(BoneName.PELVIS, 0, -0.02, 0)\n .build()\n // Frame 2: Full chamber\n .keyframe(0.15, \"linear\")\n .rotate(BoneName.PELVIS, 0, -2.8, 0) // Turn ~160 degrees\n .rotate(BoneName.SPINE_LOWER, 0, -2.5, 0)\n .rotate(BoneName.SPINE_UPPER, 0, -2.2, 0.15)\n .rotate(BoneName.HEAD, 0, 0.8, 0)\n .rotate(BoneName.HIP_R, 0.8, 0, 0) // Knee lifts\n .rotate(BoneName.KNEE_R, -1.5, 0, 0) // Tight chamber\n .rotate(BoneName.KNEE_L, -0.25, 0, 0)\n .position(BoneName.PELVIS, 0, -0.01, -0.05)\n .build()\n // Frame 3: Thrust backward\n .keyframe(0.2, \"ease-out\")\n .rotate(BoneName.PELVIS, 0, -3.14, 0) // Full 180 degrees\n .rotate(BoneName.SPINE_LOWER, 0, -3.0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, -2.8, 0.2)\n .rotate(BoneName.HEAD, 0, 1.0, 0)\n .rotate(BoneName.HIP_R, 0.5, 0, 0) // Extends backward\n .rotate(BoneName.KNEE_R, -0.2, 0, 0) // Leg straightens\n .rotate(BoneName.FOOT_R, -0.4, 0, 0) // Heel strike\n .rotate(BoneName.KNEE_L, -0.15, 0, 0)\n .position(BoneName.FOOT_R, 0, 0, -0.8) // Thrust back\n .position(BoneName.PELVIS, 0, 0, 0.15)\n .build()\n // Frame 4: Impact\n .keyframe(0.25, \"linear\")\n .rotate(BoneName.PELVIS, 0, -3.14, 0)\n .rotate(BoneName.SPINE_LOWER, 0, -3.0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, -2.8, 0.25)\n .rotate(BoneName.HIP_R, 0.3, 0, 0) // Full extension\n .rotate(BoneName.KNEE_R, -0.05, 0, 0) // Straight\n .rotate(BoneName.FOOT_R, -0.5, 0, 0)\n .position(BoneName.FOOT_R, 0, 0.2, -1.0) // Maximum reach\n .position(BoneName.PELVIS, 0, 0, 0.2)\n .build()\n // Frame 5: Recovery (complete rotation)\n .keyframe(0.45, \"ease-in\")\n .rotate(BoneName.PELVIS, 0, 0, 0) // Return to forward\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.HEAD, 0, 0, 0)\n .rotate(BoneName.HIP_R, 0, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.FOOT_R, 0, 0, 0)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.SHOULDER_L, -0.6, 0.4, 0.3)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.8)\n .rotate(BoneName.SHOULDER_R, -0.6, -0.4, -0.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.8)\n .position(BoneName.FOOT_R, 0, 0, 0)\n .position(BoneName.PELVIS, 0, 0, 0)\n .build()\n .build();\n\n/**\n * Tornado kick animation (회오리차기 - Hoeori Chagi)\n *\n * 360-degree spinning kick with explosive roundhouse at peak rotation.\n *\n * Animation phases:\n * 1. Wind-up (0.0s-0.15s): Begin 360 spin\n * 2. Half turn (0.15s-0.25s): Continue rotation, leg chambers\n * 3. Kick (0.25s-0.35s): Roundhouse executes at peak rotation\n * 4. Complete spin (0.35s-0.55s): Finish rotation, land\n *\n * Duration: 550ms\n *\n * @korean 회오리차기애니메이션\n */\nexport const TORNADO_KICK_ANIMATION = AnimationBuilder.create(\"tornado_kick\")\n .withKoreanName(\"회오리차기\")\n .withDuration(0.55)\n .withType(\"attack\")\n // Frame 1: Begin spin\n .keyframe(0.15, \"ease-out\")\n .rotate(BoneName.PELVIS, 0, -2.0, 0) // Spin ~115 degrees\n .rotate(BoneName.SPINE_LOWER, 0, -1.8, 0)\n .rotate(BoneName.SPINE_UPPER, 0, -1.5, 0)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.FOOT_L, 0, 0, -0.2) // Pivot foot\n .rotate(BoneName.HIP_R, 0.4, 0, 0.3) // Leg begins lift\n .rotate(BoneName.KNEE_R, -0.8, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.5, 0, -0.5)\n .rotate(BoneName.SHOULDER_R, 0.5, 0, 0.5)\n .position(BoneName.PELVIS, 0, 0.1, 0) // Slight jump\n .build()\n // Frame 2: Continue spin, chamber\n .keyframe(0.25, \"linear\")\n .rotate(BoneName.PELVIS, 0, -4.0, 0) // Spin ~230 degrees\n .rotate(BoneName.SPINE_LOWER, 0, -3.8, 0)\n .rotate(BoneName.SPINE_UPPER, 0, -3.5, 0)\n .rotate(BoneName.KNEE_L, -0.15, 0, 0)\n .rotate(BoneName.FOOT_L, 0, 0, -0.3)\n .rotate(BoneName.HIP_R, 1.2, 0, 0.8) // Chamber for roundhouse\n .rotate(BoneName.KNEE_R, -1.5, 0, 0)\n .position(BoneName.PELVIS, 0, 0.15, 0) // Jump peak\n .build()\n // Frame 3: Execute kick at peak rotation\n .keyframe(0.35, \"ease-out\")\n .rotate(BoneName.PELVIS, 0, -5.5, 0) // Spin ~315 degrees\n .rotate(BoneName.SPINE_LOWER, 0, -5.3, 0)\n .rotate(BoneName.SPINE_UPPER, 0, -5.0, 0.3)\n .rotate(BoneName.KNEE_L, -0.1, 0, 0)\n .rotate(BoneName.HIP_R, 1.2, 0, 1.6) // Full roundhouse extension\n .rotate(BoneName.KNEE_R, -0.1, 0, 0)\n .rotate(BoneName.FOOT_R, 0.4, 0, 0.3)\n .position(BoneName.FOOT_R, 0.8, 0, 0) // Lateral strike\n .position(BoneName.PELVIS, 0, 0.1, 0) // Descending\n .build()\n // Frame 4: Complete rotation and land\n .keyframe(0.55, \"ease-in\")\n .rotate(BoneName.PELVIS, 0, -6.28, 0) // Full 360 degrees\n .rotate(BoneName.SPINE_LOWER, 0, -6.28, 0)\n .rotate(BoneName.SPINE_UPPER, 0, -6.28, 0)\n .rotate(BoneName.HIP_R, 0, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.FOOT_R, 0, 0, 0)\n .rotate(BoneName.KNEE_L, -0.25, 0, 0) // Absorb landing\n .rotate(BoneName.SHOULDER_L, -0.6, 0.4, 0.3)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.8)\n .rotate(BoneName.SHOULDER_R, -0.6, -0.4, -0.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.8)\n .position(BoneName.FOOT_R, 0, 0, 0)\n .position(BoneName.PELVIS, 0, -0.05, 0) // Land\n .build()\n .build();\n\n/**\n * Jumping kick animation (뛰어차기 - Ttwieo Chagi)\n *\n * Jumping front kick with explosive upward momentum.\n *\n * Animation phases:\n * 1. Crouch (0.0s-0.1s): Load legs for jump\n * 2. Jump (0.1s-0.2s): Explosive upward, front kick chambers\n * 3. Kick (0.2s-0.3s): Front kick at peak height\n * 4. Retract (0.3s-0.4s): Leg pulls back\n * 5. Land (0.4s-0.5s): Absorb landing\n *\n * Duration: 500ms\n *\n * @korean 뛰어차기애니메이션\n */\nexport const JUMPING_KICK_ANIMATION = AnimationBuilder.create(\"jumping_kick\")\n .withKoreanName(\"뛰어차기\")\n .withDuration(0.5)\n .withType(\"attack\")\n // Frame 1: Crouch to load\n .keyframe(0.1, \"ease-out\")\n .rotate(BoneName.KNEE_L, -0.6, 0, 0)\n .rotate(BoneName.KNEE_R, -0.6, 0, 0)\n .rotate(BoneName.PELVIS, 0.1, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0.1, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.3, 0, -0.5)\n .rotate(BoneName.SHOULDER_R, 0.3, 0, 0.5)\n .position(BoneName.PELVIS, 0, -0.15, 0)\n .build()\n // Frame 2: Jump and chamber\n .keyframe(0.2, \"ease-out\")\n .rotate(BoneName.KNEE_L, -0.1, 0, 0) // Jump leg extends\n .rotate(BoneName.HIP_R, 1.6, 0, 0) // Chamber\n .rotate(BoneName.KNEE_R, -2.0, 0, 0)\n .rotate(BoneName.PELVIS, -0.1, 0, 0)\n .rotate(BoneName.SPINE_LOWER, -0.05, 0, 0)\n .rotate(BoneName.SHOULDER_L, -0.9, 0.3, 0.4)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.6)\n .rotate(BoneName.SHOULDER_R, -0.9, -0.3, -0.4)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.6)\n .position(BoneName.PELVIS, 0, 0.3, 0) // Airborne\n .build()\n // Frame 3: Kick extends at peak\n .keyframe(0.3, \"linear\")\n .rotate(BoneName.KNEE_L, -0.05, 0, 0)\n .rotate(BoneName.HIP_R, 1.7, 0, 0)\n .rotate(BoneName.KNEE_R, 0.1, 0, 0) // Full extension\n .rotate(BoneName.FOOT_R, 0.5, 0, 0) // Dorsiflexion\n .rotate(BoneName.PELVIS, 0.15, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0.1, 0, 0)\n .position(BoneName.PELVIS, 0, 0.35, 0.1) // Peak height\n .build()\n // Frame 4: Retract\n .keyframe(0.4, \"ease-in\")\n .rotate(BoneName.KNEE_L, -0.1, 0, 0)\n .rotate(BoneName.HIP_R, 1.4, 0, 0)\n .rotate(BoneName.KNEE_R, -1.5, 0, 0)\n .rotate(BoneName.FOOT_R, 0, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .position(BoneName.PELVIS, 0, 0.15, 0) // Descending\n .build()\n // Frame 5: Land\n .keyframe(0.5, \"ease-in\")\n .rotate(BoneName.KNEE_L, -0.35, 0, 0) // Absorb landing\n .rotate(BoneName.KNEE_R, -0.35, 0, 0)\n .rotate(BoneName.HIP_R, 0, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SHOULDER_L, -0.6, 0.4, 0.3)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.8)\n .rotate(BoneName.SHOULDER_R, -0.6, -0.4, -0.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.8)\n .position(BoneName.PELVIS, 0, -0.05, 0)\n .build()\n .build();\n\n/**\n * Sweep animation (다리걸기 - Dari Geolgi)\n *\n * Low sweeping kick targeting opponent's ankles for takedown.\n *\n * Animation phases:\n * 1. Drop (0.0s-0.1s): Lower stance, weight on one leg\n * 2. Sweep (0.1s-0.2s): Leg sweeps low in arc\n * 3. Follow through (0.2s-0.3s): Complete sweep arc\n * 4. Recovery (0.3s-0.45s): Return to stance\n *\n * Duration: 450ms\n *\n * @korean 다리걸기애니메이션\n */\nexport const SWEEP_ANIMATION = AnimationBuilder.create(\"sweep\")\n .withKoreanName(\"다리걸기\")\n .withDuration(0.45)\n .withType(\"attack\")\n // Frame 1: Drop low\n .keyframe(0.1, \"ease-out\")\n .rotate(BoneName.KNEE_L, -1.2, 0, 0) // Deep crouch\n .rotate(BoneName.KNEE_R, -0.3, 0, 0) // Sweep leg lighter\n .rotate(BoneName.PELVIS, 0.2, 0, 0) // Lean forward\n .rotate(BoneName.SPINE_LOWER, 0.3, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0.4, 0, 0)\n .rotate(BoneName.SHOULDER_L, 0.6, 0, -0.8) // Arms for balance\n .rotate(BoneName.SHOULDER_R, 0.6, 0, 0.8)\n .position(BoneName.PELVIS, 0, -0.3, 0) // Low position\n .build()\n // Frame 2: Sweep begins\n .keyframe(0.2, \"ease-out\")\n .rotate(BoneName.KNEE_L, -1.3, 0, 0)\n .rotate(BoneName.HIP_R, 0.3, 0, 1.0) // Leg sweeps outward\n .rotate(BoneName.KNEE_R, -0.2, 0, 0) // Nearly straight\n .rotate(BoneName.FOOT_R, 0, 0, 0.3) // Foot sweeps\n .rotate(BoneName.PELVIS, 0.25, -0.5, 0) // Rotate into sweep\n .rotate(BoneName.SPINE_LOWER, 0.35, -0.4, 0)\n .rotate(BoneName.SPINE_UPPER, 0.45, -0.3, 0)\n .position(BoneName.FOOT_R, 0.5, 0, 0) // Lateral sweep\n .position(BoneName.PELVIS, 0, -0.35, 0)\n .build()\n // Frame 3: Follow through\n .keyframe(0.3, \"linear\")\n .rotate(BoneName.KNEE_L, -1.2, 0, 0)\n .rotate(BoneName.HIP_R, 0.5, 0, 1.5) // Maximum sweep\n .rotate(BoneName.KNEE_R, -0.15, 0, 0)\n .rotate(BoneName.FOOT_R, 0, 0, 0.4)\n .rotate(BoneName.PELVIS, 0.3, -0.8, 0)\n .rotate(BoneName.SPINE_LOWER, 0.4, -0.6, 0)\n .rotate(BoneName.SPINE_UPPER, 0.5, -0.4, 0)\n .position(BoneName.FOOT_R, 0.8, -0.1, 0) // Low and wide\n .position(BoneName.PELVIS, 0.1, -0.3, 0)\n .build()\n // Frame 4: Recovery\n .keyframe(0.45, \"ease-in\")\n .rotate(BoneName.KNEE_L, -0.3, 0, 0)\n .rotate(BoneName.KNEE_R, -0.3, 0, 0)\n .rotate(BoneName.HIP_R, 0, 0, 0)\n .rotate(BoneName.FOOT_R, 0, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.SHOULDER_L, -0.6, 0.4, 0.3)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.8)\n .rotate(BoneName.SHOULDER_R, -0.6, -0.4, -0.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.8)\n .position(BoneName.FOOT_R, 0, 0, 0)\n .position(BoneName.PELVIS, 0, 0, 0)\n .build()\n .build();\n\n/**\n * Throw animation (던지기 - Deonjigi)\n *\n * Hapkido/Judo style hip throw technique.\n *\n * Animation phases:\n * 1. Entry (0.0s-0.15s): Step in, grab opponent\n * 2. Load (0.15s-0.25s): Hip under opponent\n * 3. Throw (0.25s-0.4s): Execute throw over hip\n * 4. Recovery (0.4s-0.55s): Return to stance\n *\n * Duration: 550ms\n *\n * @korean 던지기애니메이션\n */\nexport const THROW_ANIMATION = AnimationBuilder.create(\"throw\")\n .withKoreanName(\"던지기\")\n .withDuration(0.55)\n .withType(\"attack\")\n // Frame 1: Entry and grab\n .keyframe(0.15, \"ease-out\")\n .rotate(BoneName.SHOULDER_L, 0.6, 0.5, -0.3) // Reach for collar\n .rotate(BoneName.ELBOW_L, 0, 0, -1.0)\n .rotate(BoneName.SHOULDER_R, 0.8, -0.3, 0.2) // Reach for sleeve/hip\n .rotate(BoneName.ELBOW_R, 0, 0, 1.2)\n .rotate(BoneName.PELVIS, 0, 0.8, 0) // Turn into opponent\n .rotate(BoneName.SPINE_LOWER, 0, 0.7, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0.5, 0)\n .rotate(BoneName.KNEE_L, -0.4, 0, 0) // Step in\n .rotate(BoneName.KNEE_R, -0.3, 0, 0)\n .position(BoneName.PELVIS, 0, -0.05, 0.2) // Move into opponent\n .build()\n // Frame 2: Load hip under opponent\n .keyframe(0.25, \"linear\")\n .rotate(BoneName.SHOULDER_L, 0.3, 0.7, -0.5) // Pull collar\n .rotate(BoneName.ELBOW_L, 0, 0, -1.3)\n .rotate(BoneName.SHOULDER_R, 0.5, -0.5, 0.4) // Pull sleeve\n .rotate(BoneName.ELBOW_R, 0, 0, 1.0)\n .rotate(BoneName.PELVIS, 0.2, 1.2, 0) // Hip under, body turns\n .rotate(BoneName.SPINE_LOWER, 0.3, 1.0, 0)\n .rotate(BoneName.SPINE_UPPER, 0.4, 0.8, 0)\n .rotate(BoneName.KNEE_L, -0.6, 0, 0) // Knees bend to get under\n .rotate(BoneName.KNEE_R, -0.5, 0, 0)\n .position(BoneName.PELVIS, 0, -0.15, 0.15)\n .build()\n // Frame 3: Execute throw\n .keyframe(0.4, \"ease-out\")\n .rotate(BoneName.SHOULDER_L, -0.4, 0.8, -0.8) // Drive down with pull\n .rotate(BoneName.ELBOW_L, 0, 0, -0.8)\n .rotate(BoneName.SHOULDER_R, -0.2, -0.6, 0.6) // Lift and rotate\n .rotate(BoneName.ELBOW_R, 0, 0, 0.6)\n .rotate(BoneName.PELVIS, 0.5, 1.8, 0) // Hip drives through\n .rotate(BoneName.SPINE_LOWER, 0.6, 1.5, 0)\n .rotate(BoneName.SPINE_UPPER, 0.7, 1.2, -0.2) // Bend forward\n .rotate(BoneName.KNEE_L, -0.3, 0, 0) // Legs straighten for lift\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .position(BoneName.PELVIS, 0, 0.05, 0.1)\n .build()\n // Frame 4: Recovery\n .keyframe(0.55, \"ease-in\")\n .rotate(BoneName.SHOULDER_L, -0.6, 0.4, 0.3)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.8)\n .rotate(BoneName.SHOULDER_R, -0.6, -0.4, -0.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.8)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.KNEE_L, -0.25, 0, 0)\n .rotate(BoneName.KNEE_R, -0.25, 0, 0)\n .position(BoneName.PELVIS, 0, 0, 0)\n .build()\n .build();\n\n/**\n * Grapple animation (잡기/꺾기 - Japgi/Kkeokgi)\n *\n * Joint lock/grapple technique from Hapkido.\n *\n * Animation phases:\n * 1. Catch (0.0s-0.12s): Grab opponent's arm\n * 2. Control (0.12s-0.25s): Apply joint pressure\n * 3. Lock (0.25s-0.4s): Full joint lock applied\n * 4. Hold (0.4s-0.5s): Maintain control\n *\n * Duration: 500ms\n *\n * @korean 잡기꺾기애니메이션\n */\nexport const GRAPPLE_ANIMATION = AnimationBuilder.create(\"grapple\")\n .withKoreanName(\"잡기/꺾기\")\n .withDuration(0.5)\n .withType(\"attack\")\n // Frame 1: Catch arm\n .keyframe(0.12, \"ease-out\")\n .rotate(BoneName.SHOULDER_L, 0.4, 0.6, -0.2) // Both hands reach\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2)\n .rotate(BoneName.WRIST_L, 0, -0.3, 0) // Rotate to grab\n .rotate(BoneName.SHOULDER_R, 0.6, -0.4, 0.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 0.8)\n .rotate(BoneName.WRIST_R, 0, 0.3, 0)\n .rotate(BoneName.PELVIS, 0, 0.3, 0) // Body turns slightly\n .rotate(BoneName.SPINE_LOWER, 0, 0.25, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0.2, -0.1)\n .rotate(BoneName.KNEE_L, -0.25, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .position(BoneName.PELVIS, 0, -0.03, 0.1)\n .build()\n // Frame 2: Apply control\n .keyframe(0.25, \"linear\")\n .rotate(BoneName.SHOULDER_L, 0.2, 0.8, -0.4) // Pull down\n .rotate(BoneName.ELBOW_L, 0, 0, -1.5)\n .rotate(BoneName.WRIST_L, 0, -0.5, -0.3)\n .rotate(BoneName.SHOULDER_R, 0.3, -0.6, 0.5) // Rotate opponent's arm\n .rotate(BoneName.ELBOW_R, 0, 0, 1.2)\n .rotate(BoneName.WRIST_R, 0, 0.5, 0.2)\n .rotate(BoneName.PELVIS, 0.1, 0.5, 0)\n .rotate(BoneName.SPINE_LOWER, 0.15, 0.4, 0)\n .rotate(BoneName.SPINE_UPPER, 0.2, 0.3, -0.15)\n .rotate(BoneName.KNEE_L, -0.35, 0, 0)\n .rotate(BoneName.KNEE_R, -0.3, 0, 0)\n .position(BoneName.PELVIS, 0, -0.08, 0.08)\n .build()\n // Frame 3: Lock position\n .keyframe(0.4, \"ease-in\")\n .rotate(BoneName.SHOULDER_L, -0.1, 1.0, -0.6) // Secure lock\n .rotate(BoneName.ELBOW_L, 0, 0, -1.7)\n .rotate(BoneName.WRIST_L, 0, -0.6, -0.4)\n .rotate(BoneName.SHOULDER_R, 0.1, -0.8, 0.7)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.4)\n .rotate(BoneName.WRIST_R, 0, 0.6, 0.3)\n .rotate(BoneName.PELVIS, 0.15, 0.6, 0)\n .rotate(BoneName.SPINE_LOWER, 0.2, 0.5, 0)\n .rotate(BoneName.SPINE_UPPER, 0.25, 0.4, -0.2)\n .rotate(BoneName.KNEE_L, -0.4, 0, 0)\n .rotate(BoneName.KNEE_R, -0.35, 0, 0)\n .position(BoneName.PELVIS, 0, -0.1, 0.05)\n .build()\n // Frame 4: Hold\n .keyframe(0.5, \"linear\")\n .rotate(BoneName.SHOULDER_L, -0.1, 1.0, -0.6)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.7)\n .rotate(BoneName.SHOULDER_R, 0.1, -0.8, 0.7)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.4)\n .rotate(BoneName.PELVIS, 0.15, 0.6, 0)\n .rotate(BoneName.SPINE_LOWER, 0.2, 0.5, 0)\n .rotate(BoneName.SPINE_UPPER, 0.25, 0.4, -0.2)\n .rotate(BoneName.KNEE_L, -0.4, 0, 0)\n .rotate(BoneName.KNEE_R, -0.35, 0, 0)\n .position(BoneName.PELVIS, 0, -0.1, 0.05)\n .build()\n .build();\n\n/**\n * Counter attack animation (반격 - Bangyeok)\n *\n * Parry and counter technique from Hapkido.\n *\n * Animation phases:\n * 1. Parry (0.0s-0.1s): Deflect incoming attack\n * 2. Redirect (0.1s-0.18s): Guide opponent's momentum\n * 3. Counter (0.18s-0.28s): Strike to vulnerable point\n * 4. Recovery (0.28s-0.4s): Return to guard\n *\n * Duration: 400ms\n *\n * @korean 반격애니메이션\n */\nexport const COUNTER_ATTACK_ANIMATION = AnimationBuilder.create(\n \"counter_attack\",\n)\n .withKoreanName(\"반격\")\n .withDuration(0.4)\n .withType(\"attack\")\n // Frame 1: Parry\n .keyframe(0.1, \"ease-out\")\n .rotate(BoneName.SHOULDER_L, 0.2, 0.5, -0.8) // Parry hand\n .rotate(BoneName.ELBOW_L, 0, 0, -0.8)\n .rotate(BoneName.WRIST_L, 0, 0.4, 0)\n .rotate(BoneName.SHOULDER_R, 0, 0, 0.5) // Ready to strike\n .rotate(BoneName.ELBOW_R, 0, 0, 1.5)\n .rotate(BoneName.PELVIS, 0, -0.3, 0) // Turn away from attack\n .rotate(BoneName.SPINE_LOWER, 0, -0.25, 0)\n .rotate(BoneName.SPINE_UPPER, 0, -0.2, 0)\n .rotate(BoneName.KNEE_L, -0.3, 0, 0)\n .rotate(BoneName.KNEE_R, -0.25, 0, 0)\n .position(BoneName.PELVIS, 0, -0.02, -0.1) // Slight retreat\n .build()\n // Frame 2: Redirect\n .keyframe(0.18, \"linear\")\n .rotate(BoneName.SHOULDER_L, 0.3, 0.8, -0.5) // Guide opponent\n .rotate(BoneName.ELBOW_L, 0, 0, -1.0)\n .rotate(BoneName.WRIST_L, 0, 0.3, -0.2)\n .rotate(BoneName.SHOULDER_R, 0.2, 0, 0) // Chamber counter\n .rotate(BoneName.ELBOW_R, 0, 0, 1.8)\n .rotate(BoneName.PELVIS, 0, 0.2, 0) // Begin rotation into counter\n .rotate(BoneName.SPINE_LOWER, 0, 0.15, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0.1, 0)\n .position(BoneName.PELVIS, 0, -0.01, 0)\n .build()\n // Frame 3: Counter strike\n .keyframe(0.28, \"ease-out\")\n .rotate(BoneName.SHOULDER_L, 0.1, 0.5, -0.3) // Maintain control\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2)\n .rotate(BoneName.SHOULDER_R, -0.5, 0, 0.4) // Drive counter\n .rotate(BoneName.ELBOW_R, 0, 0, 0.3)\n .rotate(BoneName.WRIST_R, 0, 0, -0.2)\n .rotate(BoneName.PELVIS, 0, 0.5, 0) // Full rotation into strike\n .rotate(BoneName.SPINE_LOWER, 0, 0.4, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0.3, 0)\n .rotate(BoneName.KNEE_L, -0.25, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .position(BoneName.PELVIS, 0, 0, 0.1)\n .build()\n // Frame 4: Recovery\n .keyframe(0.4, \"ease-in\")\n .rotate(BoneName.SHOULDER_L, -0.6, 0.4, 0.3)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.8)\n .rotate(BoneName.SHOULDER_R, -0.6, -0.4, -0.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.8)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SPINE_LOWER, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .position(BoneName.PELVIS, 0, 0, 0)\n .build()\n .build();\n\n/**\n * Palm strike animation (장권 - Janggwon)\n *\n * Open palm heel strike from Taekwondo.\n *\n * Animation phases:\n * 1. Chamber (0.0s-0.08s): Palm pulls back\n * 2. Drive (0.08s-0.15s): Hip rotation and palm drives forward\n * 3. Impact (0.15s-0.18s): Maximum extension\n * 4. Recovery (0.18s-0.3s): Return to guard\n *\n * Duration: 300ms\n *\n * @korean 장권애니메이션\n */\nexport const PALM_STRIKE_ANIMATION = AnimationBuilder.create(\"palm_strike\")\n .withKoreanName(\"장권\")\n .withDuration(0.3)\n .withType(\"attack\")\n // Frame 1: Chamber\n .keyframe(0.08, \"linear\")\n .rotate(BoneName.SHOULDER_R, 0.2, 0, -0.3) // Pull back\n .rotate(BoneName.ELBOW_R, 0, 0, 1.6)\n .rotate(BoneName.WRIST_R, -0.8, 0, 0) // Palm faces forward\n .rotate(BoneName.SPINE_UPPER, 0, -0.2, 0) // Wind up\n .rotate(BoneName.SPINE_MIDDLE, 0, -0.15, 0)\n .rotate(BoneName.PELVIS, 0, -0.1, 0)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2) // Guard\n .build()\n // Frame 2: Drive\n .keyframe(0.15, \"ease-out\")\n .rotate(BoneName.SHOULDER_R, -0.5, 0, 0.4) // Drive forward\n .rotate(BoneName.ELBOW_R, 0, 0, 0.3) // Extend\n .rotate(BoneName.WRIST_R, -0.6, 0, 0) // Heel of palm forward\n .rotate(BoneName.SPINE_UPPER, 0, 0.3, 0) // Torso rotates\n .rotate(BoneName.SPINE_MIDDLE, 0, 0.25, 0)\n .rotate(BoneName.PELVIS, 0, 0.2, 0)\n .build()\n // Frame 3: Impact\n .keyframe(0.18, \"linear\")\n .rotate(BoneName.SHOULDER_R, -0.7, 0, 0.5) // Full extension\n .rotate(BoneName.ELBOW_R, 0, 0, 0.05)\n .rotate(BoneName.WRIST_R, -0.5, 0, 0.1)\n .rotate(BoneName.SPINE_UPPER, 0, 0.4, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0, 0.35, 0)\n .rotate(BoneName.PELVIS, 0, 0.25, 0)\n .build()\n // Frame 4: Recovery\n .keyframe(0.3, \"ease-in\")\n .rotate(BoneName.SHOULDER_R, -0.6, -0.4, -0.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.8)\n .rotate(BoneName.WRIST_R, 0, 0, 0)\n .rotate(BoneName.SHOULDER_L, -0.6, 0.4, 0.3)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.8)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .build()\n .build();\n\n/**\n * Hook punch animation (후크 - 횡타)\n *\n * Circular punch targeting the side of the head. Power technique.\n *\n * Animation phases:\n * 1. Wind-up (0.0s): Arm pulls to side\n * 2. Arc swing (0.1s): Arm swings in horizontal arc\n * 3. Impact (0.15s): Fist connects at temple level\n * 4. Recovery (0.3s): Return to guard\n *\n * Duration: 300ms\n *\n * @korean 후크애니메이션\n */\nexport const HOOK_ANIMATION = AnimationBuilder.create(\"hook\")\n .withKoreanName(\"후크\")\n .withDuration(0.3)\n .withType(\"attack\")\n // Wind-up: arm pulls back and to side\n .keyframe(0.0, \"linear\")\n .rotate(BoneName.SHOULDER_R, 0.1, -0.6, -0.5) // Shoulder rotated out\n .rotate(BoneName.ELBOW_R, 0, 0, 1.57) // 90° bend\n .rotate(BoneName.SPINE_UPPER, 0, -0.3, 0) // Torso twisted back\n .rotate(BoneName.PELVIS, 0, -0.2, 0) // Hip loaded\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2) // Guard\n .build()\n // Arc swing: horizontal sweep\n .keyframe(0.1, \"ease-out\")\n .rotate(BoneName.SHOULDER_R, 0, 0.4, 0.3) // Shoulder drives across\n .rotate(BoneName.ELBOW_R, 0, 0, 1.4) // Elbow stays bent\n .rotate(BoneName.SPINE_UPPER, 0, 0.4, 0) // Torso rotates into punch\n .rotate(BoneName.SPINE_MIDDLE, 0, 0.3, 0)\n .rotate(BoneName.PELVIS, 0, 0.25, 0) // Hip rotation for power\n .build()\n // Impact: full rotation\n .keyframe(0.15, \"linear\")\n .rotate(BoneName.SHOULDER_R, -0.1, 0.6, 0.4) // Full horizontal\n .rotate(BoneName.ELBOW_R, 0, 0, 1.35) // Elbow locked at angle\n .rotate(BoneName.WRIST_R, 0, 0.2, 0) // Wrist aligned\n .rotate(BoneName.SPINE_UPPER, 0, 0.5, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0, 0.4, 0)\n .rotate(BoneName.PELVIS, 0, 0.35, 0)\n .build()\n // Recovery: return to guard\n .keyframe(0.3, \"ease-in\")\n .rotate(BoneName.SHOULDER_R, -0.6, -0.4, -0.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.8)\n .rotate(BoneName.SHOULDER_L, -0.6, 0.4, 0.3)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.8)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .build()\n .build();\n\n/**\n * Low kick animation (하단차기 - 낮은차기)\n *\n * Low sweeping kick targeting opponent's thighs or calves.\n * Used to destabilize and damage legs.\n *\n * Animation phases:\n * 1. Chamber (0.0s): Small knee lift\n * 2. Swing (0.12s): Leg sweeps low horizontally\n * 3. Impact (0.18s): Shin connects at thigh height\n * 4. Recovery (0.35s): Return to stance\n *\n * Duration: 350ms\n *\n * @korean 하단차기애니메이션\n */\nexport const LOW_KICK_ANIMATION = AnimationBuilder.create(\"low_kick\")\n .withKoreanName(\"하단차기\")\n .withDuration(0.35)\n .withType(\"attack\")\n // Chamber: small lift\n .keyframe(0.0, \"linear\")\n .rotate(BoneName.HIP_R, 0.5, 0, 0.3) // Low hip flexion\n .rotate(BoneName.KNEE_R, -0.8, 0, 0) // Knee bent\n .rotate(BoneName.KNEE_L, -0.2, 0, 0) // Support knee bent\n .rotate(BoneName.PELVIS, 0, -0.2, 0) // Slight turn\n .rotate(BoneName.SHOULDER_L, -0.6, 0.4, 0.3) // High guard\n .rotate(BoneName.ELBOW_L, 0, 0, -1.6)\n .build()\n // Swing: low horizontal sweep\n .keyframe(0.12, \"ease-out\")\n .rotate(BoneName.HIP_R, 0.4, 0, 1.2) // Hip rotates out\n .rotate(BoneName.KNEE_R, -0.3, 0, 0) // Leg extends\n .rotate(BoneName.FOOT_R, 0.2, 0, 0.2) // Ankle pointed\n .rotate(BoneName.PELVIS, 0, -0.8, 0) // Full hip rotation\n .rotate(BoneName.SPINE_UPPER, 0, 0.4, 0) // Counter-rotate\n .rotate(BoneName.KNEE_L, -0.4, 0, 0) // Lower for stability\n .build()\n // Impact: shin at thigh height\n .keyframe(0.18, \"linear\")\n .rotate(BoneName.HIP_R, 0.3, 0, 1.5) // Full rotation\n .rotate(BoneName.KNEE_R, -0.15, 0, 0) // Nearly straight\n .rotate(BoneName.FOOT_R, 0.3, 0, 0.3)\n .rotate(BoneName.PELVIS, 0, -1.2, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0.6, 0)\n .build()\n // Recovery: return to stance\n .keyframe(0.35, \"ease-in\")\n .rotate(BoneName.HIP_R, 0, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.FOOT_R, 0, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.SHOULDER_R, -0.6, -0.4, -0.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.8)\n .build()\n .build();\n\n/**\n * Slam animation (슬램 - 내던지기)\n *\n * Powerful lifting and slamming throw. High damage grappling technique.\n *\n * Animation phases:\n * 1. Clinch (0.0s): Grab and secure opponent\n * 2. Lift (0.2s): Hoist opponent up\n * 3. Slam (0.35s): Drive opponent down\n * 4. Recovery (0.5s): Return to stance\n *\n * Duration: 500ms\n *\n * @korean 슬램애니메이션\n */\nexport const SLAM_ANIMATION = AnimationBuilder.create(\"slam\")\n .withKoreanName(\"슬램\")\n .withDuration(0.5)\n .withType(\"attack\")\n // Clinch: grab opponent\n .keyframe(0.0, \"linear\")\n .rotate(BoneName.SHOULDER_L, 0.6, 0.4, -0.5) // Arms wrap around\n .rotate(BoneName.ELBOW_L, 0, 0, -1.3)\n .rotate(BoneName.SHOULDER_R, 0.6, -0.4, 0.5)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.3)\n .rotate(BoneName.KNEE_L, -0.4, 0, 0) // Deep stance\n .rotate(BoneName.KNEE_R, -0.4, 0, 0)\n .rotate(BoneName.PELVIS, 0.2, 0, 0) // Lean in\n .build()\n // Lift: hoist up\n .keyframe(0.2, \"ease-out\")\n .rotate(BoneName.SHOULDER_L, 0.9, 0.2, -0.3) // Arms lift high\n .rotate(BoneName.ELBOW_L, 0, 0, -0.8)\n .rotate(BoneName.SHOULDER_R, 0.9, -0.2, 0.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 0.8)\n .rotate(BoneName.KNEE_L, -0.1, 0, 0) // Standing tall\n .rotate(BoneName.KNEE_R, -0.1, 0, 0)\n .rotate(BoneName.PELVIS, -0.3, 0, 0) // Lean back\n .rotate(BoneName.SPINE_UPPER, -0.2, 0, 0) // Arched back\n .position(BoneName.PELVIS, 0, 0.1, 0) // Slight rise\n .build()\n // Slam: drive down\n .keyframe(0.35, \"ease-in\")\n .rotate(BoneName.SHOULDER_L, 0.3, 0.3, -0.6) // Arms drive down\n .rotate(BoneName.ELBOW_L, 0, 0, -1.4)\n .rotate(BoneName.SHOULDER_R, 0.3, -0.3, 0.6)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.4)\n .rotate(BoneName.KNEE_L, -0.6, 0, 0) // Deep squat\n .rotate(BoneName.KNEE_R, -0.6, 0, 0)\n .rotate(BoneName.PELVIS, 0.4, 0, 0) // Lean forward\n .rotate(BoneName.SPINE_UPPER, 0.3, 0, 0) // Forward bend\n .rotate(BoneName.SPINE_MIDDLE, 0.2, 0, 0)\n .position(BoneName.PELVIS, 0, -0.15, 0.2) // Low position\n .build()\n // Recovery\n .keyframe(0.5, \"ease-in\")\n .rotate(BoneName.SHOULDER_L, -0.6, 0.4, 0.3)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.8)\n .rotate(BoneName.SHOULDER_R, -0.6, -0.4, -0.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.8)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .rotate(BoneName.KNEE_R, -0.2, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0, 0, 0)\n .position(BoneName.PELVIS, 0, 0, 0)\n .build()\n .build();\n\n/**\n * Wrist lock animation (손목꺾기 - 손목관절기)\n *\n * Joint lock targeting the wrist. Painful control technique.\n *\n * Animation phases:\n * 1. Grab (0.0s): Secure opponent's wrist\n * 2. Control (0.15s): Two-hand grip\n * 3. Lock (0.3s): Apply rotational pressure\n * 4. Hold (0.4s): Maintain lock position\n *\n * Duration: 400ms\n *\n * @korean 손목꺾기애니메이션\n */\nexport const WRIST_LOCK_ANIMATION = AnimationBuilder.create(\"wrist_lock\")\n .withKoreanName(\"손목꺾기\")\n .withDuration(0.4)\n .withType(\"attack\")\n // Grab: secure wrist\n .keyframe(0.0, \"linear\")\n .rotate(BoneName.SHOULDER_R, 0.4, 0, 0.2) // Reach forward\n .rotate(BoneName.ELBOW_R, 0, 0, 0.6) // Arm extended\n .rotate(BoneName.WRIST_R, 0, -0.3, 0) // Palm faces opponent\n .rotate(BoneName.SHOULDER_L, 0.3, 0.2, -0.1) // Support hand\n .rotate(BoneName.ELBOW_L, 0, 0, -0.8)\n .rotate(BoneName.KNEE_L, -0.3, 0, 0) // Stable stance\n .rotate(BoneName.KNEE_R, -0.3, 0, 0)\n .build()\n // Control: two-hand grip\n .keyframe(0.15, \"ease-out\")\n .rotate(BoneName.SHOULDER_R, 0.2, 0.3, 0.4) // Hands come together\n .rotate(BoneName.ELBOW_R, 0, 0, 1.0)\n .rotate(BoneName.WRIST_R, 0.3, -0.4, 0.2) // Grip position\n .rotate(BoneName.SHOULDER_L, 0.3, 0.4, -0.3) // Both hands on wrist\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2)\n .rotate(BoneName.WRIST_L, -0.2, 0.3, 0)\n .rotate(BoneName.PELVIS, 0, 0.2, 0) // Body turns\n .rotate(BoneName.SPINE_UPPER, 0, 0.15, 0)\n .build()\n // Lock: apply pressure\n .keyframe(0.3, \"ease-in\")\n .rotate(BoneName.SHOULDER_R, -0.1, 0.5, 0.6) // Rotate wrist down\n .rotate(BoneName.ELBOW_R, 0, 0, 1.3)\n .rotate(BoneName.WRIST_R, 0.5, -0.5, 0.4) // Twist\n .rotate(BoneName.SHOULDER_L, 0.1, 0.6, -0.4) // Counter-pressure\n .rotate(BoneName.ELBOW_L, 0, 0, -1.4)\n .rotate(BoneName.WRIST_L, -0.3, 0.4, -0.2)\n .rotate(BoneName.PELVIS, 0, 0.4, 0) // Body supports lock\n .rotate(BoneName.SPINE_UPPER, 0.1, 0.3, 0) // Lean in\n .rotate(BoneName.KNEE_L, -0.4, 0, 0) // Lower for control\n .build()\n // Hold: maintain position\n .keyframe(0.4, \"linear\")\n .rotate(BoneName.SHOULDER_R, -0.1, 0.5, 0.6)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.3)\n .rotate(BoneName.WRIST_R, 0.5, -0.5, 0.4)\n .rotate(BoneName.SHOULDER_L, 0.1, 0.6, -0.4)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.4)\n .rotate(BoneName.WRIST_L, -0.3, 0.4, -0.2)\n .rotate(BoneName.PELVIS, 0, 0.4, 0)\n .rotate(BoneName.SPINE_UPPER, 0.1, 0.3, 0)\n .rotate(BoneName.KNEE_L, -0.4, 0, 0)\n .build()\n .build();\n\n/**\n * Arm bar animation (팔꺾기 - 팔관절기)\n *\n * Arm lock submission technique. Hyperextends the elbow.\n *\n * Animation phases:\n * 1. Grab (0.0s): Secure opponent's arm\n * 2. Control (0.2s): Pull arm across body\n * 3. Drop (0.35s): Go to ground position\n * 4. Lock (0.5s): Apply elbow pressure\n *\n * Duration: 500ms\n *\n * @korean 팔꺾기애니메이션\n */\nexport const ARM_BAR_ANIMATION = AnimationBuilder.create(\"arm_bar\")\n .withKoreanName(\"팔꺾기\")\n .withDuration(0.5)\n .withType(\"attack\")\n // Grab: secure arm\n .keyframe(0.0, \"linear\")\n .rotate(BoneName.SHOULDER_R, 0.5, 0.3, 0.3) // Reach for arm\n .rotate(BoneName.ELBOW_R, 0, 0, 0.8)\n .rotate(BoneName.SHOULDER_L, 0.4, -0.2, -0.2) // Support hand\n .rotate(BoneName.ELBOW_L, 0, 0, -0.9)\n .rotate(BoneName.KNEE_L, -0.3, 0, 0)\n .rotate(BoneName.KNEE_R, -0.3, 0, 0)\n .build()\n // Control: pull across\n .keyframe(0.2, \"ease-out\")\n .rotate(BoneName.SHOULDER_R, 0.2, 0.6, 0.5) // Arms wrap arm\n .rotate(BoneName.ELBOW_R, 0, 0, 1.4)\n .rotate(BoneName.SHOULDER_L, 0.3, 0.5, -0.4)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.3)\n .rotate(BoneName.PELVIS, 0.2, 0.5, 0) // Turn body\n .rotate(BoneName.SPINE_UPPER, 0.1, 0.4, 0)\n .build()\n // Drop: go to ground\n .keyframe(0.35, \"ease-in\")\n .rotate(BoneName.SHOULDER_R, -0.2, 0.8, 0.7)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.5)\n .rotate(BoneName.SHOULDER_L, 0.1, 0.7, -0.5)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.5)\n .rotate(BoneName.PELVIS, 0.8, 0.3, 0) // Lean back for drop\n .rotate(BoneName.SPINE_UPPER, 0.6, 0.2, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0.4, 0.1, 0)\n .rotate(BoneName.HIP_R, 1.2, 0, 0.3) // Legs go up\n .rotate(BoneName.KNEE_R, -0.5, 0, 0)\n .rotate(BoneName.HIP_L, 1.0, 0, -0.2)\n .rotate(BoneName.KNEE_L, -0.4, 0, 0)\n .position(BoneName.PELVIS, 0, -0.3, 0) // Lower position\n .build()\n // Lock: apply pressure\n .keyframe(0.5, \"linear\")\n .rotate(BoneName.SHOULDER_R, -0.3, 0.9, 0.8)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.6)\n .rotate(BoneName.SHOULDER_L, 0, 0.8, -0.6)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.6)\n .rotate(BoneName.PELVIS, 1.0, 0.2, 0) // Full recline\n .rotate(BoneName.SPINE_UPPER, 0.7, 0.15, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0.5, 0.1, 0)\n .rotate(BoneName.HIP_R, 1.4, 0, 0.4) // Legs over opponent\n .rotate(BoneName.KNEE_R, -0.3, 0, 0)\n .rotate(BoneName.HIP_L, 1.2, 0, -0.3)\n .rotate(BoneName.KNEE_L, -0.2, 0, 0)\n .position(BoneName.PELVIS, 0, -0.4, -0.1) // Ground position\n .build()\n .build();\n\n/**\n * Counter strike animation (반격 - 반격타격)\n *\n * Quick counter-attack after parrying. Exploits opponent's opening.\n *\n * Animation phases:\n * 1. Parry (0.0s): Deflect incoming attack\n * 2. Open (0.08s): Create opening\n * 3. Strike (0.15s): Fast counter punch\n * 4. Recovery (0.25s): Return to guard\n *\n * Duration: 250ms\n *\n * @korean 반격애니메이션\n */\nexport const COUNTER_STRIKE_ANIMATION = AnimationBuilder.create(\n \"counter_strike\",\n)\n .withKoreanName(\"반격\")\n .withDuration(0.25)\n .withType(\"attack\")\n // Parry: deflect\n .keyframe(0.0, \"linear\")\n .rotate(BoneName.SHOULDER_L, 0.2, 0.5, -0.6) // Parrying arm\n .rotate(BoneName.ELBOW_L, 0, 0, -0.9)\n .rotate(BoneName.WRIST_L, 0, 0.3, 0) // Palm out\n .rotate(BoneName.SHOULDER_R, 0.1, 0, -0.2) // Counter arm ready\n .rotate(BoneName.ELBOW_R, 0, 0, 1.5)\n .rotate(BoneName.PELVIS, 0, -0.2, 0) // Slight turn\n .rotate(BoneName.KNEE_L, -0.25, 0, 0)\n .rotate(BoneName.KNEE_R, -0.3, 0, 0)\n .build()\n // Open: create gap\n .keyframe(0.08, \"ease-out\")\n .rotate(BoneName.SHOULDER_L, 0.3, 0.7, -0.5) // Push away\n .rotate(BoneName.ELBOW_L, 0, 0, -0.7)\n .rotate(BoneName.SHOULDER_R, 0.2, 0, -0.3) // Load counter\n .rotate(BoneName.ELBOW_R, 0, 0, 1.6)\n .rotate(BoneName.SPINE_UPPER, 0, -0.2, 0)\n .rotate(BoneName.PELVIS, 0, -0.15, 0)\n .build()\n // Strike: counter punch\n .keyframe(0.15, \"ease-out\")\n .rotate(BoneName.SHOULDER_R, -0.6, 0, 0.4) // Fast extension\n .rotate(BoneName.ELBOW_R, 0, 0, 0.1) // Full extend\n .rotate(BoneName.WRIST_R, 0, 0, -0.2)\n .rotate(BoneName.SHOULDER_L, 0.1, 0.3, -0.4) // Guard returns\n .rotate(BoneName.ELBOW_L, 0, 0, -1.2)\n .rotate(BoneName.SPINE_UPPER, 0, 0.35, 0) // Torso rotates\n .rotate(BoneName.SPINE_MIDDLE, 0, 0.25, 0)\n .rotate(BoneName.PELVIS, 0, 0.2, 0)\n .build()\n // Recovery: guard\n .keyframe(0.25, \"ease-in\")\n .rotate(BoneName.SHOULDER_R, -0.6, -0.4, -0.3)\n .rotate(BoneName.ELBOW_R, 0, 0, 1.8)\n .rotate(BoneName.SHOULDER_L, -0.6, 0.4, 0.3)\n .rotate(BoneName.ELBOW_L, 0, 0, -1.8)\n .rotate(BoneName.SPINE_UPPER, 0, 0, 0)\n .rotate(BoneName.SPINE_MIDDLE, 0, 0, 0)\n .rotate(BoneName.PELVIS, 0, 0, 0)\n .rotate(BoneName.WRIST_R, 0, 0, 0)\n .build()\n .build();\n\n/**\n * All skeletal animations mapped by name\n *\n * Includes attack, defense, movement, and idle animations.\n *\n * @korean 모든골격애니메이션\n */\nexport const ATTACK_ANIMATIONS = new Map<string, SkeletalAnimation>([\n [\"jab\", JAB_ANIMATION],\n [\"cross\", CROSS_ANIMATION],\n [\"hook\", HOOK_ANIMATION],\n [\"front_kick\", FRONT_KICK_ANIMATION],\n [\"roundhouse_kick\", ROUNDHOUSE_KICK_ANIMATION],\n [\"side_kick\", SIDE_KICK_ANIMATION],\n [\"axe_kick\", AXE_KICK_ANIMATION],\n [\"back_kick\", BACK_KICK_ANIMATION],\n [\"tornado_kick\", TORNADO_KICK_ANIMATION],\n [\"jumping_kick\", JUMPING_KICK_ANIMATION],\n [\"low_kick\", LOW_KICK_ANIMATION],\n [\"elbow_strike\", ELBOW_STRIKE_ANIMATION],\n [\"elbow_uppercut\", ELBOW_UPPERCUT_ANIMATION],\n [\"knee_strike\", KNEE_STRIKE_ANIMATION],\n [\"block\", BLOCK_ANIMATION],\n [\"sweep\", SWEEP_ANIMATION],\n [\"throw\", THROW_ANIMATION],\n [\"slam\", SLAM_ANIMATION],\n [\"grapple\", GRAPPLE_ANIMATION],\n [\"wrist_lock\", WRIST_LOCK_ANIMATION],\n [\"arm_bar\", ARM_BAR_ANIMATION],\n [\"counter_attack\", COUNTER_ATTACK_ANIMATION],\n [\"counter_strike\", COUNTER_STRIKE_ANIMATION],\n [\"palm_strike\", PALM_STRIKE_ANIMATION],\n [\"walk\", WALK_ANIMATION],\n [\"idle_stance\", IDLE_STANCE_ANIMATION],\n [\"forward_dash\", FORWARD_DASH_ANIMATION],\n [\"backward_retreat\", BACKWARD_RETREAT_ANIMATION],\n [\"side_step\", SIDE_STEP_ANIMATION],\n]);\n\n/**\n * Get animation by name\n *\n * @param name - Animation name\n * @returns Skeletal animation or undefined\n *\n * @korean 애니메이션가져오기\n * @deprecated Use getAnimation from AnimationRegistry instead for full animation support\n */\nexport const getAnimation = (name: string): SkeletalAnimation | undefined => {\n return ATTACK_ANIMATIONS.get(name);\n};\n"],"mappings":"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"}