blacktrigram 0.7.47 → 0.7.49

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 (471) 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 +29 -25
  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.d.ts.map +1 -1
  38. package/lib/components/screens/combat/components/hud/CombatBottomHUD.js +2 -2
  39. package/lib/components/screens/combat/components/hud/CombatBottomHUD.js.map +1 -1
  40. package/lib/components/screens/combat/components/hud/CombatLeftHUD.js.map +1 -1
  41. package/lib/components/screens/combat/components/hud/CombatPortraitStatusStrip.js +1 -1
  42. package/lib/components/screens/combat/components/hud/CombatPortraitStatusStrip.js.map +1 -1
  43. package/lib/components/screens/combat/components/hud/CombatRightHUD.js.map +1 -1
  44. package/lib/components/screens/combat/components/hud/CombatTopHUD.d.ts.map +1 -1
  45. package/lib/components/screens/combat/components/hud/CombatTopHUD.js +2 -1
  46. package/lib/components/screens/combat/components/hud/CombatTopHUD.js.map +1 -1
  47. package/lib/components/screens/combat/components/hud/DifficultyIndicator.js.map +1 -1
  48. package/lib/components/screens/combat/components/hud/FPSMonitor.js.map +1 -1
  49. package/lib/components/screens/combat/components/hud/MobileControlsWrapper.js.map +1 -1
  50. package/lib/components/screens/combat/components/hud/PlayerStateOverlayHtml.js.map +1 -1
  51. package/lib/components/screens/combat/components/indicators/BalanceIndicator.js.map +1 -1
  52. package/lib/components/screens/combat/components/indicators/InputBufferDisplay.js.map +1 -1
  53. package/lib/components/screens/combat/components/indicators/StaminaWarning.js.map +1 -1
  54. package/lib/components/screens/combat/components/indicators/TechniqueNameDisplay.js.map +1 -1
  55. package/lib/components/screens/combat/helpers/AnimationUpdater.d.ts.map +1 -1
  56. package/lib/components/screens/combat/helpers/AnimationUpdater.js +4 -2
  57. package/lib/components/screens/combat/helpers/AnimationUpdater.js.map +1 -1
  58. package/lib/components/screens/combat/helpers/combatHelpers.js.map +1 -1
  59. package/lib/components/screens/combat/hooks/useAICombat.js.map +1 -1
  60. package/lib/components/screens/combat/hooks/useCombatActions.js.map +1 -1
  61. package/lib/components/screens/combat/hooks/useCombatAttackMovement.js.map +1 -1
  62. package/lib/components/screens/combat/hooks/useCombatAudio.js.map +1 -1
  63. package/lib/components/screens/combat/hooks/useCombatLayout.d.ts.map +1 -1
  64. package/lib/components/screens/combat/hooks/useCombatLayout.js +11 -5
  65. package/lib/components/screens/combat/hooks/useCombatLayout.js.map +1 -1
  66. package/lib/components/screens/combat/hooks/useCombatState.js.map +1 -1
  67. package/lib/components/screens/controls/ControlsScreen3D.js +1 -1
  68. package/lib/components/screens/controls/ControlsScreen3D.js.map +1 -1
  69. package/lib/components/screens/controls/components/ControlBindingsOverlayHtml.js.map +1 -1
  70. package/lib/components/screens/controls/components/ControlCategoryTabsOverlayHtml.js.map +1 -1
  71. package/lib/components/screens/controls/components/GamepadVisualization3D.js.map +1 -1
  72. package/lib/components/screens/controls/components/InteractiveControlDemoOverlayHtml.js.map +1 -1
  73. package/lib/components/screens/controls/components/Key3D.js.map +1 -1
  74. package/lib/components/screens/controls/components/VisualKeyboard3D.js.map +1 -1
  75. package/lib/components/screens/controls/constants/ControlsConstants.js.map +1 -1
  76. package/lib/components/screens/controls/hooks/useControlsState.js.map +1 -1
  77. package/lib/components/screens/endscreen/EndScreen3D.js.map +1 -1
  78. package/lib/components/screens/endscreen/components/DefeatAnimation3D.js.map +1 -1
  79. package/lib/components/screens/endscreen/components/MatchStatisticsDisplayOverlayHtml.js.map +1 -1
  80. package/lib/components/screens/endscreen/components/NavigationButtonsOverlayHtml.js.map +1 -1
  81. package/lib/components/screens/endscreen/components/PerformanceBreakdownOverlayHtml.js.map +1 -1
  82. package/lib/components/screens/endscreen/components/PerformanceRatingOverlayHtml.js.map +1 -1
  83. package/lib/components/screens/endscreen/components/VictoryAnimation3D.js.map +1 -1
  84. package/lib/components/screens/endscreen/components/WinnerDisplayOverlayHtml.js.map +1 -1
  85. package/lib/components/screens/intro/IntroScreen3D.js +1 -1
  86. package/lib/components/screens/intro/IntroScreen3D.js.map +1 -1
  87. package/lib/components/screens/intro/components/AbilityListOverlayHtml.js.map +1 -1
  88. package/lib/components/screens/intro/components/ArchetypeCardGridOverlayHtml.js.map +1 -1
  89. package/lib/components/screens/intro/components/ArchetypeCardOverlayHtml.js.map +1 -1
  90. package/lib/components/screens/intro/components/ArchetypeDisplayOverlayHtml.js.map +1 -1
  91. package/lib/components/screens/intro/components/EnhancedArchetypeDisplayOverlayHtml.js.map +1 -1
  92. package/lib/components/screens/intro/components/MenuButtonsOverlayHtml.js.map +1 -1
  93. package/lib/components/screens/intro/components/MenuSectionOverlayHtml.js.map +1 -1
  94. package/lib/components/screens/intro/components/StatBarOverlayHtml.js.map +1 -1
  95. package/lib/components/screens/philosophy/PhilosophyScreen3D.js +1 -1
  96. package/lib/components/screens/philosophy/PhilosophyScreen3D.js.map +1 -1
  97. package/lib/components/screens/training/TrainingScreen3D.d.ts.map +1 -1
  98. package/lib/components/screens/training/TrainingScreen3D.js +3 -11
  99. package/lib/components/screens/training/TrainingScreen3D.js.map +1 -1
  100. package/lib/components/screens/training/components/AnatomyControlsOverlayHtml.js.map +1 -1
  101. package/lib/components/screens/training/components/AnatomyOverlay3D.js.map +1 -1
  102. package/lib/components/screens/training/components/FootPlacementMarkers3D.js.map +1 -1
  103. package/lib/components/screens/training/components/FootworkDrillsOverlayHtml.js.map +1 -1
  104. package/lib/components/screens/training/components/HitFeedbackEffect3D.js.map +1 -1
  105. package/lib/components/screens/training/components/TrainingButtonsOverlayHtml.js.map +1 -1
  106. package/lib/components/screens/training/components/TrainingControlsOverlayHtml.js.map +1 -1
  107. package/lib/components/screens/training/components/TrainingDummy3D.js.map +1 -1
  108. package/lib/components/screens/training/components/TrainingFeedbackOverlayHtml.js.map +1 -1
  109. package/lib/components/screens/training/components/TrainingModeSelectorOverlayHtml.js.map +1 -1
  110. package/lib/components/screens/training/components/TrainingStatsOverlayHtml.js.map +1 -1
  111. package/lib/components/screens/training/components/VitalPointMarker3D.js.map +1 -1
  112. package/lib/components/screens/training/components/VitalPointTrainingOverlayHtml.js.map +1 -1
  113. package/lib/components/screens/training/components/hud/TrainingBottomHUD.d.ts.map +1 -1
  114. package/lib/components/screens/training/components/hud/TrainingBottomHUD.js +2 -2
  115. package/lib/components/screens/training/components/hud/TrainingBottomHUD.js.map +1 -1
  116. package/lib/components/screens/training/components/hud/TrainingLeftHUD.js.map +1 -1
  117. package/lib/components/screens/training/components/hud/TrainingRightHUD.js.map +1 -1
  118. package/lib/components/screens/training/components/hud/TrainingTopHUD.js.map +1 -1
  119. package/lib/components/screens/training/hooks/useAttackMovement.js.map +1 -1
  120. package/lib/components/screens/training/hooks/useTrainingActions.d.ts +1 -0
  121. package/lib/components/screens/training/hooks/useTrainingActions.d.ts.map +1 -1
  122. package/lib/components/screens/training/hooks/useTrainingActions.js +6 -4
  123. package/lib/components/screens/training/hooks/useTrainingActions.js.map +1 -1
  124. package/lib/components/screens/training/hooks/useTrainingLayout.d.ts.map +1 -1
  125. package/lib/components/screens/training/hooks/useTrainingLayout.js +11 -5
  126. package/lib/components/screens/training/hooks/useTrainingLayout.js.map +1 -1
  127. package/lib/components/screens/training/hooks/useTrainingState.js.map +1 -1
  128. package/lib/components/shared/base/BaseButton.js.map +1 -1
  129. package/lib/components/shared/base/BaseButtonOverlayHtml.js.map +1 -1
  130. package/lib/components/shared/base/BasePanel.js.map +1 -1
  131. package/lib/components/shared/base/BaseText.js.map +1 -1
  132. package/lib/components/shared/base/useKoreanTheme.js.map +1 -1
  133. package/lib/components/shared/debug/PerformanceDebugOverlayHtml.js.map +1 -1
  134. package/lib/components/shared/mobile/ActionButtons.js.map +1 -1
  135. package/lib/components/shared/mobile/GestureRecognizerPure.js.map +1 -1
  136. package/lib/components/shared/mobile/HapticController.js.map +1 -1
  137. package/lib/components/shared/mobile/MobileControlsPure.js.map +1 -1
  138. package/lib/components/shared/mobile/StanceWheelPure.js.map +1 -1
  139. package/lib/components/shared/mobile/TouchOptimizer.js.map +1 -1
  140. package/lib/components/shared/mobile/VirtualDPad.js.map +1 -1
  141. package/lib/components/shared/three/anatomy/BodySurface.js.map +1 -1
  142. package/lib/components/shared/three/anatomy/BoneAttachedMuscles.js.map +1 -1
  143. package/lib/components/shared/three/anatomy/BoneClothing.js.map +1 -1
  144. package/lib/components/shared/three/anatomy/BoneRenderer.js.map +1 -1
  145. package/lib/components/shared/three/anatomy/Face3D.js.map +1 -1
  146. package/lib/components/shared/three/anatomy/Foot3D.js.map +1 -1
  147. package/lib/components/shared/three/anatomy/Hand3D.js.map +1 -1
  148. package/lib/components/shared/three/effects/ActionFeedback.js.map +1 -1
  149. package/lib/components/shared/three/effects/DamageNumbers.js.map +1 -1
  150. package/lib/components/shared/three/effects/HitEffects3D.js.map +1 -1
  151. package/lib/components/shared/three/effects/PlayerStateIndicators.js.map +1 -1
  152. package/lib/components/shared/three/effects/StanceSymbol3D.js.map +1 -1
  153. package/lib/components/shared/three/effects/StanceTransitionEffect.js.map +1 -1
  154. package/lib/components/shared/three/effects/VitalPointMarkers3D.js.map +1 -1
  155. package/lib/components/shared/three/indicators/ElementalColorSystem.js.map +1 -1
  156. package/lib/components/shared/three/indicators/GuardIndicator.js.map +1 -1
  157. package/lib/components/shared/three/indicators/HapticFeedback.js.map +1 -1
  158. package/lib/components/shared/three/indicators/StanceChangeIndicator.js.map +1 -1
  159. package/lib/components/shared/three/models/Player3DWithTransitions.js.map +1 -1
  160. package/lib/components/shared/three/models/SkeletalPlayer3D.d.ts.map +1 -1
  161. package/lib/components/shared/three/models/SkeletalPlayer3D.js +7 -5
  162. package/lib/components/shared/three/models/SkeletalPlayer3D.js.map +1 -1
  163. package/lib/components/shared/three/optimization/AdaptiveQuality.js.map +1 -1
  164. package/lib/components/shared/three/scene/AtmosphericParticles3D.js.map +1 -1
  165. package/lib/components/shared/three/scene/BackgroundScene3D.js.map +1 -1
  166. package/lib/components/shared/three/scene/CombatArena3D.js.map +1 -1
  167. package/lib/components/shared/three/scene/KoreanSignage3D.js.map +1 -1
  168. package/lib/components/shared/three/ui/ArchetypeCard.js.map +1 -1
  169. package/lib/components/shared/three/ui/BodyPartHealthDisplay.js.map +1 -1
  170. package/lib/components/shared/three/ui/BreathingIndicator2.js.map +1 -1
  171. package/lib/components/shared/three/ui/CombatReadinessBar.js.map +1 -1
  172. package/lib/components/shared/three/ui/ComboCounter.js.map +1 -1
  173. package/lib/components/shared/three/ui/HealthBar.js.map +1 -1
  174. package/lib/components/shared/three/ui/KoreanButton.js.map +1 -1
  175. package/lib/components/shared/three/ui/KoreanPanel.js.map +1 -1
  176. package/lib/components/shared/three/ui/KoreanText.js.map +1 -1
  177. package/lib/components/shared/three/ui/MenuList.js.map +1 -1
  178. package/lib/components/shared/three/ui/PlayerHUD.js.map +1 -1
  179. package/lib/components/shared/three/ui/ProgressBar.js.map +1 -1
  180. package/lib/components/shared/three/ui/SpeedIndicatorHUD.js.map +1 -1
  181. package/lib/components/shared/three/ui/StaminaBar.js.map +1 -1
  182. package/lib/components/shared/three/ui/TechniqueBar.js.map +1 -1
  183. package/lib/components/shared/three/ui/TechniqueCard.js.map +1 -1
  184. package/lib/components/shared/three/ui/VitalPointOverlayControlsHtml.js.map +1 -1
  185. package/lib/components/shared/ui/BackButton.js.map +1 -1
  186. package/lib/components/shared/ui/BaseHUDContainer.js.map +1 -1
  187. package/lib/components/shared/ui/CombatTimer.js.map +1 -1
  188. package/lib/components/shared/ui/ErrorModal.js.map +1 -1
  189. package/lib/components/shared/ui/LoadingState.js.map +1 -1
  190. package/lib/components/shared/ui/SplashScreen.js +2 -2
  191. package/lib/components/shared/ui/SplashScreen.js.map +1 -1
  192. package/lib/components/shared/ui/VitalPointOverlayControlsPure.js.map +1 -1
  193. package/lib/components/shared/ui/VolumeControl.js.map +1 -1
  194. package/lib/components/shared/ui/shared/ConfirmDialog.js.map +1 -1
  195. package/lib/components/ui/combat/BalanceIndicatorOverlayHtml.js.map +1 -1
  196. package/lib/constants/bodyDimensions.js.map +1 -1
  197. package/lib/constants/bodyRenderingConstants.js.map +1 -1
  198. package/lib/data/archetypeClothing.js.map +1 -1
  199. package/lib/data/archetypePhysicalAttributes.js.map +1 -1
  200. package/lib/data/techniqueMappings.js.map +1 -1
  201. package/lib/data/techniques.js.map +1 -1
  202. package/lib/hooks/useActionFeedback.js.map +1 -1
  203. package/lib/hooks/useBalanceAnimations.js.map +1 -1
  204. package/lib/hooks/useCombatTimer.js.map +1 -1
  205. package/lib/hooks/useDebounce.js.map +1 -1
  206. package/lib/hooks/useHUDLayout.d.ts.map +1 -1
  207. package/lib/hooks/useHUDLayout.js +3 -2
  208. package/lib/hooks/useHUDLayout.js.map +1 -1
  209. package/lib/hooks/useHandPoseTransitions.js.map +1 -1
  210. package/lib/hooks/useKeyboardControls.js.map +1 -1
  211. package/lib/hooks/useMatchCountdown.js.map +1 -1
  212. package/lib/hooks/useMuscleActivation.js.map +1 -1
  213. package/lib/hooks/usePauseMenu.js.map +1 -1
  214. package/lib/hooks/usePlayerAnimation.js.map +1 -1
  215. package/lib/hooks/useResponsiveLayout.js.map +1 -1
  216. package/lib/hooks/useRoundTransition.js.map +1 -1
  217. package/lib/hooks/useSkeletalAnimation.d.ts.map +1 -1
  218. package/lib/hooks/useSkeletalAnimation.js +1 -1
  219. package/lib/hooks/useSkeletalAnimation.js.map +1 -1
  220. package/lib/hooks/useTechniqueSelection.js.map +1 -1
  221. package/lib/hooks/useThrottle.js.map +1 -1
  222. package/lib/hooks/useTouchControls.js.map +1 -1
  223. package/lib/hooks/useWebGLContextLossHandler.js.map +1 -1
  224. package/lib/hooks/useWindowSize.js.map +1 -1
  225. package/lib/systems/CombatSystem.js.map +1 -1
  226. package/lib/systems/EffectCalculator.js.map +1 -1
  227. package/lib/systems/LayoutSystem.js.map +1 -1
  228. package/lib/systems/PlayerEffectManager.js.map +1 -1
  229. package/lib/systems/ResponsiveScaling.js.map +1 -1
  230. package/lib/systems/TrigramSystem.js.map +1 -1
  231. package/lib/systems/VitalPointSystem.js.map +1 -1
  232. package/lib/systems/ai/AIPersonality.js.map +1 -1
  233. package/lib/systems/ai/AdaptiveDifficulty.js +16 -16
  234. package/lib/systems/ai/AdaptiveDifficulty.js.map +1 -1
  235. package/lib/systems/ai/ArchetypeEnforcer.js.map +1 -1
  236. package/lib/systems/ai/ComboSystem.js.map +1 -1
  237. package/lib/systems/ai/DecisionTree.js.map +1 -1
  238. package/lib/systems/ai/TrainingAI.js.map +1 -1
  239. package/lib/systems/ai/types.js.map +1 -1
  240. package/lib/systems/animation/builders/AnimationBuilder.js.map +1 -1
  241. package/lib/systems/animation/builders/HandPoseApplicator.js.map +1 -1
  242. package/lib/systems/animation/builders/HandPoses.js.map +1 -1
  243. package/lib/systems/animation/builders/KeyframeConfig.js.map +1 -1
  244. package/lib/systems/animation/builders/KeyframeInterpolation.js.map +1 -1
  245. package/lib/systems/animation/builders/KickPhaseApplicator.d.ts +6 -0
  246. package/lib/systems/animation/builders/KickPhaseApplicator.d.ts.map +1 -1
  247. package/lib/systems/animation/builders/KickPhaseApplicator.js +16 -9
  248. package/lib/systems/animation/builders/KickPhaseApplicator.js.map +1 -1
  249. package/lib/systems/animation/builders/KoreanGuardPositions.d.ts +4 -4
  250. package/lib/systems/animation/builders/KoreanGuardPositions.js.map +1 -1
  251. package/lib/systems/animation/builders/MartialArtsAnimationBuilder.d.ts +1 -1
  252. package/lib/systems/animation/builders/MartialArtsAnimationBuilder.d.ts.map +1 -1
  253. package/lib/systems/animation/builders/MartialArtsAnimationBuilder.js +5 -5
  254. package/lib/systems/animation/builders/MartialArtsAnimationBuilder.js.map +1 -1
  255. package/lib/systems/animation/builders/MartialArtsConstants.d.ts +112 -71
  256. package/lib/systems/animation/builders/MartialArtsConstants.d.ts.map +1 -1
  257. package/lib/systems/animation/builders/MartialArtsConstants.js +113 -72
  258. package/lib/systems/animation/builders/MartialArtsConstants.js.map +1 -1
  259. package/lib/systems/animation/builders/MartialPoseApplicator.js.map +1 -1
  260. package/lib/systems/animation/builders/PunchPhaseApplicator.js.map +1 -1
  261. package/lib/systems/animation/builders/SkeletonRig.js.map +1 -1
  262. package/lib/systems/animation/builders/TrigramGuardApplicator.js.map +1 -1
  263. package/lib/systems/animation/catalogs/AttackAnimations.js.map +1 -1
  264. package/lib/systems/animation/catalogs/BasicAnimations.js.map +1 -1
  265. package/lib/systems/animation/catalogs/ComboAnimations.js.map +1 -1
  266. package/lib/systems/animation/catalogs/DarkOpsAnimations.js.map +1 -1
  267. package/lib/systems/animation/catalogs/DefensiveAnimations.js.map +1 -1
  268. package/lib/systems/animation/catalogs/ElbowKneeAnimations.js.map +1 -1
  269. package/lib/systems/animation/catalogs/EnhancedAttackAnimations.js.map +1 -1
  270. package/lib/systems/animation/catalogs/EnhancedElbowKneeAnimations.js.map +1 -1
  271. package/lib/systems/animation/catalogs/FootworkSkeletalAnimations.js.map +1 -1
  272. package/lib/systems/animation/catalogs/GamRedirectionAnimations.js.map +1 -1
  273. package/lib/systems/animation/catalogs/GamStanceAnimations.js +21 -0
  274. package/lib/systems/animation/catalogs/GamStanceAnimations.js.map +1 -0
  275. package/lib/systems/animation/catalogs/GamTechniqueAnimations.js +34 -2
  276. package/lib/systems/animation/catalogs/GamTechniqueAnimations.js.map +1 -1
  277. package/lib/systems/animation/catalogs/GanStanceAnimations.js.map +1 -1
  278. package/lib/systems/animation/catalogs/GanTechniqueAnimations.js.map +1 -1
  279. package/lib/systems/animation/catalogs/GeonStanceAnimations.js.map +1 -1
  280. package/lib/systems/animation/catalogs/GonTechniqueAnimations.d.ts +9 -0
  281. package/lib/systems/animation/catalogs/GonTechniqueAnimations.d.ts.map +1 -1
  282. package/lib/systems/animation/catalogs/GonTechniqueAnimations.js +288 -0
  283. package/lib/systems/animation/catalogs/GonTechniqueAnimations.js.map +1 -0
  284. package/lib/systems/animation/catalogs/GrapplingAnimations.js.map +1 -1
  285. package/lib/systems/animation/catalogs/JinStanceAnimations.js.map +1 -1
  286. package/lib/systems/animation/catalogs/JinTechniqueAnimations.js.map +1 -1
  287. package/lib/systems/animation/catalogs/KickAnimations.d.ts +2 -2
  288. package/lib/systems/animation/catalogs/KickAnimations.js +2 -2
  289. package/lib/systems/animation/catalogs/KickAnimations.js.map +1 -1
  290. package/lib/systems/animation/catalogs/LiStanceAnimations.js +14 -1
  291. package/lib/systems/animation/catalogs/LiStanceAnimations.js.map +1 -1
  292. package/lib/systems/animation/catalogs/LiTechniqueAnimations.js.map +1 -1
  293. package/lib/systems/animation/catalogs/MovementAnimations.js.map +1 -1
  294. package/lib/systems/animation/catalogs/PunchAnimations.d.ts +1 -1
  295. package/lib/systems/animation/catalogs/PunchAnimations.js +1 -1
  296. package/lib/systems/animation/catalogs/PunchAnimations.js.map +1 -1
  297. package/lib/systems/animation/catalogs/RecoveryAnimations.js.map +1 -1
  298. package/lib/systems/animation/catalogs/SonStanceAnimations.js.map +1 -1
  299. package/lib/systems/animation/catalogs/SonTechniqueAnimations.js.map +1 -1
  300. package/lib/systems/animation/catalogs/SpecializedPunchAnimations.js.map +1 -1
  301. package/lib/systems/animation/catalogs/StanceAnimations.js.map +1 -1
  302. package/lib/systems/animation/catalogs/StanceAttackAnimations.js.map +1 -1
  303. package/lib/systems/animation/catalogs/StanceGuardPoses.d.ts +6 -6
  304. package/lib/systems/animation/catalogs/StanceGuardPoses.js +36 -36
  305. package/lib/systems/animation/catalogs/StanceGuardPoses.js.map +1 -1
  306. package/lib/systems/animation/catalogs/StanceIdleAnimations.js.map +1 -1
  307. package/lib/systems/animation/catalogs/StanceLocomotionAnimations.js.map +1 -1
  308. package/lib/systems/animation/catalogs/StepSkeletalAnimations.js.map +1 -1
  309. package/lib/systems/animation/catalogs/TaeJointLockAnimations.js.map +1 -1
  310. package/lib/systems/animation/catalogs/TaeStanceAnimations.js.map +1 -1
  311. package/lib/systems/animation/constants/AnatomicalLimits.js.map +1 -1
  312. package/lib/systems/animation/core/AnimationHitTiming.js.map +1 -1
  313. package/lib/systems/animation/core/AnimationOptimizations.js.map +1 -1
  314. package/lib/systems/animation/core/AnimationPriority.js +15 -15
  315. package/lib/systems/animation/core/AnimationPriority.js.map +1 -1
  316. package/lib/systems/animation/core/AnimationRegistry.d.ts +30 -0
  317. package/lib/systems/animation/core/AnimationRegistry.d.ts.map +1 -1
  318. package/lib/systems/animation/core/AnimationRegistry.js +74 -12
  319. package/lib/systems/animation/core/AnimationRegistry.js.map +1 -1
  320. package/lib/systems/animation/core/AnimationStateMachine.js +16 -16
  321. package/lib/systems/animation/core/AnimationStateMachine.js.map +1 -1
  322. package/lib/systems/animation/core/AnimationTransitions.d.ts.map +1 -1
  323. package/lib/systems/animation/core/AnimationTransitions.js +34 -0
  324. package/lib/systems/animation/core/AnimationTransitions.js.map +1 -1
  325. package/lib/systems/animation/core/LateralityTransform.js.map +1 -1
  326. package/lib/systems/animation/core/RecoveryPhaseEnhancer.js.map +1 -1
  327. package/lib/systems/animation/core/TechniqueAnimationMapper.js.map +1 -1
  328. package/lib/systems/animation/core/TechniqueAnimationMapping.js.map +1 -1
  329. package/lib/systems/animation/core/index.d.ts +1 -1
  330. package/lib/systems/animation/core/index.d.ts.map +1 -1
  331. package/lib/systems/animation/core/types.d.ts +24 -0
  332. package/lib/systems/animation/core/types.d.ts.map +1 -1
  333. package/lib/systems/animation/core/types.js +27 -11
  334. package/lib/systems/animation/core/types.js.map +1 -1
  335. package/lib/systems/animation/systems/AdvancedJointMovements.js.map +1 -1
  336. package/lib/systems/animation/systems/BodyFacingSystem.js.map +1 -1
  337. package/lib/systems/animation/systems/FacialExpressions.js.map +1 -1
  338. package/lib/systems/animation/systems/FallAnimations.js.map +1 -1
  339. package/lib/systems/animation/systems/MuscleActivation.js.map +1 -1
  340. package/lib/systems/bodypart/BodyPartDamageIntegration.js.map +1 -1
  341. package/lib/systems/bodypart/BodyPartHealthSystem.js.map +1 -1
  342. package/lib/systems/bodypart/BodyPartPositionMapping.js.map +1 -1
  343. package/lib/systems/bodypart/CombatInjuryIntegration.js.map +1 -1
  344. package/lib/systems/bodypart/InjuryIntegration.js.map +1 -1
  345. package/lib/systems/bodypart/InjuryTracker.js.map +1 -1
  346. package/lib/systems/bodypart/MovementPenaltySystem.js.map +1 -1
  347. package/lib/systems/bodypart/PlayerInjuryTrackingManager.js.map +1 -1
  348. package/lib/systems/bodypart/types.js.map +1 -1
  349. package/lib/systems/breathing/BreathingDisruptionSystem.js +19 -19
  350. package/lib/systems/breathing/BreathingDisruptionSystem.js.map +1 -1
  351. package/lib/systems/breathing/feedback.js.map +1 -1
  352. package/lib/systems/breathing/integration.js.map +1 -1
  353. package/lib/systems/combat/BalanceSystem.js +19 -19
  354. package/lib/systems/combat/BalanceSystem.js.map +1 -1
  355. package/lib/systems/combat/BreakingStatusEffects.js.map +1 -1
  356. package/lib/systems/combat/CombatStateSystem.js +17 -17
  357. package/lib/systems/combat/CombatStateSystem.js.map +1 -1
  358. package/lib/systems/combat/ConsciousnessSystem.js +24 -24
  359. package/lib/systems/combat/ConsciousnessSystem.js.map +1 -1
  360. package/lib/systems/combat/FallIntegration.js.map +1 -1
  361. package/lib/systems/combat/GrappleSystem.js.map +1 -1
  362. package/lib/systems/combat/LimbExposureSystem.js.map +1 -1
  363. package/lib/systems/combat/PainResponseSystem.js +21 -21
  364. package/lib/systems/combat/PainResponseSystem.js.map +1 -1
  365. package/lib/systems/combat/TrainingCombatSystem.js.map +1 -1
  366. package/lib/systems/combat/painConsciousnessUtils.js.map +1 -1
  367. package/lib/systems/combat/typeGuards.js.map +1 -1
  368. package/lib/systems/effects.js.map +1 -1
  369. package/lib/systems/game.js.map +1 -1
  370. package/lib/systems/movement/InjuryMovementModifier.js.map +1 -1
  371. package/lib/systems/movement/helpers/AccelerationUpdater.js.map +1 -1
  372. package/lib/systems/movement/helpers/accelerationUtils.js.map +1 -1
  373. package/lib/systems/movement/integration.js.map +1 -1
  374. package/lib/systems/physics/AttackMovementPhysics.js.map +1 -1
  375. package/lib/systems/physics/CollisionDetection.js.map +1 -1
  376. package/lib/systems/physics/CoordinateMapper.js.map +1 -1
  377. package/lib/systems/physics/KnockbackPhysics.js.map +1 -1
  378. package/lib/systems/physics/MovementPhysics.js.map +1 -1
  379. package/lib/systems/physics/PhysicalReachCalculator.js.map +1 -1
  380. package/lib/systems/physics/SpeedModifierSystem.js +6 -6
  381. package/lib/systems/physics/SpeedModifierSystem.js.map +1 -1
  382. package/lib/systems/trigram/KoreanCulture.js.map +1 -1
  383. package/lib/systems/trigram/KoreanTechniques.js.map +1 -1
  384. package/lib/systems/trigram/StanceManager.js.map +1 -1
  385. package/lib/systems/trigram/TransitionCalculator.js.map +1 -1
  386. package/lib/systems/trigram/TrigramCalculator.js.map +1 -1
  387. package/lib/systems/trigram/techniques/DarkOpsTechniques.js.map +1 -1
  388. package/lib/systems/trigram/techniques/GamTechniques.js.map +1 -1
  389. package/lib/systems/trigram/techniques/GanTechniques.js.map +1 -1
  390. package/lib/systems/trigram/techniques/GeonTechniques.js.map +1 -1
  391. package/lib/systems/trigram/techniques/GonTechniques.js.map +1 -1
  392. package/lib/systems/trigram/techniques/JinTechniques.js.map +1 -1
  393. package/lib/systems/trigram/techniques/LiTechniques.js.map +1 -1
  394. package/lib/systems/trigram/techniques/SonTechniques.js.map +1 -1
  395. package/lib/systems/trigram/techniques/TaeTechniques.js.map +1 -1
  396. package/lib/systems/trigram/techniques/TechniqueConfig.js.map +1 -1
  397. package/lib/systems/trigram/techniques/index.js.map +1 -1
  398. package/lib/systems/trigram/types/GonTechniqueExtensions.js.map +1 -1
  399. package/lib/systems/trigram/types.js.map +1 -1
  400. package/lib/systems/types.js.map +1 -1
  401. package/lib/systems/vitalpoint/DamageCalculator.js.map +1 -1
  402. package/lib/systems/vitalpoint/HitDetection.js.map +1 -1
  403. package/lib/systems/vitalpoint/KoreanAnatomy.js.map +1 -1
  404. package/lib/systems/vitalpoint/KoreanVitalPoints.js.map +1 -1
  405. package/lib/systems/vitalpoint/MeridianVitalPointMapping.js.map +1 -1
  406. package/lib/systems/vitalpoint/VitalPointsData.js.map +1 -1
  407. package/lib/types/AccessibilityTypes.js.map +1 -1
  408. package/lib/types/LayoutTypes.js.map +1 -1
  409. package/lib/types/PhysicsTypes.js.map +1 -1
  410. package/lib/types/common.js.map +1 -1
  411. package/lib/types/constants/animations.js.map +1 -1
  412. package/lib/types/constants/colors.js.map +1 -1
  413. package/lib/types/constants/designSystem.js.map +1 -1
  414. package/lib/types/constants/index.js.map +1 -1
  415. package/lib/types/constants/layout.d.ts +21 -0
  416. package/lib/types/constants/layout.d.ts.map +1 -1
  417. package/lib/types/constants/layout.js +22 -1
  418. package/lib/types/constants/layout.js.map +1 -1
  419. package/lib/types/constants/performance.js.map +1 -1
  420. package/lib/types/constants/typography.js.map +1 -1
  421. package/lib/types/constants/ui.js.map +1 -1
  422. package/lib/types/facial.js +19 -19
  423. package/lib/types/facial.js.map +1 -1
  424. package/lib/types/hand-animation.js.map +1 -1
  425. package/lib/types/injury.js.map +1 -1
  426. package/lib/types/muscle.js.map +1 -1
  427. package/lib/types/physics.js.map +1 -1
  428. package/lib/types/physicsConstants.js.map +1 -1
  429. package/lib/types/player-visual.d.ts +1 -1
  430. package/lib/types/player-visual.d.ts.map +1 -1
  431. package/lib/types/skeletal.js.map +1 -1
  432. package/lib/types/techniqueId.js.map +1 -1
  433. package/lib/utils/accessibility.js.map +1 -1
  434. package/lib/utils/arenaWorldDimensions.js.map +1 -1
  435. package/lib/utils/assetConfig.js.map +1 -1
  436. package/lib/utils/characterScaling.js.map +1 -1
  437. package/lib/utils/colorHelpers.js.map +1 -1
  438. package/lib/utils/colorUtils.js.map +1 -1
  439. package/lib/utils/combatReadiness.js.map +1 -1
  440. package/lib/utils/controlMapping.js.map +1 -1
  441. package/lib/utils/deviceDetection.js +6 -7
  442. package/lib/utils/deviceDetection.js.map +1 -1
  443. package/lib/utils/effectUtils.js.map +1 -1
  444. package/lib/utils/fabricTextures.js.map +1 -1
  445. package/lib/utils/hapticFeedback.js.map +1 -1
  446. package/lib/utils/haptics.js.map +1 -1
  447. package/lib/utils/htmlOverlayHelpers.js.map +1 -1
  448. package/lib/utils/inputSystem.js.map +1 -1
  449. package/lib/utils/koreanThemeHelpers.js.map +1 -1
  450. package/lib/utils/math.js.map +1 -1
  451. package/lib/utils/mobileLayoutHelpers.js.map +1 -1
  452. package/lib/utils/mobileUIUtils.js.map +1 -1
  453. package/lib/utils/performance/PerformanceMonitor.js.map +1 -1
  454. package/lib/utils/performance/PerformanceOverlay3D.js.map +1 -1
  455. package/lib/utils/performance/usePerformanceMonitor.js.map +1 -1
  456. package/lib/utils/performanceOptimization.js.map +1 -1
  457. package/lib/utils/player3DHelpers.js.map +1 -1
  458. package/lib/utils/playerUtils.js.map +1 -1
  459. package/lib/utils/responsiveLayout.js.map +1 -1
  460. package/lib/utils/responsiveLayoutHelpers.d.ts +7 -0
  461. package/lib/utils/responsiveLayoutHelpers.d.ts.map +1 -1
  462. package/lib/utils/responsiveLayoutHelpers.js +16 -2
  463. package/lib/utils/responsiveLayoutHelpers.js.map +1 -1
  464. package/lib/utils/responsiveOrientationConstants.js.map +1 -1
  465. package/lib/utils/safeAreaUtils.js.map +1 -1
  466. package/lib/utils/sharedPhysicsConfig.js.map +1 -1
  467. package/lib/utils/skeletonScaling.js.map +1 -1
  468. package/lib/utils/stanceHelpers.js.map +1 -1
  469. package/lib/utils/threeObjectPool.js.map +1 -1
  470. package/lib/utils/visualEffects.js.map +1 -1
  471. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"AnimationRegistry.js","names":[],"sources":["../../../../src/systems/animation/core/AnimationRegistry.ts"],"sourcesContent":["/**\n * Animation Registry\n *\n * Central registry for all martial arts animations.\n * Combines all animation modules and provides unified access.\n *\n * 무술 애니메이션 레지스트리 - 모든 애니메이션 통합 관리\n *\n * **RECOVERY PHASE INTEGRATION (복귀 단계 통합)**\n *\n * Enhanced animations with realistic recovery phases are now the default for:\n * - JAB_ANIMATION → JAB_ANIMATION_ENHANCED (200ms recovery)\n * - CROSS_ANIMATION → CROSS_ANIMATION_ENHANCED (220ms recovery)\n * - FRONT_KICK_ANIMATION → FRONT_KICK_ANIMATION_ENHANCED (170ms recovery)\n * - ROUNDHOUSE_KICK_ANIMATION → ROUNDHOUSE_KICK_ANIMATION_ENHANCED (180ms recovery)\n * - ELBOW_STRIKE_ANIMATION → ELBOW_STRIKE_ANIMATION_ENHANCED (160ms recovery)\n * - ELBOW_UPPERCUT_ANIMATION → ELBOW_UPPERCUT_ANIMATION_ENHANCED (170ms recovery)\n * - KNEE_STRIKE_ANIMATION → KNEE_STRIKE_ANIMATION_ENHANCED (190ms recovery)\n *\n * Enhanced animations follow Korean martial arts principles (복귀/Bokgwi):\n * - 균형회복 (Gyunhyeong Hoebog) - Balance restoration\n * - 자세복귀 (Jase Bokgwi) - Stance return\n * - 호흡조절 (Hoheup Jojoel) - Breath control during recovery\n * - 근육이완 (Geunryuk Ihwan) - Muscle relaxation after tension\n *\n * All code using ANIMATION_REGISTRY or getAnimationForTechnique() will\n * automatically use enhanced versions with no code changes required.\n *\n * @module systems/animation/AnimationRegistry\n * @korean 애니메이션레지스트리\n */\n\nimport type { SkeletalAnimation } from \"@/types/skeletal\";\nimport { AnimationType } from \"../builders/MartialArtsAnimationBuilder\";\nimport {\n BACKWARD_RETREAT_ANIMATION,\n FORWARD_DASH_ANIMATION,\n IDLE_STANCE_ANIMATION,\n SIDE_STEP_ANIMATION,\n} from \"../catalogs/AttackAnimations\";\nimport { BASIC_ANIMATIONS } from \"../catalogs/BasicAnimations\";\nimport { COMBO_ANIMATIONS } from \"../catalogs/ComboAnimations\";\nimport { DARKOPS_ANIMATIONS } from \"../catalogs/DarkOpsAnimations\";\nimport {\n GAM_FLOW_DEFENSE,\n GAN_COUNTER_FORTRESS,\n GAN_IMMOVABLE_BLOCK,\n GEON_COUNTER_STRIKE,\n GEON_HIGH_BLOCK,\n GON_GROUNDING_DEFENSE,\n GON_TAKEDOWN_COUNTER,\n JIN_EXPLOSIVE_BLOCK,\n JIN_SHOCKING_COUNTER,\n LI_NERVE_STRIKE_COUNTER,\n LI_PRECISION_PARRY,\n SON_CONTINUOUS_DEFLECTION,\n SON_PRESSURE_COUNTER,\n TAE_SWEEP_DEFENSE,\n} from \"../catalogs/DefensiveAnimations\";\nimport {\n BRACHIAL_ELBOW_ANIMATION,\n CLINCH_KNEE_ANIMATION,\n ELBOW_KNEE_ANIMATIONS,\n ELBOW_STRIKE_ANIMATION,\n ELBOW_UPPERCUT_ANIMATION,\n FEMORAL_KNEE_ANIMATION,\n FLYING_KNEE_ANIMATION,\n KIDNEY_KNEE_ANIMATION,\n KNEE_KICK_ANIMATION,\n KNEE_STRIKE_ANIMATION,\n SPINAL_ELBOW_ANIMATION,\n SPINNING_BACK_ELBOW_ANIMATION,\n SPINNING_ELBOW_ANIMATION,\n TEMPLE_ELBOW_ANIMATION,\n} from \"../catalogs/ElbowKneeAnimations\";\nimport {\n ARM_BAR_ANIMATION,\n BLOCK_ANIMATION,\n BODY_LOCK_THROW_ANIMATION,\n CAROTID_CHOKE_ANIMATION,\n COUNTER_ATTACK_ANIMATION,\n COUNTER_STRIKE_ANIMATION,\n EARTH_EMBRACE_ANIMATION,\n ELBOW_LOCK_ANIMATION,\n FINGER_LOCK_ANIMATION,\n FLOWING_ARM_BAR_ANIMATION,\n GRAPPLE_ANIMATION,\n GRAPPLING_ANIMATIONS,\n HIGH_BLOCK_ANIMATION,\n HIP_THROW_ANIMATION,\n JOINT_LOCK_DEFENSE_ANIMATION,\n LEG_REAP_ANIMATION,\n LOW_BLOCK_ANIMATION,\n MOUNTAIN_LOCK_ANIMATION,\n PARRY_COUNTER_ANIMATION,\n REAR_NAKED_CHOKE_ANIMATION,\n REDIRECT_THROW_ANIMATION,\n SHOULDER_LOCK_ANIMATION,\n SHOULDER_MANIPULATION_ANIMATION,\n SLAM_ANIMATION,\n SMALL_CIRCLE_LOCK_ANIMATION,\n SUPLEX_ANIMATION,\n SWEEP_DEFENSE_ANIMATION,\n TAKEDOWN_ANIMATION,\n THROW_ANIMATION,\n WRIST_LOCK_ANIMATION,\n} from \"../catalogs/GrapplingAnimations\";\nimport {\n AXE_KICK_ANIMATION,\n BACK_KICK_ANIMATION,\n CRESCENT_KICK_ANIMATION,\n FLYING_KICK_ANIMATION,\n FRONT_KICK_ANIMATION,\n JUMPING_KICK_ANIMATION,\n KICK_ANIMATIONS,\n LOW_KICK_ANIMATION,\n PUSH_KICK_ANIMATION,\n ROUNDHOUSE_KICK_ANIMATION,\n SIDE_KICK_ANIMATION,\n SPINNING_HEEL_KICK_ANIMATION,\n SPINNING_HOOK_KICK_ANIMATION,\n SWEEP_ANIMATION,\n TORNADO_KICK_ANIMATION,\n} from \"../catalogs/KickAnimations\";\nimport { MOVEMENT_ANIMATIONS } from \"../catalogs/MovementAnimations\";\nimport {\n BACKFIST_ANIMATION,\n CROSS_ANIMATION,\n HAMMER_FIST_ANIMATION,\n HOOK_ANIMATION,\n JAB_ANIMATION,\n OVERHAND_ANIMATION,\n PALM_STRIKE_ANIMATION,\n PUNCH_ANIMATIONS,\n UPPERCUT_ANIMATION,\n} from \"../catalogs/PunchAnimations\";\n\nimport { STANCE_ANIMATIONS } from \"../catalogs/StanceAnimations\";\nimport { ALL_ATTACK_ANIMATIONS } from \"../catalogs/StanceAttackAnimations\";\nimport { TRIGRAM_IDLE_ANIMATIONS_BY_NAME } from \"../catalogs/StanceIdleAnimations\";\nimport { STANCE_LOCOMOTION_ANIMATIONS } from \"../catalogs/StanceLocomotionAnimations\";\n\n// Trigram-specific stance and technique animation maps\nimport { GAM_WATER_FLOW_COUNTER_ANIMATION } from \"../catalogs/GamTechniqueAnimations\";\nimport { GAN_ROCK_DEFENSE_ANIMATION } from \"../catalogs/GanTechniqueAnimations\";\nimport { GAN_STANCE_ANIMATIONS } from \"../catalogs/GanStanceAnimations\";\nimport { GAN_TECHNIQUE_ANIMATIONS } from \"../catalogs/GanTechniqueAnimations\";\nimport { GEON_ANIMATIONS } from \"../catalogs/GeonStanceAnimations\";\nimport { JIN_ANIMATIONS } from \"../catalogs/JinStanceAnimations\";\nimport { JIN_TECHNIQUE_ANIMATIONS } from \"../catalogs/JinTechniqueAnimations\";\nimport { SON_STANCE_ANIMATIONS } from \"../catalogs/SonStanceAnimations\";\nimport { SON_TECHNIQUE_ANIMATIONS } from \"../catalogs/SonTechniqueAnimations\";\nimport { TAE_STANCE_ANIMATIONS } from \"../catalogs/TaeStanceAnimations\";\nimport {\n getAnimationForTechniqueOrDefault,\n getAnimationForTechnique as getTechniqueAnimationConfig,\n hasAnimationMapping,\n type AnimationConfig,\n} from \"./TechniqueAnimationMapping\";\n\n// Enhanced animations with recovery phases (복귀 애니메이션 강화)\nimport {\n CROSS_ANIMATION_ENHANCED,\n FRONT_KICK_ANIMATION_ENHANCED,\n JAB_ANIMATION_ENHANCED,\n ROUNDHOUSE_KICK_ANIMATION_ENHANCED,\n} from \"../catalogs/EnhancedAttackAnimations\";\nimport {\n ELBOW_STRIKE_ANIMATION_ENHANCED,\n ELBOW_UPPERCUT_ANIMATION_ENHANCED,\n KNEE_STRIKE_ANIMATION_ENHANCED,\n} from \"../catalogs/EnhancedElbowKneeAnimations\";\n\nimport {\n TAE_ARM_BAR,\n TAE_ELBOW_CONTROL,\n TAE_FINGER_LOCK,\n TAE_FLOWING_COUNTER,\n TAE_FLOWING_STRIKES,\n TAE_SHOULDER_LOCK,\n TAE_SMALL_CIRCLE,\n TAE_WRIST_LOCK_SEQUENCE,\n} from \"../catalogs/TaeJointLockAnimations\";\n\n// TODO: Register Tae stance animations when trigram-specific idle/movement system is implemented\n// import {\n// TAE_IDLE_FLOWING,\n// TAE_CIRCULAR_SIDESTEP,\n// TAE_DIAGONAL_CIRCULAR_APPROACH,\n// TAE_FLEXIBLE_GUARD_TRANSITION,\n// } from \"../catalogs/TaeStanceAnimations\";\n\nimport {\n GAM_FLOWING_BLOCK,\n GAM_FLOWING_RIVER_STRIKE,\n GAM_REDIRECTION_COUNTER,\n GAM_TIDAL_WAVE_PALM,\n GAM_WHIRLPOOL_COUNTER,\n} from \"../catalogs/GamRedirectionAnimations\";\n\n// Specialized punch variant animations (특수 주먹 변형 애니메이션)\nimport {\n EAR_STRIKE_ANIMATION,\n EYE_GOUGE_ANIMATION,\n FLOWING_CROSS_ANIMATION,\n FLOWING_PUSH_ANIMATION,\n HEAVEN_STRIKE_ANIMATION,\n LIGHTNING_STRIKE_ANIMATION,\n LIVER_DISRUPTION_ANIMATION,\n NERVE_PARALYSIS_ANIMATION,\n NERVE_STRIKE_ANIMATION,\n PRESSURE_POINT_STRIKE_ANIMATION,\n RAPID_BARRAGE_ANIMATION,\n RHYTHMIC_STRIKES_ANIMATION,\n SOLAR_PLEXUS_STRIKE_ANIMATION,\n SPEAR_HAND_STRIKE_ANIMATION as SPEAR_HAND_ANIMATION,\n SPECIALIZED_PUNCH_ANIMATIONS,\n THROAT_STRIKE_ANIMATION,\n} from \"../catalogs/SpecializedPunchAnimations\";\n\n// ═══════════════════════════════════════════════════════════════════════════\n// MASTER ANIMATION REGISTRY\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Master registry of all animations by AnimationType\n * 애니메이션 타입별 마스터 레지스트리\n */\nexport const ANIMATION_REGISTRY: ReadonlyMap<AnimationType, SkeletalAnimation> =\n new Map([\n // Kicks (발차기) - Using enhanced versions with recovery phases\n [AnimationType.FRONT_KICK, FRONT_KICK_ANIMATION_ENHANCED],\n [AnimationType.ROUNDHOUSE_KICK, ROUNDHOUSE_KICK_ANIMATION_ENHANCED],\n [AnimationType.SIDE_KICK, SIDE_KICK_ANIMATION],\n [AnimationType.AXE_KICK, AXE_KICK_ANIMATION],\n [AnimationType.BACK_KICK, BACK_KICK_ANIMATION],\n [AnimationType.TORNADO_KICK, TORNADO_KICK_ANIMATION],\n [AnimationType.JUMPING_KICK, JUMPING_KICK_ANIMATION],\n [AnimationType.LOW_KICK, LOW_KICK_ANIMATION],\n [AnimationType.CRESCENT_KICK, CRESCENT_KICK_ANIMATION],\n [AnimationType.PUSH_KICK, PUSH_KICK_ANIMATION],\n [AnimationType.SPINNING_HEEL_KICK, SPINNING_HEEL_KICK_ANIMATION],\n [AnimationType.SPINNING_HOOK, SPINNING_HOOK_KICK_ANIMATION],\n [AnimationType.FLYING_KICK, FLYING_KICK_ANIMATION],\n\n // Punches (주먹) - Using enhanced versions with recovery phases\n [AnimationType.JAB, JAB_ANIMATION_ENHANCED],\n [AnimationType.CROSS, CROSS_ANIMATION_ENHANCED],\n [AnimationType.HOOK, HOOK_ANIMATION],\n [AnimationType.UPPERCUT, UPPERCUT_ANIMATION],\n [AnimationType.OVERHAND, OVERHAND_ANIMATION],\n [AnimationType.PALM_STRIKE, PALM_STRIKE_ANIMATION],\n [AnimationType.BACKFIST, BACKFIST_ANIMATION],\n [AnimationType.HAMMER_FIST, HAMMER_FIST_ANIMATION],\n\n // Specialized Punch Variants (특수 주먹 변형)\n [AnimationType.SPEAR_HAND_STRIKE, SPEAR_HAND_ANIMATION],\n [AnimationType.NERVE_STRIKE, NERVE_STRIKE_ANIMATION],\n [AnimationType.PRESSURE_POINT_STRIKE, PRESSURE_POINT_STRIKE_ANIMATION],\n [AnimationType.LIGHTNING_STRIKE, LIGHTNING_STRIKE_ANIMATION],\n [AnimationType.HEAVEN_STRIKE, HEAVEN_STRIKE_ANIMATION],\n [AnimationType.FLOWING_CROSS, FLOWING_CROSS_ANIMATION],\n [AnimationType.RAPID_BARRAGE, RAPID_BARRAGE_ANIMATION],\n [AnimationType.RHYTHMIC_STRIKES, RHYTHMIC_STRIKES_ANIMATION],\n [AnimationType.FLOWING_PUSH, FLOWING_PUSH_ANIMATION],\n [AnimationType.SOLAR_PLEXUS_STRIKE, SOLAR_PLEXUS_STRIKE_ANIMATION],\n [AnimationType.THROAT_STRIKE, THROAT_STRIKE_ANIMATION],\n [AnimationType.EYE_GOUGE, EYE_GOUGE_ANIMATION],\n [AnimationType.NERVE_PARALYSIS, NERVE_PARALYSIS_ANIMATION],\n [AnimationType.LIVER_DISRUPTION, LIVER_DISRUPTION_ANIMATION],\n [AnimationType.EAR_STRIKE, EAR_STRIKE_ANIMATION],\n\n // ═══ TRIGRAM SPECIFIC ALIASES (괘별 기술 매핑) ═══\n // Geon (건)\n [AnimationType.GEON_HEAVEN_STRIKE, HEAVEN_STRIKE_ANIMATION],\n [AnimationType.GEON_ROUNDHOUSE, ROUNDHOUSE_KICK_ANIMATION_ENHANCED],\n [AnimationType.CRUSHING_ELBOW, ELBOW_STRIKE_ANIMATION_ENHANCED],\n [AnimationType.GEON_COUNTER, GEON_COUNTER_STRIKE],\n [AnimationType.HIGH_BLOCK, GEON_HIGH_BLOCK],\n\n // Li (리)\n [AnimationType.PHOENIX_EYE_STRIKE, NERVE_STRIKE_ANIMATION],\n [AnimationType.NERVE_STRIKE_COUNTER, LI_NERVE_STRIKE_COUNTER],\n [AnimationType.PRECISION_PARRY, LI_PRECISION_PARRY],\n [AnimationType.LI_SOLAR_PLEXUS, SOLAR_PLEXUS_STRIKE_ANIMATION],\n [AnimationType.SOLAR_PLEXUS_SPEAR, SPEAR_HAND_ANIMATION],\n\n // Tae (태) - Lake: Joint Manipulation\n [AnimationType.WRIST_LOCK_STRIKE, WRIST_LOCK_ANIMATION],\n [AnimationType.WRIST_LOCK, TAE_WRIST_LOCK_SEQUENCE], // Enhanced Hapkido wrist lock\n [AnimationType.SPIRAL_SHOULDER_THROW, HIP_THROW_ANIMATION],\n [AnimationType.JOINT_LOCK_DEFENSE, TAE_FLOWING_COUNTER],\n [AnimationType.SWEEP_DEFENSE, TAE_SWEEP_DEFENSE],\n [AnimationType.WRIST_TWIST_COUNTER, TAE_FLOWING_COUNTER],\n [AnimationType.FLOWING_CROSS, TAE_FLOWING_STRIKES], // Continuous palm strikes\n [AnimationType.SMALL_CIRCLE_LOCK, TAE_SMALL_CIRCLE], // Advanced dual joint control\n [AnimationType.FINGER_LOCK, TAE_FINGER_LOCK],\n [AnimationType.ELBOW_LOCK, TAE_ELBOW_CONTROL], // Enhanced two-handed control\n [AnimationType.ELBOW_HYPEREXTEND, TAE_ELBOW_CONTROL],\n [AnimationType.SHOULDER_MANIPULATION, TAE_SHOULDER_LOCK], // Enhanced shoulder lock\n [AnimationType.ARM_BAR, TAE_ARM_BAR], // Most powerful submission\n [AnimationType.FLOWING_ARM_BAR, TAE_ARM_BAR], // Alias for flowing arm bar\n\n // Jin (진)\n [AnimationType.EXPLOSIVE_KNEE, KNEE_STRIKE_ANIMATION_ENHANCED],\n [AnimationType.LIGHTNING_STRAIGHT, JAB_ANIMATION_ENHANCED],\n [AnimationType.SHOCKING_COUNTER, JIN_SHOCKING_COUNTER],\n [AnimationType.SHOCKING_HAMMER_FIST, HAMMER_FIST_ANIMATION],\n [AnimationType.EXPLOSIVE_BLOCK, JIN_EXPLOSIVE_BLOCK],\n\n // Son (손)\n [AnimationType.CONTINUOUS_DEFLECTION, SON_CONTINUOUS_DEFLECTION],\n [AnimationType.PRESSURE_COUNTER, SON_PRESSURE_COUNTER],\n [AnimationType.RAPID_FOOTWORK, FLOWING_PUSH_ANIMATION], // Placeholder until dedicated footwork\n [AnimationType.PENETRATING_PALM_RUSH, FLOWING_PUSH_ANIMATION],\n [AnimationType.PRESSURE_POINT_CHAIN, RAPID_BARRAGE_ANIMATION],\n\n // Gam (감)\n [AnimationType.WATER_COUNTER, GAM_REDIRECTION_COUNTER],\n [AnimationType.CIRCULAR_PARRY, GAM_FLOWING_BLOCK], // Updated to Flowing Block\n [AnimationType.FLOW_DEFENSE, GAM_FLOWING_BLOCK], // Updated to Flowing Block\n [AnimationType.FLOWING_RIVER_STRIKE, GAM_FLOWING_RIVER_STRIKE],\n [AnimationType.REDIRECTION_COUNTER, GAM_REDIRECTION_COUNTER],\n [AnimationType.TIDAL_WAVE_PALM, GAM_TIDAL_WAVE_PALM],\n [AnimationType.WHIRLPOOL_COUNTER, GAM_WHIRLPOOL_COUNTER],\n\n // Gan (간)\n [AnimationType.ROCK_COUNTER, GAN_COUNTER_FORTRESS],\n [AnimationType.ROCK_DEFENSE, GAN_IMMOVABLE_BLOCK],\n [AnimationType.AVALANCHE_HAMMER, HAMMER_FIST_ANIMATION],\n [AnimationType.COUNTER_FORTRESS, GAN_COUNTER_FORTRESS],\n [AnimationType.FORTRESS_COUNTER_STRIKE, COUNTER_STRIKE_ANIMATION],\n [AnimationType.STONE_WALL_THRUST, PUSH_KICK_ANIMATION],\n\n // General Grappling\n [AnimationType.TAKEDOWN, TAKEDOWN_ANIMATION],\n [AnimationType.JOINT_LOCK, JOINT_LOCK_DEFENSE_ANIMATION],\n [AnimationType.HIP_WHEEL_THROW, HIP_THROW_ANIMATION],\n [AnimationType.SSIREUM_THROW, BODY_LOCK_THROW_ANIMATION], // Korean wrestling style\n [AnimationType.SACRIFICE_THROW, SUPLEX_ANIMATION], // Close match\n [AnimationType.CLINCH, CLINCH_KNEE_ANIMATION],\n [AnimationType.PARRY, PARRY_COUNTER_ANIMATION],\n\n // Movement/Basic\n [AnimationType.SIDESTEP, SIDE_STEP_ANIMATION],\n [AnimationType.PIVOT, SIDE_STEP_ANIMATION], // Reusing side step\n [AnimationType.STEP_FORWARD, FORWARD_DASH_ANIMATION],\n [AnimationType.STEP_BACK, BACKWARD_RETREAT_ANIMATION],\n [AnimationType.FORWARD_DASH, FORWARD_DASH_ANIMATION],\n [AnimationType.BACKWARD_RETREAT, BACKWARD_RETREAT_ANIMATION],\n [AnimationType.WALK, FORWARD_DASH_ANIMATION], // Placeholder\n [AnimationType.RECOVERY, IDLE_STANCE_ANIMATION],\n [AnimationType.STANCE, IDLE_STANCE_ANIMATION],\n [AnimationType.IDLE, IDLE_STANCE_ANIMATION],\n [AnimationType.DUCK, IDLE_STANCE_ANIMATION], // Placeholder\n [AnimationType.LEAN, IDLE_STANCE_ANIMATION], // Placeholder\n\n // Defense Aliases\n [AnimationType.BLOCK, BLOCK_ANIMATION],\n [AnimationType.BLOCK_HIGH, HIGH_BLOCK_ANIMATION],\n [AnimationType.BLOCK_LOW, LOW_BLOCK_ANIMATION],\n [AnimationType.FLOWING_BLOCK, GAM_FLOWING_BLOCK],\n [AnimationType.IRON_BLOCK, GAN_IMMOVABLE_BLOCK],\n [AnimationType.IMMOVABLE_BLOCK, GAN_IMMOVABLE_BLOCK],\n [AnimationType.THUNDEROUS_UPPERCUT, ELBOW_UPPERCUT_ANIMATION],\n\n // Gon (곤)\n [AnimationType.GROUNDING_DEFENSE, GON_GROUNDING_DEFENSE],\n [AnimationType.TAKEDOWN_COUNTER, GON_TAKEDOWN_COUNTER],\n [AnimationType.EARTHQUAKE_STOMP, AXE_KICK_ANIMATION],\n [AnimationType.GROUND_SWEEP_STRIKE, SWEEP_ANIMATION],\n [AnimationType.ROOTING_TAKEDOWN, TAKEDOWN_ANIMATION],\n [AnimationType.TAKEDOWN_COUNTER, GON_TAKEDOWN_COUNTER],\n [AnimationType.ANKLE_PICK, TAKEDOWN_ANIMATION],\n [AnimationType.BODY_LOCK_SLAM, BODY_LOCK_THROW_ANIMATION],\n\n // Dark Ops (암살자)\n [AnimationType.TEMPLE_STRIKE, TEMPLE_ELBOW_ANIMATION],\n [AnimationType.BRACHIAL_PLEXUS, BRACHIAL_ELBOW_ANIMATION],\n [AnimationType.ACHILLES_ATTACK, LEG_REAP_ANIMATION],\n [AnimationType.CERVICAL_TWIST, REAR_NAKED_CHOKE_ANIMATION],\n [AnimationType.ELBOW_HYPEREXTEND, ARM_BAR_ANIMATION],\n [AnimationType.FEMORAL_NERVE, FEMORAL_KNEE_ANIMATION],\n [AnimationType.LARYNX_CRUSH, THROAT_STRIKE_ANIMATION],\n [AnimationType.JAW_DISLOCATION, HOOK_ANIMATION],\n [AnimationType.FINGER_BREAK, FINGER_LOCK_ANIMATION],\n [AnimationType.GUILLOTINE_CHOKE, CAROTID_CHOKE_ANIMATION],\n [AnimationType.JUGULAR_STRIKE, THROAT_STRIKE_ANIMATION],\n [AnimationType.KNEECAP_STRIKE, LOW_KICK_ANIMATION],\n [AnimationType.OCCIPITAL_STRIKE, HAMMER_FIST_ANIMATION],\n [AnimationType.SCIATIC_NERVE_STRIKE, KNEE_STRIKE_ANIMATION_ENHANCED],\n [AnimationType.SILENT_TAKEDOWN, REAR_NAKED_CHOKE_ANIMATION],\n [AnimationType.SLEEPER_HOLD, REAR_NAKED_CHOKE_ANIMATION],\n [AnimationType.TRIANGLE_CHOKE, LEG_REAP_ANIMATION], // Uses legs\n [AnimationType.SPLEEN_RUPTURE, KNEE_STRIKE_ANIMATION_ENHANCED],\n\n // Musa (무사)\n [AnimationType.DRAGON_FIST, HEAVEN_STRIKE_ANIMATION],\n [AnimationType.THUNDER_STRIKE, HEAVEN_STRIKE_ANIMATION],\n [AnimationType.MOUNTAIN_BREAKER, HAMMER_FIST_ANIMATION],\n [AnimationType.IRON_DEFENSE, GEON_HIGH_BLOCK],\n\n // Amsalja (암살자)\n [AnimationType.DEADLY_PRECISION, NERVE_STRIKE_ANIMATION],\n [AnimationType.SHADOW_NERVE_STRIKE, NERVE_STRIKE_ANIMATION],\n [AnimationType.SHADOW_STRIKE, CROSS_ANIMATION_ENHANCED],\n [AnimationType.SILENT_DEATH, HEAVEN_STRIKE_ANIMATION], // Finisher\n\n // Hacker (해커)\n [AnimationType.CYBER_OVERDRIVE, RAPID_BARRAGE_ANIMATION],\n [AnimationType.DATA_STRIKE, NERVE_STRIKE_ANIMATION],\n [AnimationType.ELECTRIC_SHOCK, PALM_STRIKE_ANIMATION],\n [AnimationType.SYSTEM_CRASH, HEAVEN_STRIKE_ANIMATION],\n\n // Jeongbo (정보요원)\n [AnimationType.TACTICAL_STRIKE, JAB_ANIMATION_ENHANCED],\n [AnimationType.INTELLIGENCE_STRIKE, NERVE_STRIKE_ANIMATION],\n [AnimationType.COUNTER_INTELLIGENCE, PARRY_COUNTER_ANIMATION],\n [AnimationType.PSYCHOLOGICAL_WARFARE, IDLE_STANCE_ANIMATION],\n\n // Jojik (조직폭력배)\n [AnimationType.RUTHLESS_ASSAULT, RAPID_BARRAGE_ANIMATION],\n [AnimationType.STREET_BRAWL, OVERHAND_ANIMATION],\n [AnimationType.IMPROVISED_WEAPON, HAMMER_FIST_ANIMATION],\n [AnimationType.BRUTAL_TAKEDOWN, BODY_LOCK_THROW_ANIMATION],\n\n // Misc\n [AnimationType.IDLE_STANCE, IDLE_STANCE_ANIMATION],\n\n // Movement Aliases\n [AnimationType.SIDE_STEP, SIDE_STEP_ANIMATION],\n\n // [AnimationType.FLOWING_PUSH, FLOWING_PUSH_ANIMATION],\n // [AnimationType.THROAT_STRIKE, THROAT_STRIKE_ANIMATION],\n // [AnimationType.EYE_GOUGE, EYE_GOUGE_ANIMATION],\n // [AnimationType.NERVE_PARALYSIS, NERVE_PARALYSIS_ANIMATION],\n // [AnimationType.LIVER_DISRUPTION, LIVER_DISRUPTION_ANIMATION],\n // [AnimationType.EAR_STRIKE, EAR_STRIKE_ANIMATION],\n\n // Elbow/Knee (팔꿈치/무릎) - Using enhanced versions with recovery phases\n [AnimationType.ELBOW_STRIKE, ELBOW_STRIKE_ANIMATION_ENHANCED],\n [AnimationType.ELBOW_UPPERCUT, ELBOW_UPPERCUT_ANIMATION_ENHANCED],\n [AnimationType.SPINNING_ELBOW, SPINNING_ELBOW_ANIMATION],\n [AnimationType.KNEE_STRIKE, KNEE_STRIKE_ANIMATION_ENHANCED],\n [AnimationType.FLYING_KNEE, FLYING_KNEE_ANIMATION],\n [AnimationType.KNEE_KICK, KNEE_KICK_ANIMATION],\n [AnimationType.CLINCH_KNEE, CLINCH_KNEE_ANIMATION],\n [AnimationType.TEMPLE_ELBOW, TEMPLE_ELBOW_ANIMATION],\n [AnimationType.SPINNING_BACK_ELBOW, SPINNING_BACK_ELBOW_ANIMATION],\n [AnimationType.SPINAL_ELBOW, SPINAL_ELBOW_ANIMATION],\n [AnimationType.BRACHIAL_ELBOW, BRACHIAL_ELBOW_ANIMATION],\n [AnimationType.KIDNEY_KNEE, KIDNEY_KNEE_ANIMATION],\n [AnimationType.FEMORAL_KNEE, FEMORAL_KNEE_ANIMATION],\n\n // Grappling (잡기)\n [AnimationType.THROW, THROW_ANIMATION],\n [AnimationType.GRAPPLE, GRAPPLE_ANIMATION],\n [AnimationType.SWEEP, SWEEP_ANIMATION],\n [AnimationType.SLAM, SLAM_ANIMATION],\n [AnimationType.WRIST_LOCK, WRIST_LOCK_ANIMATION],\n [AnimationType.ARM_BAR, ARM_BAR_ANIMATION],\n [AnimationType.SHOULDER_LOCK, SHOULDER_LOCK_ANIMATION],\n [AnimationType.HIP_THROW, HIP_THROW_ANIMATION],\n [AnimationType.LEG_REAP, LEG_REAP_ANIMATION],\n [AnimationType.SMALL_CIRCLE_LOCK, SMALL_CIRCLE_LOCK_ANIMATION],\n [AnimationType.FINGER_LOCK, FINGER_LOCK_ANIMATION],\n [AnimationType.ELBOW_LOCK, ELBOW_LOCK_ANIMATION],\n [AnimationType.SHOULDER_MANIPULATION, SHOULDER_MANIPULATION_ANIMATION],\n [AnimationType.FLOWING_ARM_BAR, FLOWING_ARM_BAR_ANIMATION],\n [AnimationType.MOUNTAIN_LOCK, MOUNTAIN_LOCK_ANIMATION],\n [AnimationType.EARTH_EMBRACE, EARTH_EMBRACE_ANIMATION],\n [AnimationType.CAROTID_CHOKE, CAROTID_CHOKE_ANIMATION],\n [AnimationType.REAR_NAKED_CHOKE, REAR_NAKED_CHOKE_ANIMATION],\n [AnimationType.REDIRECT_THROW, REDIRECT_THROW_ANIMATION],\n\n // Counters (반격)\n [AnimationType.COUNTER_ATTACK, COUNTER_ATTACK_ANIMATION],\n [AnimationType.COUNTER_STRIKE, COUNTER_STRIKE_ANIMATION],\n [AnimationType.PARRY_COUNTER, PARRY_COUNTER_ANIMATION],\n\n // Defense (방어)\n [AnimationType.BLOCK, BLOCK_ANIMATION],\n [AnimationType.BLOCK_HIGH, HIGH_BLOCK_ANIMATION],\n [AnimationType.BLOCK_LOW, LOW_BLOCK_ANIMATION],\n [AnimationType.JOINT_LOCK_DEFENSE, JOINT_LOCK_DEFENSE_ANIMATION],\n [AnimationType.SWEEP_DEFENSE, SWEEP_DEFENSE_ANIMATION],\n ]);\n\n/**\n * All animations combined into a single map by name\n * 이름별 전체 애니메이션 맵\n */\nexport const ALL_ANIMATIONS: ReadonlyMap<string, SkeletalAnimation> = new Map([\n ...KICK_ANIMATIONS,\n ...PUNCH_ANIMATIONS,\n ...SPECIALIZED_PUNCH_ANIMATIONS, // Add specialized punch variants\n ...ELBOW_KNEE_ANIMATIONS,\n ...GRAPPLING_ANIMATIONS,\n ...STANCE_ANIMATIONS,\n ...DARKOPS_ANIMATIONS,\n ...COMBO_ANIMATIONS,\n ...MOVEMENT_ANIMATIONS,\n ...ALL_ATTACK_ANIMATIONS, // Stance-specific attack animations (24 unique)\n ...BASIC_ANIMATIONS, // Idle, Walk, Run, Fall animations\n ...STANCE_LOCOMOTION_ANIMATIONS, // Stance-specific walk/run animations (16 unique)\n // Trigram idle animations with breathing/weight shifts (overrides static stance poses)\n // Must come after STANCE_ANIMATIONS to properly override stance_geon, stance_tae, etc.\n ...TRIGRAM_IDLE_ANIMATIONS_BY_NAME,\n\n // ═══ Trigram-specific stance and technique animations (팔괘 자세/기술 애니메이션) ═══\n // Each trigram has unique movement patterns and combat techniques\n ...GEON_ANIMATIONS, // ☰ Heaven: Direct force, power strikes\n ...TAE_STANCE_ANIMATIONS, // ☱ Lake: Fluid joint manipulation\n ...JIN_ANIMATIONS, // ☳ Thunder: Explosive power\n ...JIN_TECHNIQUE_ANIMATIONS, // ☳ Thunder techniques\n ...SON_STANCE_ANIMATIONS, // ☴ Wind: Continuous pressure\n ...SON_TECHNIQUE_ANIMATIONS, // ☴ Wind techniques\n ...GAN_STANCE_ANIMATIONS, // ☶ Mountain: Defensive mastery\n ...GAN_TECHNIQUE_ANIMATIONS, // ☶ Mountain techniques\n // Additional animations from AttackAnimations not in other maps\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// ANIMATION ID-BASED REGISTRY (animationId → SkeletalAnimation)\n// Direct 1-1 mapping for technique animations using new architecture\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Animation ID Registry - Direct mapping from technique animationId to SkeletalAnimation\n *\n * This provides 1-1 mapping between technique IDs and animations, using the new\n * animationId field instead of the legacy AnimationType enum.\n *\n * 기술 ID에서 애니메이션으로의 직접 매핑 (1-1 관계)\n *\n * @see TechniqueAnimationMapping.ts for legacy technique → AnimationType mappings\n * @korean 애니메이션ID레지스트리\n */\nexport const ANIMATION_ID_REGISTRY: ReadonlyMap<string, SkeletalAnimation> =\n new Map([\n // Complete mapping for all 57 techniques using existing animations\n [\"amsalja_silent_death\", SPEAR_HAND_ANIMATION],\n [\"darkops_ear_strike\", EAR_STRIKE_ANIMATION],\n [\"darkops_eye_gouge\", EYE_GOUGE_ANIMATION],\n [\"darkops_finger_break\", FINGER_LOCK_ANIMATION],\n [\"darkops_kidney_strike\", KIDNEY_KNEE_ANIMATION],\n [\"darkops_larynx_crush\", THROAT_STRIKE_ANIMATION],\n [\"darkops_sleeper_hold\", REAR_NAKED_CHOKE_ANIMATION],\n [\"darkops_spinal_strike\", SPINAL_ELBOW_ANIMATION],\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- animation guaranteed to exist in registry\n [\"gam_circular_parry\", STANCE_ANIMATIONS.get(\"gam_circular_parry\")!], // Use dedicated circular parry animation\n [\"gam_flow_defense\", GAM_FLOW_DEFENSE],\n [\"gam_flowing_block\", GAM_FLOWING_BLOCK],\n [\"gam_hip_throw\", HIP_THROW_ANIMATION],\n [\"gam_redirect_throw\", REDIRECT_THROW_ANIMATION],\n [\"gam_water_counter\", GAM_WATER_FLOW_COUNTER_ANIMATION],\n [\"gan_counter_strike\", GAN_COUNTER_FORTRESS],\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- animation guaranteed to exist in registry\n [\"gan_immovable_stance\", STANCE_ANIMATIONS.get(\"gan_immovable_stance\")!], // Use dedicated immovable stance animation\n [\"gan_iron_block\", GAN_IMMOVABLE_BLOCK],\n [\"gan_rock_defense\", GAN_ROCK_DEFENSE_ANIMATION],\n [\"geon_axe_kick\", AXE_KICK_ANIMATION],\n [\"geon_counter_strike\", GEON_COUNTER_STRIKE],\n [\"geon_crushing_elbow\", ELBOW_STRIKE_ANIMATION_ENHANCED],\n [\"geon_elbow_smash\", ELBOW_STRIKE_ANIMATION_ENHANCED],\n [\"geon_frontal_kick\", FRONT_KICK_ANIMATION_ENHANCED],\n [\"geon_heaven_strike\", HEAVEN_STRIKE_ANIMATION],\n [\"geon_heavenly_fist\", JAB_ANIMATION_ENHANCED],\n [\"geon_high_block\", GEON_HIGH_BLOCK],\n [\"geon_palm_strike\", PALM_STRIKE_ANIMATION],\n [\"gon_ankle_pick\", SWEEP_ANIMATION],\n [\"gon_earth_embrace\", EARTH_EMBRACE_ANIMATION],\n [\"gon_ground_pound\", SLAM_ANIMATION],\n [\"gon_leg_sweep\", SWEEP_ANIMATION],\n [\"gon_ssireum_throw\", HIP_THROW_ANIMATION],\n [\"hacker_data_strike\", PALM_STRIKE_ANIMATION],\n [\"hacker_system_crash\", HAMMER_FIST_ANIMATION],\n [\"jin_back_kick\", BACK_KICK_ANIMATION],\n [\"jin_explosive_knee\", KNEE_STRIKE_ANIMATION_ENHANCED],\n [\"jin_flying_sidekick\", FLYING_KICK_ANIMATION],\n [\"jin_knee_strike\", KNEE_STRIKE_ANIMATION_ENHANCED],\n [\"jin_tornado_kick\", TORNADO_KICK_ANIMATION],\n [\"jojik_street_brawl\", HOOK_ANIMATION],\n [\"li_flame_spear\", SPEAR_HAND_ANIMATION],\n [\"li_nerve_strike\", NERVE_STRIKE_ANIMATION],\n [\"li_precision_parry\", LI_PRECISION_PARRY],\n [\"li_sidekick\", SIDE_KICK_ANIMATION],\n [\"li_temple_strike\", TEMPLE_ELBOW_ANIMATION],\n [\"musa_dragon_fist\", CROSS_ANIMATION_ENHANCED],\n [\"musa_iron_defense\", HIGH_BLOCK_ANIMATION],\n [\"musa_thunder_strike\", UPPERCUT_ANIMATION],\n [\"son_flowing_push\", FLOWING_PUSH_ANIMATION],\n [\"son_rapid_footwork\", SIDE_STEP_ANIMATION],\n [\"son_sweeping_low_kick\", LOW_KICK_ANIMATION],\n [\"tae_arm_bar\", ARM_BAR_ANIMATION],\n [\"tae_elbow_lock\", ELBOW_LOCK_ANIMATION],\n [\"tae_finger_lock\", FINGER_LOCK_ANIMATION],\n [\"tae_flowing_strikes\", FLOWING_CROSS_ANIMATION],\n [\"tae_sweep_defense\", SWEEP_DEFENSE_ANIMATION],\n [\"tae_wrist_lock\", WRIST_LOCK_ANIMATION],\n ]);\n\n/**\n * Category-based default animations for fallback\n *\n * When an animationId is not found, fallback to category default.\n *\n * 카테고리별 기본 애니메이션 (fallback용)\n */\nexport const CATEGORY_DEFAULT_ANIMATIONS: ReadonlyMap<string, SkeletalAnimation> =\n new Map([\n [\"punch\", JAB_ANIMATION_ENHANCED],\n [\"kick\", FRONT_KICK_ANIMATION_ENHANCED],\n [\"strike\", PALM_STRIKE_ANIMATION],\n [\"joint_lock\", WRIST_LOCK_ANIMATION],\n [\"throw\", HIP_THROW_ANIMATION],\n [\"defensive\", BLOCK_ANIMATION],\n [\"elbow_strike\", ELBOW_STRIKE_ANIMATION_ENHANCED],\n [\"counter\", COUNTER_STRIKE_ANIMATION],\n [\"jumping_kick\", JUMPING_KICK_ANIMATION],\n [\"grapple\", GRAPPLE_ANIMATION],\n [\"sweep\", SWEEP_ANIMATION],\n [\"knee_strike\", KNEE_STRIKE_ANIMATION_ENHANCED],\n [\"footwork\", SIDE_STEP_ANIMATION],\n [\"stance\", IDLE_STANCE_ANIMATION],\n [\"takedown\", SLAM_ANIMATION],\n ]);\n\n// ═══════════════════════════════════════════════════════════════════════════\n// ANIMATION LOOKUP FUNCTIONS\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Get animation by AnimationType\n *\n * @param type - Animation type enum value\n * @returns Skeletal animation or undefined\n *\n * @korean 애니메이션타입으로조회\n */\nexport function getAnimationByType(\n type: AnimationType,\n): SkeletalAnimation | undefined {\n return ANIMATION_REGISTRY.get(type);\n}\n\n/**\n * Get animation by AnimationType with fallback\n *\n * @param type - Animation type enum value\n * @param fallback - Fallback animation type\n * @returns Skeletal animation (never undefined)\n *\n * @korean 애니메이션타입으로조회_기본값\n */\nexport function getAnimationByTypeOrDefault(\n type: AnimationType,\n fallback: AnimationType = AnimationType.JAB,\n): SkeletalAnimation {\n const animation =\n ANIMATION_REGISTRY.get(type) ?? ANIMATION_REGISTRY.get(fallback);\n\n if (!animation) {\n throw new Error(`Missing animation for ${type} with fallback ${fallback}`);\n }\n\n return animation;\n}\n\n/**\n * Get animation for a technique by technique ID (using AnimationType mapping)\n *\n * Uses the TechniqueAnimationMapping to find the correct animation\n * for any technique in the game.\n *\n * @param techniqueId - Technique identifier (e.g., \"geon_frontal_kick\")\n * @returns Skeletal animation or undefined\n *\n * @korean 기술ID로애니메이션조회\n */\nexport function getAnimationForTechniqueId(\n techniqueId: string,\n): SkeletalAnimation | undefined {\n const config = getTechniqueAnimationConfig(techniqueId);\n if (!config) return undefined;\n return ANIMATION_REGISTRY.get(config.type);\n}\n\n/**\n * Get animation for a technique with fallback\n *\n * @param techniqueId - Technique identifier\n * @param fallbackType - Fallback animation type\n * @returns Animation with speed modifier\n *\n * @korean 기술ID로애니메이션조회_기본값\n */\nexport function getAnimationForTechniqueIdWithConfig(\n techniqueId: string,\n fallbackType: AnimationType = AnimationType.JAB,\n): { animation: SkeletalAnimation; speed: number } {\n const config = getAnimationForTechniqueOrDefault(techniqueId, fallbackType);\n const animation =\n ANIMATION_REGISTRY.get(config.type) ?? ANIMATION_REGISTRY.get(fallbackType);\n\n if (!animation) {\n throw new Error(\n `Missing animation for ${config.type} with fallback ${fallbackType}`,\n );\n }\n return { animation, speed: config.speed };\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// NEW ARCHITECTURE: ID-Based Animation Lookup Functions\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Get animation by animationId (new architecture)\n *\n * Direct 1-1 lookup using the new animationId field from technique.\n * This is the preferred method for the new animation architecture.\n *\n * @param animationId - Technique's animationId (e.g., \"geon_heaven_strike\")\n * @returns SkeletalAnimation or undefined if not found\n *\n * @korean 애니메이션ID로조회\n */\nexport function getAnimationById(\n animationId: string,\n): SkeletalAnimation | undefined {\n return ANIMATION_ID_REGISTRY.get(animationId);\n}\n\n/**\n * Get animation by ID with category-based fallback\n *\n * Implements a 3-tier fallback system:\n * 1. Try direct ID lookup in ANIMATION_ID_REGISTRY\n * 2. If not found, use category default from CATEGORY_DEFAULT_ANIMATIONS\n * 3. If no category, use IDLE_STANCE as ultimate fallback\n *\n * This function never returns undefined, making it safe for use in game logic.\n *\n * @param animationId - Technique's animationId\n * @param animationCategory - Technique's animationCategory for fallback\n * @returns SkeletalAnimation (never undefined)\n *\n * @korean 애니메이션ID로조회_카테고리대체\n */\nexport function getAnimationByIdWithFallback(\n animationId: string | undefined,\n animationCategory?: string,\n): SkeletalAnimation {\n // Try direct ID lookup\n if (animationId) {\n const animation = ANIMATION_ID_REGISTRY.get(animationId);\n if (animation) return animation;\n }\n\n // Fallback to category default\n if (animationCategory) {\n const categoryDefault = CATEGORY_DEFAULT_ANIMATIONS.get(animationCategory);\n if (categoryDefault) return categoryDefault;\n }\n\n // Ultimate fallback\n return IDLE_STANCE_ANIMATION;\n}\n\n/**\n * Check if animation ID exists in registry\n *\n * @param animationId - Animation ID to check\n * @returns true if animation exists in ANIMATION_ID_REGISTRY\n *\n * @korean 애니메이션ID존재확인\n */\nexport function hasAnimationId(animationId: string): boolean {\n return ANIMATION_ID_REGISTRY.has(animationId);\n}\n\n/**\n * Get category default animation\n *\n * Returns the default animation for a given category, useful for fallback logic.\n *\n * @param category - Animation category (e.g., \"punch\", \"kick\")\n * @returns SkeletalAnimation or undefined if category not found\n *\n * @korean 카테고리기본애니메이션조회\n */\nexport function getCategoryDefaultAnimation(\n category: string,\n): SkeletalAnimation | undefined {\n return CATEGORY_DEFAULT_ANIMATIONS.get(category);\n}\n\n/**\n * Get animation by name (legacy support)\n *\n * @param name - Animation name (e.g., \"front_kick\")\n * @returns Skeletal animation or undefined\n *\n * @korean 이름으로애니메이션조회\n */\nexport function getAnimationByName(\n name: string,\n): SkeletalAnimation | undefined {\n return ALL_ANIMATIONS.get(name);\n}\n\n/**\n * Get animation by name - unified lookup across all animation registries\n *\n * Searches ALL_ANIMATIONS which includes:\n * - BASIC_ANIMATIONS (idle, walk, run, fall)\n * - KICK_ANIMATIONS, PUNCH_ANIMATIONS, etc.\n * - STANCE_ANIMATIONS, MOVEMENT_ANIMATIONS\n * - ALL_ATTACK_ANIMATIONS (stance-specific attacks)\n *\n * @param name - Animation name (e.g., \"idle\", \"front_kick\", \"walk\")\n * @returns Skeletal animation or undefined\n *\n * @korean 애니메이션가져오기\n */\nexport function getAnimation(name: string): SkeletalAnimation | undefined {\n return ALL_ANIMATIONS.get(name);\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// TECHNIQUE TO ANIMATION LOOKUP\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Regex fallback patterns for technique-to-animation mapping\n * Used when technique ID is not found in ALL_ANIMATIONS\n *\n * NOTE: Order matters - more specific patterns must come first\n *\n * @korean 기술애니메이션폴백매핑\n */\nconst TECHNIQUE_ANIMATION_FALLBACK: ReadonlyArray<readonly [RegExp, string]> = [\n // ───────────────────────────────────────────────────────────────────────\n // Stance-specific distinctive strikes - MUST be checked before the generic\n // /strike/ rule so that \"Thunder Strike\", \"Heaven Strike\", \"Nerve Strike\",\n // \"Precision Strike\", etc. don't collapse to the generic \"jab\" fallback.\n // ───────────────────────────────────────────────────────────────────────\n [/heaven.?strike|천둥벽력|하늘치기/i, \"heaven_strike\"],\n [/lightning.?(strike|flash)|번개|뇌격/i, \"lightning_strike\"],\n [/nerve.?strike|신경.?타격|신경치기/i, \"nerve_strike\"],\n [/pressure.?point|혈도|급소/i, \"pressure_point_strike\"],\n [/solar.?plexus|명치|태양신경총/i, \"solar_plexus_strike\"],\n [/throat.?strike|후두타격|목치기/i, \"throat_strike\"],\n [/temple.?(strike|elbow)|관자놀이/i, \"temple_strike\"],\n [/eye.?gouge|눈찌르기/i, \"eye_gouge\"],\n [/ear.?strike|귀치기/i, \"ear_strike\"],\n [/liver.?(disruption|strike)|간장|간치기/i, \"liver_disruption\"],\n [/kidney.?(strike|punch)|신장치기/i, \"kidney_strike\"],\n [/spear.?hand|관수|손끝찌르기/i, \"spear_hand_strike\"],\n [/flowing.?cross|flowing.?strike|유수타격/i, \"flowing_cross\"],\n [/flowing.?push|flowing.?palm/i, \"flowing_push\"],\n [/rapid.?barrage|연환타/i, \"rapid_barrage\"],\n [/rhythmic.?strike|리듬타격/i, \"rhythmic_strikes\"],\n // Heavenly/dragon fist names are stance-specific and should map to the\n // proper Geon/Jin animations, not the generic jab/cross fallbacks.\n // Note: intentionally exclude \"정권\" (generic straight punch) here — it\n // should continue to resolve to the generic `jab` via the kick/jab\n // section below, not to Geon's heaven_strike.\n [/heavenly.?fist|천권/i, \"heaven_strike\"],\n [/dragon.?fist|용권/i, \"jin_lightning_flash\"],\n\n // Kicks (차기) - more specific patterns first\n [/axe.?kick|내려차기|naeryeo/i, \"axe_kick\"],\n [/back.?kick|뒤차기|dwi.?chagi/i, \"back_kick\"],\n [/tornado|회오리|hoe.?ori/i, \"tornado_kick\"],\n [/jump|뛰어|ttwi|flying/i, \"jumping_kick\"],\n [/sweep|쓸기|걸기|품밟기|dari.?geolgi/i, \"sweep\"],\n [/side.?kick|옆차기|yeop.?chagi/i, \"side_kick\"],\n [/low.?kick|하단차기|낮은차기|thigh.?kick|leg.?kick/i, \"low_kick\"],\n [/front.?kick|앞차기|snap.?kick|ap.?chagi/i, \"front_kick\"],\n [/roundhouse|돌려차기|dolryeo/i, \"roundhouse_kick\"],\n // Knee strikes (무릎)\n [/knee|무릎|mureup/i, \"knee_strike\"],\n // Elbow strikes (팔꿈치)\n [/elbow|팔꿈치|팔굽|palkkumchi/i, \"elbow_strike\"],\n // Throws & Slams (던지기/내던지기)\n [/slam|내던지기|smash/i, \"slam\"],\n [/throw|던지기|deonjigi|ground.?pound/i, \"throw\"],\n // Grapple/Lock (꺾기/잡기) - specific locks first\n [/arm.?bar|팔꺾기|팔관절기|juji.?gatame/i, \"arm_bar\"],\n [/wrist.?lock|손목꺾기|손목관절기|kote.?gaeshi/i, \"wrist_lock\"],\n [/lock|grapple|꺾기|잡기|embrace|kkeokgi|japgi|submission/i, \"grapple\"],\n // Counter attacks (반격)\n [/counter.?strike|반격타격|카운터스트라이크/i, \"counter_strike\"],\n [/counter|반격|bangyeok|parry|redirect/i, \"counter_attack\"],\n // Blocks (막기)\n [/block|막기|makgi|defense|방어/i, \"block\"],\n // Punches (주먹) - check after specific patterns\n [/hook|후크|횡타|갈고리/i, \"hook\"],\n [/palm|장권|jang.?gwon/i, \"palm_strike\"],\n [/cross|십자|교차/i, \"cross\"],\n [/uppercut|upper|올려|치올/i, \"uppercut\"],\n [/jab|잽|직권|찌르기|punch|주먹|권/i, \"jab\"],\n // Generic strikes last - only used when no more specific pattern matched above\n [/strike|타격|격|chigi/i, \"jab\"],\n] as const;\n\n/**\n * Get animation name for a technique\n *\n * PRIORITY ORDER:\n * 1. Direct lookup in ALL_ANIMATIONS by technique ID (stance-specific)\n * 2. Regex pattern matching for generic techniques\n * 3. Fallback to \"jab\"\n *\n * This ensures stance-specific animations like \"geon_heaven_strike\"\n * are used when available, while still supporting generic technique names.\n *\n * @param techniqueNameOrId - Technique name, ID, or Korean name\n * @returns Animation name from ALL_ANIMATIONS\n *\n * @example\n * ```typescript\n * getAnimationForTechnique(\"geon_heaven_strike\") // \"geon_heaven_strike\" (exact match)\n * getAnimationForTechnique(\"tae_wrist_lock\") // \"tae_wrist_lock\" (exact match)\n * getAnimationForTechnique(\"roundhouse_kick\") // \"roundhouse_kick\" (regex match)\n * getAnimationForTechnique(\"앞차기\") // \"front_kick\" (regex match)\n * ```\n *\n * @korean 기술에맞는애니메이션가져오기\n */\nexport function getAnimationForTechnique(techniqueNameOrId: string): string {\n if (!techniqueNameOrId) return \"jab\";\n\n // 1. First check if technique ID exists directly in ALL_ANIMATIONS\n // This handles stance-specific animations like \"geon_heaven_strike\"\n if (ALL_ANIMATIONS.has(techniqueNameOrId)) {\n return techniqueNameOrId;\n }\n\n // 2. Try a normalized form: \"Thunder Strike\" → \"thunder_strike\".\n // This lets us catch techniques whose English name happens to match\n // an animation key exactly once spaces are collapsed.\n const normalized = techniqueNameOrId\n .trim()\n .toLowerCase()\n .replace(/[\\s-]+/g, \"_\")\n .replace(/[^a-z0-9_]/g, \"\");\n if (normalized && ALL_ANIMATIONS.has(normalized)) {\n return normalized;\n }\n\n // 3. Try regex pattern matching for generic technique names\n for (const [pattern, animationName] of TECHNIQUE_ANIMATION_FALLBACK) {\n if (pattern.test(techniqueNameOrId)) {\n return animationName;\n }\n }\n\n // 4. Ultimate fallback to jab\n return \"jab\";\n}\n\n/**\n * Resolve a technique object to its best-matching animation key.\n *\n * This is the single, authoritative entry point for screens and systems\n * that need to know which skeletal animation to play for a given technique.\n *\n * Resolution order (most specific → least):\n * 1. `technique.animationId` if present and registered (KoreanTechnique / TrigramStanceTechnique).\n * 2. `technique.id` if registered (Technique objects from {@link getTechniquesForStanceAndArchetype}\n * already carry their stance-specific id, e.g. `\"geon_heaven_strike\"`).\n * 3. Regex-based fallback on `technique.name.english`, then `technique.name.korean`.\n * 4. `\"jab\"` as ultimate fallback.\n *\n * Passing the technique object (rather than a loose string) avoids the\n * long-standing bug where `technique.name.english` — e.g. `\"Thunder Strike\"` —\n * would match only the generic `/strike/` rule and collapse every\n * stance-specific attack to the jab animation.\n *\n * @param technique - Technique or technique-like object.\n * @returns Animation key registered in {@link ALL_ANIMATIONS}.\n *\n * @korean 기술객체로애니메이션해결\n */\nexport function resolveTechniqueAnimation(\n technique:\n | {\n readonly id?: string;\n readonly animationId?: string;\n readonly name?: {\n readonly english?: string;\n readonly korean?: string;\n };\n }\n | null\n | undefined,\n): string {\n if (!technique) return \"jab\";\n\n // 1. Prefer animationId (authoritative 1-1 mapping on KoreanTechnique).\n if (technique.animationId && ALL_ANIMATIONS.has(technique.animationId)) {\n return technique.animationId;\n }\n\n // 2. technique.id (Technique objects preserve stance-prefixed ids here).\n if (technique.id && ALL_ANIMATIONS.has(technique.id)) {\n return technique.id;\n }\n\n // 3. Regex/normalized fallback on the most specific string we have.\n const english = technique.name?.english;\n if (english) {\n const byEnglish = getAnimationForTechnique(english);\n // Guard: only accept the result if it's not the dumb \"jab\" default when\n // we still have an id/animationId we can try as a last resort.\n if (byEnglish !== \"jab\" || !technique.id) {\n return byEnglish;\n }\n }\n\n // 4. Try id as a string (may go through regex fallback if not registered).\n if (technique.id) {\n return getAnimationForTechnique(technique.id);\n }\n\n // 5. Korean name as last resort.\n const korean = technique.name?.korean;\n if (korean) {\n return getAnimationForTechnique(korean);\n }\n\n return \"jab\";\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// RE-EXPORTS\n// ═══════════════════════════════════════════════════════════════════════════\n\n// Re-export all individual animations for direct access\nexport {\n ARM_BAR_ANIMATION,\n AXE_KICK_ANIMATION,\n BACK_KICK_ANIMATION,\n BLOCK_ANIMATION,\n COUNTER_ATTACK_ANIMATION,\n COUNTER_STRIKE_ANIMATION,\n CROSS_ANIMATION,\n // Elbow/Knee\n ELBOW_STRIKE_ANIMATION,\n ELBOW_UPPERCUT_ANIMATION,\n // Kicks\n FRONT_KICK_ANIMATION,\n GRAPPLE_ANIMATION,\n HOOK_ANIMATION,\n // Punches\n JAB_ANIMATION,\n JUMPING_KICK_ANIMATION,\n KNEE_STRIKE_ANIMATION,\n LOW_KICK_ANIMATION,\n PALM_STRIKE_ANIMATION,\n ROUNDHOUSE_KICK_ANIMATION,\n SIDE_KICK_ANIMATION,\n SLAM_ANIMATION,\n SWEEP_ANIMATION,\n // Grappling\n THROW_ANIMATION,\n TORNADO_KICK_ANIMATION,\n WRIST_LOCK_ANIMATION,\n};\n\n// Re-export category maps\nexport {\n COMBO_ANIMATIONS,\n DARKOPS_ANIMATIONS,\n ELBOW_KNEE_ANIMATIONS,\n GRAPPLING_ANIMATIONS,\n KICK_ANIMATIONS,\n MOVEMENT_ANIMATIONS,\n PUNCH_ANIMATIONS,\n STANCE_ANIMATIONS,\n};\n\n// Re-export animation types and mapping\nexport { AnimationType } from \"../builders/MartialArtsAnimationBuilder\";\nexport { hasAnimationMapping };\nexport type { AnimationConfig };\n"],"mappings":"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"}
1
+ {"version":3,"file":"AnimationRegistry.js","names":[],"sources":["../../../../src/systems/animation/core/AnimationRegistry.ts"],"sourcesContent":["/**\n * Animation Registry\n *\n * Central registry for all martial arts animations.\n * Combines all animation modules and provides unified access.\n *\n * 무술 애니메이션 레지스트리 - 모든 애니메이션 통합 관리\n *\n * **RECOVERY PHASE INTEGRATION (복귀 단계 통합)**\n *\n * Enhanced animations with realistic recovery phases are now the default for:\n * - JAB_ANIMATION → JAB_ANIMATION_ENHANCED (200ms recovery)\n * - CROSS_ANIMATION → CROSS_ANIMATION_ENHANCED (220ms recovery)\n * - FRONT_KICK_ANIMATION → FRONT_KICK_ANIMATION_ENHANCED (170ms recovery)\n * - ROUNDHOUSE_KICK_ANIMATION → ROUNDHOUSE_KICK_ANIMATION_ENHANCED (180ms recovery)\n * - ELBOW_STRIKE_ANIMATION → ELBOW_STRIKE_ANIMATION_ENHANCED (160ms recovery)\n * - ELBOW_UPPERCUT_ANIMATION → ELBOW_UPPERCUT_ANIMATION_ENHANCED (170ms recovery)\n * - KNEE_STRIKE_ANIMATION → KNEE_STRIKE_ANIMATION_ENHANCED (190ms recovery)\n *\n * Enhanced animations follow Korean martial arts principles (복귀/Bokgwi):\n * - 균형회복 (Gyunhyeong Hoebog) - Balance restoration\n * - 자세복귀 (Jase Bokgwi) - Stance return\n * - 호흡조절 (Hoheup Jojoel) - Breath control during recovery\n * - 근육이완 (Geunryuk Ihwan) - Muscle relaxation after tension\n *\n * All code using ANIMATION_REGISTRY or getAnimationForTechnique() will\n * automatically use enhanced versions with no code changes required.\n *\n * @module systems/animation/AnimationRegistry\n * @korean 애니메이션레지스트리\n */\n\nimport type { SkeletalAnimation } from \"@/types/skeletal\";\nimport { AnimationType } from \"../builders/MartialArtsAnimationBuilder\";\nimport { DEFAULT_TECHNIQUE_DURATION_SECONDS } from \"./types\";\nimport {\n BACKWARD_RETREAT_ANIMATION,\n FORWARD_DASH_ANIMATION,\n IDLE_STANCE_ANIMATION,\n SIDE_STEP_ANIMATION,\n} from \"../catalogs/AttackAnimations\";\nimport { BASIC_ANIMATIONS } from \"../catalogs/BasicAnimations\";\nimport { COMBO_ANIMATIONS } from \"../catalogs/ComboAnimations\";\nimport { DARKOPS_ANIMATIONS } from \"../catalogs/DarkOpsAnimations\";\nimport {\n GAM_FLOW_DEFENSE,\n GAN_COUNTER_FORTRESS,\n GAN_IMMOVABLE_BLOCK,\n GEON_COUNTER_STRIKE,\n GEON_HIGH_BLOCK,\n GON_GROUNDING_DEFENSE,\n GON_TAKEDOWN_COUNTER,\n JIN_EXPLOSIVE_BLOCK,\n JIN_SHOCKING_COUNTER,\n LI_NERVE_STRIKE_COUNTER,\n LI_PRECISION_PARRY,\n SON_CONTINUOUS_DEFLECTION,\n SON_PRESSURE_COUNTER,\n TAE_SWEEP_DEFENSE,\n} from \"../catalogs/DefensiveAnimations\";\nimport {\n BRACHIAL_ELBOW_ANIMATION,\n CLINCH_KNEE_ANIMATION,\n ELBOW_KNEE_ANIMATIONS,\n ELBOW_STRIKE_ANIMATION,\n ELBOW_UPPERCUT_ANIMATION,\n FEMORAL_KNEE_ANIMATION,\n FLYING_KNEE_ANIMATION,\n KIDNEY_KNEE_ANIMATION,\n KNEE_KICK_ANIMATION,\n KNEE_STRIKE_ANIMATION,\n SPINAL_ELBOW_ANIMATION,\n SPINNING_BACK_ELBOW_ANIMATION,\n SPINNING_ELBOW_ANIMATION,\n TEMPLE_ELBOW_ANIMATION,\n} from \"../catalogs/ElbowKneeAnimations\";\nimport {\n ARM_BAR_ANIMATION,\n BLOCK_ANIMATION,\n BODY_LOCK_THROW_ANIMATION,\n CAROTID_CHOKE_ANIMATION,\n COUNTER_ATTACK_ANIMATION,\n COUNTER_STRIKE_ANIMATION,\n EARTH_EMBRACE_ANIMATION,\n ELBOW_LOCK_ANIMATION,\n FINGER_LOCK_ANIMATION,\n FLOWING_ARM_BAR_ANIMATION,\n GRAPPLE_ANIMATION,\n GRAPPLING_ANIMATIONS,\n HIGH_BLOCK_ANIMATION,\n HIP_THROW_ANIMATION,\n JOINT_LOCK_DEFENSE_ANIMATION,\n LEG_REAP_ANIMATION,\n LOW_BLOCK_ANIMATION,\n MOUNTAIN_LOCK_ANIMATION,\n PARRY_COUNTER_ANIMATION,\n REAR_NAKED_CHOKE_ANIMATION,\n REDIRECT_THROW_ANIMATION,\n SHOULDER_LOCK_ANIMATION,\n SHOULDER_MANIPULATION_ANIMATION,\n SLAM_ANIMATION,\n SMALL_CIRCLE_LOCK_ANIMATION,\n SUPLEX_ANIMATION,\n SWEEP_DEFENSE_ANIMATION,\n TAKEDOWN_ANIMATION,\n THROW_ANIMATION,\n WRIST_LOCK_ANIMATION,\n} from \"../catalogs/GrapplingAnimations\";\nimport {\n AXE_KICK_ANIMATION,\n BACK_KICK_ANIMATION,\n CRESCENT_KICK_ANIMATION,\n FLYING_KICK_ANIMATION,\n FRONT_KICK_ANIMATION,\n JUMPING_KICK_ANIMATION,\n KICK_ANIMATIONS,\n LOW_KICK_ANIMATION,\n PUSH_KICK_ANIMATION,\n ROUNDHOUSE_KICK_ANIMATION,\n SIDE_KICK_ANIMATION,\n SPINNING_HEEL_KICK_ANIMATION,\n SPINNING_HOOK_KICK_ANIMATION,\n SWEEP_ANIMATION,\n TORNADO_KICK_ANIMATION,\n} from \"../catalogs/KickAnimations\";\nimport { MOVEMENT_ANIMATIONS } from \"../catalogs/MovementAnimations\";\nimport {\n BACKFIST_ANIMATION,\n CROSS_ANIMATION,\n HAMMER_FIST_ANIMATION,\n HOOK_ANIMATION,\n JAB_ANIMATION,\n OVERHAND_ANIMATION,\n PALM_STRIKE_ANIMATION,\n PUNCH_ANIMATIONS,\n UPPERCUT_ANIMATION,\n} from \"../catalogs/PunchAnimations\";\n\nimport { STANCE_ANIMATIONS } from \"../catalogs/StanceAnimations\";\nimport { ALL_ATTACK_ANIMATIONS } from \"../catalogs/StanceAttackAnimations\";\nimport { TRIGRAM_IDLE_ANIMATIONS_BY_NAME } from \"../catalogs/StanceIdleAnimations\";\nimport { STANCE_LOCOMOTION_ANIMATIONS } from \"../catalogs/StanceLocomotionAnimations\";\n\n// Trigram-specific stance and technique animation maps\nimport { GAM_STANCE_ANIMATIONS } from \"../catalogs/GamStanceAnimations\";\nimport {\n GAM_TECHNIQUE_ANIMATIONS,\n GAM_WATER_FLOW_COUNTER_ANIMATION,\n} from \"../catalogs/GamTechniqueAnimations\";\nimport { GAN_ROCK_DEFENSE_ANIMATION } from \"../catalogs/GanTechniqueAnimations\";\nimport { GAN_STANCE_ANIMATIONS } from \"../catalogs/GanStanceAnimations\";\nimport { GAN_TECHNIQUE_ANIMATIONS } from \"../catalogs/GanTechniqueAnimations\";\nimport { GEON_ANIMATIONS } from \"../catalogs/GeonStanceAnimations\";\nimport { GON_TECHNIQUE_ANIMATIONS } from \"../catalogs/GonTechniqueAnimations\";\nimport { JIN_ANIMATIONS } from \"../catalogs/JinStanceAnimations\";\nimport { JIN_TECHNIQUE_ANIMATIONS } from \"../catalogs/JinTechniqueAnimations\";\nimport { LI_STANCE_ANIMATIONS } from \"../catalogs/LiStanceAnimations\";\nimport { SON_STANCE_ANIMATIONS } from \"../catalogs/SonStanceAnimations\";\nimport { SON_TECHNIQUE_ANIMATIONS } from \"../catalogs/SonTechniqueAnimations\";\nimport { TAE_STANCE_ANIMATIONS } from \"../catalogs/TaeStanceAnimations\";\nimport {\n getAnimationForTechniqueOrDefault,\n getAnimationForTechnique as getTechniqueAnimationConfig,\n hasAnimationMapping,\n type AnimationConfig,\n} from \"./TechniqueAnimationMapping\";\n\n// Enhanced animations with recovery phases (복귀 애니메이션 강화)\nimport {\n CROSS_ANIMATION_ENHANCED,\n FRONT_KICK_ANIMATION_ENHANCED,\n JAB_ANIMATION_ENHANCED,\n ROUNDHOUSE_KICK_ANIMATION_ENHANCED,\n} from \"../catalogs/EnhancedAttackAnimations\";\nimport {\n ELBOW_STRIKE_ANIMATION_ENHANCED,\n ELBOW_UPPERCUT_ANIMATION_ENHANCED,\n KNEE_STRIKE_ANIMATION_ENHANCED,\n} from \"../catalogs/EnhancedElbowKneeAnimations\";\n\nimport {\n TAE_ARM_BAR,\n TAE_ELBOW_CONTROL,\n TAE_FINGER_LOCK,\n TAE_FLOWING_COUNTER,\n TAE_FLOWING_STRIKES,\n TAE_SHOULDER_LOCK,\n TAE_SMALL_CIRCLE,\n TAE_WRIST_LOCK_SEQUENCE,\n} from \"../catalogs/TaeJointLockAnimations\";\n\n// TODO: Register Tae stance animations when trigram-specific idle/movement system is implemented\n// import {\n// TAE_IDLE_FLOWING,\n// TAE_CIRCULAR_SIDESTEP,\n// TAE_DIAGONAL_CIRCULAR_APPROACH,\n// TAE_FLEXIBLE_GUARD_TRANSITION,\n// } from \"../catalogs/TaeStanceAnimations\";\n\nimport {\n GAM_FLOWING_BLOCK,\n GAM_FLOWING_RIVER_STRIKE,\n GAM_REDIRECTION_COUNTER,\n GAM_TIDAL_WAVE_PALM,\n GAM_WHIRLPOOL_COUNTER,\n} from \"../catalogs/GamRedirectionAnimations\";\n\n// Specialized punch variant animations (특수 주먹 변형 애니메이션)\nimport {\n EAR_STRIKE_ANIMATION,\n EYE_GOUGE_ANIMATION,\n FLOWING_CROSS_ANIMATION,\n FLOWING_PUSH_ANIMATION,\n HEAVEN_STRIKE_ANIMATION,\n LIGHTNING_STRIKE_ANIMATION,\n LIVER_DISRUPTION_ANIMATION,\n NERVE_PARALYSIS_ANIMATION,\n NERVE_STRIKE_ANIMATION,\n PRESSURE_POINT_STRIKE_ANIMATION,\n RAPID_BARRAGE_ANIMATION,\n RHYTHMIC_STRIKES_ANIMATION,\n SOLAR_PLEXUS_STRIKE_ANIMATION,\n SPEAR_HAND_STRIKE_ANIMATION as SPEAR_HAND_ANIMATION,\n SPECIALIZED_PUNCH_ANIMATIONS,\n THROAT_STRIKE_ANIMATION,\n} from \"../catalogs/SpecializedPunchAnimations\";\n\nconst STANCE_TRANSITION_ANIMATION: SkeletalAnimation = {\n ...IDLE_STANCE_ANIMATION,\n name: \"stance_change\",\n koreanName: \"자세전환\",\n loop: false,\n};\n\n// ═══════════════════════════════════════════════════════════════════════════\n// MASTER ANIMATION REGISTRY\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Master registry of all animations by AnimationType\n * 애니메이션 타입별 마스터 레지스트리\n */\nexport const ANIMATION_REGISTRY: ReadonlyMap<AnimationType, SkeletalAnimation> =\n new Map([\n // Kicks (발차기) - Using enhanced versions with recovery phases\n [AnimationType.FRONT_KICK, FRONT_KICK_ANIMATION_ENHANCED],\n [AnimationType.ROUNDHOUSE_KICK, ROUNDHOUSE_KICK_ANIMATION_ENHANCED],\n [AnimationType.SIDE_KICK, SIDE_KICK_ANIMATION],\n [AnimationType.AXE_KICK, AXE_KICK_ANIMATION],\n [AnimationType.BACK_KICK, BACK_KICK_ANIMATION],\n [AnimationType.TORNADO_KICK, TORNADO_KICK_ANIMATION],\n [AnimationType.JUMPING_KICK, JUMPING_KICK_ANIMATION],\n [AnimationType.LOW_KICK, LOW_KICK_ANIMATION],\n [AnimationType.CRESCENT_KICK, CRESCENT_KICK_ANIMATION],\n [AnimationType.PUSH_KICK, PUSH_KICK_ANIMATION],\n [AnimationType.SPINNING_HEEL_KICK, SPINNING_HEEL_KICK_ANIMATION],\n [AnimationType.SPINNING_HOOK, SPINNING_HOOK_KICK_ANIMATION],\n [AnimationType.FLYING_KICK, FLYING_KICK_ANIMATION],\n\n // Punches (주먹) - Using enhanced versions with recovery phases\n [AnimationType.JAB, JAB_ANIMATION_ENHANCED],\n [AnimationType.CROSS, CROSS_ANIMATION_ENHANCED],\n [AnimationType.HOOK, HOOK_ANIMATION],\n [AnimationType.UPPERCUT, UPPERCUT_ANIMATION],\n [AnimationType.OVERHAND, OVERHAND_ANIMATION],\n [AnimationType.PALM_STRIKE, PALM_STRIKE_ANIMATION],\n [AnimationType.BACKFIST, BACKFIST_ANIMATION],\n [AnimationType.HAMMER_FIST, HAMMER_FIST_ANIMATION],\n\n // Specialized Punch Variants (특수 주먹 변형)\n [AnimationType.SPEAR_HAND_STRIKE, SPEAR_HAND_ANIMATION],\n [AnimationType.NERVE_STRIKE, NERVE_STRIKE_ANIMATION],\n [AnimationType.PRESSURE_POINT_STRIKE, PRESSURE_POINT_STRIKE_ANIMATION],\n [AnimationType.LIGHTNING_STRIKE, LIGHTNING_STRIKE_ANIMATION],\n [AnimationType.HEAVEN_STRIKE, HEAVEN_STRIKE_ANIMATION],\n [AnimationType.FLOWING_CROSS, FLOWING_CROSS_ANIMATION],\n [AnimationType.RAPID_BARRAGE, RAPID_BARRAGE_ANIMATION],\n [AnimationType.RHYTHMIC_STRIKES, RHYTHMIC_STRIKES_ANIMATION],\n [AnimationType.FLOWING_PUSH, FLOWING_PUSH_ANIMATION],\n [AnimationType.SOLAR_PLEXUS_STRIKE, SOLAR_PLEXUS_STRIKE_ANIMATION],\n [AnimationType.THROAT_STRIKE, THROAT_STRIKE_ANIMATION],\n [AnimationType.EYE_GOUGE, EYE_GOUGE_ANIMATION],\n [AnimationType.NERVE_PARALYSIS, NERVE_PARALYSIS_ANIMATION],\n [AnimationType.LIVER_DISRUPTION, LIVER_DISRUPTION_ANIMATION],\n [AnimationType.EAR_STRIKE, EAR_STRIKE_ANIMATION],\n\n // ═══ TRIGRAM SPECIFIC ALIASES (괘별 기술 매핑) ═══\n // Geon (건)\n [AnimationType.GEON_HEAVEN_STRIKE, HEAVEN_STRIKE_ANIMATION],\n [AnimationType.GEON_ROUNDHOUSE, ROUNDHOUSE_KICK_ANIMATION_ENHANCED],\n [AnimationType.CRUSHING_ELBOW, ELBOW_STRIKE_ANIMATION_ENHANCED],\n [AnimationType.GEON_COUNTER, GEON_COUNTER_STRIKE],\n [AnimationType.HIGH_BLOCK, GEON_HIGH_BLOCK],\n\n // Li (리)\n [AnimationType.PHOENIX_EYE_STRIKE, NERVE_STRIKE_ANIMATION],\n [AnimationType.NERVE_STRIKE_COUNTER, LI_NERVE_STRIKE_COUNTER],\n [AnimationType.PRECISION_PARRY, LI_PRECISION_PARRY],\n [AnimationType.LI_SOLAR_PLEXUS, SOLAR_PLEXUS_STRIKE_ANIMATION],\n [AnimationType.SOLAR_PLEXUS_SPEAR, SPEAR_HAND_ANIMATION],\n\n // Tae (태) - Lake: Joint Manipulation\n [AnimationType.WRIST_LOCK_STRIKE, WRIST_LOCK_ANIMATION],\n [AnimationType.WRIST_LOCK, TAE_WRIST_LOCK_SEQUENCE], // Enhanced Hapkido wrist lock\n [AnimationType.SPIRAL_SHOULDER_THROW, HIP_THROW_ANIMATION],\n [AnimationType.JOINT_LOCK_DEFENSE, TAE_FLOWING_COUNTER],\n [AnimationType.SWEEP_DEFENSE, TAE_SWEEP_DEFENSE],\n [AnimationType.WRIST_TWIST_COUNTER, TAE_FLOWING_COUNTER],\n [AnimationType.FLOWING_CROSS, TAE_FLOWING_STRIKES], // Continuous palm strikes\n [AnimationType.SMALL_CIRCLE_LOCK, TAE_SMALL_CIRCLE], // Advanced dual joint control\n [AnimationType.FINGER_LOCK, TAE_FINGER_LOCK],\n [AnimationType.ELBOW_LOCK, TAE_ELBOW_CONTROL], // Enhanced two-handed control\n [AnimationType.ELBOW_HYPEREXTEND, TAE_ELBOW_CONTROL],\n [AnimationType.SHOULDER_MANIPULATION, TAE_SHOULDER_LOCK], // Enhanced shoulder lock\n [AnimationType.ARM_BAR, TAE_ARM_BAR], // Most powerful submission\n [AnimationType.FLOWING_ARM_BAR, TAE_ARM_BAR], // Alias for flowing arm bar\n\n // Jin (진)\n [AnimationType.EXPLOSIVE_KNEE, KNEE_STRIKE_ANIMATION_ENHANCED],\n [AnimationType.LIGHTNING_STRAIGHT, JAB_ANIMATION_ENHANCED],\n [AnimationType.SHOCKING_COUNTER, JIN_SHOCKING_COUNTER],\n [AnimationType.SHOCKING_HAMMER_FIST, HAMMER_FIST_ANIMATION],\n [AnimationType.EXPLOSIVE_BLOCK, JIN_EXPLOSIVE_BLOCK],\n\n // Son (손)\n [AnimationType.CONTINUOUS_DEFLECTION, SON_CONTINUOUS_DEFLECTION],\n [AnimationType.PRESSURE_COUNTER, SON_PRESSURE_COUNTER],\n [AnimationType.RAPID_FOOTWORK, FLOWING_PUSH_ANIMATION], // Placeholder until dedicated footwork\n [AnimationType.PENETRATING_PALM_RUSH, FLOWING_PUSH_ANIMATION],\n [AnimationType.PRESSURE_POINT_CHAIN, RAPID_BARRAGE_ANIMATION],\n\n // Gam (감)\n [AnimationType.WATER_COUNTER, GAM_REDIRECTION_COUNTER],\n [AnimationType.CIRCULAR_PARRY, GAM_FLOWING_BLOCK], // Updated to Flowing Block\n [AnimationType.FLOW_DEFENSE, GAM_FLOWING_BLOCK], // Updated to Flowing Block\n [AnimationType.FLOWING_RIVER_STRIKE, GAM_FLOWING_RIVER_STRIKE],\n [AnimationType.REDIRECTION_COUNTER, GAM_REDIRECTION_COUNTER],\n [AnimationType.TIDAL_WAVE_PALM, GAM_TIDAL_WAVE_PALM],\n [AnimationType.WHIRLPOOL_COUNTER, GAM_WHIRLPOOL_COUNTER],\n\n // Gan (간)\n [AnimationType.ROCK_COUNTER, GAN_COUNTER_FORTRESS],\n [AnimationType.ROCK_DEFENSE, GAN_IMMOVABLE_BLOCK],\n [AnimationType.AVALANCHE_HAMMER, HAMMER_FIST_ANIMATION],\n [AnimationType.COUNTER_FORTRESS, GAN_COUNTER_FORTRESS],\n [AnimationType.FORTRESS_COUNTER_STRIKE, COUNTER_STRIKE_ANIMATION],\n [AnimationType.STONE_WALL_THRUST, PUSH_KICK_ANIMATION],\n\n // General Grappling\n [AnimationType.TAKEDOWN, TAKEDOWN_ANIMATION],\n [AnimationType.JOINT_LOCK, JOINT_LOCK_DEFENSE_ANIMATION],\n [AnimationType.HIP_WHEEL_THROW, HIP_THROW_ANIMATION],\n [AnimationType.SSIREUM_THROW, BODY_LOCK_THROW_ANIMATION], // Korean wrestling style\n [AnimationType.SACRIFICE_THROW, SUPLEX_ANIMATION], // Close match\n [AnimationType.CLINCH, CLINCH_KNEE_ANIMATION],\n [AnimationType.PARRY, PARRY_COUNTER_ANIMATION],\n\n // Movement/Basic\n [AnimationType.SIDESTEP, SIDE_STEP_ANIMATION],\n [AnimationType.PIVOT, SIDE_STEP_ANIMATION], // Reusing side step\n [AnimationType.STEP_FORWARD, FORWARD_DASH_ANIMATION],\n [AnimationType.STEP_BACK, BACKWARD_RETREAT_ANIMATION],\n [AnimationType.FORWARD_DASH, FORWARD_DASH_ANIMATION],\n [AnimationType.BACKWARD_RETREAT, BACKWARD_RETREAT_ANIMATION],\n [AnimationType.WALK, FORWARD_DASH_ANIMATION], // Placeholder\n [AnimationType.RECOVERY, IDLE_STANCE_ANIMATION],\n [AnimationType.STANCE, IDLE_STANCE_ANIMATION],\n [AnimationType.IDLE, IDLE_STANCE_ANIMATION],\n [AnimationType.DUCK, IDLE_STANCE_ANIMATION], // Placeholder\n [AnimationType.LEAN, IDLE_STANCE_ANIMATION], // Placeholder\n\n // Defense Aliases\n [AnimationType.BLOCK, BLOCK_ANIMATION],\n [AnimationType.BLOCK_HIGH, HIGH_BLOCK_ANIMATION],\n [AnimationType.BLOCK_LOW, LOW_BLOCK_ANIMATION],\n [AnimationType.FLOWING_BLOCK, GAM_FLOWING_BLOCK],\n [AnimationType.IRON_BLOCK, GAN_IMMOVABLE_BLOCK],\n [AnimationType.IMMOVABLE_BLOCK, GAN_IMMOVABLE_BLOCK],\n [AnimationType.THUNDEROUS_UPPERCUT, ELBOW_UPPERCUT_ANIMATION],\n\n // Gon (곤)\n [AnimationType.GROUNDING_DEFENSE, GON_GROUNDING_DEFENSE],\n [AnimationType.TAKEDOWN_COUNTER, GON_TAKEDOWN_COUNTER],\n [AnimationType.EARTHQUAKE_STOMP, AXE_KICK_ANIMATION],\n [AnimationType.GROUND_SWEEP_STRIKE, SWEEP_ANIMATION],\n [AnimationType.ROOTING_TAKEDOWN, TAKEDOWN_ANIMATION],\n [AnimationType.TAKEDOWN_COUNTER, GON_TAKEDOWN_COUNTER],\n [AnimationType.ANKLE_PICK, TAKEDOWN_ANIMATION],\n [AnimationType.BODY_LOCK_SLAM, BODY_LOCK_THROW_ANIMATION],\n\n // Dark Ops (암살자)\n [AnimationType.TEMPLE_STRIKE, TEMPLE_ELBOW_ANIMATION],\n [AnimationType.BRACHIAL_PLEXUS, BRACHIAL_ELBOW_ANIMATION],\n [AnimationType.ACHILLES_ATTACK, LEG_REAP_ANIMATION],\n [AnimationType.CERVICAL_TWIST, REAR_NAKED_CHOKE_ANIMATION],\n [AnimationType.ELBOW_HYPEREXTEND, ARM_BAR_ANIMATION],\n [AnimationType.FEMORAL_NERVE, FEMORAL_KNEE_ANIMATION],\n [AnimationType.LARYNX_CRUSH, THROAT_STRIKE_ANIMATION],\n [AnimationType.JAW_DISLOCATION, HOOK_ANIMATION],\n [AnimationType.FINGER_BREAK, FINGER_LOCK_ANIMATION],\n [AnimationType.GUILLOTINE_CHOKE, CAROTID_CHOKE_ANIMATION],\n [AnimationType.JUGULAR_STRIKE, THROAT_STRIKE_ANIMATION],\n [AnimationType.KNEECAP_STRIKE, LOW_KICK_ANIMATION],\n [AnimationType.OCCIPITAL_STRIKE, HAMMER_FIST_ANIMATION],\n [AnimationType.SCIATIC_NERVE_STRIKE, KNEE_STRIKE_ANIMATION_ENHANCED],\n [AnimationType.SILENT_TAKEDOWN, REAR_NAKED_CHOKE_ANIMATION],\n [AnimationType.SLEEPER_HOLD, REAR_NAKED_CHOKE_ANIMATION],\n [AnimationType.TRIANGLE_CHOKE, LEG_REAP_ANIMATION], // Uses legs\n [AnimationType.SPLEEN_RUPTURE, KNEE_STRIKE_ANIMATION_ENHANCED],\n\n // Musa (무사)\n [AnimationType.DRAGON_FIST, HEAVEN_STRIKE_ANIMATION],\n [AnimationType.THUNDER_STRIKE, HEAVEN_STRIKE_ANIMATION],\n [AnimationType.MOUNTAIN_BREAKER, HAMMER_FIST_ANIMATION],\n [AnimationType.IRON_DEFENSE, GEON_HIGH_BLOCK],\n\n // Amsalja (암살자)\n [AnimationType.DEADLY_PRECISION, NERVE_STRIKE_ANIMATION],\n [AnimationType.SHADOW_NERVE_STRIKE, NERVE_STRIKE_ANIMATION],\n [AnimationType.SHADOW_STRIKE, CROSS_ANIMATION_ENHANCED],\n [AnimationType.SILENT_DEATH, HEAVEN_STRIKE_ANIMATION], // Finisher\n\n // Hacker (해커)\n [AnimationType.CYBER_OVERDRIVE, RAPID_BARRAGE_ANIMATION],\n [AnimationType.DATA_STRIKE, NERVE_STRIKE_ANIMATION],\n [AnimationType.ELECTRIC_SHOCK, PALM_STRIKE_ANIMATION],\n [AnimationType.SYSTEM_CRASH, HEAVEN_STRIKE_ANIMATION],\n\n // Jeongbo (정보요원)\n [AnimationType.TACTICAL_STRIKE, JAB_ANIMATION_ENHANCED],\n [AnimationType.INTELLIGENCE_STRIKE, NERVE_STRIKE_ANIMATION],\n [AnimationType.COUNTER_INTELLIGENCE, PARRY_COUNTER_ANIMATION],\n [AnimationType.PSYCHOLOGICAL_WARFARE, IDLE_STANCE_ANIMATION],\n\n // Jojik (조직폭력배)\n [AnimationType.RUTHLESS_ASSAULT, RAPID_BARRAGE_ANIMATION],\n [AnimationType.STREET_BRAWL, OVERHAND_ANIMATION],\n [AnimationType.IMPROVISED_WEAPON, HAMMER_FIST_ANIMATION],\n [AnimationType.BRUTAL_TAKEDOWN, BODY_LOCK_THROW_ANIMATION],\n\n // Misc\n [AnimationType.IDLE_STANCE, IDLE_STANCE_ANIMATION],\n\n // Movement Aliases\n [AnimationType.SIDE_STEP, SIDE_STEP_ANIMATION],\n\n // [AnimationType.FLOWING_PUSH, FLOWING_PUSH_ANIMATION],\n // [AnimationType.THROAT_STRIKE, THROAT_STRIKE_ANIMATION],\n // [AnimationType.EYE_GOUGE, EYE_GOUGE_ANIMATION],\n // [AnimationType.NERVE_PARALYSIS, NERVE_PARALYSIS_ANIMATION],\n // [AnimationType.LIVER_DISRUPTION, LIVER_DISRUPTION_ANIMATION],\n // [AnimationType.EAR_STRIKE, EAR_STRIKE_ANIMATION],\n\n // Elbow/Knee (팔꿈치/무릎) - Using enhanced versions with recovery phases\n [AnimationType.ELBOW_STRIKE, ELBOW_STRIKE_ANIMATION_ENHANCED],\n [AnimationType.ELBOW_UPPERCUT, ELBOW_UPPERCUT_ANIMATION_ENHANCED],\n [AnimationType.SPINNING_ELBOW, SPINNING_ELBOW_ANIMATION],\n [AnimationType.KNEE_STRIKE, KNEE_STRIKE_ANIMATION_ENHANCED],\n [AnimationType.FLYING_KNEE, FLYING_KNEE_ANIMATION],\n [AnimationType.KNEE_KICK, KNEE_KICK_ANIMATION],\n [AnimationType.CLINCH_KNEE, CLINCH_KNEE_ANIMATION],\n [AnimationType.TEMPLE_ELBOW, TEMPLE_ELBOW_ANIMATION],\n [AnimationType.SPINNING_BACK_ELBOW, SPINNING_BACK_ELBOW_ANIMATION],\n [AnimationType.SPINAL_ELBOW, SPINAL_ELBOW_ANIMATION],\n [AnimationType.BRACHIAL_ELBOW, BRACHIAL_ELBOW_ANIMATION],\n [AnimationType.KIDNEY_KNEE, KIDNEY_KNEE_ANIMATION],\n [AnimationType.FEMORAL_KNEE, FEMORAL_KNEE_ANIMATION],\n\n // Grappling (잡기)\n [AnimationType.THROW, THROW_ANIMATION],\n [AnimationType.GRAPPLE, GRAPPLE_ANIMATION],\n [AnimationType.SWEEP, SWEEP_ANIMATION],\n [AnimationType.SLAM, SLAM_ANIMATION],\n [AnimationType.WRIST_LOCK, WRIST_LOCK_ANIMATION],\n [AnimationType.ARM_BAR, ARM_BAR_ANIMATION],\n [AnimationType.SHOULDER_LOCK, SHOULDER_LOCK_ANIMATION],\n [AnimationType.HIP_THROW, HIP_THROW_ANIMATION],\n [AnimationType.LEG_REAP, LEG_REAP_ANIMATION],\n [AnimationType.SMALL_CIRCLE_LOCK, SMALL_CIRCLE_LOCK_ANIMATION],\n [AnimationType.FINGER_LOCK, FINGER_LOCK_ANIMATION],\n [AnimationType.ELBOW_LOCK, ELBOW_LOCK_ANIMATION],\n [AnimationType.SHOULDER_MANIPULATION, SHOULDER_MANIPULATION_ANIMATION],\n [AnimationType.FLOWING_ARM_BAR, FLOWING_ARM_BAR_ANIMATION],\n [AnimationType.MOUNTAIN_LOCK, MOUNTAIN_LOCK_ANIMATION],\n [AnimationType.EARTH_EMBRACE, EARTH_EMBRACE_ANIMATION],\n [AnimationType.CAROTID_CHOKE, CAROTID_CHOKE_ANIMATION],\n [AnimationType.REAR_NAKED_CHOKE, REAR_NAKED_CHOKE_ANIMATION],\n [AnimationType.REDIRECT_THROW, REDIRECT_THROW_ANIMATION],\n\n // Counters (반격)\n [AnimationType.COUNTER_ATTACK, COUNTER_ATTACK_ANIMATION],\n [AnimationType.COUNTER_STRIKE, COUNTER_STRIKE_ANIMATION],\n [AnimationType.PARRY_COUNTER, PARRY_COUNTER_ANIMATION],\n\n // Defense (방어)\n [AnimationType.BLOCK, BLOCK_ANIMATION],\n [AnimationType.BLOCK_HIGH, HIGH_BLOCK_ANIMATION],\n [AnimationType.BLOCK_LOW, LOW_BLOCK_ANIMATION],\n [AnimationType.JOINT_LOCK_DEFENSE, JOINT_LOCK_DEFENSE_ANIMATION],\n [AnimationType.SWEEP_DEFENSE, SWEEP_DEFENSE_ANIMATION],\n ]);\n\n/**\n * All animations combined into a single map by name\n * 이름별 전체 애니메이션 맵\n */\nexport const ALL_ANIMATIONS: ReadonlyMap<string, SkeletalAnimation> = new Map([\n ...KICK_ANIMATIONS,\n ...PUNCH_ANIMATIONS,\n ...SPECIALIZED_PUNCH_ANIMATIONS, // Add specialized punch variants\n ...ELBOW_KNEE_ANIMATIONS,\n ...GRAPPLING_ANIMATIONS,\n ...STANCE_ANIMATIONS,\n ...DARKOPS_ANIMATIONS,\n ...COMBO_ANIMATIONS,\n ...MOVEMENT_ANIMATIONS,\n ...ALL_ATTACK_ANIMATIONS, // Stance-specific attack animations (24 unique)\n ...BASIC_ANIMATIONS, // Idle, Walk, Run, Fall animations\n ...STANCE_LOCOMOTION_ANIMATIONS, // Stance-specific walk/run animations (16 unique)\n // Trigram idle animations with breathing/weight shifts (overrides static stance poses)\n // Must come after STANCE_ANIMATIONS to properly override stance_geon, stance_tae, etc.\n ...TRIGRAM_IDLE_ANIMATIONS_BY_NAME,\n\n // ═══ Trigram-specific stance and technique animations (팔괘 자세/기술 애니메이션) ═══\n // Each trigram has unique movement patterns and combat techniques\n ...GEON_ANIMATIONS, // ☰ Heaven: Direct force, power strikes\n ...TAE_STANCE_ANIMATIONS, // ☱ Lake: Fluid joint manipulation\n ...LI_STANCE_ANIMATIONS, // ☲ Fire: Precision targeting and spear-hand strikes\n ...JIN_ANIMATIONS, // ☳ Thunder: Explosive power\n ...JIN_TECHNIQUE_ANIMATIONS, // ☳ Thunder techniques\n ...SON_STANCE_ANIMATIONS, // ☴ Wind: Continuous pressure\n ...SON_TECHNIQUE_ANIMATIONS, // ☴ Wind techniques\n [\"gam_idle_flowing\", GAM_STANCE_ANIMATIONS.idle],\n [\"gam_yielding_sidestep\", GAM_STANCE_ANIMATIONS.movement.yieldingSidestep],\n [\"gam_flowing_retreat_step\", GAM_STANCE_ANIMATIONS.movement.flowingRetreat],\n [\"gam_water_flow_counter\", GAM_STANCE_ANIMATIONS.techniques.waterFlowCounter],\n [\"gam_flowing_takedown\", GAM_STANCE_ANIMATIONS.techniques.flowingTakedown],\n [\"gam_counter\", GAM_TECHNIQUE_ANIMATIONS.counter],\n [\"gam_takedown\", GAM_TECHNIQUE_ANIMATIONS.takedown],\n ...GAN_STANCE_ANIMATIONS, // ☶ Mountain: Defensive mastery\n ...GAN_TECHNIQUE_ANIMATIONS, // ☶ Mountain techniques\n ...GON_TECHNIQUE_ANIMATIONS, // ☷ Earth: Ssireum throws and ground control\n // Additional animations from AttackAnimations not in other maps\n [\"idle_stance\", IDLE_STANCE_ANIMATION],\n [\"stance_change\", STANCE_TRANSITION_ANIMATION],\n [\"forward_dash\", FORWARD_DASH_ANIMATION],\n [\"backward_retreat\", BACKWARD_RETREAT_ANIMATION],\n [\"side_step\", SIDE_STEP_ANIMATION],\n]);\n\n// ═══════════════════════════════════════════════════════════════════════════\n// ANIMATION ID-BASED REGISTRY (animationId → SkeletalAnimation)\n// Direct 1-1 mapping for technique animations using new architecture\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Animation ID Registry - Direct mapping from technique animationId to SkeletalAnimation\n *\n * This provides 1-1 mapping between technique IDs and animations, using the new\n * animationId field instead of the legacy AnimationType enum.\n *\n * 기술 ID에서 애니메이션으로의 직접 매핑 (1-1 관계)\n *\n * @see TechniqueAnimationMapping.ts for legacy technique → AnimationType mappings\n * @korean 애니메이션ID레지스트리\n */\nexport const ANIMATION_ID_REGISTRY: ReadonlyMap<string, SkeletalAnimation> =\n new Map([\n // Complete mapping for all 57 techniques using existing animations\n [\"amsalja_silent_death\", SPEAR_HAND_ANIMATION],\n [\"darkops_ear_strike\", EAR_STRIKE_ANIMATION],\n [\"darkops_eye_gouge\", EYE_GOUGE_ANIMATION],\n [\"darkops_finger_break\", FINGER_LOCK_ANIMATION],\n [\"darkops_kidney_strike\", KIDNEY_KNEE_ANIMATION],\n [\"darkops_larynx_crush\", THROAT_STRIKE_ANIMATION],\n [\"darkops_sleeper_hold\", REAR_NAKED_CHOKE_ANIMATION],\n [\"darkops_spinal_strike\", SPINAL_ELBOW_ANIMATION],\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- animation guaranteed to exist in registry\n [\"gam_circular_parry\", STANCE_ANIMATIONS.get(\"gam_circular_parry\")!], // Use dedicated circular parry animation\n [\"gam_flow_defense\", GAM_FLOW_DEFENSE],\n [\"gam_flowing_block\", GAM_FLOWING_BLOCK],\n [\"gam_hip_throw\", HIP_THROW_ANIMATION],\n [\"gam_redirect_throw\", REDIRECT_THROW_ANIMATION],\n [\"gam_water_counter\", GAM_WATER_FLOW_COUNTER_ANIMATION],\n [\"gan_counter_strike\", GAN_COUNTER_FORTRESS],\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- animation guaranteed to exist in registry\n [\"gan_immovable_stance\", STANCE_ANIMATIONS.get(\"gan_immovable_stance\")!], // Use dedicated immovable stance animation\n [\"gan_iron_block\", GAN_IMMOVABLE_BLOCK],\n [\"gan_rock_defense\", GAN_ROCK_DEFENSE_ANIMATION],\n [\"geon_axe_kick\", AXE_KICK_ANIMATION],\n [\"geon_counter_strike\", GEON_COUNTER_STRIKE],\n [\"geon_crushing_elbow\", ELBOW_STRIKE_ANIMATION_ENHANCED],\n [\"geon_elbow_smash\", ELBOW_STRIKE_ANIMATION_ENHANCED],\n [\"geon_frontal_kick\", FRONT_KICK_ANIMATION_ENHANCED],\n [\"geon_heaven_strike\", HEAVEN_STRIKE_ANIMATION],\n [\"geon_heavenly_fist\", JAB_ANIMATION_ENHANCED],\n [\"geon_high_block\", GEON_HIGH_BLOCK],\n [\"geon_palm_strike\", PALM_STRIKE_ANIMATION],\n ...GON_TECHNIQUE_ANIMATIONS,\n [\"hacker_data_strike\", PALM_STRIKE_ANIMATION],\n [\"hacker_system_crash\", HAMMER_FIST_ANIMATION],\n [\"jin_back_kick\", BACK_KICK_ANIMATION],\n [\"jin_explosive_knee\", KNEE_STRIKE_ANIMATION_ENHANCED],\n [\"jin_flying_sidekick\", FLYING_KICK_ANIMATION],\n [\"jin_knee_strike\", KNEE_STRIKE_ANIMATION_ENHANCED],\n [\"jin_tornado_kick\", TORNADO_KICK_ANIMATION],\n [\"jojik_street_brawl\", HOOK_ANIMATION],\n [\"li_flame_spear\", SPEAR_HAND_ANIMATION],\n [\"li_nerve_strike\", NERVE_STRIKE_ANIMATION],\n [\"li_precision_parry\", LI_PRECISION_PARRY],\n [\"li_sidekick\", SIDE_KICK_ANIMATION],\n [\"li_temple_strike\", TEMPLE_ELBOW_ANIMATION],\n [\"musa_dragon_fist\", CROSS_ANIMATION_ENHANCED],\n [\"musa_iron_defense\", HIGH_BLOCK_ANIMATION],\n [\"musa_thunder_strike\", UPPERCUT_ANIMATION],\n [\"son_flowing_push\", FLOWING_PUSH_ANIMATION],\n [\"son_rapid_footwork\", SIDE_STEP_ANIMATION],\n [\"son_sweeping_low_kick\", LOW_KICK_ANIMATION],\n [\"tae_arm_bar\", ARM_BAR_ANIMATION],\n [\"tae_elbow_lock\", ELBOW_LOCK_ANIMATION],\n [\"tae_finger_lock\", FINGER_LOCK_ANIMATION],\n [\"tae_flowing_strikes\", FLOWING_CROSS_ANIMATION],\n [\"tae_sweep_defense\", SWEEP_DEFENSE_ANIMATION],\n [\"tae_wrist_lock\", WRIST_LOCK_ANIMATION],\n ]);\n\n/**\n * Category-based default animations for fallback\n *\n * When an animationId is not found, fallback to category default.\n *\n * 카테고리별 기본 애니메이션 (fallback용)\n */\nexport const CATEGORY_DEFAULT_ANIMATIONS: ReadonlyMap<string, SkeletalAnimation> =\n new Map([\n [\"punch\", JAB_ANIMATION_ENHANCED],\n [\"kick\", FRONT_KICK_ANIMATION_ENHANCED],\n [\"strike\", PALM_STRIKE_ANIMATION],\n [\"joint_lock\", WRIST_LOCK_ANIMATION],\n [\"throw\", HIP_THROW_ANIMATION],\n [\"defensive\", BLOCK_ANIMATION],\n [\"elbow_strike\", ELBOW_STRIKE_ANIMATION_ENHANCED],\n [\"counter\", COUNTER_STRIKE_ANIMATION],\n [\"jumping_kick\", JUMPING_KICK_ANIMATION],\n [\"grapple\", GRAPPLE_ANIMATION],\n [\"sweep\", SWEEP_ANIMATION],\n [\"knee_strike\", KNEE_STRIKE_ANIMATION_ENHANCED],\n [\"footwork\", SIDE_STEP_ANIMATION],\n [\"stance\", IDLE_STANCE_ANIMATION],\n [\"takedown\", SLAM_ANIMATION],\n ]);\n\n// ═══════════════════════════════════════════════════════════════════════════\n// ANIMATION LOOKUP FUNCTIONS\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Get animation by AnimationType\n *\n * @param type - Animation type enum value\n * @returns Skeletal animation or undefined\n *\n * @korean 애니메이션타입으로조회\n */\nexport function getAnimationByType(\n type: AnimationType,\n): SkeletalAnimation | undefined {\n return ANIMATION_REGISTRY.get(type);\n}\n\n/**\n * Get animation by AnimationType with fallback\n *\n * @param type - Animation type enum value\n * @param fallback - Fallback animation type\n * @returns Skeletal animation (never undefined)\n *\n * @korean 애니메이션타입으로조회_기본값\n */\nexport function getAnimationByTypeOrDefault(\n type: AnimationType,\n fallback: AnimationType = AnimationType.JAB,\n): SkeletalAnimation {\n const animation =\n ANIMATION_REGISTRY.get(type) ?? ANIMATION_REGISTRY.get(fallback);\n\n if (!animation) {\n throw new Error(`Missing animation for ${type} with fallback ${fallback}`);\n }\n\n return animation;\n}\n\n/**\n * Get animation for a technique by technique ID (using AnimationType mapping)\n *\n * Uses the TechniqueAnimationMapping to find the correct animation\n * for any technique in the game.\n *\n * @param techniqueId - Technique identifier (e.g., \"geon_frontal_kick\")\n * @returns Skeletal animation or undefined\n *\n * @korean 기술ID로애니메이션조회\n */\nexport function getAnimationForTechniqueId(\n techniqueId: string,\n): SkeletalAnimation | undefined {\n const config = getTechniqueAnimationConfig(techniqueId);\n if (!config) return undefined;\n return ANIMATION_REGISTRY.get(config.type);\n}\n\n/**\n * Get animation for a technique with fallback\n *\n * @param techniqueId - Technique identifier\n * @param fallbackType - Fallback animation type\n * @returns Animation with speed modifier\n *\n * @korean 기술ID로애니메이션조회_기본값\n */\nexport function getAnimationForTechniqueIdWithConfig(\n techniqueId: string,\n fallbackType: AnimationType = AnimationType.JAB,\n): { animation: SkeletalAnimation; speed: number } {\n const config = getAnimationForTechniqueOrDefault(techniqueId, fallbackType);\n const animation =\n ANIMATION_REGISTRY.get(config.type) ?? ANIMATION_REGISTRY.get(fallbackType);\n\n if (!animation) {\n throw new Error(\n `Missing animation for ${config.type} with fallback ${fallbackType}`,\n );\n }\n return { animation, speed: config.speed };\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// NEW ARCHITECTURE: ID-Based Animation Lookup Functions\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Get animation by animationId (new architecture)\n *\n * Direct 1-1 lookup using the new animationId field from technique.\n * This is the preferred method for the new animation architecture.\n *\n * @param animationId - Technique's animationId (e.g., \"geon_heaven_strike\")\n * @returns SkeletalAnimation or undefined if not found\n *\n * @korean 애니메이션ID로조회\n */\nexport function getAnimationById(\n animationId: string,\n): SkeletalAnimation | undefined {\n return ANIMATION_ID_REGISTRY.get(animationId);\n}\n\n/**\n * Get animation by ID with category-based fallback\n *\n * Implements a 3-tier fallback system:\n * 1. Try direct ID lookup in ANIMATION_ID_REGISTRY\n * 2. If not found, use category default from CATEGORY_DEFAULT_ANIMATIONS\n * 3. If no category, use IDLE_STANCE as ultimate fallback\n *\n * This function never returns undefined, making it safe for use in game logic.\n *\n * @param animationId - Technique's animationId\n * @param animationCategory - Technique's animationCategory for fallback\n * @returns SkeletalAnimation (never undefined)\n *\n * @korean 애니메이션ID로조회_카테고리대체\n */\nexport function getAnimationByIdWithFallback(\n animationId: string | undefined,\n animationCategory?: string,\n): SkeletalAnimation {\n // Try direct ID lookup\n if (animationId) {\n const animation = ANIMATION_ID_REGISTRY.get(animationId);\n if (animation) return animation;\n }\n\n // Fallback to category default\n if (animationCategory) {\n const categoryDefault = CATEGORY_DEFAULT_ANIMATIONS.get(animationCategory);\n if (categoryDefault) return categoryDefault;\n }\n\n // Ultimate fallback\n return IDLE_STANCE_ANIMATION;\n}\n\n/**\n * Check if animation ID exists in registry\n *\n * @param animationId - Animation ID to check\n * @returns true if animation exists in ANIMATION_ID_REGISTRY\n *\n * @korean 애니메이션ID존재확인\n */\nexport function hasAnimationId(animationId: string): boolean {\n return ANIMATION_ID_REGISTRY.has(animationId);\n}\n\n/**\n * Get category default animation\n *\n * Returns the default animation for a given category, useful for fallback logic.\n *\n * @param category - Animation category (e.g., \"punch\", \"kick\")\n * @returns SkeletalAnimation or undefined if category not found\n *\n * @korean 카테고리기본애니메이션조회\n */\nexport function getCategoryDefaultAnimation(\n category: string,\n): SkeletalAnimation | undefined {\n return CATEGORY_DEFAULT_ANIMATIONS.get(category);\n}\n\n/**\n * Get animation by name (legacy support)\n *\n * Legacy semantic alias for callers that specifically receive a skeletal\n * animation name from UI/rendering code.\n *\n * @param name - Animation name (e.g., \"front_kick\")\n * @returns Skeletal animation or undefined\n *\n * Checks {@link ALL_ANIMATIONS} first because it owns renderable skeletal\n * animation names, then {@link ANIMATION_ID_REGISTRY} for technique animation\n * IDs that intentionally alias existing skeletal animation objects.\n *\n * @korean 이름으로애니메이션조회\n */\nexport function getAnimationByName(\n name: string,\n): SkeletalAnimation | undefined {\n // ALL_ANIMATIONS contains concrete authored keyframe clips and takes\n // precedence; ANIMATION_ID_REGISTRY contains technique-data aliases that may\n // intentionally point at those same clips. Example: a technique animationId\n // can exist only as an alias when \"musa_dragon_fist\" maps to the existing\n // CROSS_ANIMATION_ENHANCED clip rather than a separately named keyframe clip.\n return ALL_ANIMATIONS.get(name) ?? ANIMATION_ID_REGISTRY.get(name);\n}\n\n/**\n * Get animation by name - unified lookup across all animation registries\n *\n * Preferred general-purpose lookup for gameplay systems that may pass either a\n * concrete skeletal animation name or a technique animation ID.\n *\n * Searches ALL_ANIMATIONS which includes:\n * - BASIC_ANIMATIONS (idle, walk, run, fall)\n * - KICK_ANIMATIONS, PUNCH_ANIMATIONS, etc.\n * - STANCE_ANIMATIONS, MOVEMENT_ANIMATIONS\n * - ALL_ATTACK_ANIMATIONS (stance-specific attacks)\n *\n * Falls back to {@link ANIMATION_ID_REGISTRY} so technique IDs resolved from\n * combat data can still retrieve aliased animations without dropping to generic\n * jab/strike fallbacks.\n *\n * @param name - Animation name (e.g., \"idle\", \"front_kick\", \"walk\")\n * @returns Skeletal animation or undefined\n *\n * @korean 애니메이션가져오기\n */\nexport function getAnimation(name: string): SkeletalAnimation | undefined {\n // Preserve authored clip keys before falling back to technique ID aliases.\n return ALL_ANIMATIONS.get(name) ?? ANIMATION_ID_REGISTRY.get(name);\n}\n\n/**\n * Get a skeletal animation duration or the shared short-technique fallback.\n *\n * @param name - Animation name or technique animation ID. Empty or omitted\n * returns {@link DEFAULT_TECHNIQUE_DURATION_SECONDS}.\n * @returns Duration in seconds.\n *\n * @example\n * ```typescript\n * getAnimationDurationOrFallback(\"gon_earth_embrace\"); // registered duration\n * getAnimationDurationOrFallback(); // DEFAULT_TECHNIQUE_DURATION_SECONDS\n * ```\n *\n * @korean 애니메이션지속시간조회\n */\nexport function getAnimationDurationOrFallback(name = \"\"): number {\n return getAnimation(name)?.duration ?? DEFAULT_TECHNIQUE_DURATION_SECONDS;\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// TECHNIQUE TO ANIMATION LOOKUP\n// ═══════════════════════════════════════════════════════════════════════════\n\n/**\n * Regex fallback patterns for technique-to-animation mapping\n * Used when technique ID is not found in ALL_ANIMATIONS\n *\n * NOTE: Order matters - more specific patterns must come first\n *\n * @korean 기술애니메이션폴백매핑\n */\nconst TECHNIQUE_ANIMATION_FALLBACK: ReadonlyArray<readonly [RegExp, string]> = [\n // ───────────────────────────────────────────────────────────────────────\n // Stance-specific distinctive strikes - MUST be checked before the generic\n // /strike/ rule so that \"Thunder Strike\", \"Heaven Strike\", \"Nerve Strike\",\n // \"Precision Strike\", etc. don't collapse to the generic \"jab\" fallback.\n // ───────────────────────────────────────────────────────────────────────\n [/heaven.?strike|천둥벽력|하늘치기/i, \"heaven_strike\"],\n [/lightning.?(strike|flash)|번개|뇌격/i, \"lightning_strike\"],\n [/nerve.?strike|신경.?타격|신경치기/i, \"nerve_strike\"],\n [/pressure.?point|혈도|급소/i, \"pressure_point_strike\"],\n [/solar.?plexus|명치|태양신경총/i, \"solar_plexus_strike\"],\n [/throat.?strike|후두타격|목치기/i, \"throat_strike\"],\n [/temple.?(strike|elbow)|관자놀이/i, \"temple_strike\"],\n [/eye.?gouge|눈찌르기/i, \"eye_gouge\"],\n [/ear.?strike|귀치기/i, \"ear_strike\"],\n [/liver.?(disruption|strike)|간장|간치기/i, \"liver_disruption\"],\n [/kidney.?(strike|punch)|신장치기/i, \"kidney_strike\"],\n [/spear.?hand|관수|손끝찌르기/i, \"spear_hand_strike\"],\n [/flowing.?cross|flowing.?strike|유수타격/i, \"flowing_cross\"],\n [/flowing.?push|flowing.?palm/i, \"flowing_push\"],\n [/rapid.?barrage|연환타/i, \"rapid_barrage\"],\n [/rhythmic.?strike|리듬타격/i, \"rhythmic_strikes\"],\n // Heavenly/dragon fist names are stance-specific and should map to the\n // proper Geon/Jin animations, not the generic jab/cross fallbacks.\n // Note: intentionally exclude \"정권\" (generic straight punch) here — it\n // should continue to resolve to the generic `jab` via the kick/jab\n // section below, not to Geon's heaven_strike.\n [/heavenly.?fist|천권/i, \"heaven_strike\"],\n [/dragon.?fist|용권/i, \"jin_lightning_flash\"],\n\n // Kicks (차기) - more specific patterns first\n [/axe.?kick|내려차기|naeryeo/i, \"axe_kick\"],\n [/back.?kick|뒤차기|dwi.?chagi/i, \"back_kick\"],\n [/tornado|회오리|hoe.?ori/i, \"tornado_kick\"],\n [/jump|뛰어|ttwi|flying/i, \"jumping_kick\"],\n [/sweep|쓸기|걸기|품밟기|dari.?geolgi/i, \"sweep\"],\n [/side.?kick|옆차기|yeop.?chagi/i, \"side_kick\"],\n [/low.?kick|하단차기|낮은차기|thigh.?kick|leg.?kick/i, \"low_kick\"],\n [/front.?kick|앞차기|snap.?kick|ap.?chagi/i, \"front_kick\"],\n [/roundhouse|돌려차기|dolryeo/i, \"roundhouse_kick\"],\n // Knee strikes (무릎)\n [/knee|무릎|mureup/i, \"knee_strike\"],\n // Elbow strikes (팔꿈치)\n [/elbow|팔꿈치|팔굽|palkkumchi/i, \"elbow_strike\"],\n // Throws & Slams (던지기/내던지기)\n [/slam|내던지기|smash/i, \"slam\"],\n [/throw|던지기|deonjigi|ground.?pound/i, \"throw\"],\n // Grapple/Lock (꺾기/잡기) - specific locks first\n [/arm.?bar|팔꺾기|팔관절기|juji.?gatame/i, \"arm_bar\"],\n [/wrist.?lock|손목꺾기|손목관절기|kote.?gaeshi/i, \"wrist_lock\"],\n [/lock|grapple|꺾기|잡기|embrace|kkeokgi|japgi|submission/i, \"grapple\"],\n // Counter attacks (반격)\n [/counter.?strike|반격타격|카운터스트라이크/i, \"counter_strike\"],\n [/counter|반격|bangyeok|parry|redirect/i, \"counter_attack\"],\n // Blocks (막기)\n [/block|막기|makgi|defense|방어/i, \"block\"],\n // Punches (주먹) - check after specific patterns\n [/hook|후크|횡타|갈고리/i, \"hook\"],\n [/palm|장권|jang.?gwon/i, \"palm_strike\"],\n [/cross|십자|교차/i, \"cross\"],\n [/uppercut|upper|올려|치올/i, \"uppercut\"],\n [/jab|잽|직권|찌르기|punch|주먹|권/i, \"jab\"],\n // Generic strikes last - only used when no more specific pattern matched above\n [/strike|타격|격|chigi/i, \"jab\"],\n] as const;\n\n/**\n * Get animation name for a technique\n *\n * PRIORITY ORDER:\n * 1. Direct lookup in ALL_ANIMATIONS by technique ID (stance-specific)\n * 2. Regex pattern matching for generic techniques\n * 3. Fallback to \"jab\"\n *\n * This ensures stance-specific animations like \"geon_heaven_strike\"\n * are used when available, while still supporting generic technique names.\n *\n * @param techniqueNameOrId - Technique name, ID, or Korean name\n * @returns Animation name from ALL_ANIMATIONS\n *\n * @example\n * ```typescript\n * getAnimationForTechnique(\"geon_heaven_strike\") // \"geon_heaven_strike\" (exact match)\n * getAnimationForTechnique(\"tae_wrist_lock\") // \"tae_wrist_lock\" (exact match)\n * getAnimationForTechnique(\"roundhouse_kick\") // \"roundhouse_kick\" (regex match)\n * getAnimationForTechnique(\"앞차기\") // \"front_kick\" (regex match)\n * ```\n *\n * @korean 기술에맞는애니메이션가져오기\n */\nexport function getAnimationForTechnique(techniqueNameOrId: string): string {\n if (!techniqueNameOrId) return \"jab\";\n\n // 1. First check if technique ID exists directly in ALL_ANIMATIONS\n // This handles stance-specific animations like \"geon_heaven_strike\"\n if (ALL_ANIMATIONS.has(techniqueNameOrId)) {\n return techniqueNameOrId;\n }\n\n if (ANIMATION_ID_REGISTRY.has(techniqueNameOrId)) {\n return techniqueNameOrId;\n }\n\n // 2. Try a normalized form: \"Thunder Strike\" → \"thunder_strike\".\n // This lets us catch techniques whose English name happens to match\n // an animation key exactly once spaces are collapsed.\n const normalized = techniqueNameOrId\n .trim()\n .toLowerCase()\n .replace(/[\\s-]+/g, \"_\")\n .replace(/[^a-z0-9_]/g, \"\");\n if (normalized && ALL_ANIMATIONS.has(normalized)) {\n return normalized;\n }\n\n if (normalized && ANIMATION_ID_REGISTRY.has(normalized)) {\n return normalized;\n }\n\n // 3. Try regex pattern matching for generic technique names\n for (const [pattern, animationName] of TECHNIQUE_ANIMATION_FALLBACK) {\n if (pattern.test(techniqueNameOrId)) {\n return animationName;\n }\n }\n\n // 4. Ultimate fallback to jab\n return \"jab\";\n}\n\n/**\n * Resolve a technique object to its best-matching animation key.\n *\n * This is the single, authoritative entry point for screens and systems\n * that need to know which skeletal animation to play for a given technique.\n *\n * Resolution order (most specific → least):\n * 1. `technique.animationId` if present and registered (KoreanTechnique / TrigramStanceTechnique).\n * 2. `technique.id` if registered (Technique objects from {@link getTechniquesForStanceAndArchetype}\n * already carry their stance-specific id, e.g. `\"geon_heaven_strike\"`).\n * 3. Regex-based fallback on `technique.name.english`, then `technique.name.korean`.\n * 4. `\"jab\"` as ultimate fallback.\n *\n * Passing the technique object (rather than a loose string) avoids the\n * long-standing bug where `technique.name.english` — e.g. `\"Thunder Strike\"` —\n * would match only the generic `/strike/` rule and collapse every\n * stance-specific attack to the jab animation.\n *\n * @param technique - Technique or technique-like object.\n * @returns Animation key registered in {@link ALL_ANIMATIONS}.\n *\n * @korean 기술객체로애니메이션해결\n */\nexport function resolveTechniqueAnimation(\n technique:\n | {\n readonly id?: string;\n readonly animationId?: string;\n readonly name?: {\n readonly english?: string;\n readonly korean?: string;\n };\n }\n | null\n | undefined,\n): string {\n if (!technique) return \"jab\";\n\n // 1. Prefer animationId (authoritative 1-1 mapping on KoreanTechnique).\n if (\n technique.animationId &&\n (ALL_ANIMATIONS.has(technique.animationId) ||\n ANIMATION_ID_REGISTRY.has(technique.animationId))\n ) {\n return technique.animationId;\n }\n\n // 2. technique.id (Technique objects preserve stance-prefixed ids here).\n if (\n technique.id &&\n (ALL_ANIMATIONS.has(technique.id) || ANIMATION_ID_REGISTRY.has(technique.id))\n ) {\n return technique.id;\n }\n\n // 3. Regex/normalized fallback on the most specific string we have.\n const english = technique.name?.english;\n if (english) {\n const byEnglish = getAnimationForTechnique(english);\n // Guard: only accept the result if it's not the dumb \"jab\" default when\n // we still have an id/animationId we can try as a last resort.\n if (byEnglish !== \"jab\" || !technique.id) {\n return byEnglish;\n }\n }\n\n // 4. Try id as a string (may go through regex fallback if not registered).\n if (technique.id) {\n return getAnimationForTechnique(technique.id);\n }\n\n // 5. Korean name as last resort.\n const korean = technique.name?.korean;\n if (korean) {\n return getAnimationForTechnique(korean);\n }\n\n return \"jab\";\n}\n\n// ═══════════════════════════════════════════════════════════════════════════\n// RE-EXPORTS\n// ═══════════════════════════════════════════════════════════════════════════\n\n// Re-export all individual animations for direct access\nexport {\n ARM_BAR_ANIMATION,\n AXE_KICK_ANIMATION,\n BACK_KICK_ANIMATION,\n BLOCK_ANIMATION,\n COUNTER_ATTACK_ANIMATION,\n COUNTER_STRIKE_ANIMATION,\n CROSS_ANIMATION,\n // Elbow/Knee\n ELBOW_STRIKE_ANIMATION,\n ELBOW_UPPERCUT_ANIMATION,\n // Kicks\n FRONT_KICK_ANIMATION,\n GRAPPLE_ANIMATION,\n HOOK_ANIMATION,\n // Punches\n JAB_ANIMATION,\n JUMPING_KICK_ANIMATION,\n KNEE_STRIKE_ANIMATION,\n LOW_KICK_ANIMATION,\n PALM_STRIKE_ANIMATION,\n ROUNDHOUSE_KICK_ANIMATION,\n SIDE_KICK_ANIMATION,\n SLAM_ANIMATION,\n SWEEP_ANIMATION,\n // Grappling\n THROW_ANIMATION,\n TORNADO_KICK_ANIMATION,\n WRIST_LOCK_ANIMATION,\n};\n\n// Re-export category maps\nexport {\n COMBO_ANIMATIONS,\n DARKOPS_ANIMATIONS,\n ELBOW_KNEE_ANIMATIONS,\n GRAPPLING_ANIMATIONS,\n KICK_ANIMATIONS,\n MOVEMENT_ANIMATIONS,\n PUNCH_ANIMATIONS,\n STANCE_ANIMATIONS,\n};\n\n// Re-export animation types and mapping\nexport { AnimationType } from \"../builders/MartialArtsAnimationBuilder\";\nexport { hasAnimationMapping };\nexport type { AnimationConfig };\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { AnimationState, FALL_TO_GROUND_MAP, STEP_PRIORITY } from "./types.js";
1
+ import { AnimationState, FALL_TO_GROUND_MAP } from "./types.js";
2
2
  import { TrigramStance } from "../../../types/common.js";
3
3
  import { AnimationQueue, canInterrupt } from "./AnimationPriority.js";
4
4
  import { getStanceTransition, isTransitionAllowed } from "./AnimationTransitions.js";
@@ -142,7 +142,7 @@ var DEFAULT_ANIMATION_CONFIGS = new Map([
142
142
  fps: 60,
143
143
  loop: false,
144
144
  interruptible: true,
145
- priority: STEP_PRIORITY,
145
+ priority: 5,
146
146
  duration: 12 / 60,
147
147
  easing: "explosive-power"
148
148
  }],
@@ -278,7 +278,7 @@ var DEFAULT_ANIMATION_CONFIGS = new Map([
278
278
  fps: 60,
279
279
  loop: false,
280
280
  interruptible: false,
281
- priority: STEP_PRIORITY,
281
+ priority: 5,
282
282
  duration: 12 / 60
283
283
  }],
284
284
  [AnimationState.TURN_RIGHT, {
@@ -287,7 +287,7 @@ var DEFAULT_ANIMATION_CONFIGS = new Map([
287
287
  fps: 60,
288
288
  loop: false,
289
289
  interruptible: false,
290
- priority: STEP_PRIORITY,
290
+ priority: 5,
291
291
  duration: 12 / 60
292
292
  }],
293
293
  [AnimationState.STANCE_GUARD_GEON, {
@@ -368,7 +368,7 @@ var DEFAULT_ANIMATION_CONFIGS = new Map([
368
368
  fps: 60,
369
369
  loop: false,
370
370
  interruptible: false,
371
- priority: STEP_PRIORITY,
371
+ priority: 5,
372
372
  duration: .3
373
373
  }],
374
374
  [AnimationState.STEP_BACK, {
@@ -377,7 +377,7 @@ var DEFAULT_ANIMATION_CONFIGS = new Map([
377
377
  fps: 60,
378
378
  loop: false,
379
379
  interruptible: false,
380
- priority: STEP_PRIORITY,
380
+ priority: 5,
381
381
  duration: .3
382
382
  }],
383
383
  [AnimationState.STEP_LEFT, {
@@ -386,7 +386,7 @@ var DEFAULT_ANIMATION_CONFIGS = new Map([
386
386
  fps: 60,
387
387
  loop: false,
388
388
  interruptible: false,
389
- priority: STEP_PRIORITY,
389
+ priority: 5,
390
390
  duration: .3
391
391
  }],
392
392
  [AnimationState.STEP_RIGHT, {
@@ -395,7 +395,7 @@ var DEFAULT_ANIMATION_CONFIGS = new Map([
395
395
  fps: 60,
396
396
  loop: false,
397
397
  interruptible: false,
398
- priority: STEP_PRIORITY,
398
+ priority: 5,
399
399
  duration: .3
400
400
  }],
401
401
  [AnimationState.STEP_FORWARD_LEFT, {
@@ -404,7 +404,7 @@ var DEFAULT_ANIMATION_CONFIGS = new Map([
404
404
  fps: 60,
405
405
  loop: false,
406
406
  interruptible: false,
407
- priority: STEP_PRIORITY,
407
+ priority: 5,
408
408
  duration: .3
409
409
  }],
410
410
  [AnimationState.STEP_FORWARD_RIGHT, {
@@ -413,7 +413,7 @@ var DEFAULT_ANIMATION_CONFIGS = new Map([
413
413
  fps: 60,
414
414
  loop: false,
415
415
  interruptible: false,
416
- priority: STEP_PRIORITY,
416
+ priority: 5,
417
417
  duration: .3
418
418
  }],
419
419
  [AnimationState.STEP_BACK_LEFT, {
@@ -422,7 +422,7 @@ var DEFAULT_ANIMATION_CONFIGS = new Map([
422
422
  fps: 60,
423
423
  loop: false,
424
424
  interruptible: false,
425
- priority: STEP_PRIORITY,
425
+ priority: 5,
426
426
  duration: .3
427
427
  }],
428
428
  [AnimationState.STEP_BACK_RIGHT, {
@@ -431,7 +431,7 @@ var DEFAULT_ANIMATION_CONFIGS = new Map([
431
431
  fps: 60,
432
432
  loop: false,
433
433
  interruptible: false,
434
- priority: STEP_PRIORITY,
434
+ priority: 5,
435
435
  duration: .3
436
436
  }],
437
437
  [AnimationState.FOOTWORK_CIRCULAR_LEFT, {
@@ -440,7 +440,7 @@ var DEFAULT_ANIMATION_CONFIGS = new Map([
440
440
  fps: 60,
441
441
  loop: false,
442
442
  interruptible: false,
443
- priority: STEP_PRIORITY,
443
+ priority: 5,
444
444
  duration: .3
445
445
  }],
446
446
  [AnimationState.FOOTWORK_CIRCULAR_RIGHT, {
@@ -449,7 +449,7 @@ var DEFAULT_ANIMATION_CONFIGS = new Map([
449
449
  fps: 60,
450
450
  loop: false,
451
451
  interruptible: false,
452
- priority: STEP_PRIORITY,
452
+ priority: 5,
453
453
  duration: .3
454
454
  }],
455
455
  [AnimationState.FOOTWORK_PIVOT_LEFT, {
@@ -458,7 +458,7 @@ var DEFAULT_ANIMATION_CONFIGS = new Map([
458
458
  fps: 60,
459
459
  loop: false,
460
460
  interruptible: false,
461
- priority: STEP_PRIORITY,
461
+ priority: 5,
462
462
  duration: .25
463
463
  }],
464
464
  [AnimationState.FOOTWORK_PIVOT_RIGHT, {
@@ -467,7 +467,7 @@ var DEFAULT_ANIMATION_CONFIGS = new Map([
467
467
  fps: 60,
468
468
  loop: false,
469
469
  interruptible: false,
470
- priority: STEP_PRIORITY,
470
+ priority: 5,
471
471
  duration: .25
472
472
  }],
473
473
  [AnimationState.FOOTWORK_SLIDE_FORWARD, {