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":"JinTechniques.js","names":[],"sources":["../../../../src/systems/trigram/techniques/JinTechniques.ts"],"sourcesContent":["/**\n * ☳ Jin (진) - Thunder Stance Techniques\n *\n * Explosive power techniques based on Taekwondo jumping attacks.\n * Represents thunder's sudden, overwhelming force.\n *\n * 진괘 - 우레: 태권도 점프 공격 기술\n *\n * @module systems/trigram/techniques/JinTechniques\n * @korean 진괘기술\n */\n\nimport type { TrigramStanceTechnique } from \"@/systems/vitalpoint\";\nimport {\n CombatAttackType,\n DamageType,\n TrigramStance,\n} from \"../../../types/common\";\nimport { AnimationType } from \"../../animation\";\n\n/**\n * ☳ JIN (진) - THUNDER: Explosive Power\n *\n * High-impact jumping and spinning attacks.\n * Element: Thunder (우레)\n * Philosophy: Sudden overwhelming force, shock and awe\n *\n * @korean 진괘 - 우레: 폭발적인 힘 (태권도 점프 공격)\n */\nexport const JIN_TECHNIQUES: readonly TrigramStanceTechnique[] = [\n {\n id: \"jin_lightning_flash\",\n name: {\n korean: \"벽력일섬\",\n english: \"Lightning Flash\",\n romanized: \"byeokryeok_ilseom\",\n },\n koreanName: \"벽력일섬\",\n englishName: \"Lightning Flash\",\n romanized: \"byeokryeok_ilseom\",\n description: {\n korean: \"번개처럼 빠른 일격\",\n english: \"Swift strike like lightning\",\n },\n stance: TrigramStance.JIN,\n type: CombatAttackType.STRIKE,\n damageType: DamageType.BLUNT,\n damage: 24,\n kiCost: 10,\n staminaCost: 14,\n accuracy: 0.75,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.95,\n },\n executionTime: 700,\n recoveryTime: 1120,\n critChance: 0.12,\n critMultiplier: 1.6,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"punch\", // Type: shared category\n animationId: \"jin_lightning_flash\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.LIGHTNING_STRIKE,\n animationSpeed: 0.75,\n category: \"light\",\n range: \"short\",\n speed: 1.4,\n },\n {\n id: \"jin_jumping_front_kick\",\n name: {\n korean: \"뛰어앞차기\",\n english: \"Jumping Front Kick\",\n romanized: \"ttwi-eo-ap-chagi\",\n },\n koreanName: \"뛰어앞차기\",\n englishName: \"Jumping Front Kick\",\n romanized: \"ttwi-eo-ap-chagi\",\n description: {\n korean: \"공중에서 가하는 폭발적인 앞차기\",\n english: \"Explosive jumping front kick from the air\",\n },\n stance: TrigramStance.JIN,\n type: CombatAttackType.KICK,\n damageType: DamageType.IMPACT,\n damage: 36,\n kiCost: 24,\n staminaCost: 32,\n accuracy: 0.72,\n reachConfig: {\n bodyPart: \"leg\",\n techniqueType: \"kick\",\n baseExtension: 1.15,\n },\n executionTime: 1470,\n recoveryTime: 1889,\n critChance: 0.22,\n critMultiplier: 2.1,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"jumping_kick\", // Type: shared category\n animationId: \"jin_jumping_front_kick\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.JIN_JUMPING_FRONT_KICK,\n animationSpeed: 0.75,\n category: \"heavy\",\n range: \"medium\",\n speed: 1.0,\n },\n {\n id: \"jin_tornado_kick\",\n name: {\n korean: \"회오리차기\",\n english: \"Tornado Kick\",\n romanized: \"hoe-ori-chagi\",\n },\n koreanName: \"회오리차기\",\n englishName: \"Tornado Kick\",\n romanized: \"hoe-ori-chagi\",\n description: {\n korean: \"360도 회전하며 가하는 폭발적인 발차기\",\n english: \"Explosive 360-degree spinning kick\",\n },\n stance: TrigramStance.JIN,\n type: CombatAttackType.KICK,\n damageType: DamageType.IMPACT,\n damage: 40,\n kiCost: 28,\n staminaCost: 35,\n accuracy: 0.68,\n reachConfig: {\n bodyPart: \"leg\",\n techniqueType: \"kick\",\n baseExtension: 1.15,\n },\n executionTime: 1540,\n recoveryTime: 2100,\n critChance: 0.25,\n critMultiplier: 2.3,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"kick\", // Type: shared category\n animationId: \"jin_tornado_kick\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.TORNADO_KICK,\n animationSpeed: 0.75,\n category: \"heavy\",\n range: \"medium\",\n speed: 1.0,\n },\n {\n id: \"jin_flying_sidekick\",\n name: {\n korean: \"날아차기\",\n english: \"Flying Sidekick\",\n romanized: \"nal-a-chagi\",\n },\n koreanName: \"날아차기\",\n englishName: \"Flying Sidekick\",\n romanized: \"nal-a-chagi\",\n description: {\n korean: \"공중에서 가하는 강력한 옆차기\",\n english: \"Powerful flying sidekick from the air\",\n },\n stance: TrigramStance.JIN,\n type: CombatAttackType.KICK,\n damageType: DamageType.IMPACT,\n damage: 38,\n kiCost: 26,\n staminaCost: 34,\n accuracy: 0.7,\n reachConfig: {\n bodyPart: \"leg\",\n techniqueType: \"kick\",\n baseExtension: 1.15,\n },\n executionTime: 1470,\n recoveryTime: 2029,\n critChance: 0.24,\n critMultiplier: 2.2,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"jumping_kick\", // Type: shared category\n animationId: \"jin_flying_sidekick\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.JIN_FLYING_SIDEKICK,\n animationSpeed: 0.75,\n category: \"heavy\",\n range: \"medium\",\n speed: 1.1,\n },\n {\n id: \"jin_back_kick\",\n name: {\n korean: \"뒤차기\",\n english: \"Back Kick\",\n romanized: \"dwi-chagi\",\n },\n koreanName: \"뒤차기\",\n englishName: \"Back Kick\",\n romanized: \"dwi-chagi\",\n description: {\n korean: \"뒤로 회전하며 가하는 강력한 뒤차기\",\n english: \"Powerful spinning back kick\",\n },\n stance: TrigramStance.JIN,\n type: CombatAttackType.KICK,\n damageType: DamageType.BLUNT,\n damage: 37,\n kiCost: 22,\n staminaCost: 30,\n accuracy: 0.74,\n reachConfig: {\n bodyPart: \"leg\",\n techniqueType: \"kick\",\n baseExtension: 1.1,\n },\n executionTime: 1190,\n recoveryTime: 1750,\n critChance: 0.28,\n critMultiplier: 2.3,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"kick\", // Type: shared category\n animationId: \"jin_back_kick\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.BACK_KICK,\n animationSpeed: 0.75,\n category: \"special\",\n range: \"medium\",\n speed: 1.0,\n },\n {\n id: \"jin_knee_strike\",\n name: {\n korean: \"무릎치기\",\n english: \"Knee Strike\",\n romanized: \"mureup-chigi\",\n },\n koreanName: \"무릎치기\",\n englishName: \"Knee Strike\",\n romanized: \"mureup-chigi\",\n description: {\n korean: \"폭발적인 무릎 공격으로 복부나 얼굴을 타격\",\n english: \"Explosive knee strike to abdomen or face\",\n },\n stance: TrigramStance.JIN,\n type: CombatAttackType.KNEE,\n damageType: DamageType.BLUNT,\n damage: 35,\n kiCost: 20,\n staminaCost: 28,\n accuracy: 0.8,\n reachConfig: {\n bodyPart: \"leg\",\n techniqueType: \"knee\",\n baseExtension: 0.4,\n },\n executionTime: 840,\n recoveryTime: 1400,\n critChance: 0.18,\n critMultiplier: 1.9,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"knee_strike\", // Type: shared category\n animationId: \"jin_knee_strike\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.KNEE_STRIKE,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"short\",\n speed: 1.1,\n },\n];\n"],"mappings":"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"}
1
+ {"version":3,"file":"JinTechniques.js","names":[],"sources":["../../../../src/systems/trigram/techniques/JinTechniques.ts"],"sourcesContent":["/**\n * ☳ Jin (진) - Thunder Stance Techniques\n *\n * Explosive power techniques based on Taekwondo jumping attacks.\n * Represents thunder's sudden, overwhelming force.\n *\n * 진괘 - 우레: 태권도 점프 공격 기술\n *\n * @module systems/trigram/techniques/JinTechniques\n * @korean 진괘기술\n */\n\nimport type { TrigramStanceTechnique } from \"@/systems/vitalpoint\";\nimport {\n CombatAttackType,\n DamageType,\n TrigramStance,\n} from \"../../../types/common\";\nimport { AnimationType } from \"../../animation\";\n\n/**\n * ☳ JIN (진) - THUNDER: Explosive Power\n *\n * High-impact jumping and spinning attacks.\n * Element: Thunder (우레)\n * Philosophy: Sudden overwhelming force, shock and awe\n *\n * @korean 진괘 - 우레: 폭발적인 힘 (태권도 점프 공격)\n */\nexport const JIN_TECHNIQUES: readonly TrigramStanceTechnique[] = [\n {\n id: \"jin_lightning_flash\",\n name: {\n korean: \"벽력일섬\",\n english: \"Lightning Flash\",\n romanized: \"byeokryeok_ilseom\",\n },\n koreanName: \"벽력일섬\",\n englishName: \"Lightning Flash\",\n romanized: \"byeokryeok_ilseom\",\n description: {\n korean: \"번개처럼 빠른 일격\",\n english: \"Swift strike like lightning\",\n },\n stance: TrigramStance.JIN,\n type: CombatAttackType.STRIKE,\n damageType: DamageType.BLUNT,\n damage: 24,\n kiCost: 10,\n staminaCost: 14,\n accuracy: 0.75,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.95,\n },\n executionTime: 700,\n recoveryTime: 1120,\n critChance: 0.12,\n critMultiplier: 1.6,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"punch\", // Type: shared category\n animationId: \"jin_lightning_flash\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.LIGHTNING_STRIKE,\n animationSpeed: 0.75,\n category: \"light\",\n range: \"short\",\n speed: 1.4,\n },\n {\n id: \"jin_jumping_front_kick\",\n name: {\n korean: \"뛰어앞차기\",\n english: \"Jumping Front Kick\",\n romanized: \"ttwi-eo-ap-chagi\",\n },\n koreanName: \"뛰어앞차기\",\n englishName: \"Jumping Front Kick\",\n romanized: \"ttwi-eo-ap-chagi\",\n description: {\n korean: \"공중에서 가하는 폭발적인 앞차기\",\n english: \"Explosive jumping front kick from the air\",\n },\n stance: TrigramStance.JIN,\n type: CombatAttackType.KICK,\n damageType: DamageType.IMPACT,\n damage: 36,\n kiCost: 24,\n staminaCost: 32,\n accuracy: 0.72,\n reachConfig: {\n bodyPart: \"leg\",\n techniqueType: \"kick\",\n baseExtension: 1.15,\n },\n executionTime: 1470,\n recoveryTime: 1889,\n critChance: 0.22,\n critMultiplier: 2.1,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"jumping_kick\", // Type: shared category\n animationId: \"jin_jumping_front_kick\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.JIN_JUMPING_FRONT_KICK,\n animationSpeed: 0.75,\n category: \"heavy\",\n range: \"medium\",\n speed: 1.0,\n },\n {\n id: \"jin_tornado_kick\",\n name: {\n korean: \"회오리차기\",\n english: \"Tornado Kick\",\n romanized: \"hoe-ori-chagi\",\n },\n koreanName: \"회오리차기\",\n englishName: \"Tornado Kick\",\n romanized: \"hoe-ori-chagi\",\n description: {\n korean: \"360도 회전하며 가하는 폭발적인 발차기\",\n english: \"Explosive 360-degree spinning kick\",\n },\n stance: TrigramStance.JIN,\n type: CombatAttackType.KICK,\n damageType: DamageType.IMPACT,\n damage: 40,\n kiCost: 28,\n staminaCost: 35,\n accuracy: 0.68,\n reachConfig: {\n bodyPart: \"leg\",\n techniqueType: \"kick\",\n baseExtension: 1.15,\n },\n executionTime: 1540,\n recoveryTime: 2100,\n critChance: 0.25,\n critMultiplier: 2.3,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"kick\", // Type: shared category\n animationId: \"jin_tornado_kick\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.TORNADO_KICK,\n animationSpeed: 0.75,\n category: \"heavy\",\n range: \"medium\",\n speed: 1.0,\n },\n {\n id: \"jin_flying_sidekick\",\n name: {\n korean: \"날아차기\",\n english: \"Flying Sidekick\",\n romanized: \"nal-a-chagi\",\n },\n koreanName: \"날아차기\",\n englishName: \"Flying Sidekick\",\n romanized: \"nal-a-chagi\",\n description: {\n korean: \"공중에서 가하는 강력한 옆차기\",\n english: \"Powerful flying sidekick from the air\",\n },\n stance: TrigramStance.JIN,\n type: CombatAttackType.KICK,\n damageType: DamageType.IMPACT,\n damage: 38,\n kiCost: 26,\n staminaCost: 34,\n accuracy: 0.7,\n reachConfig: {\n bodyPart: \"leg\",\n techniqueType: \"kick\",\n baseExtension: 1.15,\n },\n executionTime: 1470,\n recoveryTime: 2029,\n critChance: 0.24,\n critMultiplier: 2.2,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"jumping_kick\", // Type: shared category\n animationId: \"jin_flying_sidekick\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.JIN_FLYING_SIDEKICK,\n animationSpeed: 0.75,\n category: \"heavy\",\n range: \"medium\",\n speed: 1.1,\n },\n {\n id: \"jin_back_kick\",\n name: {\n korean: \"뒤차기\",\n english: \"Back Kick\",\n romanized: \"dwi-chagi\",\n },\n koreanName: \"뒤차기\",\n englishName: \"Back Kick\",\n romanized: \"dwi-chagi\",\n description: {\n korean: \"뒤로 회전하며 가하는 강력한 뒤차기\",\n english: \"Powerful spinning back kick\",\n },\n stance: TrigramStance.JIN,\n type: CombatAttackType.KICK,\n damageType: DamageType.BLUNT,\n damage: 37,\n kiCost: 22,\n staminaCost: 30,\n accuracy: 0.74,\n reachConfig: {\n bodyPart: \"leg\",\n techniqueType: \"kick\",\n baseExtension: 1.1,\n },\n executionTime: 1190,\n recoveryTime: 1750,\n critChance: 0.28,\n critMultiplier: 2.3,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"kick\", // Type: shared category\n animationId: \"jin_back_kick\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.BACK_KICK,\n animationSpeed: 0.75,\n category: \"special\",\n range: \"medium\",\n speed: 1.0,\n },\n {\n id: \"jin_knee_strike\",\n name: {\n korean: \"무릎치기\",\n english: \"Knee Strike\",\n romanized: \"mureup-chigi\",\n },\n koreanName: \"무릎치기\",\n englishName: \"Knee Strike\",\n romanized: \"mureup-chigi\",\n description: {\n korean: \"폭발적인 무릎 공격으로 복부나 얼굴을 타격\",\n english: \"Explosive knee strike to abdomen or face\",\n },\n stance: TrigramStance.JIN,\n type: CombatAttackType.KNEE,\n damageType: DamageType.BLUNT,\n damage: 35,\n kiCost: 20,\n staminaCost: 28,\n accuracy: 0.8,\n reachConfig: {\n bodyPart: \"leg\",\n techniqueType: \"knee\",\n baseExtension: 0.4,\n },\n executionTime: 840,\n recoveryTime: 1400,\n critChance: 0.18,\n critMultiplier: 1.9,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"knee_strike\", // Type: shared category\n animationId: \"jin_knee_strike\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.KNEE_STRIKE,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"short\",\n speed: 1.1,\n },\n];\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"LiTechniques.js","names":[],"sources":["../../../../src/systems/trigram/techniques/LiTechniques.ts"],"sourcesContent":["/**\n * ☲ Li (리) - Fire Stance Techniques\n *\n * Precision nerve strikes based on Taekwondo accuracy.\n * Represents fire's penetrating and illuminating nature.\n *\n * 리괘 - 불: 태권도 정밀 타격 기술\n *\n * @module systems/trigram/techniques/LiTechniques\n * @korean 리괘기술\n */\n\nimport type { TrigramStanceTechnique } from \"@/systems/vitalpoint\";\nimport {\n CombatAttackType,\n DamageType,\n TrigramStance,\n} from \"../../../types/common\";\nimport { AnimationType } from \"../../animation\";\n\n/**\n * ☲ LI (리) - FIRE: Precision Nerve Strikes\n *\n * Precise strikes targeting vital points and nerves.\n * Element: Fire (불)\n * Philosophy: Penetrating accuracy, illuminating weakness\n *\n * @korean 리괘 - 불: 정밀한 신경 타격 (태권도 정확성)\n */\nexport const LI_TECHNIQUES: readonly TrigramStanceTechnique[] = [\n {\n id: \"li_flame_spear\",\n name: {\n korean: \"화염지창\",\n english: \"Flame Spear\",\n romanized: \"hwayeom_jichang\",\n },\n koreanName: \"화염지창\",\n englishName: \"Flame Spear\",\n romanized: \"hwayeom_jichang\",\n description: {\n korean: \"불꽃처럼 정확하고 날카로운 공격\",\n english: \"Precise and sharp attack like flame\",\n },\n stance: TrigramStance.LI,\n type: CombatAttackType.THRUST,\n damageType: DamageType.PIERCING,\n damage: 35,\n kiCost: 18,\n staminaCost: 15,\n accuracy: 0.9,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.95,\n },\n executionTime: 979,\n recoveryTime: 1540,\n critChance: 0.15,\n critMultiplier: 1.8,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"strike\", // Type: shared category\n animationId: \"li_flame_spear\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.SPEAR_HAND_STRIKE,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"short\",\n speed: 1.3,\n },\n {\n id: \"li_temple_strike\",\n name: {\n korean: \"관자놀이타격\",\n english: \"Temple Strike\",\n romanized: \"gwanja-nori-tagyeok\",\n },\n koreanName: \"관자놀이타격\",\n englishName: \"Temple Strike\",\n romanized: \"gwanja-nori-tagyeok\",\n description: {\n korean: \"태권도 역권으로 관자놀이를 정확히 타격\",\n english: \"Taekwondo back fist precisely targeting temple\",\n },\n stance: TrigramStance.LI,\n type: CombatAttackType.STRIKE,\n damageType: DamageType.NERVE,\n damage: 32,\n kiCost: 16,\n staminaCost: 18,\n accuracy: 0.92,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"elbow\",\n baseExtension: 0.5,\n },\n executionTime: 909,\n recoveryTime: 1330,\n critChance: 0.22,\n critMultiplier: 2.0,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"elbow_strike\", // Type: shared category\n animationId: \"li_temple_strike\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.TEMPLE_ELBOW,\n animationSpeed: 0.75,\n category: \"special\",\n range: \"short\",\n speed: 1.1,\n },\n {\n id: \"li_nerve_strike\",\n name: {\n korean: \"신경타격\",\n english: \"Nerve Strike\",\n romanized: \"singyeong-tagyeok\",\n },\n koreanName: \"신경타격\",\n englishName: \"Nerve Strike\",\n romanized: \"singyeong-tagyeok\",\n description: {\n korean: \"정확한 손가락 타격으로 신경을 마비시킴\",\n english: \"Precise finger strike paralyzing nerves\",\n },\n stance: TrigramStance.LI,\n type: CombatAttackType.NERVE_STRIKE,\n damageType: DamageType.NERVE,\n damage: 28,\n kiCost: 22,\n staminaCost: 12,\n accuracy: 0.95,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.95,\n },\n executionTime: 840,\n recoveryTime: 1260,\n critChance: 0.25,\n critMultiplier: 2.2,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"strike\", // Type: shared category\n animationId: \"li_nerve_strike\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.NERVE_STRIKE,\n animationSpeed: 0.75,\n category: \"special\",\n range: \"short\",\n speed: 1.2,\n },\n {\n id: \"li_sidekick\",\n name: {\n korean: \"옆차기\",\n english: \"Side Kick\",\n romanized: \"yeop-chagi\",\n },\n koreanName: \"옆차기\",\n englishName: \"Side Kick\",\n romanized: \"yeop-chagi\",\n description: {\n korean: \"태권도 옆차기로 늑골이나 무릎을 정확히 타격\",\n english: \"Taekwondo side kick precisely targeting ribs or knee\",\n },\n stance: TrigramStance.LI,\n type: CombatAttackType.KICK,\n damageType: DamageType.BLUNT,\n damage: 34,\n kiCost: 20,\n staminaCost: 24,\n accuracy: 0.88,\n reachConfig: {\n bodyPart: \"leg\",\n techniqueType: \"kick\",\n baseExtension: 1.1,\n },\n executionTime: 1050,\n recoveryTime: 1470,\n critChance: 0.18,\n critMultiplier: 1.9,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"kick\", // Type: shared category\n animationId: \"li_sidekick\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.SIDE_KICK,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"medium\",\n speed: 1.0,\n },\n {\n id: \"li_pressure_point\",\n name: {\n korean: \"혈도공격\",\n english: \"Pressure Point Attack\",\n romanized: \"hyeoldo-gonggyeok\",\n },\n koreanName: \"혈도공격\",\n englishName: \"Pressure Point Attack\",\n romanized: \"hyeoldo-gonggyeok\",\n description: {\n korean: \"급소를 정확히 타격하여 기를 차단\",\n english: \"Precise vital point strike disrupting ki flow\",\n },\n stance: TrigramStance.LI,\n type: CombatAttackType.PRESSURE_POINT,\n damageType: DamageType.PRESSURE,\n damage: 26,\n kiCost: 25,\n staminaCost: 10,\n accuracy: 0.96,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.95,\n },\n executionTime: 770,\n recoveryTime: 1190,\n critChance: 0.28,\n critMultiplier: 2.3,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"strike\", // Type: shared category\n animationId: \"li_pressure_point\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.PRESSURE_POINT_STRIKE,\n animationSpeed: 0.75,\n category: \"special\",\n range: \"short\",\n speed: 1.0,\n },\n {\n id: \"li_solar_plexus_strike\",\n name: {\n korean: \"명치타격\",\n english: \"Solar Plexus Strike\",\n romanized: \"myeongchi-tagyeok\",\n },\n koreanName: \"명치타격\",\n englishName: \"Solar Plexus Strike\",\n romanized: \"myeongchi-tagyeok\",\n description: {\n korean: \"명치를 정확히 타격하여 호흡을 차단\",\n english: \"Precise strike to solar plexus disrupting breath\",\n },\n stance: TrigramStance.LI,\n type: CombatAttackType.THRUST,\n damageType: DamageType.INTERNAL,\n damage: 30,\n kiCost: 18,\n staminaCost: 16,\n accuracy: 0.9,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 951,\n recoveryTime: 1372,\n critChance: 0.2,\n critMultiplier: 2.0,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"strike\", // Type: shared category\n animationId: \"li_solar_plexus_strike\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.SOLAR_PLEXUS_STRIKE,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"short\",\n speed: 1.1,\n },\n];\n"],"mappings":"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"}
1
+ {"version":3,"file":"LiTechniques.js","names":[],"sources":["../../../../src/systems/trigram/techniques/LiTechniques.ts"],"sourcesContent":["/**\n * ☲ Li (리) - Fire Stance Techniques\n *\n * Precision nerve strikes based on Taekwondo accuracy.\n * Represents fire's penetrating and illuminating nature.\n *\n * 리괘 - 불: 태권도 정밀 타격 기술\n *\n * @module systems/trigram/techniques/LiTechniques\n * @korean 리괘기술\n */\n\nimport type { TrigramStanceTechnique } from \"@/systems/vitalpoint\";\nimport {\n CombatAttackType,\n DamageType,\n TrigramStance,\n} from \"../../../types/common\";\nimport { AnimationType } from \"../../animation\";\n\n/**\n * ☲ LI (리) - FIRE: Precision Nerve Strikes\n *\n * Precise strikes targeting vital points and nerves.\n * Element: Fire (불)\n * Philosophy: Penetrating accuracy, illuminating weakness\n *\n * @korean 리괘 - 불: 정밀한 신경 타격 (태권도 정확성)\n */\nexport const LI_TECHNIQUES: readonly TrigramStanceTechnique[] = [\n {\n id: \"li_flame_spear\",\n name: {\n korean: \"화염지창\",\n english: \"Flame Spear\",\n romanized: \"hwayeom_jichang\",\n },\n koreanName: \"화염지창\",\n englishName: \"Flame Spear\",\n romanized: \"hwayeom_jichang\",\n description: {\n korean: \"불꽃처럼 정확하고 날카로운 공격\",\n english: \"Precise and sharp attack like flame\",\n },\n stance: TrigramStance.LI,\n type: CombatAttackType.THRUST,\n damageType: DamageType.PIERCING,\n damage: 35,\n kiCost: 18,\n staminaCost: 15,\n accuracy: 0.9,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.95,\n },\n executionTime: 979,\n recoveryTime: 1540,\n critChance: 0.15,\n critMultiplier: 1.8,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"strike\", // Type: shared category\n animationId: \"li_flame_spear\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.SPEAR_HAND_STRIKE,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"short\",\n speed: 1.3,\n },\n {\n id: \"li_temple_strike\",\n name: {\n korean: \"관자놀이타격\",\n english: \"Temple Strike\",\n romanized: \"gwanja-nori-tagyeok\",\n },\n koreanName: \"관자놀이타격\",\n englishName: \"Temple Strike\",\n romanized: \"gwanja-nori-tagyeok\",\n description: {\n korean: \"태권도 역권으로 관자놀이를 정확히 타격\",\n english: \"Taekwondo back fist precisely targeting temple\",\n },\n stance: TrigramStance.LI,\n type: CombatAttackType.STRIKE,\n damageType: DamageType.NERVE,\n damage: 32,\n kiCost: 16,\n staminaCost: 18,\n accuracy: 0.92,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"elbow\",\n baseExtension: 0.5,\n },\n executionTime: 909,\n recoveryTime: 1330,\n critChance: 0.22,\n critMultiplier: 2.0,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"elbow_strike\", // Type: shared category\n animationId: \"li_temple_strike\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.TEMPLE_ELBOW,\n animationSpeed: 0.75,\n category: \"special\",\n range: \"short\",\n speed: 1.1,\n },\n {\n id: \"li_nerve_strike\",\n name: {\n korean: \"신경타격\",\n english: \"Nerve Strike\",\n romanized: \"singyeong-tagyeok\",\n },\n koreanName: \"신경타격\",\n englishName: \"Nerve Strike\",\n romanized: \"singyeong-tagyeok\",\n description: {\n korean: \"정확한 손가락 타격으로 신경을 마비시킴\",\n english: \"Precise finger strike paralyzing nerves\",\n },\n stance: TrigramStance.LI,\n type: CombatAttackType.NERVE_STRIKE,\n damageType: DamageType.NERVE,\n damage: 28,\n kiCost: 22,\n staminaCost: 12,\n accuracy: 0.95,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.95,\n },\n executionTime: 840,\n recoveryTime: 1260,\n critChance: 0.25,\n critMultiplier: 2.2,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"strike\", // Type: shared category\n animationId: \"li_nerve_strike\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.NERVE_STRIKE,\n animationSpeed: 0.75,\n category: \"special\",\n range: \"short\",\n speed: 1.2,\n },\n {\n id: \"li_sidekick\",\n name: {\n korean: \"옆차기\",\n english: \"Side Kick\",\n romanized: \"yeop-chagi\",\n },\n koreanName: \"옆차기\",\n englishName: \"Side Kick\",\n romanized: \"yeop-chagi\",\n description: {\n korean: \"태권도 옆차기로 늑골이나 무릎을 정확히 타격\",\n english: \"Taekwondo side kick precisely targeting ribs or knee\",\n },\n stance: TrigramStance.LI,\n type: CombatAttackType.KICK,\n damageType: DamageType.BLUNT,\n damage: 34,\n kiCost: 20,\n staminaCost: 24,\n accuracy: 0.88,\n reachConfig: {\n bodyPart: \"leg\",\n techniqueType: \"kick\",\n baseExtension: 1.1,\n },\n executionTime: 1050,\n recoveryTime: 1470,\n critChance: 0.18,\n critMultiplier: 1.9,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"kick\", // Type: shared category\n animationId: \"li_sidekick\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.SIDE_KICK,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"medium\",\n speed: 1.0,\n },\n {\n id: \"li_pressure_point\",\n name: {\n korean: \"혈도공격\",\n english: \"Pressure Point Attack\",\n romanized: \"hyeoldo-gonggyeok\",\n },\n koreanName: \"혈도공격\",\n englishName: \"Pressure Point Attack\",\n romanized: \"hyeoldo-gonggyeok\",\n description: {\n korean: \"급소를 정확히 타격하여 기를 차단\",\n english: \"Precise vital point strike disrupting ki flow\",\n },\n stance: TrigramStance.LI,\n type: CombatAttackType.PRESSURE_POINT,\n damageType: DamageType.PRESSURE,\n damage: 26,\n kiCost: 25,\n staminaCost: 10,\n accuracy: 0.96,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.95,\n },\n executionTime: 770,\n recoveryTime: 1190,\n critChance: 0.28,\n critMultiplier: 2.3,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"strike\", // Type: shared category\n animationId: \"li_pressure_point\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.PRESSURE_POINT_STRIKE,\n animationSpeed: 0.75,\n category: \"special\",\n range: \"short\",\n speed: 1.0,\n },\n {\n id: \"li_solar_plexus_strike\",\n name: {\n korean: \"명치타격\",\n english: \"Solar Plexus Strike\",\n romanized: \"myeongchi-tagyeok\",\n },\n koreanName: \"명치타격\",\n englishName: \"Solar Plexus Strike\",\n romanized: \"myeongchi-tagyeok\",\n description: {\n korean: \"명치를 정확히 타격하여 호흡을 차단\",\n english: \"Precise strike to solar plexus disrupting breath\",\n },\n stance: TrigramStance.LI,\n type: CombatAttackType.THRUST,\n damageType: DamageType.INTERNAL,\n damage: 30,\n kiCost: 18,\n staminaCost: 16,\n accuracy: 0.9,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 951,\n recoveryTime: 1372,\n critChance: 0.2,\n critMultiplier: 2.0,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"strike\", // Type: shared category\n animationId: \"li_solar_plexus_strike\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.SOLAR_PLEXUS_STRIKE,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"short\",\n speed: 1.1,\n },\n];\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SonTechniques.js","names":[],"sources":["../../../../src/systems/trigram/techniques/SonTechniques.ts"],"sourcesContent":["/**\n * ☴ 손 (SON) - Wind Stance Techniques\n * 선풍연격 - Continuous Pressure (Taekyon Rhythmic Combat)\n *\n * The Wind stance (손괘) embodies continuous pressure and rhythmic flow.\n * Based on traditional Taekyon (택견) - the oldest Korean martial art,\n * emphasizing fluid footwork, rhythmic movement, and unrelenting pressure.\n *\n * Philosophy: \"바람처럼 끊임없이 흐르라\" - Flow endlessly like the wind\n *\n * @module SonTechniques\n */\n\nimport type { TrigramStanceTechnique } from \"@/systems/vitalpoint\";\nimport {\n CombatAttackType,\n DamageType,\n TrigramStance,\n} from \"../../../types/common\";\nimport { AnimationType } from \"../../animation\";\n\n/**\n * SON stance techniques - Wind / Continuous Pressure\n * Taekyon rhythmic combat with continuous flowing attacks\n *\n * Technique characteristics:\n * - Continuous pressure attacks\n * - Rhythmic striking patterns\n * - Fluid footwork integration\n * - Destabilizing movements\n *\n * Animation speeds are calibrated for rhythmic flow:\n * - Fast: 1.2-1.3 (rapid footwork, quick strikes)\n * - Normal: 1.0 (standard techniques)\n * - Sustained: 0.9-1.0 (continuous pressure)\n */\nexport const SON_TECHNIQUES: readonly TrigramStanceTechnique[] = [\n // ============= Primary Technique =============\n {\n id: \"son_whirlwind_barrage\",\n name: {\n korean: \"선풍연격\",\n english: \"Whirlwind Barrage\",\n romanized: \"seonpung_yeongyeok\",\n },\n koreanName: \"선풍연격\",\n englishName: \"Whirlwind Barrage\",\n romanized: \"seonpung_yeongyeok\",\n description: {\n korean: \"바람처럼 연속적인 공격\",\n english: \"Continuous attacks like wind\",\n },\n stance: TrigramStance.SON,\n type: CombatAttackType.STRIKE,\n damageType: DamageType.BLUNT,\n damage: 22,\n kiCost: 8,\n staminaCost: 30,\n accuracy: 0.7,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.95,\n },\n executionTime: 560,\n recoveryTime: 840,\n critChance: 0.06,\n critMultiplier: 1.2,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"punch\", // Type: shared category\n animationId: \"son_whirlwind_barrage\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Continuous striking pattern\n animationType: AnimationType.RAPID_BARRAGE,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"short\",\n speed: 1.5,\n // Son (Wind) combo flow properties - 선풍연쇄 (Whirlwind Chain)\n comboWindow: 200, // 200ms timing window for next technique\n comboPriority: 1, // Starter technique - opens combo chains\n pressureStacks: 2, // Applies 2 pressure stacks on hit\n },\n\n // ============= Taekyon Footwork Techniques =============\n {\n id: \"son_sweeping_low_kick\",\n name: {\n korean: \"품밟기\",\n english: \"Sweeping Foot Attack\",\n romanized: \"pum-balbgi\",\n },\n koreanName: \"품밟기\",\n englishName: \"Sweeping Foot Attack\",\n romanized: \"pum-balbgi\",\n description: {\n korean: \"택견의 낮은 발차기로 발목을 쓸어 넘어뜨림\",\n english: \"Taekyon low sweeping kick targeting ankles\",\n },\n stance: TrigramStance.SON,\n type: CombatAttackType.KICK,\n damageType: DamageType.BLUNT,\n damage: 20,\n kiCost: 10,\n staminaCost: 22,\n accuracy: 0.82,\n reachConfig: {\n bodyPart: \"leg\",\n techniqueType: \"kick\",\n baseExtension: 0.95,\n },\n executionTime: 770,\n recoveryTime: 1190,\n critChance: 0.12,\n critMultiplier: 1.4,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"kick\", // Type: shared category\n animationId: \"son_sweeping_low_kick\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Low sweeping kick\n animationType: AnimationType.SON_SWEEPING_LOW_KICK,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"medium\",\n speed: 1.1,\n // Son (Wind) combo flow properties\n comboWindow: 200,\n comboPriority: 2, // Mid-chain technique - bridges combos\n pressureStacks: 1, // Applies 1 pressure stack on hit\n },\n {\n id: \"son_rapid_footwork\",\n name: {\n korean: \"품밟기연환\",\n english: \"Rapid Footwork Chain\",\n romanized: \"pum-balbgi-yeonhwan\",\n },\n koreanName: \"품밟기연환\",\n englishName: \"Rapid Footwork Chain\",\n romanized: \"pum-balbgi-yeonhwan\",\n description: {\n korean: \"택견의 빠른 발놀림으로 연속 타격\",\n english: \"Taekyon rapid footwork with continuous strikes\",\n },\n stance: TrigramStance.SON,\n type: CombatAttackType.KICK,\n damageType: DamageType.BLUNT,\n damage: 28,\n kiCost: 16,\n staminaCost: 24,\n accuracy: 0.74,\n reachConfig: {\n bodyPart: \"leg\",\n techniqueType: \"kick\",\n baseExtension: 1.05,\n },\n executionTime: 840,\n recoveryTime: 1260,\n critChance: 0.16,\n critMultiplier: 1.6,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"footwork\", // Type: shared category\n animationId: \"son_rapid_footwork\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Rapid footwork sequence\n animationType: AnimationType.SON_RAPID_FOOTWORK,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"medium\",\n speed: 1.2,\n // Son (Wind) combo flow properties\n comboWindow: 200,\n comboPriority: 2, // Mid-chain technique - bridges combos\n pressureStacks: 2, // Applies 2 pressure stacks on hit\n },\n\n // ============= Rhythmic Striking Techniques =============\n {\n id: \"son_rhythmic_strikes\",\n name: {\n korean: \"결련수\",\n english: \"Rhythmic Hand Strikes\",\n romanized: \"gyeolryeon-su\",\n },\n koreanName: \"결련수\",\n englishName: \"Rhythmic Hand Strikes\",\n romanized: \"gyeolryeon-su\",\n description: {\n korean: \"택견의 리듬감 있는 연속 손타격\",\n english: \"Taekyon rhythmic continuous hand strikes\",\n },\n stance: TrigramStance.SON,\n type: CombatAttackType.STRIKE,\n damageType: DamageType.PRESSURE,\n damage: 24,\n kiCost: 12,\n staminaCost: 28,\n accuracy: 0.85,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.95,\n },\n executionTime: 630,\n recoveryTime: 979,\n critChance: 0.22,\n critMultiplier: 2.0,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"punch\", // Type: shared category\n animationId: \"son_rhythmic_strikes\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Rhythmic hand combination\n animationType: AnimationType.SON_RHYTHMIC_STRIKES,\n animationSpeed: 0.75,\n category: \"special\",\n range: \"short\",\n speed: 1.2,\n // Son (Wind) combo flow properties\n comboWindow: 200,\n comboPriority: 3, // Finisher technique - ends combos\n pressureStacks: 3, // Applies 3 pressure stacks on hit (high pressure)\n },\n {\n id: \"son_flowing_push\",\n name: {\n korean: \"밀기\",\n english: \"Flowing Push\",\n romanized: \"mil-gi\",\n },\n koreanName: \"밀기\",\n englishName: \"Flowing Push\",\n romanized: \"mil-gi\",\n description: {\n korean: \"택견의 밀기로 상대의 균형을 무너뜨림\",\n english: \"Taekyon push disrupting opponent's balance\",\n },\n stance: TrigramStance.SON,\n type: CombatAttackType.STRIKE,\n damageType: DamageType.PRESSURE,\n damage: 20,\n kiCost: 8,\n staminaCost: 20,\n accuracy: 0.85,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 700,\n recoveryTime: 1050,\n critChance: 0.1,\n critMultiplier: 1.3,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"strike\", // Type: shared category\n animationId: \"son_flowing_push\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Flowing push movement\n animationType: AnimationType.SON_FLOWING_PUSH,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"short\",\n speed: 1.0,\n // Son (Wind) combo flow properties\n comboWindow: 200,\n comboPriority: 1, // Starter technique - opens combo chains\n pressureStacks: 1, // Applies 1 pressure stack on hit\n },\n\n // ============= Spinning Techniques =============\n {\n id: \"son_spinning_elbow\",\n name: {\n korean: \"돌려팔꿈치\",\n english: \"Spinning Elbow\",\n romanized: \"dollyeo-palkkumchi\",\n },\n koreanName: \"돌려팔꿈치\",\n englishName: \"Spinning Elbow\",\n romanized: \"dollyeo-palkkumchi\",\n description: {\n korean: \"회전하며 연속적으로 가하는 팔꿈치 공격\",\n english: \"Continuous spinning elbow strikes\",\n },\n stance: TrigramStance.SON,\n type: CombatAttackType.ELBOW,\n damageType: DamageType.BLUNT,\n damage: 26,\n kiCost: 14,\n staminaCost: 26,\n accuracy: 0.76,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"elbow\",\n baseExtension: 0.5,\n },\n executionTime: 770,\n recoveryTime: 1190,\n critChance: 0.14,\n critMultiplier: 1.5,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"elbow_strike\", // Type: shared category\n animationId: \"son_spinning_elbow\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Spinning elbow attack\n animationType: AnimationType.ELBOW_STRIKE,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"short\",\n speed: 1.1,\n // Son (Wind) combo flow properties\n comboWindow: 200,\n comboPriority: 3, // Finisher technique - ends combos\n pressureStacks: 2, // Applies 2 pressure stacks on hit\n },\n] as const;\n\n/**\n * Get SON techniques count\n */\nexport const SON_TECHNIQUE_COUNT = SON_TECHNIQUES.length;\n\n/**\n * Get SON technique by ID\n */\nexport function getSonTechniqueById(\n id: string,\n): TrigramStanceTechnique | undefined {\n return SON_TECHNIQUES.find((t) => t.id === id);\n}\n\n/**\n * Get all SON techniques by attack type\n */\nexport function getSonTechniquesByType(\n type: CombatAttackType,\n): readonly TrigramStanceTechnique[] {\n return SON_TECHNIQUES.filter((t) => t.type === type);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"SonTechniques.js","names":[],"sources":["../../../../src/systems/trigram/techniques/SonTechniques.ts"],"sourcesContent":["/**\n * ☴ 손 (SON) - Wind Stance Techniques\n * 선풍연격 - Continuous Pressure (Taekyon Rhythmic Combat)\n *\n * The Wind stance (손괘) embodies continuous pressure and rhythmic flow.\n * Based on traditional Taekyon (택견) - the oldest Korean martial art,\n * emphasizing fluid footwork, rhythmic movement, and unrelenting pressure.\n *\n * Philosophy: \"바람처럼 끊임없이 흐르라\" - Flow endlessly like the wind\n *\n * @module SonTechniques\n */\n\nimport type { TrigramStanceTechnique } from \"@/systems/vitalpoint\";\nimport {\n CombatAttackType,\n DamageType,\n TrigramStance,\n} from \"../../../types/common\";\nimport { AnimationType } from \"../../animation\";\n\n/**\n * SON stance techniques - Wind / Continuous Pressure\n * Taekyon rhythmic combat with continuous flowing attacks\n *\n * Technique characteristics:\n * - Continuous pressure attacks\n * - Rhythmic striking patterns\n * - Fluid footwork integration\n * - Destabilizing movements\n *\n * Animation speeds are calibrated for rhythmic flow:\n * - Fast: 1.2-1.3 (rapid footwork, quick strikes)\n * - Normal: 1.0 (standard techniques)\n * - Sustained: 0.9-1.0 (continuous pressure)\n */\nexport const SON_TECHNIQUES: readonly TrigramStanceTechnique[] = [\n // ============= Primary Technique =============\n {\n id: \"son_whirlwind_barrage\",\n name: {\n korean: \"선풍연격\",\n english: \"Whirlwind Barrage\",\n romanized: \"seonpung_yeongyeok\",\n },\n koreanName: \"선풍연격\",\n englishName: \"Whirlwind Barrage\",\n romanized: \"seonpung_yeongyeok\",\n description: {\n korean: \"바람처럼 연속적인 공격\",\n english: \"Continuous attacks like wind\",\n },\n stance: TrigramStance.SON,\n type: CombatAttackType.STRIKE,\n damageType: DamageType.BLUNT,\n damage: 22,\n kiCost: 8,\n staminaCost: 30,\n accuracy: 0.7,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.95,\n },\n executionTime: 560,\n recoveryTime: 840,\n critChance: 0.06,\n critMultiplier: 1.2,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"punch\", // Type: shared category\n animationId: \"son_whirlwind_barrage\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Continuous striking pattern\n animationType: AnimationType.RAPID_BARRAGE,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"short\",\n speed: 1.5,\n // Son (Wind) combo flow properties - 선풍연쇄 (Whirlwind Chain)\n comboWindow: 200, // 200ms timing window for next technique\n comboPriority: 1, // Starter technique - opens combo chains\n pressureStacks: 2, // Applies 2 pressure stacks on hit\n },\n\n // ============= Taekyon Footwork Techniques =============\n {\n id: \"son_sweeping_low_kick\",\n name: {\n korean: \"품밟기\",\n english: \"Sweeping Foot Attack\",\n romanized: \"pum-balbgi\",\n },\n koreanName: \"품밟기\",\n englishName: \"Sweeping Foot Attack\",\n romanized: \"pum-balbgi\",\n description: {\n korean: \"택견의 낮은 발차기로 발목을 쓸어 넘어뜨림\",\n english: \"Taekyon low sweeping kick targeting ankles\",\n },\n stance: TrigramStance.SON,\n type: CombatAttackType.KICK,\n damageType: DamageType.BLUNT,\n damage: 20,\n kiCost: 10,\n staminaCost: 22,\n accuracy: 0.82,\n reachConfig: {\n bodyPart: \"leg\",\n techniqueType: \"kick\",\n baseExtension: 0.95,\n },\n executionTime: 770,\n recoveryTime: 1190,\n critChance: 0.12,\n critMultiplier: 1.4,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"kick\", // Type: shared category\n animationId: \"son_sweeping_low_kick\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Low sweeping kick\n animationType: AnimationType.SON_SWEEPING_LOW_KICK,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"medium\",\n speed: 1.1,\n // Son (Wind) combo flow properties\n comboWindow: 200,\n comboPriority: 2, // Mid-chain technique - bridges combos\n pressureStacks: 1, // Applies 1 pressure stack on hit\n },\n {\n id: \"son_rapid_footwork\",\n name: {\n korean: \"품밟기연환\",\n english: \"Rapid Footwork Chain\",\n romanized: \"pum-balbgi-yeonhwan\",\n },\n koreanName: \"품밟기연환\",\n englishName: \"Rapid Footwork Chain\",\n romanized: \"pum-balbgi-yeonhwan\",\n description: {\n korean: \"택견의 빠른 발놀림으로 연속 타격\",\n english: \"Taekyon rapid footwork with continuous strikes\",\n },\n stance: TrigramStance.SON,\n type: CombatAttackType.KICK,\n damageType: DamageType.BLUNT,\n damage: 28,\n kiCost: 16,\n staminaCost: 24,\n accuracy: 0.74,\n reachConfig: {\n bodyPart: \"leg\",\n techniqueType: \"kick\",\n baseExtension: 1.05,\n },\n executionTime: 840,\n recoveryTime: 1260,\n critChance: 0.16,\n critMultiplier: 1.6,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"footwork\", // Type: shared category\n animationId: \"son_rapid_footwork\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Rapid footwork sequence\n animationType: AnimationType.SON_RAPID_FOOTWORK,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"medium\",\n speed: 1.2,\n // Son (Wind) combo flow properties\n comboWindow: 200,\n comboPriority: 2, // Mid-chain technique - bridges combos\n pressureStacks: 2, // Applies 2 pressure stacks on hit\n },\n\n // ============= Rhythmic Striking Techniques =============\n {\n id: \"son_rhythmic_strikes\",\n name: {\n korean: \"결련수\",\n english: \"Rhythmic Hand Strikes\",\n romanized: \"gyeolryeon-su\",\n },\n koreanName: \"결련수\",\n englishName: \"Rhythmic Hand Strikes\",\n romanized: \"gyeolryeon-su\",\n description: {\n korean: \"택견의 리듬감 있는 연속 손타격\",\n english: \"Taekyon rhythmic continuous hand strikes\",\n },\n stance: TrigramStance.SON,\n type: CombatAttackType.STRIKE,\n damageType: DamageType.PRESSURE,\n damage: 24,\n kiCost: 12,\n staminaCost: 28,\n accuracy: 0.85,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.95,\n },\n executionTime: 630,\n recoveryTime: 979,\n critChance: 0.22,\n critMultiplier: 2.0,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"punch\", // Type: shared category\n animationId: \"son_rhythmic_strikes\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Rhythmic hand combination\n animationType: AnimationType.SON_RHYTHMIC_STRIKES,\n animationSpeed: 0.75,\n category: \"special\",\n range: \"short\",\n speed: 1.2,\n // Son (Wind) combo flow properties\n comboWindow: 200,\n comboPriority: 3, // Finisher technique - ends combos\n pressureStacks: 3, // Applies 3 pressure stacks on hit (high pressure)\n },\n {\n id: \"son_flowing_push\",\n name: {\n korean: \"밀기\",\n english: \"Flowing Push\",\n romanized: \"mil-gi\",\n },\n koreanName: \"밀기\",\n englishName: \"Flowing Push\",\n romanized: \"mil-gi\",\n description: {\n korean: \"택견의 밀기로 상대의 균형을 무너뜨림\",\n english: \"Taekyon push disrupting opponent's balance\",\n },\n stance: TrigramStance.SON,\n type: CombatAttackType.STRIKE,\n damageType: DamageType.PRESSURE,\n damage: 20,\n kiCost: 8,\n staminaCost: 20,\n accuracy: 0.85,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 700,\n recoveryTime: 1050,\n critChance: 0.1,\n critMultiplier: 1.3,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"strike\", // Type: shared category\n animationId: \"son_flowing_push\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Flowing push movement\n animationType: AnimationType.SON_FLOWING_PUSH,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"short\",\n speed: 1.0,\n // Son (Wind) combo flow properties\n comboWindow: 200,\n comboPriority: 1, // Starter technique - opens combo chains\n pressureStacks: 1, // Applies 1 pressure stack on hit\n },\n\n // ============= Spinning Techniques =============\n {\n id: \"son_spinning_elbow\",\n name: {\n korean: \"돌려팔꿈치\",\n english: \"Spinning Elbow\",\n romanized: \"dollyeo-palkkumchi\",\n },\n koreanName: \"돌려팔꿈치\",\n englishName: \"Spinning Elbow\",\n romanized: \"dollyeo-palkkumchi\",\n description: {\n korean: \"회전하며 연속적으로 가하는 팔꿈치 공격\",\n english: \"Continuous spinning elbow strikes\",\n },\n stance: TrigramStance.SON,\n type: CombatAttackType.ELBOW,\n damageType: DamageType.BLUNT,\n damage: 26,\n kiCost: 14,\n staminaCost: 26,\n accuracy: 0.76,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"elbow\",\n baseExtension: 0.5,\n },\n executionTime: 770,\n recoveryTime: 1190,\n critChance: 0.14,\n critMultiplier: 1.5,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"elbow_strike\", // Type: shared category\n animationId: \"son_spinning_elbow\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Spinning elbow attack\n animationType: AnimationType.ELBOW_STRIKE,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"short\",\n speed: 1.1,\n // Son (Wind) combo flow properties\n comboWindow: 200,\n comboPriority: 3, // Finisher technique - ends combos\n pressureStacks: 2, // Applies 2 pressure stacks on hit\n },\n] as const;\n\n/**\n * Get SON techniques count\n */\nexport const SON_TECHNIQUE_COUNT = SON_TECHNIQUES.length;\n\n/**\n * Get SON technique by ID\n */\nexport function getSonTechniqueById(\n id: string,\n): TrigramStanceTechnique | undefined {\n return SON_TECHNIQUES.find((t) => t.id === id);\n}\n\n/**\n * Get all SON techniques by attack type\n */\nexport function getSonTechniquesByType(\n type: CombatAttackType,\n): readonly TrigramStanceTechnique[] {\n return SON_TECHNIQUES.filter((t) => t.type === type);\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TaeTechniques.js","names":[],"sources":["../../../../src/systems/trigram/techniques/TaeTechniques.ts"],"sourcesContent":["/**\n * ☱ Tae (태) - Lake Stance Techniques\n *\n * Fluid joint manipulation techniques based on Hapkido.\n * Represents water's adaptability and yielding nature.\n *\n * 태괘 - 연못: 합기도 관절기 기술\n *\n * @module systems/trigram/techniques/TaeTechniques\n * @korean 태괘기술\n */\n\nimport type { TrigramStanceTechnique } from \"@/systems/vitalpoint\";\nimport {\n CombatAttackType,\n DamageType,\n TrigramStance,\n} from \"../../../types/common\";\nimport { AnimationType } from \"../../animation\";\n\n/**\n * ☱ TAE (태) - LAKE: Fluid Joint Manipulation\n *\n * Hapkido-based joint locks and manipulations.\n * Element: Lake (연못)\n * Philosophy: Yield to control, redirect opponent's force\n *\n * @korean 태괘 - 연못: 유동적인 관절기 기술 (합기도)\n */\nexport const TAE_TECHNIQUES: readonly TrigramStanceTechnique[] = [\n {\n id: \"tae_flowing_strikes\",\n name: {\n korean: \"유수연타\",\n english: \"Flowing Strikes\",\n romanized: \"yusu_yeonta\",\n },\n koreanName: \"유수연타\",\n englishName: \"Flowing Strikes\",\n romanized: \"yusu_yeonta\",\n description: {\n korean: \"물의 흐름처럼 연속적인 타격\",\n english: \"Continuous strikes like flowing water\",\n },\n stance: TrigramStance.TAE,\n type: CombatAttackType.STRIKE,\n damageType: DamageType.BLUNT,\n damage: 25,\n kiCost: 12,\n staminaCost: 18,\n accuracy: 0.85,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 1.05,\n },\n executionTime: 840,\n recoveryTime: 1400,\n critChance: 0.08,\n critMultiplier: 1.3,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"punch\", // Type: shared category\n animationId: \"tae_flowing_strikes\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.FLOWING_CROSS,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"medium\",\n speed: 1.2,\n },\n {\n id: \"tae_wrist_lock\",\n name: {\n korean: \"손목꺾기\",\n english: \"Wrist Lock\",\n romanized: \"sonmok-kkeokgi\",\n },\n koreanName: \"손목꺾기\",\n englishName: \"Wrist Lock\",\n romanized: \"sonmok-kkeokgi\",\n description: {\n korean: \"합기도 손목 관절기로 상대를 제압\",\n english: \"Hapkido wrist joint lock for control\",\n },\n stance: TrigramStance.TAE,\n type: CombatAttackType.GRAPPLE,\n damageType: DamageType.JOINT,\n damage: 22,\n kiCost: 10,\n staminaCost: 14,\n accuracy: 0.88,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 909,\n recoveryTime: 1400,\n critChance: 0.12,\n critMultiplier: 1.5,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"joint_lock\", // Type: shared category\n animationId: \"tae_wrist_lock\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.TAE_WRIST_LOCK,\n animationSpeed: 0.65,\n category: \"light\",\n range: \"short\",\n speed: 0.85,\n },\n {\n id: \"tae_small_circle\",\n name: {\n korean: \"소원법\",\n english: \"Small Circle Technique\",\n romanized: \"sowon-beop\",\n },\n koreanName: \"소원법\",\n englishName: \"Small Circle Technique\",\n romanized: \"sowon-beop\",\n description: {\n korean: \"합기도 소원 기법으로 손목과 팔꿈치를 동시에 제압\",\n english: \"Hapkido small circle method controlling wrist and elbow\",\n },\n stance: TrigramStance.TAE,\n type: CombatAttackType.GRAPPLE,\n damageType: DamageType.JOINT,\n damage: 24,\n kiCost: 14,\n staminaCost: 18,\n accuracy: 0.86,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 1050,\n recoveryTime: 1540,\n critChance: 0.22,\n critMultiplier: 2.0,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"joint_lock\", // Type: shared category\n animationId: \"tae_small_circle\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.SMALL_CIRCLE_LOCK,\n animationSpeed: 0.65,\n category: \"special\",\n range: \"short\",\n speed: 0.85,\n },\n {\n id: \"tae_finger_lock\",\n name: {\n korean: \"손가락꺾기\",\n english: \"Finger Lock\",\n romanized: \"songarak-kkeokgi\",\n },\n koreanName: \"손가락꺾기\",\n englishName: \"Finger Lock\",\n romanized: \"songarak-kkeokgi\",\n description: {\n korean: \"합기도 소관절기로 손가락을 제압하여 무장 해제\",\n english: \"Hapkido small joint manipulation for disarming\",\n },\n stance: TrigramStance.TAE,\n type: CombatAttackType.GRAPPLE,\n damageType: DamageType.JOINT,\n damage: 18,\n kiCost: 8,\n staminaCost: 12,\n accuracy: 0.9,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 909,\n recoveryTime: 1260,\n critChance: 0.1,\n critMultiplier: 1.4,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"joint_lock\", // Type: shared category\n animationId: \"tae_finger_lock\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.FINGER_LOCK,\n animationSpeed: 0.7,\n category: \"light\",\n range: \"short\",\n speed: 0.9,\n },\n {\n id: \"tae_elbow_lock\",\n name: {\n korean: \"팔꿈치꺾기\",\n english: \"Elbow Lock\",\n romanized: \"palkkumchi-kkeokgi\",\n },\n koreanName: \"팔꿈치꺾기\",\n englishName: \"Elbow Lock\",\n romanized: \"palkkumchi-kkeokgi\",\n description: {\n korean: \"합기도 팔꿈치 관절기로 팔을 과신전시켜 제압\",\n english: \"Hapkido elbow hyperextension for submission\",\n },\n stance: TrigramStance.TAE,\n type: CombatAttackType.GRAPPLE,\n damageType: DamageType.JOINT,\n damage: 26,\n kiCost: 16,\n staminaCost: 20,\n accuracy: 0.84,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 1120,\n recoveryTime: 1610,\n critChance: 0.16,\n critMultiplier: 1.7,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"joint_lock\", // Type: shared category\n animationId: \"tae_elbow_lock\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.ELBOW_LOCK,\n animationSpeed: 0.65,\n category: \"medium\",\n range: \"short\",\n speed: 0.8,\n },\n {\n id: \"tae_shoulder_lock\",\n name: {\n korean: \"어깨꺾기\",\n english: \"Shoulder Lock\",\n romanized: \"eokkae-kkeokgi\",\n },\n koreanName: \"어깨꺾기\",\n englishName: \"Shoulder Lock\",\n romanized: \"eokkae-kkeokgi\",\n description: {\n korean: \"합기도 어깨 관절기로 팔을 뒤로 비틀어 제압\",\n english: \"Hapkido shoulder manipulation twisting arm behind\",\n },\n stance: TrigramStance.TAE,\n type: CombatAttackType.GRAPPLE,\n damageType: DamageType.JOINT,\n damage: 28,\n kiCost: 18,\n staminaCost: 22,\n accuracy: 0.82,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 1190,\n recoveryTime: 1680,\n critChance: 0.18,\n critMultiplier: 1.8,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"joint_lock\", // Type: shared category\n animationId: \"tae_shoulder_lock\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.SHOULDER_MANIPULATION,\n animationSpeed: 0.65,\n category: \"medium\",\n range: \"short\",\n speed: 0.8,\n },\n {\n id: \"tae_arm_bar\",\n name: {\n korean: \"팔꺾기\",\n english: \"Arm Bar\",\n romanized: \"pal-kkeokgi\",\n },\n koreanName: \"팔꺾기\",\n englishName: \"Arm Bar\",\n romanized: \"pal-kkeokgi\",\n description: {\n korean: \"합기도 팔꺾기로 팔꿈치를 고정하여 항복을 유도\",\n english: \"Hapkido arm bar immobilizing elbow for submission\",\n },\n stance: TrigramStance.TAE,\n type: CombatAttackType.GRAPPLE,\n damageType: DamageType.JOINT,\n damage: 30,\n kiCost: 20,\n staminaCost: 25,\n accuracy: 0.8,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 1260,\n recoveryTime: 1819,\n critChance: 0.2,\n critMultiplier: 1.9,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"joint_lock\", // Type: shared category\n animationId: \"tae_arm_bar\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.ARM_BAR,\n animationSpeed: 0.65,\n category: \"medium\",\n range: \"short\",\n speed: 0.75,\n },\n];\n"],"mappings":";;;;;;;;;;;;AA6BA,IAAa,iBAAoD;CAC/D;EACE,IAAI;EACJ,MAAM;GACJ,QAAQ;GACR,SAAS;GACT,WAAW;GACZ;EACD,YAAY;EACZ,aAAa;EACb,WAAW;EACX,aAAa;GACX,QAAQ;GACR,SAAS;GACV;EACD,QAAQ,cAAc;EACtB,MAAM,iBAAiB;EACvB,YAAY,WAAW;EACvB,QAAQ;EACR,QAAQ;EACR,aAAa;EACb,UAAU;EACV,aAAa;GACX,UAAU;GACV,eAAe;GACf,eAAe;GAChB;EACD,eAAe;EACf,cAAc;EACd,YAAY;EACZ,gBAAgB;EAChB,SAAS,EAAE;EAEX,mBAAmB;EACnB,aAAa;EAEb,eAAe,cAAc;EAC7B,gBAAgB;EAChB,UAAU;EACV,OAAO;EACP,OAAO;EACR;CACD;EACE,IAAI;EACJ,MAAM;GACJ,QAAQ;GACR,SAAS;GACT,WAAW;GACZ;EACD,YAAY;EACZ,aAAa;EACb,WAAW;EACX,aAAa;GACX,QAAQ;GACR,SAAS;GACV;EACD,QAAQ,cAAc;EACtB,MAAM,iBAAiB;EACvB,YAAY,WAAW;EACvB,QAAQ;EACR,QAAQ;EACR,aAAa;EACb,UAAU;EACV,aAAa;GACX,UAAU;GACV,eAAe;GACf,eAAe;GAChB;EACD,eAAe;EACf,cAAc;EACd,YAAY;EACZ,gBAAgB;EAChB,SAAS,EAAE;EAEX,mBAAmB;EACnB,aAAa;EAEb,eAAe,cAAc;EAC7B,gBAAgB;EAChB,UAAU;EACV,OAAO;EACP,OAAO;EACR;CACD;EACE,IAAI;EACJ,MAAM;GACJ,QAAQ;GACR,SAAS;GACT,WAAW;GACZ;EACD,YAAY;EACZ,aAAa;EACb,WAAW;EACX,aAAa;GACX,QAAQ;GACR,SAAS;GACV;EACD,QAAQ,cAAc;EACtB,MAAM,iBAAiB;EACvB,YAAY,WAAW;EACvB,QAAQ;EACR,QAAQ;EACR,aAAa;EACb,UAAU;EACV,aAAa;GACX,UAAU;GACV,eAAe;GACf,eAAe;GAChB;EACD,eAAe;EACf,cAAc;EACd,YAAY;EACZ,gBAAgB;EAChB,SAAS,EAAE;EAEX,mBAAmB;EACnB,aAAa;EAEb,eAAe,cAAc;EAC7B,gBAAgB;EAChB,UAAU;EACV,OAAO;EACP,OAAO;EACR;CACD;EACE,IAAI;EACJ,MAAM;GACJ,QAAQ;GACR,SAAS;GACT,WAAW;GACZ;EACD,YAAY;EACZ,aAAa;EACb,WAAW;EACX,aAAa;GACX,QAAQ;GACR,SAAS;GACV;EACD,QAAQ,cAAc;EACtB,MAAM,iBAAiB;EACvB,YAAY,WAAW;EACvB,QAAQ;EACR,QAAQ;EACR,aAAa;EACb,UAAU;EACV,aAAa;GACX,UAAU;GACV,eAAe;GACf,eAAe;GAChB;EACD,eAAe;EACf,cAAc;EACd,YAAY;EACZ,gBAAgB;EAChB,SAAS,EAAE;EAEX,mBAAmB;EACnB,aAAa;EAEb,eAAe,cAAc;EAC7B,gBAAgB;EAChB,UAAU;EACV,OAAO;EACP,OAAO;EACR;CACD;EACE,IAAI;EACJ,MAAM;GACJ,QAAQ;GACR,SAAS;GACT,WAAW;GACZ;EACD,YAAY;EACZ,aAAa;EACb,WAAW;EACX,aAAa;GACX,QAAQ;GACR,SAAS;GACV;EACD,QAAQ,cAAc;EACtB,MAAM,iBAAiB;EACvB,YAAY,WAAW;EACvB,QAAQ;EACR,QAAQ;EACR,aAAa;EACb,UAAU;EACV,aAAa;GACX,UAAU;GACV,eAAe;GACf,eAAe;GAChB;EACD,eAAe;EACf,cAAc;EACd,YAAY;EACZ,gBAAgB;EAChB,SAAS,EAAE;EAEX,mBAAmB;EACnB,aAAa;EAEb,eAAe,cAAc;EAC7B,gBAAgB;EAChB,UAAU;EACV,OAAO;EACP,OAAO;EACR;CACD;EACE,IAAI;EACJ,MAAM;GACJ,QAAQ;GACR,SAAS;GACT,WAAW;GACZ;EACD,YAAY;EACZ,aAAa;EACb,WAAW;EACX,aAAa;GACX,QAAQ;GACR,SAAS;GACV;EACD,QAAQ,cAAc;EACtB,MAAM,iBAAiB;EACvB,YAAY,WAAW;EACvB,QAAQ;EACR,QAAQ;EACR,aAAa;EACb,UAAU;EACV,aAAa;GACX,UAAU;GACV,eAAe;GACf,eAAe;GAChB;EACD,eAAe;EACf,cAAc;EACd,YAAY;EACZ,gBAAgB;EAChB,SAAS,EAAE;EAEX,mBAAmB;EACnB,aAAa;EAEb,eAAe,cAAc;EAC7B,gBAAgB;EAChB,UAAU;EACV,OAAO;EACP,OAAO;EACR;CACD;EACE,IAAI;EACJ,MAAM;GACJ,QAAQ;GACR,SAAS;GACT,WAAW;GACZ;EACD,YAAY;EACZ,aAAa;EACb,WAAW;EACX,aAAa;GACX,QAAQ;GACR,SAAS;GACV;EACD,QAAQ,cAAc;EACtB,MAAM,iBAAiB;EACvB,YAAY,WAAW;EACvB,QAAQ;EACR,QAAQ;EACR,aAAa;EACb,UAAU;EACV,aAAa;GACX,UAAU;GACV,eAAe;GACf,eAAe;GAChB;EACD,eAAe;EACf,cAAc;EACd,YAAY;EACZ,gBAAgB;EAChB,SAAS,EAAE;EAEX,mBAAmB;EACnB,aAAa;EAEb,eAAe,cAAc;EAC7B,gBAAgB;EAChB,UAAU;EACV,OAAO;EACP,OAAO;EACR;CACF"}
1
+ {"version":3,"file":"TaeTechniques.js","names":[],"sources":["../../../../src/systems/trigram/techniques/TaeTechniques.ts"],"sourcesContent":["/**\n * ☱ Tae (태) - Lake Stance Techniques\n *\n * Fluid joint manipulation techniques based on Hapkido.\n * Represents water's adaptability and yielding nature.\n *\n * 태괘 - 연못: 합기도 관절기 기술\n *\n * @module systems/trigram/techniques/TaeTechniques\n * @korean 태괘기술\n */\n\nimport type { TrigramStanceTechnique } from \"@/systems/vitalpoint\";\nimport {\n CombatAttackType,\n DamageType,\n TrigramStance,\n} from \"../../../types/common\";\nimport { AnimationType } from \"../../animation\";\n\n/**\n * ☱ TAE (태) - LAKE: Fluid Joint Manipulation\n *\n * Hapkido-based joint locks and manipulations.\n * Element: Lake (연못)\n * Philosophy: Yield to control, redirect opponent's force\n *\n * @korean 태괘 - 연못: 유동적인 관절기 기술 (합기도)\n */\nexport const TAE_TECHNIQUES: readonly TrigramStanceTechnique[] = [\n {\n id: \"tae_flowing_strikes\",\n name: {\n korean: \"유수연타\",\n english: \"Flowing Strikes\",\n romanized: \"yusu_yeonta\",\n },\n koreanName: \"유수연타\",\n englishName: \"Flowing Strikes\",\n romanized: \"yusu_yeonta\",\n description: {\n korean: \"물의 흐름처럼 연속적인 타격\",\n english: \"Continuous strikes like flowing water\",\n },\n stance: TrigramStance.TAE,\n type: CombatAttackType.STRIKE,\n damageType: DamageType.BLUNT,\n damage: 25,\n kiCost: 12,\n staminaCost: 18,\n accuracy: 0.85,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 1.05,\n },\n executionTime: 840,\n recoveryTime: 1400,\n critChance: 0.08,\n critMultiplier: 1.3,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"punch\", // Type: shared category\n animationId: \"tae_flowing_strikes\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.FLOWING_CROSS,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"medium\",\n speed: 1.2,\n },\n {\n id: \"tae_wrist_lock\",\n name: {\n korean: \"손목꺾기\",\n english: \"Wrist Lock\",\n romanized: \"sonmok-kkeokgi\",\n },\n koreanName: \"손목꺾기\",\n englishName: \"Wrist Lock\",\n romanized: \"sonmok-kkeokgi\",\n description: {\n korean: \"합기도 손목 관절기로 상대를 제압\",\n english: \"Hapkido wrist joint lock for control\",\n },\n stance: TrigramStance.TAE,\n type: CombatAttackType.GRAPPLE,\n damageType: DamageType.JOINT,\n damage: 22,\n kiCost: 10,\n staminaCost: 14,\n accuracy: 0.88,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 909,\n recoveryTime: 1400,\n critChance: 0.12,\n critMultiplier: 1.5,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"joint_lock\", // Type: shared category\n animationId: \"tae_wrist_lock\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.TAE_WRIST_LOCK,\n animationSpeed: 0.65,\n category: \"light\",\n range: \"short\",\n speed: 0.85,\n },\n {\n id: \"tae_small_circle\",\n name: {\n korean: \"소원법\",\n english: \"Small Circle Technique\",\n romanized: \"sowon-beop\",\n },\n koreanName: \"소원법\",\n englishName: \"Small Circle Technique\",\n romanized: \"sowon-beop\",\n description: {\n korean: \"합기도 소원 기법으로 손목과 팔꿈치를 동시에 제압\",\n english: \"Hapkido small circle method controlling wrist and elbow\",\n },\n stance: TrigramStance.TAE,\n type: CombatAttackType.GRAPPLE,\n damageType: DamageType.JOINT,\n damage: 24,\n kiCost: 14,\n staminaCost: 18,\n accuracy: 0.86,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 1050,\n recoveryTime: 1540,\n critChance: 0.22,\n critMultiplier: 2.0,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"joint_lock\", // Type: shared category\n animationId: \"tae_small_circle\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.SMALL_CIRCLE_LOCK,\n animationSpeed: 0.65,\n category: \"special\",\n range: \"short\",\n speed: 0.85,\n },\n {\n id: \"tae_finger_lock\",\n name: {\n korean: \"손가락꺾기\",\n english: \"Finger Lock\",\n romanized: \"songarak-kkeokgi\",\n },\n koreanName: \"손가락꺾기\",\n englishName: \"Finger Lock\",\n romanized: \"songarak-kkeokgi\",\n description: {\n korean: \"합기도 소관절기로 손가락을 제압하여 무장 해제\",\n english: \"Hapkido small joint manipulation for disarming\",\n },\n stance: TrigramStance.TAE,\n type: CombatAttackType.GRAPPLE,\n damageType: DamageType.JOINT,\n damage: 18,\n kiCost: 8,\n staminaCost: 12,\n accuracy: 0.9,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 909,\n recoveryTime: 1260,\n critChance: 0.1,\n critMultiplier: 1.4,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"joint_lock\", // Type: shared category\n animationId: \"tae_finger_lock\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.FINGER_LOCK,\n animationSpeed: 0.7,\n category: \"light\",\n range: \"short\",\n speed: 0.9,\n },\n {\n id: \"tae_elbow_lock\",\n name: {\n korean: \"팔꿈치꺾기\",\n english: \"Elbow Lock\",\n romanized: \"palkkumchi-kkeokgi\",\n },\n koreanName: \"팔꿈치꺾기\",\n englishName: \"Elbow Lock\",\n romanized: \"palkkumchi-kkeokgi\",\n description: {\n korean: \"합기도 팔꿈치 관절기로 팔을 과신전시켜 제압\",\n english: \"Hapkido elbow hyperextension for submission\",\n },\n stance: TrigramStance.TAE,\n type: CombatAttackType.GRAPPLE,\n damageType: DamageType.JOINT,\n damage: 26,\n kiCost: 16,\n staminaCost: 20,\n accuracy: 0.84,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 1120,\n recoveryTime: 1610,\n critChance: 0.16,\n critMultiplier: 1.7,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"joint_lock\", // Type: shared category\n animationId: \"tae_elbow_lock\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.ELBOW_LOCK,\n animationSpeed: 0.65,\n category: \"medium\",\n range: \"short\",\n speed: 0.8,\n },\n {\n id: \"tae_shoulder_lock\",\n name: {\n korean: \"어깨꺾기\",\n english: \"Shoulder Lock\",\n romanized: \"eokkae-kkeokgi\",\n },\n koreanName: \"어깨꺾기\",\n englishName: \"Shoulder Lock\",\n romanized: \"eokkae-kkeokgi\",\n description: {\n korean: \"합기도 어깨 관절기로 팔을 뒤로 비틀어 제압\",\n english: \"Hapkido shoulder manipulation twisting arm behind\",\n },\n stance: TrigramStance.TAE,\n type: CombatAttackType.GRAPPLE,\n damageType: DamageType.JOINT,\n damage: 28,\n kiCost: 18,\n staminaCost: 22,\n accuracy: 0.82,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 1190,\n recoveryTime: 1680,\n critChance: 0.18,\n critMultiplier: 1.8,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"joint_lock\", // Type: shared category\n animationId: \"tae_shoulder_lock\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.SHOULDER_MANIPULATION,\n animationSpeed: 0.65,\n category: \"medium\",\n range: \"short\",\n speed: 0.8,\n },\n {\n id: \"tae_arm_bar\",\n name: {\n korean: \"팔꺾기\",\n english: \"Arm Bar\",\n romanized: \"pal-kkeokgi\",\n },\n koreanName: \"팔꺾기\",\n englishName: \"Arm Bar\",\n romanized: \"pal-kkeokgi\",\n description: {\n korean: \"합기도 팔꺾기로 팔꿈치를 고정하여 항복을 유도\",\n english: \"Hapkido arm bar immobilizing elbow for submission\",\n },\n stance: TrigramStance.TAE,\n type: CombatAttackType.GRAPPLE,\n damageType: DamageType.JOINT,\n damage: 30,\n kiCost: 20,\n staminaCost: 25,\n accuracy: 0.8,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 1260,\n recoveryTime: 1819,\n critChance: 0.2,\n critMultiplier: 1.9,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"joint_lock\", // Type: shared category\n animationId: \"tae_arm_bar\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.ARM_BAR,\n animationSpeed: 0.65,\n category: \"medium\",\n range: \"short\",\n speed: 0.75,\n },\n];\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TechniqueConfig.js","names":[],"sources":["../../../../src/systems/trigram/techniques/TechniqueConfig.ts"],"sourcesContent":["/**\n * Technique Configuration & Constants\n * 한국 무술 기법 설정 및 상수\n *\n * Contains all configuration, modifiers, effectiveness matrices,\n * and metadata for the Korean martial arts technique system.\n *\n * @module TechniqueConfig\n */\n\nimport {\n CombatAttackType,\n DamageType,\n TrigramStance,\n} from \"../../../types/common\";\n\n// =====================================================\n// TECHNIQUE MODIFIERS\n// =====================================================\n\n/**\n * Technique effectiveness modifiers\n */\nexport const TECHNIQUE_MODIFIERS = {\n DAMAGE_VARIANCE: 0.15, // ±15% damage variance\n CRITICAL_DAMAGE_BASE: 1.5,\n VITAL_POINT_BONUS: 2.0,\n STANCE_MISMATCH_PENALTY: 0.8,\n COMBO_MULTIPLIER: 1.1,\n} as const;\n\n// =====================================================\n// TECHNIQUE PROPERTIES\n// =====================================================\n\n/**\n * Base properties for each combat attack type\n */\nexport const TECHNIQUE_PROPERTIES: Record<\n CombatAttackType,\n {\n readonly baseDamage: number;\n readonly range: number;\n readonly accuracy: number;\n readonly kiCost: number;\n readonly staminaCost: number;\n }\n> = {\n [CombatAttackType.STRIKE]: {\n baseDamage: 20,\n range: 1.0,\n accuracy: 0.85,\n kiCost: 15,\n staminaCost: 10,\n },\n [CombatAttackType.THRUST]: {\n baseDamage: 25,\n range: 1.5,\n accuracy: 0.9,\n kiCost: 18,\n staminaCost: 12,\n },\n [CombatAttackType.BLOCK]: {\n baseDamage: 5,\n range: 0.5,\n accuracy: 0.95,\n kiCost: 8,\n staminaCost: 15,\n },\n [CombatAttackType.COUNTER_ATTACK]: {\n baseDamage: 22,\n range: 1.0,\n accuracy: 0.88,\n kiCost: 20,\n staminaCost: 15,\n },\n [CombatAttackType.THROW]: {\n baseDamage: 30,\n range: 0.8,\n accuracy: 0.75,\n kiCost: 25,\n staminaCost: 20,\n },\n [CombatAttackType.GRAPPLE]: {\n baseDamage: 15,\n range: 0.6,\n accuracy: 0.8,\n kiCost: 20,\n staminaCost: 25,\n },\n [CombatAttackType.PRESSURE_POINT]: {\n baseDamage: 12,\n range: 0.8,\n accuracy: 0.95,\n kiCost: 25,\n staminaCost: 8,\n },\n [CombatAttackType.NERVE_STRIKE]: {\n baseDamage: 18,\n range: 1.0,\n accuracy: 0.9,\n kiCost: 22,\n staminaCost: 12,\n },\n [CombatAttackType.PUNCH]: {\n baseDamage: 18,\n range: 1.2,\n accuracy: 0.88,\n kiCost: 12,\n staminaCost: 8,\n },\n [CombatAttackType.KICK]: {\n baseDamage: 22,\n range: 1.8,\n accuracy: 0.82,\n kiCost: 16,\n staminaCost: 14,\n },\n [CombatAttackType.ELBOW]: {\n baseDamage: 26,\n range: 0.9,\n accuracy: 0.86,\n kiCost: 18,\n staminaCost: 12,\n },\n [CombatAttackType.KNEE]: {\n baseDamage: 28,\n range: 0.7,\n accuracy: 0.84,\n kiCost: 20,\n staminaCost: 16,\n },\n} as const;\n\n// =====================================================\n// DAMAGE TYPE EFFECTIVENESS\n// =====================================================\n\n/**\n * Damage type effectiveness against different body tissues\n * 데미지 유형별 조직 효과 매트릭스\n */\nexport const DAMAGE_TYPE_EFFECTIVENESS: Record<\n DamageType,\n Record<string, number>\n> = {\n blunt: {\n bone: 1.3,\n muscle: 1.1,\n organ: 1.0,\n nerve: 0.8,\n vascular: 0.9,\n joint: 1.2,\n },\n piercing: {\n bone: 0.7,\n muscle: 1.2,\n organ: 1.4,\n nerve: 1.1,\n vascular: 1.5,\n joint: 0.8,\n },\n slashing: {\n bone: 0.5,\n muscle: 1.3,\n organ: 1.1,\n nerve: 0.9,\n vascular: 1.4,\n joint: 0.7,\n },\n pressure: {\n bone: 0.6,\n muscle: 0.9,\n organ: 1.1,\n nerve: 1.6,\n vascular: 1.3,\n joint: 1.0,\n },\n nerve: {\n bone: 0.4,\n muscle: 0.8,\n organ: 1.0,\n nerve: 1.8,\n vascular: 1.2,\n joint: 0.9,\n },\n joint: {\n bone: 1.1,\n muscle: 0.9,\n organ: 0.7,\n nerve: 0.8,\n vascular: 0.6,\n joint: 1.7,\n },\n internal: {\n bone: 0.3,\n muscle: 0.7,\n organ: 1.5,\n nerve: 1.3,\n vascular: 1.1,\n joint: 0.5,\n },\n impact: {\n bone: 1.2,\n muscle: 1.0,\n organ: 1.1,\n nerve: 0.9,\n vascular: 0.8,\n joint: 1.3,\n },\n crushing: {\n bone: 1.5,\n muscle: 1.2,\n organ: 1.3,\n nerve: 0.7,\n vascular: 0.8,\n joint: 1.4,\n },\n sharp: {\n bone: 0.6,\n muscle: 1.4,\n organ: 1.2,\n nerve: 1.0,\n vascular: 1.6,\n joint: 0.8,\n },\n electric: {\n bone: 0.2,\n muscle: 1.0,\n organ: 0.9,\n nerve: 2.0,\n vascular: 1.1,\n joint: 0.5,\n },\n fire: {\n bone: 0.3,\n muscle: 1.1,\n organ: 1.2,\n nerve: 1.4,\n vascular: 1.0,\n joint: 0.6,\n },\n ice: {\n bone: 0.4,\n muscle: 0.8,\n organ: 0.9,\n nerve: 1.2,\n vascular: 0.7,\n joint: 1.1,\n },\n poison: {\n bone: 0.1,\n muscle: 0.6,\n organ: 1.8,\n nerve: 1.5,\n vascular: 1.7,\n joint: 0.3,\n },\n psychic: {\n bone: 0.0,\n muscle: 0.2,\n organ: 0.5,\n nerve: 2.2,\n vascular: 0.4,\n joint: 0.1,\n },\n blood: {\n bone: 0.2,\n muscle: 0.8,\n organ: 1.0,\n nerve: 0.5,\n vascular: 2.0,\n joint: 0.3,\n },\n} as const;\n\n// =====================================================\n// TRIGRAM TECHNIQUE PROPERTIES\n// =====================================================\n\n/**\n * Korean trigram technique properties (팔괘 기법 특성)\n */\nexport const TRIGRAM_TECHNIQUE_PROPERTIES = {\n geon: {\n korean: \"건괘\",\n english: \"Heaven\",\n element: \"metal\",\n nature: \"yang\",\n combatStyle: \"direct_force\",\n preferredDamageTypes: [\"blunt\", \"crushing\", \"impact\"],\n philosophy: \"정의로운 행동을 통한 압도적 힘\",\n },\n tae: {\n korean: \"태괘\",\n english: \"Lake\",\n element: \"metal\",\n nature: \"yin\",\n combatStyle: \"fluid_adaptation\",\n preferredDamageTypes: [\"pressure\", \"joint\", \"nerve\"],\n philosophy: \"부드러운 지속성이 경직된 저항을 이긴다\",\n },\n li: {\n korean: \"리괘\",\n english: \"Fire\",\n element: \"fire\",\n nature: \"yang\",\n combatStyle: \"precision_strikes\",\n preferredDamageTypes: [\"piercing\", \"sharp\", \"fire\"],\n philosophy: \"외과적 정밀함으로 약점을 조명한다\",\n },\n jin: {\n korean: \"진괘\",\n english: \"Thunder\",\n element: \"wood\",\n nature: \"yang\",\n combatStyle: \"explosive_power\",\n preferredDamageTypes: [\"electric\", \"impact\", \"blunt\"],\n philosophy: \"번개처럼 치고 천둥처럼 움직인다\",\n },\n son: {\n korean: \"손괘\",\n english: \"Wind\",\n element: \"wood\",\n nature: \"yin\",\n combatStyle: \"continuous_pressure\",\n preferredDamageTypes: [\"slashing\", \"pressure\", \"nerve\"],\n philosophy: \"지속적인 부드러운 힘이 모든 방어를 관통한다\",\n },\n gam: {\n korean: \"감괘\",\n english: \"Water\",\n element: \"water\",\n nature: \"yang\",\n combatStyle: \"adaptive_flow\",\n preferredDamageTypes: [\"blood\", \"poison\", \"internal\"],\n philosophy: \"장애물 주위로 흘러 급소를 타격한다\",\n },\n gan: {\n korean: \"간괘\",\n english: \"Mountain\",\n element: \"earth\",\n nature: \"yang\",\n combatStyle: \"immovable_defense\",\n preferredDamageTypes: [\"blunt\", \"crushing\", \"internal\"],\n philosophy: \"정적 속에 무한한 잠재 에너지를 담는다\",\n },\n gon: {\n korean: \"곤괘\",\n english: \"Earth\",\n element: \"earth\",\n nature: \"yin\",\n combatStyle: \"supportive_control\",\n preferredDamageTypes: [\"joint\", \"pressure\", \"internal\"],\n philosophy: \"지원하고 양육하여 승리를 이룬다\",\n },\n} as const;\n\n// =====================================================\n// KOREAN NAMING CONVENTIONS\n// =====================================================\n\n/**\n * Korean technique naming convention (한국 무술 명명법)\n */\nexport const TECHNIQUE_NAMING = {\n prefixes: {\n heaven: \"천\", // Heaven/Sky\n earth: \"지\", // Earth\n human: \"인\", // Human\n wind: \"풍\", // Wind\n thunder: \"뇌\", // Thunder\n fire: \"화\", // Fire\n water: \"수\", // Water\n mountain: \"산\", // Mountain\n },\n suffixes: {\n strike: \"격\", // Strike/Hit\n thrust: \"찌르기\", // Thrust/Stab\n block: \"막기\", // Block/Defend\n throw: \"던지기\", // Throw\n technique: \"술\", // Technique/Art\n method: \"법\", // Method/Way\n },\n} as const;\n\n// =====================================================\n// TECHNIQUE CATEGORIES\n// =====================================================\n\n/**\n * Korean martial arts technique categories (한국 무술 기법 분류)\n */\nexport const KOREAN_TECHNIQUE_CATEGORIES = {\n striking: {\n korean: \"타격술\",\n english: \"Striking Techniques\",\n subcategories: [\"punch\", \"kick\", \"elbow\", \"knee\", \"palm\"],\n },\n grappling: {\n korean: \"잡기술\",\n english: \"Grappling Techniques\",\n subcategories: [\"throw\", \"takedown\", \"joint_lock\", \"choke\"],\n },\n pressure_point: {\n korean: \"혈도술\",\n english: \"Pressure Point Techniques\",\n subcategories: [\"nerve_strike\", \"blood_flow\", \"ki_disruption\"],\n },\n defensive: {\n korean: \"방어술\",\n english: \"Defensive Techniques\",\n subcategories: [\"block\", \"parry\", \"dodge\", \"counter\"],\n },\n} as const;\n\n// =====================================================\n// DIFFICULTY LEVELS\n// =====================================================\n\n/**\n * Korean technique difficulty progression (한국 무술 난이도 체계)\n */\nexport const TECHNIQUE_DIFFICULTY_LEVELS = {\n basic: {\n korean: \"기초\",\n english: \"Basic\",\n requirements: { ki: 10, stamina: 8, experience: 0 },\n },\n intermediate: {\n korean: \"중급\",\n english: \"Intermediate\",\n requirements: { ki: 20, stamina: 15, experience: 100 },\n },\n advanced: {\n korean: \"고급\",\n english: \"Advanced\",\n requirements: { ki: 35, stamina: 25, experience: 500 },\n },\n master: {\n korean: \"사범\",\n english: \"Master\",\n requirements: { ki: 50, stamina: 40, experience: 1000 },\n },\n} as const;\n\n// =====================================================\n// ARCHETYPE BONUSES\n// =====================================================\n\n/**\n * Korean archetype combat specializations (한국 무사 유형별 전투 특화)\n */\nexport const ARCHETYPE_TECHNIQUE_BONUSES = {\n musa: {\n korean: \"무사\",\n english: \"Traditional Warrior\",\n philosophy: \"Honor through strength, disciplined combat\",\n combatStyle: \"Direct confrontation, overwhelming force\",\n preferredTrigrams: [\"geon\", \"jin\"],\n techniques: {\n 관절기법: \"Joint manipulation and control\",\n 급소타격: \"Military-taught pressure point targeting\",\n 제압술: \"Honor-based control methods\",\n },\n bonuses: {\n damageResistance: 1.2,\n jointTechniques: 1.5,\n militaryDiscipline: 1.3,\n darkOpsEffectiveness: 0.85,\n damageBonus: 1.2,\n accuracyBonus: 1.1,\n kiEfficiency: 1.0,\n staminaEfficiency: 1.1,\n },\n preferredTechniques: [\"strike\", \"block\", \"counter_attack\"],\n },\n amsalja: {\n korean: \"암살자\",\n english: \"Shadow Assassin\",\n philosophy: \"Efficiency through invisibility, one perfect strike\",\n combatStyle: \"Stealth approaches, instant takedowns\",\n preferredTrigrams: [\"son\", \"gam\", \"li\"],\n techniques: {\n 무성제압: \"Silent takedowns preventing vocal response\",\n 신경파괴: \"Precise neural disruption for stealth\",\n 호흡차단: \"Silent breathing and consciousness targeting\",\n 암흑작전: \"Dark Ops techniques for silent incapacitation\",\n },\n bonuses: {\n stealthMultiplier: 1.8,\n oneStrikeKill: 2.0,\n silentMovement: 1.5,\n darkOpsEffectiveness: 1.3,\n nightOperationsBonus: 1.25,\n damageBonus: 1.5,\n accuracyBonus: 1.3,\n kiEfficiency: 1.2,\n staminaEfficiency: 0.9,\n },\n preferredTechniques: [\n \"nerve_strike\",\n \"pressure_point\",\n \"thrust\",\n \"darkops\",\n ],\n },\n hacker: {\n korean: \"해커\",\n english: \"Cyber Warrior\",\n philosophy: \"Information as power, technological advantage\",\n combatStyle: \"Environmental manipulation, tech-assisted strikes\",\n preferredTrigrams: [\"li\", \"tae\"],\n techniques: {\n 해부학적분석: \"Data-driven approach to vital points\",\n 생체역학파괴: \"Tech-enhanced body mechanics understanding\",\n 체계적제압: \"Algorithm-based damage accumulation\",\n 디지털타격: \"Digital targeting systems for Dark Ops\",\n },\n bonuses: {\n precisionAnalysis: 1.6,\n environmentalControl: 1.4,\n dataOptimization: 1.3,\n darkOpsEffectiveness: 1.1,\n damageBonus: 1.1,\n accuracyBonus: 1.4,\n kiEfficiency: 1.3,\n staminaEfficiency: 1.0,\n },\n preferredTechniques: [\"pressure_point\", \"nerve_strike\"],\n },\n jeongbo_yowon: {\n korean: \"정보요원\",\n english: \"Intelligence Operative\",\n philosophy: \"Knowledge through observation, strategic thinking\",\n combatStyle: \"Psychological manipulation, precise timing\",\n preferredTrigrams: [\"gan\", \"gon\"],\n techniques: {\n 고통순응: \"Intelligence-based submission through pain\",\n 심리적압박: \"Mental intimidation through technique\",\n 정보추출: \"Combat methods from interrogation training\",\n 첩보전술: \"Espionage tactics and Dark Ops methods\",\n },\n bonuses: {\n psychologicalWarfare: 1.5,\n strategicAnalysis: 1.4,\n painCompliance: 1.7,\n darkOpsEffectiveness: 1.15,\n damageBonus: 1.1,\n accuracyBonus: 1.2,\n kiEfficiency: 1.1,\n staminaEfficiency: 1.2,\n },\n preferredTechniques: [\"grapple\", \"pressure_point\"],\n },\n jojik_pokryeokbae: {\n korean: \"조직폭력배\",\n english: \"Organized Crime\",\n philosophy: \"Survival through ruthlessness, practical violence\",\n combatStyle: \"Dirty fighting, improvised weapons\",\n preferredTrigrams: [\"jin\", \"gam\"],\n techniques: {\n 환경활용: \"Street-smart use of surroundings as weapons\",\n 더러운기법: \"Brutal eye attacks, groin strikes, hair pulling\",\n 생존격투: \"Underground whatever-it-takes combat\",\n 무자비술: \"Ruthless Dark Ops adaptations\",\n },\n bonuses: {\n dirtyFighting: 1.8,\n survivalInstinct: 1.6,\n streetSmart: 1.5,\n darkOpsEffectiveness: 1.05,\n damageBonus: 1.3,\n accuracyBonus: 0.9,\n kiEfficiency: 0.9,\n staminaEfficiency: 1.3,\n },\n preferredTechniques: [\"strike\", \"throw\", \"grapple\"],\n },\n} as const;\n\n// =====================================================\n// STANCE-TRIGRAM MAPPING\n// =====================================================\n\n/**\n * Map TrigramStance enum to trigram key strings\n */\nexport function getTrigramKey(\n stance: TrigramStance\n): keyof typeof TRIGRAM_TECHNIQUE_PROPERTIES {\n const stanceMap: Record<\n TrigramStance,\n keyof typeof TRIGRAM_TECHNIQUE_PROPERTIES\n > = {\n [TrigramStance.GEON]: \"geon\",\n [TrigramStance.TAE]: \"tae\",\n [TrigramStance.LI]: \"li\",\n [TrigramStance.JIN]: \"jin\",\n [TrigramStance.SON]: \"son\",\n [TrigramStance.GAM]: \"gam\",\n [TrigramStance.GAN]: \"gan\",\n [TrigramStance.GON]: \"gon\",\n };\n return stanceMap[stance];\n}\n\n/**\n * Get trigram properties by stance\n */\nexport function getTrigramProperties(stance: TrigramStance) {\n const key = getTrigramKey(stance);\n return TRIGRAM_TECHNIQUE_PROPERTIES[key];\n}\n\n/**\n * Calculate damage effectiveness for a damage type against tissue\n */\nexport function calculateDamageEffectiveness(\n damageType: DamageType,\n tissueType: string\n): number {\n const effectiveness = DAMAGE_TYPE_EFFECTIVENESS[damageType];\n return effectiveness?.[tissueType] ?? 1.0;\n}\n"],"mappings":";;;;;;;;;;;;;;AAuBA,IAAa,sBAAsB;CACjC,iBAAiB;CACjB,sBAAsB;CACtB,mBAAmB;CACnB,yBAAyB;CACzB,kBAAkB;CACnB;;;;AASD,IAAa,uBAST;EACD,iBAAiB,SAAS;EACzB,YAAY;EACZ,OAAO;EACP,UAAU;EACV,QAAQ;EACR,aAAa;EACd;EACA,iBAAiB,SAAS;EACzB,YAAY;EACZ,OAAO;EACP,UAAU;EACV,QAAQ;EACR,aAAa;EACd;EACA,iBAAiB,QAAQ;EACxB,YAAY;EACZ,OAAO;EACP,UAAU;EACV,QAAQ;EACR,aAAa;EACd;EACA,iBAAiB,iBAAiB;EACjC,YAAY;EACZ,OAAO;EACP,UAAU;EACV,QAAQ;EACR,aAAa;EACd;EACA,iBAAiB,QAAQ;EACxB,YAAY;EACZ,OAAO;EACP,UAAU;EACV,QAAQ;EACR,aAAa;EACd;EACA,iBAAiB,UAAU;EAC1B,YAAY;EACZ,OAAO;EACP,UAAU;EACV,QAAQ;EACR,aAAa;EACd;EACA,iBAAiB,iBAAiB;EACjC,YAAY;EACZ,OAAO;EACP,UAAU;EACV,QAAQ;EACR,aAAa;EACd;EACA,iBAAiB,eAAe;EAC/B,YAAY;EACZ,OAAO;EACP,UAAU;EACV,QAAQ;EACR,aAAa;EACd;EACA,iBAAiB,QAAQ;EACxB,YAAY;EACZ,OAAO;EACP,UAAU;EACV,QAAQ;EACR,aAAa;EACd;EACA,iBAAiB,OAAO;EACvB,YAAY;EACZ,OAAO;EACP,UAAU;EACV,QAAQ;EACR,aAAa;EACd;EACA,iBAAiB,QAAQ;EACxB,YAAY;EACZ,OAAO;EACP,UAAU;EACV,QAAQ;EACR,aAAa;EACd;EACA,iBAAiB,OAAO;EACvB,YAAY;EACZ,OAAO;EACP,UAAU;EACV,QAAQ;EACR,aAAa;EACd;CACF;;;;;AAUD,IAAa,4BAGT;CACF,OAAO;EACL,MAAM;EACN,QAAQ;EACR,OAAO;EACP,OAAO;EACP,UAAU;EACV,OAAO;EACR;CACD,UAAU;EACR,MAAM;EACN,QAAQ;EACR,OAAO;EACP,OAAO;EACP,UAAU;EACV,OAAO;EACR;CACD,UAAU;EACR,MAAM;EACN,QAAQ;EACR,OAAO;EACP,OAAO;EACP,UAAU;EACV,OAAO;EACR;CACD,UAAU;EACR,MAAM;EACN,QAAQ;EACR,OAAO;EACP,OAAO;EACP,UAAU;EACV,OAAO;EACR;CACD,OAAO;EACL,MAAM;EACN,QAAQ;EACR,OAAO;EACP,OAAO;EACP,UAAU;EACV,OAAO;EACR;CACD,OAAO;EACL,MAAM;EACN,QAAQ;EACR,OAAO;EACP,OAAO;EACP,UAAU;EACV,OAAO;EACR;CACD,UAAU;EACR,MAAM;EACN,QAAQ;EACR,OAAO;EACP,OAAO;EACP,UAAU;EACV,OAAO;EACR;CACD,QAAQ;EACN,MAAM;EACN,QAAQ;EACR,OAAO;EACP,OAAO;EACP,UAAU;EACV,OAAO;EACR;CACD,UAAU;EACR,MAAM;EACN,QAAQ;EACR,OAAO;EACP,OAAO;EACP,UAAU;EACV,OAAO;EACR;CACD,OAAO;EACL,MAAM;EACN,QAAQ;EACR,OAAO;EACP,OAAO;EACP,UAAU;EACV,OAAO;EACR;CACD,UAAU;EACR,MAAM;EACN,QAAQ;EACR,OAAO;EACP,OAAO;EACP,UAAU;EACV,OAAO;EACR;CACD,MAAM;EACJ,MAAM;EACN,QAAQ;EACR,OAAO;EACP,OAAO;EACP,UAAU;EACV,OAAO;EACR;CACD,KAAK;EACH,MAAM;EACN,QAAQ;EACR,OAAO;EACP,OAAO;EACP,UAAU;EACV,OAAO;EACR;CACD,QAAQ;EACN,MAAM;EACN,QAAQ;EACR,OAAO;EACP,OAAO;EACP,UAAU;EACV,OAAO;EACR;CACD,SAAS;EACP,MAAM;EACN,QAAQ;EACR,OAAO;EACP,OAAO;EACP,UAAU;EACV,OAAO;EACR;CACD,OAAO;EACL,MAAM;EACN,QAAQ;EACR,OAAO;EACP,OAAO;EACP,UAAU;EACV,OAAO;EACR;CACF;;;;AASD,IAAa,+BAA+B;CAC1C,MAAM;EACJ,QAAQ;EACR,SAAS;EACT,SAAS;EACT,QAAQ;EACR,aAAa;EACb,sBAAsB;GAAC;GAAS;GAAY;GAAS;EACrD,YAAY;EACb;CACD,KAAK;EACH,QAAQ;EACR,SAAS;EACT,SAAS;EACT,QAAQ;EACR,aAAa;EACb,sBAAsB;GAAC;GAAY;GAAS;GAAQ;EACpD,YAAY;EACb;CACD,IAAI;EACF,QAAQ;EACR,SAAS;EACT,SAAS;EACT,QAAQ;EACR,aAAa;EACb,sBAAsB;GAAC;GAAY;GAAS;GAAO;EACnD,YAAY;EACb;CACD,KAAK;EACH,QAAQ;EACR,SAAS;EACT,SAAS;EACT,QAAQ;EACR,aAAa;EACb,sBAAsB;GAAC;GAAY;GAAU;GAAQ;EACrD,YAAY;EACb;CACD,KAAK;EACH,QAAQ;EACR,SAAS;EACT,SAAS;EACT,QAAQ;EACR,aAAa;EACb,sBAAsB;GAAC;GAAY;GAAY;GAAQ;EACvD,YAAY;EACb;CACD,KAAK;EACH,QAAQ;EACR,SAAS;EACT,SAAS;EACT,QAAQ;EACR,aAAa;EACb,sBAAsB;GAAC;GAAS;GAAU;GAAW;EACrD,YAAY;EACb;CACD,KAAK;EACH,QAAQ;EACR,SAAS;EACT,SAAS;EACT,QAAQ;EACR,aAAa;EACb,sBAAsB;GAAC;GAAS;GAAY;GAAW;EACvD,YAAY;EACb;CACD,KAAK;EACH,QAAQ;EACR,SAAS;EACT,SAAS;EACT,QAAQ;EACR,aAAa;EACb,sBAAsB;GAAC;GAAS;GAAY;GAAW;EACvD,YAAY;EACb;CACF;;;;AASD,IAAa,mBAAmB;CAC9B,UAAU;EACR,QAAQ;EACR,OAAO;EACP,OAAO;EACP,MAAM;EACN,SAAS;EACT,MAAM;EACN,OAAO;EACP,UAAU;EACX;CACD,UAAU;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;EACP,OAAO;EACP,WAAW;EACX,QAAQ;EACT;CACF;;;;AASD,IAAa,8BAA8B;CACzC,UAAU;EACR,QAAQ;EACR,SAAS;EACT,eAAe;GAAC;GAAS;GAAQ;GAAS;GAAQ;GAAO;EAC1D;CACD,WAAW;EACT,QAAQ;EACR,SAAS;EACT,eAAe;GAAC;GAAS;GAAY;GAAc;GAAQ;EAC5D;CACD,gBAAgB;EACd,QAAQ;EACR,SAAS;EACT,eAAe;GAAC;GAAgB;GAAc;GAAgB;EAC/D;CACD,WAAW;EACT,QAAQ;EACR,SAAS;EACT,eAAe;GAAC;GAAS;GAAS;GAAS;GAAU;EACtD;CACF;;;;AASD,IAAa,8BAA8B;CACzC,OAAO;EACL,QAAQ;EACR,SAAS;EACT,cAAc;GAAE,IAAI;GAAI,SAAS;GAAG,YAAY;GAAG;EACpD;CACD,cAAc;EACZ,QAAQ;EACR,SAAS;EACT,cAAc;GAAE,IAAI;GAAI,SAAS;GAAI,YAAY;GAAK;EACvD;CACD,UAAU;EACR,QAAQ;EACR,SAAS;EACT,cAAc;GAAE,IAAI;GAAI,SAAS;GAAI,YAAY;GAAK;EACvD;CACD,QAAQ;EACN,QAAQ;EACR,SAAS;EACT,cAAc;GAAE,IAAI;GAAI,SAAS;GAAI,YAAY;GAAM;EACxD;CACF;;;;AAgJD,SAAgB,cACd,QAC2C;CAc3C,OAAO;GATJ,cAAc,OAAO;GACrB,cAAc,MAAM;GACpB,cAAc,KAAK;GACnB,cAAc,MAAM;GACpB,cAAc,MAAM;GACpB,cAAc,MAAM;GACpB,cAAc,MAAM;GACpB,cAAc,MAAM;EAEhB,CAAU;;;;;AAMnB,SAAgB,qBAAqB,QAAuB;CAE1D,OAAO,6BADK,cAAc,OACU;;;;;AAMtC,SAAgB,6BACd,YACA,YACQ;CAER,OADsB,0BAA0B,cACzB,eAAe"}
1
+ {"version":3,"file":"TechniqueConfig.js","names":[],"sources":["../../../../src/systems/trigram/techniques/TechniqueConfig.ts"],"sourcesContent":["/**\n * Technique Configuration & Constants\n * 한국 무술 기법 설정 및 상수\n *\n * Contains all configuration, modifiers, effectiveness matrices,\n * and metadata for the Korean martial arts technique system.\n *\n * @module TechniqueConfig\n */\n\nimport {\n CombatAttackType,\n DamageType,\n TrigramStance,\n} from \"../../../types/common\";\n\n// =====================================================\n// TECHNIQUE MODIFIERS\n// =====================================================\n\n/**\n * Technique effectiveness modifiers\n */\nexport const TECHNIQUE_MODIFIERS = {\n DAMAGE_VARIANCE: 0.15, // ±15% damage variance\n CRITICAL_DAMAGE_BASE: 1.5,\n VITAL_POINT_BONUS: 2.0,\n STANCE_MISMATCH_PENALTY: 0.8,\n COMBO_MULTIPLIER: 1.1,\n} as const;\n\n// =====================================================\n// TECHNIQUE PROPERTIES\n// =====================================================\n\n/**\n * Base properties for each combat attack type\n */\nexport const TECHNIQUE_PROPERTIES: Record<\n CombatAttackType,\n {\n readonly baseDamage: number;\n readonly range: number;\n readonly accuracy: number;\n readonly kiCost: number;\n readonly staminaCost: number;\n }\n> = {\n [CombatAttackType.STRIKE]: {\n baseDamage: 20,\n range: 1.0,\n accuracy: 0.85,\n kiCost: 15,\n staminaCost: 10,\n },\n [CombatAttackType.THRUST]: {\n baseDamage: 25,\n range: 1.5,\n accuracy: 0.9,\n kiCost: 18,\n staminaCost: 12,\n },\n [CombatAttackType.BLOCK]: {\n baseDamage: 5,\n range: 0.5,\n accuracy: 0.95,\n kiCost: 8,\n staminaCost: 15,\n },\n [CombatAttackType.COUNTER_ATTACK]: {\n baseDamage: 22,\n range: 1.0,\n accuracy: 0.88,\n kiCost: 20,\n staminaCost: 15,\n },\n [CombatAttackType.THROW]: {\n baseDamage: 30,\n range: 0.8,\n accuracy: 0.75,\n kiCost: 25,\n staminaCost: 20,\n },\n [CombatAttackType.GRAPPLE]: {\n baseDamage: 15,\n range: 0.6,\n accuracy: 0.8,\n kiCost: 20,\n staminaCost: 25,\n },\n [CombatAttackType.PRESSURE_POINT]: {\n baseDamage: 12,\n range: 0.8,\n accuracy: 0.95,\n kiCost: 25,\n staminaCost: 8,\n },\n [CombatAttackType.NERVE_STRIKE]: {\n baseDamage: 18,\n range: 1.0,\n accuracy: 0.9,\n kiCost: 22,\n staminaCost: 12,\n },\n [CombatAttackType.PUNCH]: {\n baseDamage: 18,\n range: 1.2,\n accuracy: 0.88,\n kiCost: 12,\n staminaCost: 8,\n },\n [CombatAttackType.KICK]: {\n baseDamage: 22,\n range: 1.8,\n accuracy: 0.82,\n kiCost: 16,\n staminaCost: 14,\n },\n [CombatAttackType.ELBOW]: {\n baseDamage: 26,\n range: 0.9,\n accuracy: 0.86,\n kiCost: 18,\n staminaCost: 12,\n },\n [CombatAttackType.KNEE]: {\n baseDamage: 28,\n range: 0.7,\n accuracy: 0.84,\n kiCost: 20,\n staminaCost: 16,\n },\n} as const;\n\n// =====================================================\n// DAMAGE TYPE EFFECTIVENESS\n// =====================================================\n\n/**\n * Damage type effectiveness against different body tissues\n * 데미지 유형별 조직 효과 매트릭스\n */\nexport const DAMAGE_TYPE_EFFECTIVENESS: Record<\n DamageType,\n Record<string, number>\n> = {\n blunt: {\n bone: 1.3,\n muscle: 1.1,\n organ: 1.0,\n nerve: 0.8,\n vascular: 0.9,\n joint: 1.2,\n },\n piercing: {\n bone: 0.7,\n muscle: 1.2,\n organ: 1.4,\n nerve: 1.1,\n vascular: 1.5,\n joint: 0.8,\n },\n slashing: {\n bone: 0.5,\n muscle: 1.3,\n organ: 1.1,\n nerve: 0.9,\n vascular: 1.4,\n joint: 0.7,\n },\n pressure: {\n bone: 0.6,\n muscle: 0.9,\n organ: 1.1,\n nerve: 1.6,\n vascular: 1.3,\n joint: 1.0,\n },\n nerve: {\n bone: 0.4,\n muscle: 0.8,\n organ: 1.0,\n nerve: 1.8,\n vascular: 1.2,\n joint: 0.9,\n },\n joint: {\n bone: 1.1,\n muscle: 0.9,\n organ: 0.7,\n nerve: 0.8,\n vascular: 0.6,\n joint: 1.7,\n },\n internal: {\n bone: 0.3,\n muscle: 0.7,\n organ: 1.5,\n nerve: 1.3,\n vascular: 1.1,\n joint: 0.5,\n },\n impact: {\n bone: 1.2,\n muscle: 1.0,\n organ: 1.1,\n nerve: 0.9,\n vascular: 0.8,\n joint: 1.3,\n },\n crushing: {\n bone: 1.5,\n muscle: 1.2,\n organ: 1.3,\n nerve: 0.7,\n vascular: 0.8,\n joint: 1.4,\n },\n sharp: {\n bone: 0.6,\n muscle: 1.4,\n organ: 1.2,\n nerve: 1.0,\n vascular: 1.6,\n joint: 0.8,\n },\n electric: {\n bone: 0.2,\n muscle: 1.0,\n organ: 0.9,\n nerve: 2.0,\n vascular: 1.1,\n joint: 0.5,\n },\n fire: {\n bone: 0.3,\n muscle: 1.1,\n organ: 1.2,\n nerve: 1.4,\n vascular: 1.0,\n joint: 0.6,\n },\n ice: {\n bone: 0.4,\n muscle: 0.8,\n organ: 0.9,\n nerve: 1.2,\n vascular: 0.7,\n joint: 1.1,\n },\n poison: {\n bone: 0.1,\n muscle: 0.6,\n organ: 1.8,\n nerve: 1.5,\n vascular: 1.7,\n joint: 0.3,\n },\n psychic: {\n bone: 0.0,\n muscle: 0.2,\n organ: 0.5,\n nerve: 2.2,\n vascular: 0.4,\n joint: 0.1,\n },\n blood: {\n bone: 0.2,\n muscle: 0.8,\n organ: 1.0,\n nerve: 0.5,\n vascular: 2.0,\n joint: 0.3,\n },\n} as const;\n\n// =====================================================\n// TRIGRAM TECHNIQUE PROPERTIES\n// =====================================================\n\n/**\n * Korean trigram technique properties (팔괘 기법 특성)\n */\nexport const TRIGRAM_TECHNIQUE_PROPERTIES = {\n geon: {\n korean: \"건괘\",\n english: \"Heaven\",\n element: \"metal\",\n nature: \"yang\",\n combatStyle: \"direct_force\",\n preferredDamageTypes: [\"blunt\", \"crushing\", \"impact\"],\n philosophy: \"정의로운 행동을 통한 압도적 힘\",\n },\n tae: {\n korean: \"태괘\",\n english: \"Lake\",\n element: \"metal\",\n nature: \"yin\",\n combatStyle: \"fluid_adaptation\",\n preferredDamageTypes: [\"pressure\", \"joint\", \"nerve\"],\n philosophy: \"부드러운 지속성이 경직된 저항을 이긴다\",\n },\n li: {\n korean: \"리괘\",\n english: \"Fire\",\n element: \"fire\",\n nature: \"yang\",\n combatStyle: \"precision_strikes\",\n preferredDamageTypes: [\"piercing\", \"sharp\", \"fire\"],\n philosophy: \"외과적 정밀함으로 약점을 조명한다\",\n },\n jin: {\n korean: \"진괘\",\n english: \"Thunder\",\n element: \"wood\",\n nature: \"yang\",\n combatStyle: \"explosive_power\",\n preferredDamageTypes: [\"electric\", \"impact\", \"blunt\"],\n philosophy: \"번개처럼 치고 천둥처럼 움직인다\",\n },\n son: {\n korean: \"손괘\",\n english: \"Wind\",\n element: \"wood\",\n nature: \"yin\",\n combatStyle: \"continuous_pressure\",\n preferredDamageTypes: [\"slashing\", \"pressure\", \"nerve\"],\n philosophy: \"지속적인 부드러운 힘이 모든 방어를 관통한다\",\n },\n gam: {\n korean: \"감괘\",\n english: \"Water\",\n element: \"water\",\n nature: \"yang\",\n combatStyle: \"adaptive_flow\",\n preferredDamageTypes: [\"blood\", \"poison\", \"internal\"],\n philosophy: \"장애물 주위로 흘러 급소를 타격한다\",\n },\n gan: {\n korean: \"간괘\",\n english: \"Mountain\",\n element: \"earth\",\n nature: \"yang\",\n combatStyle: \"immovable_defense\",\n preferredDamageTypes: [\"blunt\", \"crushing\", \"internal\"],\n philosophy: \"정적 속에 무한한 잠재 에너지를 담는다\",\n },\n gon: {\n korean: \"곤괘\",\n english: \"Earth\",\n element: \"earth\",\n nature: \"yin\",\n combatStyle: \"supportive_control\",\n preferredDamageTypes: [\"joint\", \"pressure\", \"internal\"],\n philosophy: \"지원하고 양육하여 승리를 이룬다\",\n },\n} as const;\n\n// =====================================================\n// KOREAN NAMING CONVENTIONS\n// =====================================================\n\n/**\n * Korean technique naming convention (한국 무술 명명법)\n */\nexport const TECHNIQUE_NAMING = {\n prefixes: {\n heaven: \"천\", // Heaven/Sky\n earth: \"지\", // Earth\n human: \"인\", // Human\n wind: \"풍\", // Wind\n thunder: \"뇌\", // Thunder\n fire: \"화\", // Fire\n water: \"수\", // Water\n mountain: \"산\", // Mountain\n },\n suffixes: {\n strike: \"격\", // Strike/Hit\n thrust: \"찌르기\", // Thrust/Stab\n block: \"막기\", // Block/Defend\n throw: \"던지기\", // Throw\n technique: \"술\", // Technique/Art\n method: \"법\", // Method/Way\n },\n} as const;\n\n// =====================================================\n// TECHNIQUE CATEGORIES\n// =====================================================\n\n/**\n * Korean martial arts technique categories (한국 무술 기법 분류)\n */\nexport const KOREAN_TECHNIQUE_CATEGORIES = {\n striking: {\n korean: \"타격술\",\n english: \"Striking Techniques\",\n subcategories: [\"punch\", \"kick\", \"elbow\", \"knee\", \"palm\"],\n },\n grappling: {\n korean: \"잡기술\",\n english: \"Grappling Techniques\",\n subcategories: [\"throw\", \"takedown\", \"joint_lock\", \"choke\"],\n },\n pressure_point: {\n korean: \"혈도술\",\n english: \"Pressure Point Techniques\",\n subcategories: [\"nerve_strike\", \"blood_flow\", \"ki_disruption\"],\n },\n defensive: {\n korean: \"방어술\",\n english: \"Defensive Techniques\",\n subcategories: [\"block\", \"parry\", \"dodge\", \"counter\"],\n },\n} as const;\n\n// =====================================================\n// DIFFICULTY LEVELS\n// =====================================================\n\n/**\n * Korean technique difficulty progression (한국 무술 난이도 체계)\n */\nexport const TECHNIQUE_DIFFICULTY_LEVELS = {\n basic: {\n korean: \"기초\",\n english: \"Basic\",\n requirements: { ki: 10, stamina: 8, experience: 0 },\n },\n intermediate: {\n korean: \"중급\",\n english: \"Intermediate\",\n requirements: { ki: 20, stamina: 15, experience: 100 },\n },\n advanced: {\n korean: \"고급\",\n english: \"Advanced\",\n requirements: { ki: 35, stamina: 25, experience: 500 },\n },\n master: {\n korean: \"사범\",\n english: \"Master\",\n requirements: { ki: 50, stamina: 40, experience: 1000 },\n },\n} as const;\n\n// =====================================================\n// ARCHETYPE BONUSES\n// =====================================================\n\n/**\n * Korean archetype combat specializations (한국 무사 유형별 전투 특화)\n */\nexport const ARCHETYPE_TECHNIQUE_BONUSES = {\n musa: {\n korean: \"무사\",\n english: \"Traditional Warrior\",\n philosophy: \"Honor through strength, disciplined combat\",\n combatStyle: \"Direct confrontation, overwhelming force\",\n preferredTrigrams: [\"geon\", \"jin\"],\n techniques: {\n 관절기법: \"Joint manipulation and control\",\n 급소타격: \"Military-taught pressure point targeting\",\n 제압술: \"Honor-based control methods\",\n },\n bonuses: {\n damageResistance: 1.2,\n jointTechniques: 1.5,\n militaryDiscipline: 1.3,\n darkOpsEffectiveness: 0.85,\n damageBonus: 1.2,\n accuracyBonus: 1.1,\n kiEfficiency: 1.0,\n staminaEfficiency: 1.1,\n },\n preferredTechniques: [\"strike\", \"block\", \"counter_attack\"],\n },\n amsalja: {\n korean: \"암살자\",\n english: \"Shadow Assassin\",\n philosophy: \"Efficiency through invisibility, one perfect strike\",\n combatStyle: \"Stealth approaches, instant takedowns\",\n preferredTrigrams: [\"son\", \"gam\", \"li\"],\n techniques: {\n 무성제압: \"Silent takedowns preventing vocal response\",\n 신경파괴: \"Precise neural disruption for stealth\",\n 호흡차단: \"Silent breathing and consciousness targeting\",\n 암흑작전: \"Dark Ops techniques for silent incapacitation\",\n },\n bonuses: {\n stealthMultiplier: 1.8,\n oneStrikeKill: 2.0,\n silentMovement: 1.5,\n darkOpsEffectiveness: 1.3,\n nightOperationsBonus: 1.25,\n damageBonus: 1.5,\n accuracyBonus: 1.3,\n kiEfficiency: 1.2,\n staminaEfficiency: 0.9,\n },\n preferredTechniques: [\n \"nerve_strike\",\n \"pressure_point\",\n \"thrust\",\n \"darkops\",\n ],\n },\n hacker: {\n korean: \"해커\",\n english: \"Cyber Warrior\",\n philosophy: \"Information as power, technological advantage\",\n combatStyle: \"Environmental manipulation, tech-assisted strikes\",\n preferredTrigrams: [\"li\", \"tae\"],\n techniques: {\n 해부학적분석: \"Data-driven approach to vital points\",\n 생체역학파괴: \"Tech-enhanced body mechanics understanding\",\n 체계적제압: \"Algorithm-based damage accumulation\",\n 디지털타격: \"Digital targeting systems for Dark Ops\",\n },\n bonuses: {\n precisionAnalysis: 1.6,\n environmentalControl: 1.4,\n dataOptimization: 1.3,\n darkOpsEffectiveness: 1.1,\n damageBonus: 1.1,\n accuracyBonus: 1.4,\n kiEfficiency: 1.3,\n staminaEfficiency: 1.0,\n },\n preferredTechniques: [\"pressure_point\", \"nerve_strike\"],\n },\n jeongbo_yowon: {\n korean: \"정보요원\",\n english: \"Intelligence Operative\",\n philosophy: \"Knowledge through observation, strategic thinking\",\n combatStyle: \"Psychological manipulation, precise timing\",\n preferredTrigrams: [\"gan\", \"gon\"],\n techniques: {\n 고통순응: \"Intelligence-based submission through pain\",\n 심리적압박: \"Mental intimidation through technique\",\n 정보추출: \"Combat methods from interrogation training\",\n 첩보전술: \"Espionage tactics and Dark Ops methods\",\n },\n bonuses: {\n psychologicalWarfare: 1.5,\n strategicAnalysis: 1.4,\n painCompliance: 1.7,\n darkOpsEffectiveness: 1.15,\n damageBonus: 1.1,\n accuracyBonus: 1.2,\n kiEfficiency: 1.1,\n staminaEfficiency: 1.2,\n },\n preferredTechniques: [\"grapple\", \"pressure_point\"],\n },\n jojik_pokryeokbae: {\n korean: \"조직폭력배\",\n english: \"Organized Crime\",\n philosophy: \"Survival through ruthlessness, practical violence\",\n combatStyle: \"Dirty fighting, improvised weapons\",\n preferredTrigrams: [\"jin\", \"gam\"],\n techniques: {\n 환경활용: \"Street-smart use of surroundings as weapons\",\n 더러운기법: \"Brutal eye attacks, groin strikes, hair pulling\",\n 생존격투: \"Underground whatever-it-takes combat\",\n 무자비술: \"Ruthless Dark Ops adaptations\",\n },\n bonuses: {\n dirtyFighting: 1.8,\n survivalInstinct: 1.6,\n streetSmart: 1.5,\n darkOpsEffectiveness: 1.05,\n damageBonus: 1.3,\n accuracyBonus: 0.9,\n kiEfficiency: 0.9,\n staminaEfficiency: 1.3,\n },\n preferredTechniques: [\"strike\", \"throw\", \"grapple\"],\n },\n} as const;\n\n// =====================================================\n// STANCE-TRIGRAM MAPPING\n// =====================================================\n\n/**\n * Map TrigramStance enum to trigram key strings\n */\nexport function getTrigramKey(\n stance: TrigramStance\n): keyof typeof TRIGRAM_TECHNIQUE_PROPERTIES {\n const stanceMap: Record<\n TrigramStance,\n keyof typeof TRIGRAM_TECHNIQUE_PROPERTIES\n > = {\n [TrigramStance.GEON]: \"geon\",\n [TrigramStance.TAE]: \"tae\",\n [TrigramStance.LI]: \"li\",\n [TrigramStance.JIN]: \"jin\",\n [TrigramStance.SON]: \"son\",\n [TrigramStance.GAM]: \"gam\",\n [TrigramStance.GAN]: \"gan\",\n [TrigramStance.GON]: \"gon\",\n };\n return stanceMap[stance];\n}\n\n/**\n * Get trigram properties by stance\n */\nexport function getTrigramProperties(stance: TrigramStance) {\n const key = getTrigramKey(stance);\n return TRIGRAM_TECHNIQUE_PROPERTIES[key];\n}\n\n/**\n * Calculate damage effectiveness for a damage type against tissue\n */\nexport function calculateDamageEffectiveness(\n damageType: DamageType,\n tissueType: string\n): number {\n const effectiveness = DAMAGE_TYPE_EFFECTIVENESS[damageType];\n return effectiveness?.[tissueType] ?? 1.0;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/systems/trigram/techniques/index.ts"],"sourcesContent":["/**\n * Techniques Module Index\n * 한국 무술 기법 모듈\n *\n * This module provides modular access to all Korean martial arts techniques\n * organized by trigram stance, plus Dark Ops techniques and configuration.\n *\n * Structure:\n * - Individual stance files (Geon, Tae, Li, Jin, Son, Gam, Gan, Gon)\n * - Dark Ops techniques for 암살자 archetype\n * - Configuration and constants\n *\n * @module techniques\n */\n\nimport { TrigramStance } from \"../../../types/common\";\nimport type { KoreanTechnique } from \"../../vitalpoint/types\";\n\n// =====================================================\n// STANCE TECHNIQUE IMPORTS\n// =====================================================\n\n// Basic stance techniques (array only)\nexport { GEON_TECHNIQUES } from \"./GeonTechniques\";\nexport { JIN_TECHNIQUES } from \"./JinTechniques\";\nexport { LI_TECHNIQUES } from \"./LiTechniques\";\nexport { TAE_TECHNIQUES } from \"./TaeTechniques\";\n\n// Extended stance techniques (with helper functions)\nexport {\n GAM_TECHNIQUE_COUNT,\n GAM_TECHNIQUES,\n getGamTechniqueById,\n getGamTechniquesByType,\n} from \"./GamTechniques\";\nexport {\n GAN_TECHNIQUE_COUNT,\n GAN_TECHNIQUES,\n getGanTechniqueById,\n getGanTechniquesByType,\n} from \"./GanTechniques\";\nexport {\n getGonTechniqueById,\n getGonTechniquesByType,\n GON_TECHNIQUE_COUNT,\n GON_TECHNIQUES,\n} from \"./GonTechniques\";\nexport {\n getSonTechniqueById,\n getSonTechniquesByType,\n SON_TECHNIQUE_COUNT,\n SON_TECHNIQUES,\n} from \"./SonTechniques\";\n\n// Import for composition\nimport { GAM_TECHNIQUES } from \"./GamTechniques\";\nimport { GAN_TECHNIQUES } from \"./GanTechniques\";\nimport { GEON_TECHNIQUES } from \"./GeonTechniques\";\nimport { GON_TECHNIQUES } from \"./GonTechniques\";\nimport { JIN_TECHNIQUES } from \"./JinTechniques\";\nimport { LI_TECHNIQUES } from \"./LiTechniques\";\nimport { SON_TECHNIQUES } from \"./SonTechniques\";\nimport { TAE_TECHNIQUES } from \"./TaeTechniques\";\n\n// =====================================================\n// DARK OPS TECHNIQUE IMPORTS\n// =====================================================\n\nexport {\n DARK_OPS_ARCHETYPE_BONUSES,\n DARK_OPS_NIGHT_BONUS,\n DARK_OPS_SPECIAL_EFFECTS,\n DARK_OPS_TECHNIQUE_COUNT,\n DARK_OPS_TECHNIQUES,\n DARK_OPS_UNITS,\n getDarkOpsArchetypeBonus,\n getDarkOpsTechniqueById,\n getDarkOpsTechniquesByUnit,\n} from \"./DarkOpsTechniques\";\n\n// =====================================================\n// CONFIGURATION IMPORTS\n// =====================================================\n\nexport {\n ARCHETYPE_TECHNIQUE_BONUSES,\n calculateDamageEffectiveness,\n DAMAGE_TYPE_EFFECTIVENESS,\n getTrigramKey,\n getTrigramProperties,\n KOREAN_TECHNIQUE_CATEGORIES,\n TECHNIQUE_DIFFICULTY_LEVELS,\n TECHNIQUE_MODIFIERS,\n TECHNIQUE_NAMING,\n TECHNIQUE_PROPERTIES,\n TRIGRAM_TECHNIQUE_PROPERTIES,\n} from \"./TechniqueConfig\";\n\n// =====================================================\n// COMPOSED TRIGRAM TECHNIQUES\n// =====================================================\n\n/**\n * Complete TRIGRAM_TECHNIQUES map organized by stance\n * This is the primary technique lookup used throughout the game\n *\n * 팔괘 기술 전체 맵 (스탠스별 구성)\n */\nexport const TRIGRAM_TECHNIQUES: Record<\n TrigramStance,\n readonly KoreanTechnique[]\n> = {\n [TrigramStance.GEON]: GEON_TECHNIQUES,\n [TrigramStance.TAE]: TAE_TECHNIQUES,\n [TrigramStance.LI]: LI_TECHNIQUES,\n [TrigramStance.JIN]: JIN_TECHNIQUES,\n [TrigramStance.SON]: SON_TECHNIQUES,\n [TrigramStance.GAM]: GAM_TECHNIQUES,\n [TrigramStance.GAN]: GAN_TECHNIQUES,\n [TrigramStance.GON]: GON_TECHNIQUES,\n} as const;\n\n// =====================================================\n// HELPER FUNCTIONS\n// =====================================================\n\n/**\n * Get all techniques for a specific stance\n */\nexport function getTechniquesByStance(\n stance: TrigramStance\n): readonly KoreanTechnique[] {\n return TRIGRAM_TECHNIQUES[stance] ?? [];\n}\n\n/**\n * Get a technique by ID from any stance\n */\nexport function getTechniqueById(id: string): KoreanTechnique | undefined {\n for (const techniques of Object.values(TRIGRAM_TECHNIQUES)) {\n const technique = techniques.find((t) => t.id === id);\n if (technique) return technique;\n }\n return undefined;\n}\n\n/**\n * Get all techniques across all stances\n */\nexport function getAllTechniques(): readonly KoreanTechnique[] {\n return Object.values(TRIGRAM_TECHNIQUES).flat();\n}\n\n/**\n * Get total technique count\n */\nexport function getTotalTechniqueCount(): number {\n return Object.values(TRIGRAM_TECHNIQUES).reduce(\n (sum, techniques) => sum + techniques.length,\n 0\n );\n}\n\n/**\n * Get technique count by stance\n */\nexport function getTechniqueCountByStance(): Record<TrigramStance, number> {\n return {\n [TrigramStance.GEON]: GEON_TECHNIQUES.length,\n [TrigramStance.TAE]: TAE_TECHNIQUES.length,\n [TrigramStance.LI]: LI_TECHNIQUES.length,\n [TrigramStance.JIN]: JIN_TECHNIQUES.length,\n [TrigramStance.SON]: SON_TECHNIQUES.length,\n [TrigramStance.GAM]: GAM_TECHNIQUES.length,\n [TrigramStance.GAN]: GAN_TECHNIQUES.length,\n [TrigramStance.GON]: GON_TECHNIQUES.length,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4GA,IAAa,qBAGT;EACD,cAAc,OAAO;EACrB,cAAc,MAAM;EACpB,cAAc,KAAK;EACnB,cAAc,MAAM;EACpB,cAAc,MAAM;EACpB,cAAc,MAAM;EACpB,cAAc,MAAM;EACpB,cAAc,MAAM;CACtB;;;;AASD,SAAgB,sBACd,QAC4B;CAC5B,OAAO,mBAAmB,WAAW,EAAE;;;;;AAMzC,SAAgB,iBAAiB,IAAyC;CACxE,KAAK,MAAM,cAAc,OAAO,OAAO,mBAAmB,EAAE;EAC1D,MAAM,YAAY,WAAW,MAAM,MAAM,EAAE,OAAO,GAAG;EACrD,IAAI,WAAW,OAAO;;;;;;AAQ1B,SAAgB,mBAA+C;CAC7D,OAAO,OAAO,OAAO,mBAAmB,CAAC,MAAM;;;;;AAMjD,SAAgB,yBAAiC;CAC/C,OAAO,OAAO,OAAO,mBAAmB,CAAC,QACtC,KAAK,eAAe,MAAM,WAAW,QACtC,EACD;;;;;AAMH,SAAgB,4BAA2D;CACzE,OAAO;GACJ,cAAc,OAAO,gBAAgB;GACrC,cAAc,MAAM,eAAe;GACnC,cAAc,KAAK,cAAc;GACjC,cAAc,MAAM,eAAe;GACnC,cAAc,MAAM,eAAe;GACnC,cAAc,MAAM,eAAe;GACnC,cAAc,MAAM,eAAe;GACnC,cAAc,MAAM,eAAe;EACrC"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/systems/trigram/techniques/index.ts"],"sourcesContent":["/**\n * Techniques Module Index\n * 한국 무술 기법 모듈\n *\n * This module provides modular access to all Korean martial arts techniques\n * organized by trigram stance, plus Dark Ops techniques and configuration.\n *\n * Structure:\n * - Individual stance files (Geon, Tae, Li, Jin, Son, Gam, Gan, Gon)\n * - Dark Ops techniques for 암살자 archetype\n * - Configuration and constants\n *\n * @module techniques\n */\n\nimport { TrigramStance } from \"../../../types/common\";\nimport type { KoreanTechnique } from \"../../vitalpoint/types\";\n\n// =====================================================\n// STANCE TECHNIQUE IMPORTS\n// =====================================================\n\n// Basic stance techniques (array only)\nexport { GEON_TECHNIQUES } from \"./GeonTechniques\";\nexport { JIN_TECHNIQUES } from \"./JinTechniques\";\nexport { LI_TECHNIQUES } from \"./LiTechniques\";\nexport { TAE_TECHNIQUES } from \"./TaeTechniques\";\n\n// Extended stance techniques (with helper functions)\nexport {\n GAM_TECHNIQUE_COUNT,\n GAM_TECHNIQUES,\n getGamTechniqueById,\n getGamTechniquesByType,\n} from \"./GamTechniques\";\nexport {\n GAN_TECHNIQUE_COUNT,\n GAN_TECHNIQUES,\n getGanTechniqueById,\n getGanTechniquesByType,\n} from \"./GanTechniques\";\nexport {\n getGonTechniqueById,\n getGonTechniquesByType,\n GON_TECHNIQUE_COUNT,\n GON_TECHNIQUES,\n} from \"./GonTechniques\";\nexport {\n getSonTechniqueById,\n getSonTechniquesByType,\n SON_TECHNIQUE_COUNT,\n SON_TECHNIQUES,\n} from \"./SonTechniques\";\n\n// Import for composition\nimport { GAM_TECHNIQUES } from \"./GamTechniques\";\nimport { GAN_TECHNIQUES } from \"./GanTechniques\";\nimport { GEON_TECHNIQUES } from \"./GeonTechniques\";\nimport { GON_TECHNIQUES } from \"./GonTechniques\";\nimport { JIN_TECHNIQUES } from \"./JinTechniques\";\nimport { LI_TECHNIQUES } from \"./LiTechniques\";\nimport { SON_TECHNIQUES } from \"./SonTechniques\";\nimport { TAE_TECHNIQUES } from \"./TaeTechniques\";\n\n// =====================================================\n// DARK OPS TECHNIQUE IMPORTS\n// =====================================================\n\nexport {\n DARK_OPS_ARCHETYPE_BONUSES,\n DARK_OPS_NIGHT_BONUS,\n DARK_OPS_SPECIAL_EFFECTS,\n DARK_OPS_TECHNIQUE_COUNT,\n DARK_OPS_TECHNIQUES,\n DARK_OPS_UNITS,\n getDarkOpsArchetypeBonus,\n getDarkOpsTechniqueById,\n getDarkOpsTechniquesByUnit,\n} from \"./DarkOpsTechniques\";\n\n// =====================================================\n// CONFIGURATION IMPORTS\n// =====================================================\n\nexport {\n ARCHETYPE_TECHNIQUE_BONUSES,\n calculateDamageEffectiveness,\n DAMAGE_TYPE_EFFECTIVENESS,\n getTrigramKey,\n getTrigramProperties,\n KOREAN_TECHNIQUE_CATEGORIES,\n TECHNIQUE_DIFFICULTY_LEVELS,\n TECHNIQUE_MODIFIERS,\n TECHNIQUE_NAMING,\n TECHNIQUE_PROPERTIES,\n TRIGRAM_TECHNIQUE_PROPERTIES,\n} from \"./TechniqueConfig\";\n\n// =====================================================\n// COMPOSED TRIGRAM TECHNIQUES\n// =====================================================\n\n/**\n * Complete TRIGRAM_TECHNIQUES map organized by stance\n * This is the primary technique lookup used throughout the game\n *\n * 팔괘 기술 전체 맵 (스탠스별 구성)\n */\nexport const TRIGRAM_TECHNIQUES: Record<\n TrigramStance,\n readonly KoreanTechnique[]\n> = {\n [TrigramStance.GEON]: GEON_TECHNIQUES,\n [TrigramStance.TAE]: TAE_TECHNIQUES,\n [TrigramStance.LI]: LI_TECHNIQUES,\n [TrigramStance.JIN]: JIN_TECHNIQUES,\n [TrigramStance.SON]: SON_TECHNIQUES,\n [TrigramStance.GAM]: GAM_TECHNIQUES,\n [TrigramStance.GAN]: GAN_TECHNIQUES,\n [TrigramStance.GON]: GON_TECHNIQUES,\n} as const;\n\n// =====================================================\n// HELPER FUNCTIONS\n// =====================================================\n\n/**\n * Get all techniques for a specific stance\n */\nexport function getTechniquesByStance(\n stance: TrigramStance\n): readonly KoreanTechnique[] {\n return TRIGRAM_TECHNIQUES[stance] ?? [];\n}\n\n/**\n * Get a technique by ID from any stance\n */\nexport function getTechniqueById(id: string): KoreanTechnique | undefined {\n for (const techniques of Object.values(TRIGRAM_TECHNIQUES)) {\n const technique = techniques.find((t) => t.id === id);\n if (technique) return technique;\n }\n return undefined;\n}\n\n/**\n * Get all techniques across all stances\n */\nexport function getAllTechniques(): readonly KoreanTechnique[] {\n return Object.values(TRIGRAM_TECHNIQUES).flat();\n}\n\n/**\n * Get total technique count\n */\nexport function getTotalTechniqueCount(): number {\n return Object.values(TRIGRAM_TECHNIQUES).reduce(\n (sum, techniques) => sum + techniques.length,\n 0\n );\n}\n\n/**\n * Get technique count by stance\n */\nexport function getTechniqueCountByStance(): Record<TrigramStance, number> {\n return {\n [TrigramStance.GEON]: GEON_TECHNIQUES.length,\n [TrigramStance.TAE]: TAE_TECHNIQUES.length,\n [TrigramStance.LI]: LI_TECHNIQUES.length,\n [TrigramStance.JIN]: JIN_TECHNIQUES.length,\n [TrigramStance.SON]: SON_TECHNIQUES.length,\n [TrigramStance.GAM]: GAM_TECHNIQUES.length,\n [TrigramStance.GAN]: GAN_TECHNIQUES.length,\n [TrigramStance.GON]: GON_TECHNIQUES.length,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4GA,IAAa,qBAGT;EACD,cAAc,OAAO;EACrB,cAAc,MAAM;EACpB,cAAc,KAAK;EACnB,cAAc,MAAM;EACpB,cAAc,MAAM;EACpB,cAAc,MAAM;EACpB,cAAc,MAAM;EACpB,cAAc,MAAM;AACvB;;;;AASA,SAAgB,sBACd,QAC4B;CAC5B,OAAO,mBAAmB,WAAW,CAAC;AACxC;;;;AAKA,SAAgB,iBAAiB,IAAyC;CACxE,KAAK,MAAM,cAAc,OAAO,OAAO,kBAAkB,GAAG;EAC1D,MAAM,YAAY,WAAW,MAAM,MAAM,EAAE,OAAO,EAAE;EACpD,IAAI,WAAW,OAAO;CACxB;AAEF;;;;AAKA,SAAgB,mBAA+C;CAC7D,OAAO,OAAO,OAAO,kBAAkB,EAAE,KAAK;AAChD;;;;AAKA,SAAgB,yBAAiC;CAC/C,OAAO,OAAO,OAAO,kBAAkB,EAAE,QACtC,KAAK,eAAe,MAAM,WAAW,QACtC,CACF;AACF;;;;AAKA,SAAgB,4BAA2D;CACzE,OAAO;GACJ,cAAc,OAAO,gBAAgB;GACrC,cAAc,MAAM,eAAe;GACnC,cAAc,KAAK,cAAc;GACjC,cAAc,MAAM,eAAe;GACnC,cAAc,MAAM,eAAe;GACnC,cAAc,MAAM,eAAe;GACnC,cAAc,MAAM,eAAe;GACnC,cAAc,MAAM,eAAe;CACtC;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"GonTechniqueExtensions.js","names":[],"sources":["../../../../src/systems/trigram/types/GonTechniqueExtensions.ts"],"sourcesContent":["/**\n * ☷ 곤 (GON) - Earth Stance Technique Extensions\n * Gon-specific metadata for authentic Ssireum/Hapkido grappling mechanics\n *\n * Extends base TrigramStanceTechnique with Earth-specific properties:\n * - Throw trajectory mechanics (던지기 궤적)\n * - Ground impact multipliers (지면 충격 배수)\n * - Grappling control duration (잡기 제어 시간)\n * - Supportive healing (대지 치유)\n * - Earth visual effects (대지 시각 효과)\n *\n * Based on authentic Korean martial arts:\n * - Ssireum (씨름) - Traditional Korean wrestling\n * - Hapkido (합기도) - Joint locks and throws\n *\n * @module GonTechniqueExtensions\n * @korean 곤괘기술확장\n */\n\nimport type { TrigramStanceTechnique, KoreanTechnique } from \"@/systems/vitalpoint\";\n\n/**\n * Throw trajectory types for Gon techniques\n * 던지기 궤적 유형\n *\n * Describes the physical path of the throw for animation and physics\n *\n * @korean 던지기궤적유형\n */\nexport type ThrowTrajectory =\n | \"arc_over_hip\" // 엉덩이 넘기기 - Over the hip rotation (classic Ssireum)\n | \"horizontal_sweep\" // 수평 쓸기 - Horizontal sweeping motion\n | \"forward_drive\" // 앞 밀어붙이기 - Forward driving takedown\n | \"vertical_slam\" // 수직 강타 - Straight down slam\n | \"circular_trip\" // 원형 걸기 - Circular tripping motion\n | \"sacrifice_arc\" // 희생 던지기 궤적 - Sacrifice throw trajectory\n | \"clinch_control\" // 잡기 제어 - Clinch/grip control (no throw)\n | \"arc_downward\" // 호 아래로 - Downward arcing throw\n | \"spiral\" // 나선형 - Spiral/twisting throw\n | \"direct_slam\"; // 직접 내리찍기 - Direct impact slam\n\n/**\n * Takedown type classification\n * 넘어뜨리기 분류\n *\n * @korean 넘어뜨리기분류\n */\nexport type TakedownType =\n | \"leg_reap\" // 다리걸기 - Leg reaping technique\n | \"hip_throw\" // 엉덩이던지기 - Hip throw technique\n | \"body_lock\" // 몸통잡기 - Body lock takedown\n | \"sacrifice\" // 희생던지기 - Sacrifice throw\n | \"slam\" // 내리찍기 - Slam/driving technique\n | \"sweep\"; // 쓸기 - Sweeping technique\n\n/**\n * Sweep direction for leg techniques\n * 쓸기 방향\n *\n * @korean 쓸기방향\n */\nexport type SweepDirection =\n | \"inward\" // 안쪽 - Inner reap (안다리걸기)\n | \"outward\" // 바깥쪽 - Outer reap (바깥다리걸기)\n | \"backwards\" // 뒤쪽 - Backwards sweep\n | \"circular\"; // 원형 - Circular sweep\n\n/**\n * Ending position after throw\n * 던지기 후 위치\n *\n * @korean 던지기후위치\n */\nexport type EndingPosition =\n | \"standing_dominant\" // 서있기 우세 - Opponent down, attacker standing\n | \"mount\" // 기마 자세 - Top mount position\n | \"side_control\" // 옆 제어 - Side control position\n | \"back_control\" // 뒤 제어 - Back control position\n | \"ground_mutual\"; // 둘 다 지면 - Both fighters on ground\n\n/**\n * Breath loss severity\n * 호흡 상실 심각도\n *\n * @korean 호흡상실심각도\n */\nexport type BreathLoss = \"mild\" | \"moderate\" | \"severe\";\n\n/**\n * Lift height for throwing techniques\n * 들어올리기 높이\n *\n * @korean 들어올리기높이\n */\nexport type LiftHeight = \"none\" | \"low\" | \"medium\" | \"high\";\n\n/**\n * Rotational power level\n * 회전력 수준\n *\n * @korean 회전력수준\n */\nexport type RotationalPower = \"low\" | \"medium\" | \"high\";\n\n/**\n * Momentum transfer level\n * 운동량 전달 수준\n *\n * @korean 운동량전달수준\n */\nexport type MomentumTransfer = \"low\" | \"medium\" | \"high\";\n\n/**\n * Setup speed for technique execution\n * 기술 준비 속도\n *\n * @korean 기술준비속도\n */\nexport type SetupSpeed = \"slow\" | \"medium\" | \"fast\";\n\n/**\n * Penetration depth for stance/level change\n * 침투 깊이\n *\n * @korean 침투깊이\n */\nexport type PenetrationDepth = \"high\" | \"medium\" | \"low\";\n\n/**\n * Extended Gon technique with Earth-specific mechanics\n * 대지 특화 기술 확장 인터페이스\n *\n * Adds authentic Ssireum/Hapkido grappling mechanics to base technique.\n * All Gon stance techniques should implement this interface.\n *\n * **Korean Martial Arts Context**:\n * - Ssireum (씨름): Traditional Korean wrestling with satba belt\n * - Hapkido (합기도): Joint locks, throws, circular motion\n *\n * **Earth Philosophy** (대지 철학):\n * \"대지는 모든 것을 품고 키운다\" - The earth embraces and nurtures all things\n *\n * @korean 확장곤괘기술\n */\nexport interface ExtendedGonTechnique extends TrigramStanceTechnique {\n // ============= CORE FIELDS (Phase 1 Implementation) =============\n\n /**\n * Physical trajectory path of the throw\n * 던지기 궤적\n *\n * Determines animation path and physics simulation\n *\n * @example \"arc_over_hip\" for traditional Ssireum throw\n * @korean 던지기궤적\n */\n throwTrajectory: ThrowTrajectory;\n\n /**\n * Ground impact damage multiplier (1.0-2.0 range)\n * 지면 충격 배수\n *\n * Multiplies base damage when opponent hits ground.\n * - 1.0-1.2: Low impact (controlled takedowns)\n * - 1.3-1.5: Medium impact (standard throws)\n * - 1.6-1.8: High impact (power throws)\n * - 1.9-2.0: Maximum impact (slams)\n *\n * **Formula**: `Final Damage = Base Damage × groundImpactMultiplier × (1 + strength_modifier)`\n *\n * @example 2.0 for 대지강타 (Ground Pound) - maximum impact\n * @korean 지면충격배수\n */\n groundImpactMultiplier: number;\n\n /**\n * Post-throw control duration in milliseconds\n * 던지기 후 제어 시간\n *\n * Duration attacker maintains positional advantage after throw.\n * Affects follow-up attack windows and defender recovery time.\n *\n * **Range**: 800ms (brief) to 2000ms (dominant)\n *\n * @example 1800 for 씨름던지기 (Ssireum Throw) - strong control\n * @korean 제어시간\n */\n controlDuration: number;\n\n /**\n * Earth's supportive healing value (0-10 scale)\n * 대지 치유 수치\n *\n * HP restored from earth connection during technique execution.\n * Based on Korean philosophy: earth nurtures all things.\n *\n * **Typical Range**: 1-6 for combat techniques\n * - 0-2: Minimal earth connection (aggressive)\n * - 3-4: Moderate earth connection (standard Ssireum)\n * - 5-6: Strong earth connection (traditional, sacrifice throws)\n * - 7-10: RESERVED for meditation/healing techniques\n *\n * **Formula**: `HP Restored = supportiveHealing × (1 + earth_affinity_stat)`\n *\n * @example 5 for 씨름던지기 - traditional technique bonus\n * @korean 대지치유\n */\n supportiveHealing: number;\n\n /**\n * Whether technique creates earth crack visual effect\n * 대지 균열 효과 여부\n *\n * If true, ground impact creates visual feedback:\n * - Earth crack patterns (Korean pottery-inspired)\n * - Dust clouds (yellow-brown 황토색)\n * - Shockwave ripples (for high impact)\n *\n * **Intensity scales with**: groundImpactMultiplier\n *\n * @example true for all throws/slams, false for clinch control\n * @korean 대지균열효과\n */\n earthCrackEffect: boolean;\n\n // ============= OPTIONAL ADVANCED FIELDS (Phase 3) =============\n\n /**\n * Requires traditional Ssireum satba belt grip\n * 샅바 잡기 필요 여부\n *\n * If true, technique uses traditional Korean wrestling belt mechanics\n *\n * @optional\n * @korean 샅바필요\n */\n satbaGripRequired?: boolean;\n\n /**\n * Cultural authenticity damage bonus\n * 전통 무술 보너스\n *\n * Damage multiplier for traditional Korean techniques\n * Rewards using authentic martial arts\n *\n * @example 1.15 (15% bonus) for 씨름던지기\n * @optional\n * @korean 전통보너스\n */\n traditionalBonus?: number;\n\n /**\n * Grip strength for escape difficulty (0-1 scale)\n * 잡기 강도\n *\n * Higher values make technique harder to escape from\n * 1.0 = unbreakable, 0.0 = no grip\n *\n * @optional\n * @korean 잡기강도\n */\n gripStrength?: number;\n\n /**\n * Takedown classification\n * 넘어뜨리기 유형\n *\n * @optional\n * @korean 넘어뜨리기유형\n */\n takedownType?: TakedownType;\n\n /**\n * Sweep direction for leg techniques\n * 쓸기 방향\n *\n * @optional\n * @korean 쓸기방향\n */\n sweepDirection?: SweepDirection;\n\n /**\n * Self-risk factor (0-1 scale)\n * 자기 위험도\n *\n * Chance of self-damage from technique (e.g., sacrifice throws)\n * 0.2 = 20% chance of taking damage yourself\n *\n * @optional\n * @korean 자기위험도\n */\n selfRisk?: number;\n\n /**\n * Counter vulnerability (0-1 scale)\n * 반격 취약성\n *\n * How easily technique can be countered during execution\n * Higher = more vulnerable to counter-attacks\n *\n * @optional\n * @korean 반격취약성\n */\n counterVulnerability?: number;\n\n /**\n * Positional outcome after technique\n * 기술 후 위치\n *\n * @optional\n * @korean 기술후위치\n */\n endingPosition?: EndingPosition;\n\n /**\n * Follow-up technique damage bonus\n * 연속 공격 보너스\n *\n * Damage multiplier for chained techniques\n *\n * @example 0.3 (30% bonus) for sacrifice throws\n * @optional\n * @korean 연속공격보너스\n */\n transitionBonus?: number;\n\n /**\n * Breath restriction level (0-1 scale)\n * 호흡 제한 수준\n *\n * How much technique restricts opponent's breathing\n * Used for body locks and compression techniques\n *\n * @optional\n * @korean 호흡제한\n */\n breathRestriction?: number;\n\n /**\n * Stun chance probability (0-1 scale)\n * 기절 확률\n *\n * Chance technique stuns opponent on impact\n *\n * @example 0.4 (40% chance) for 대지강타\n * @optional\n * @korean 기절확률\n */\n stunChance?: number;\n\n /**\n * Breath loss severity\n * 호흡 상실 심각도\n *\n * How severely technique \"knocks the wind out\"\n *\n * @optional\n * @korean 호흡상실\n */\n breathLoss?: BreathLoss;\n\n /**\n * Setup speed classification\n * 준비 속도\n *\n * @optional\n * @korean 준비속도\n */\n setupSpeed?: SetupSpeed;\n\n /**\n * Penetration depth level\n * 침투 깊이\n *\n * @optional\n * @korean 침투깊이\n */\n penetrationDepth?: PenetrationDepth;\n\n /**\n * Lift height before throw\n * 들어올리기 높이\n *\n * @optional\n * @korean 들어올리기높이\n */\n liftHeight?: LiftHeight;\n\n /**\n * Rotational power level\n * 회전력 수준\n *\n * @optional\n * @korean 회전력\n */\n rotationalPower?: RotationalPower;\n\n /**\n * Momentum transfer level\n * 운동량 전달\n *\n * @optional\n * @korean 운동량전달\n */\n momentumTransfer?: MomentumTransfer;\n}\n\n/**\n * Earth crack visual effect intensity\n * 대지 균열 시각 효과 강도\n *\n * @korean 대지균열강도\n */\nexport type EarthCrackIntensity = \"none\" | \"small\" | \"medium\" | \"large\" | \"massive\";\n\n/**\n * Calculate earth crack visual intensity based on impact\n * 충격도에 따른 대지 균열 강도 계산\n *\n * @param technique - Gon technique with impact multiplier\n * @param playerStrength - Player's strength stat modifier\n * @returns Visual effect intensity level\n *\n * @korean 대지균열강도계산\n */\nexport function calculateEarthCrackIntensity(\n technique: Pick<ExtendedGonTechnique, \"earthCrackEffect\" | \"groundImpactMultiplier\">,\n playerStrength: number,\n): EarthCrackIntensity {\n if (!technique.earthCrackEffect) return \"none\";\n\n const impactScore = technique.groundImpactMultiplier * playerStrength;\n\n if (impactScore < 1.3) return \"small\";\n if (impactScore < 1.6) return \"medium\";\n if (impactScore < 1.9) return \"large\";\n return \"massive\"; // 대지강타 with high strength = spectacular\n}\n\n/**\n * Type guard to check if technique is extended Gon technique\n * 확장 곤괘 기술 여부 확인\n *\n * Checks both field presence AND type correctness for core Gon fields.\n * For value range validation (e.g., groundImpactMultiplier 1.0-2.0),\n * use `validateGonTechniqueEnhancements()`.\n *\n * @param technique - Technique to check\n * @returns True if technique has all required Gon-specific fields with correct types\n *\n * @see validateGonTechniqueEnhancements for runtime value range validation\n * @korean 확장곤괘기술확인\n */\nexport function isExtendedGonTechnique(\n technique: TrigramStanceTechnique,\n): technique is ExtendedGonTechnique {\n const hasRequiredFields =\n \"throwTrajectory\" in technique &&\n \"groundImpactMultiplier\" in technique &&\n \"controlDuration\" in technique &&\n \"supportiveHealing\" in technique &&\n \"earthCrackEffect\" in technique;\n\n if (!hasRequiredFields) {\n return false;\n }\n\n // Runtime type checking for safety - use safer type assertion\n const candidate = technique as {\n throwTrajectory: unknown;\n groundImpactMultiplier: unknown;\n controlDuration: unknown;\n supportiveHealing: unknown;\n earthCrackEffect: unknown;\n };\n\n return (\n typeof candidate.throwTrajectory === \"string\" &&\n typeof candidate.groundImpactMultiplier === \"number\" &&\n typeof candidate.controlDuration === \"number\" &&\n typeof candidate.supportiveHealing === \"number\" &&\n typeof candidate.earthCrackEffect === \"boolean\"\n );\n}\n\n/**\n * Safely cast a technique to ExtendedGonTechnique after validation.\n * Helper function to reduce code duplication and improve type safety.\n * \n * @param technique - The technique to cast\n * @returns The technique cast as ExtendedGonTechnique, or null if not valid\n * @korean 곤기술안전변환\n */\nexport function asExtendedGonTechnique(\n technique: KoreanTechnique\n): ExtendedGonTechnique | null {\n const trigramTechnique = technique as TrigramStanceTechnique;\n if (!isExtendedGonTechnique(trigramTechnique)) {\n return null;\n }\n // Safe cast after validation\n return trigramTechnique as ExtendedGonTechnique;\n}\n\n/**\n * Validate Gon technique enhancement values\n * 곤괘 기술 강화 수치 검증\n *\n * Ensures all enhancement values are within valid ranges\n *\n * @param technique - Extended Gon technique to validate\n * @returns Validation result with errors if any\n *\n * @korean 곤괘기술검증\n */\nexport function validateGonTechniqueEnhancements(\n technique: ExtendedGonTechnique,\n): { valid: boolean; errors: string[] } {\n const errors: string[] = [];\n\n // Validate groundImpactMultiplier (1.0-2.0)\n if (\n technique.groundImpactMultiplier < 1.0 ||\n technique.groundImpactMultiplier > 2.0\n ) {\n errors.push(\n `groundImpactMultiplier must be 1.0-2.0, got ${technique.groundImpactMultiplier}`,\n );\n }\n\n // Validate controlDuration (800-2000ms)\n if (technique.controlDuration < 800 || technique.controlDuration > 2000) {\n errors.push(\n `controlDuration must be 800-2000ms, got ${technique.controlDuration}ms`,\n );\n }\n\n // Validate supportiveHealing (0-10)\n if (technique.supportiveHealing < 0 || technique.supportiveHealing > 10) {\n errors.push(\n `supportiveHealing must be 0-10, got ${technique.supportiveHealing}`,\n );\n }\n\n // Validate optional fields if present\n if (technique.gripStrength !== undefined) {\n if (technique.gripStrength < 0 || technique.gripStrength > 1) {\n errors.push(`gripStrength must be 0-1, got ${technique.gripStrength}`);\n }\n }\n\n if (technique.selfRisk !== undefined) {\n if (technique.selfRisk < 0 || technique.selfRisk > 1) {\n errors.push(`selfRisk must be 0-1, got ${technique.selfRisk}`);\n }\n }\n\n if (technique.traditionalBonus !== undefined) {\n if (technique.traditionalBonus < 1.0 || technique.traditionalBonus > 2.0) {\n errors.push(\n `traditionalBonus must be 1.0-2.0, got ${technique.traditionalBonus}`,\n );\n }\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n}\n\n/**\n * Earth philosophy constants\n * 대지 철학 상수\n *\n * @korean 대지철학상수\n */\nexport const EARTH_PHILOSOPHY = {\n /**\n * Korean philosophy: \"The earth embraces and nurtures all things\"\n * 대지는 모든 것을 품고 키운다\n */\n CORE_PRINCIPLE: {\n korean: \"대지는 모든 것을 품고 키운다\",\n romanized: \"Daeji-neun modeun geoseul pumgo kiwinda\",\n english: \"The earth embraces and nurtures all things\",\n },\n\n /**\n * Grounding effect (접지 효과)\n * Physical earth contact provides regeneration\n */\n GROUNDING_EFFECT: {\n korean: \"접지 효과\",\n romanized: \"Jeobji Hyogwa\",\n english: \"Grounding Effect\",\n },\n\n /**\n * Earth's embrace (대지의 포옹)\n * Low stance connection provides stamina recovery\n */\n EARTH_EMBRACE: {\n korean: \"대지의 포옹\",\n romanized: \"Daeji-ui Po-ong\",\n english: \"Earth's Embrace\",\n },\n\n /**\n * Nurturing recovery (양육 회복)\n * Post-throw earth contact provides healing\n */\n NURTURING_RECOVERY: {\n korean: \"양육 회복\",\n romanized: \"Yangnyuk Hoibok\",\n english: \"Nurturing Recovery\",\n },\n} as const;\n\n/**\n * Ssireum cultural context\n * 씨름 문화 배경\n *\n * @korean 씨름문화\n */\nexport const SSIREUM_CONTEXT = {\n /**\n * UNESCO Intangible Cultural Heritage (2018)\n */\n UNESCO_STATUS: {\n year: 2018,\n category: \"Intangible Cultural Heritage of Humanity\",\n },\n\n /**\n * Traditional Ssireum equipment\n */\n EQUIPMENT: {\n /**\n * Satba - fabric belt wrapped around waist and thigh\n * 샅바 - 허리와 넓적다리에 감는 천 띠\n */\n SATBA: {\n korean: \"샅바\",\n romanized: \"Satba\",\n english: \"Traditional wrestling belt\",\n description:\n \"Fabric belt wrapped around waist and right thigh for grip techniques\",\n },\n\n /**\n * Morae-pan - sand circle arena\n * 모래판 - 모래 경기장\n */\n ARENA: {\n korean: \"모래판\",\n romanized: \"Morae-pan\",\n english: \"Sand circle arena\",\n diameter: \"8.5m\",\n },\n },\n\n /**\n * Key Ssireum principles\n */\n PRINCIPLES: {\n POWER_TRANSMISSION: {\n korean: \"힘의 전달\",\n romanized: \"Him-ui Jeontal\",\n english: \"Power transmission through hips\",\n },\n CENTER_CONTROL: {\n korean: \"중심 잡기\",\n romanized: \"Jungsim Japgi\",\n english: \"Controlling opponent's center of gravity\",\n },\n EARTH_CONNECTION: {\n korean: \"대지와의 연결\",\n romanized: \"Daeji-wa-ui Yeongyeol\",\n english: \"Connection with earth for power\",\n },\n },\n} as const;\n"],"mappings":";;;;;;;;;;;;;;;AAqcA,SAAgB,uBACd,WACmC;CAQnC,IAAI,EANF,qBAAqB,aACrB,4BAA4B,aAC5B,qBAAqB,aACrB,uBAAuB,aACvB,sBAAsB,YAGtB,OAAO;CAIT,MAAM,YAAY;CAQlB,OACE,OAAO,UAAU,oBAAoB,YACrC,OAAO,UAAU,2BAA2B,YAC5C,OAAO,UAAU,oBAAoB,YACrC,OAAO,UAAU,sBAAsB,YACvC,OAAO,UAAU,qBAAqB;;;;;;;;;;AAY1C,SAAgB,uBACd,WAC6B;CAC7B,MAAM,mBAAmB;CACzB,IAAI,CAAC,uBAAuB,iBAAiB,EAC3C,OAAO;CAGT,OAAO"}
1
+ {"version":3,"file":"GonTechniqueExtensions.js","names":[],"sources":["../../../../src/systems/trigram/types/GonTechniqueExtensions.ts"],"sourcesContent":["/**\n * ☷ 곤 (GON) - Earth Stance Technique Extensions\n * Gon-specific metadata for authentic Ssireum/Hapkido grappling mechanics\n *\n * Extends base TrigramStanceTechnique with Earth-specific properties:\n * - Throw trajectory mechanics (던지기 궤적)\n * - Ground impact multipliers (지면 충격 배수)\n * - Grappling control duration (잡기 제어 시간)\n * - Supportive healing (대지 치유)\n * - Earth visual effects (대지 시각 효과)\n *\n * Based on authentic Korean martial arts:\n * - Ssireum (씨름) - Traditional Korean wrestling\n * - Hapkido (합기도) - Joint locks and throws\n *\n * @module GonTechniqueExtensions\n * @korean 곤괘기술확장\n */\n\nimport type { TrigramStanceTechnique, KoreanTechnique } from \"@/systems/vitalpoint\";\n\n/**\n * Throw trajectory types for Gon techniques\n * 던지기 궤적 유형\n *\n * Describes the physical path of the throw for animation and physics\n *\n * @korean 던지기궤적유형\n */\nexport type ThrowTrajectory =\n | \"arc_over_hip\" // 엉덩이 넘기기 - Over the hip rotation (classic Ssireum)\n | \"horizontal_sweep\" // 수평 쓸기 - Horizontal sweeping motion\n | \"forward_drive\" // 앞 밀어붙이기 - Forward driving takedown\n | \"vertical_slam\" // 수직 강타 - Straight down slam\n | \"circular_trip\" // 원형 걸기 - Circular tripping motion\n | \"sacrifice_arc\" // 희생 던지기 궤적 - Sacrifice throw trajectory\n | \"clinch_control\" // 잡기 제어 - Clinch/grip control (no throw)\n | \"arc_downward\" // 호 아래로 - Downward arcing throw\n | \"spiral\" // 나선형 - Spiral/twisting throw\n | \"direct_slam\"; // 직접 내리찍기 - Direct impact slam\n\n/**\n * Takedown type classification\n * 넘어뜨리기 분류\n *\n * @korean 넘어뜨리기분류\n */\nexport type TakedownType =\n | \"leg_reap\" // 다리걸기 - Leg reaping technique\n | \"hip_throw\" // 엉덩이던지기 - Hip throw technique\n | \"body_lock\" // 몸통잡기 - Body lock takedown\n | \"sacrifice\" // 희생던지기 - Sacrifice throw\n | \"slam\" // 내리찍기 - Slam/driving technique\n | \"sweep\"; // 쓸기 - Sweeping technique\n\n/**\n * Sweep direction for leg techniques\n * 쓸기 방향\n *\n * @korean 쓸기방향\n */\nexport type SweepDirection =\n | \"inward\" // 안쪽 - Inner reap (안다리걸기)\n | \"outward\" // 바깥쪽 - Outer reap (바깥다리걸기)\n | \"backwards\" // 뒤쪽 - Backwards sweep\n | \"circular\"; // 원형 - Circular sweep\n\n/**\n * Ending position after throw\n * 던지기 후 위치\n *\n * @korean 던지기후위치\n */\nexport type EndingPosition =\n | \"standing_dominant\" // 서있기 우세 - Opponent down, attacker standing\n | \"mount\" // 기마 자세 - Top mount position\n | \"side_control\" // 옆 제어 - Side control position\n | \"back_control\" // 뒤 제어 - Back control position\n | \"ground_mutual\"; // 둘 다 지면 - Both fighters on ground\n\n/**\n * Breath loss severity\n * 호흡 상실 심각도\n *\n * @korean 호흡상실심각도\n */\nexport type BreathLoss = \"mild\" | \"moderate\" | \"severe\";\n\n/**\n * Lift height for throwing techniques\n * 들어올리기 높이\n *\n * @korean 들어올리기높이\n */\nexport type LiftHeight = \"none\" | \"low\" | \"medium\" | \"high\";\n\n/**\n * Rotational power level\n * 회전력 수준\n *\n * @korean 회전력수준\n */\nexport type RotationalPower = \"low\" | \"medium\" | \"high\";\n\n/**\n * Momentum transfer level\n * 운동량 전달 수준\n *\n * @korean 운동량전달수준\n */\nexport type MomentumTransfer = \"low\" | \"medium\" | \"high\";\n\n/**\n * Setup speed for technique execution\n * 기술 준비 속도\n *\n * @korean 기술준비속도\n */\nexport type SetupSpeed = \"slow\" | \"medium\" | \"fast\";\n\n/**\n * Penetration depth for stance/level change\n * 침투 깊이\n *\n * @korean 침투깊이\n */\nexport type PenetrationDepth = \"high\" | \"medium\" | \"low\";\n\n/**\n * Extended Gon technique with Earth-specific mechanics\n * 대지 특화 기술 확장 인터페이스\n *\n * Adds authentic Ssireum/Hapkido grappling mechanics to base technique.\n * All Gon stance techniques should implement this interface.\n *\n * **Korean Martial Arts Context**:\n * - Ssireum (씨름): Traditional Korean wrestling with satba belt\n * - Hapkido (합기도): Joint locks, throws, circular motion\n *\n * **Earth Philosophy** (대지 철학):\n * \"대지는 모든 것을 품고 키운다\" - The earth embraces and nurtures all things\n *\n * @korean 확장곤괘기술\n */\nexport interface ExtendedGonTechnique extends TrigramStanceTechnique {\n // ============= CORE FIELDS (Phase 1 Implementation) =============\n\n /**\n * Physical trajectory path of the throw\n * 던지기 궤적\n *\n * Determines animation path and physics simulation\n *\n * @example \"arc_over_hip\" for traditional Ssireum throw\n * @korean 던지기궤적\n */\n throwTrajectory: ThrowTrajectory;\n\n /**\n * Ground impact damage multiplier (1.0-2.0 range)\n * 지면 충격 배수\n *\n * Multiplies base damage when opponent hits ground.\n * - 1.0-1.2: Low impact (controlled takedowns)\n * - 1.3-1.5: Medium impact (standard throws)\n * - 1.6-1.8: High impact (power throws)\n * - 1.9-2.0: Maximum impact (slams)\n *\n * **Formula**: `Final Damage = Base Damage × groundImpactMultiplier × (1 + strength_modifier)`\n *\n * @example 2.0 for 대지강타 (Ground Pound) - maximum impact\n * @korean 지면충격배수\n */\n groundImpactMultiplier: number;\n\n /**\n * Post-throw control duration in milliseconds\n * 던지기 후 제어 시간\n *\n * Duration attacker maintains positional advantage after throw.\n * Affects follow-up attack windows and defender recovery time.\n *\n * **Range**: 800ms (brief) to 2000ms (dominant)\n *\n * @example 1800 for 씨름던지기 (Ssireum Throw) - strong control\n * @korean 제어시간\n */\n controlDuration: number;\n\n /**\n * Earth's supportive healing value (0-10 scale)\n * 대지 치유 수치\n *\n * HP restored from earth connection during technique execution.\n * Based on Korean philosophy: earth nurtures all things.\n *\n * **Typical Range**: 1-6 for combat techniques\n * - 0-2: Minimal earth connection (aggressive)\n * - 3-4: Moderate earth connection (standard Ssireum)\n * - 5-6: Strong earth connection (traditional, sacrifice throws)\n * - 7-10: RESERVED for meditation/healing techniques\n *\n * **Formula**: `HP Restored = supportiveHealing × (1 + earth_affinity_stat)`\n *\n * @example 5 for 씨름던지기 - traditional technique bonus\n * @korean 대지치유\n */\n supportiveHealing: number;\n\n /**\n * Whether technique creates earth crack visual effect\n * 대지 균열 효과 여부\n *\n * If true, ground impact creates visual feedback:\n * - Earth crack patterns (Korean pottery-inspired)\n * - Dust clouds (yellow-brown 황토색)\n * - Shockwave ripples (for high impact)\n *\n * **Intensity scales with**: groundImpactMultiplier\n *\n * @example true for all throws/slams, false for clinch control\n * @korean 대지균열효과\n */\n earthCrackEffect: boolean;\n\n // ============= OPTIONAL ADVANCED FIELDS (Phase 3) =============\n\n /**\n * Requires traditional Ssireum satba belt grip\n * 샅바 잡기 필요 여부\n *\n * If true, technique uses traditional Korean wrestling belt mechanics\n *\n * @optional\n * @korean 샅바필요\n */\n satbaGripRequired?: boolean;\n\n /**\n * Cultural authenticity damage bonus\n * 전통 무술 보너스\n *\n * Damage multiplier for traditional Korean techniques\n * Rewards using authentic martial arts\n *\n * @example 1.15 (15% bonus) for 씨름던지기\n * @optional\n * @korean 전통보너스\n */\n traditionalBonus?: number;\n\n /**\n * Grip strength for escape difficulty (0-1 scale)\n * 잡기 강도\n *\n * Higher values make technique harder to escape from\n * 1.0 = unbreakable, 0.0 = no grip\n *\n * @optional\n * @korean 잡기강도\n */\n gripStrength?: number;\n\n /**\n * Takedown classification\n * 넘어뜨리기 유형\n *\n * @optional\n * @korean 넘어뜨리기유형\n */\n takedownType?: TakedownType;\n\n /**\n * Sweep direction for leg techniques\n * 쓸기 방향\n *\n * @optional\n * @korean 쓸기방향\n */\n sweepDirection?: SweepDirection;\n\n /**\n * Self-risk factor (0-1 scale)\n * 자기 위험도\n *\n * Chance of self-damage from technique (e.g., sacrifice throws)\n * 0.2 = 20% chance of taking damage yourself\n *\n * @optional\n * @korean 자기위험도\n */\n selfRisk?: number;\n\n /**\n * Counter vulnerability (0-1 scale)\n * 반격 취약성\n *\n * How easily technique can be countered during execution\n * Higher = more vulnerable to counter-attacks\n *\n * @optional\n * @korean 반격취약성\n */\n counterVulnerability?: number;\n\n /**\n * Positional outcome after technique\n * 기술 후 위치\n *\n * @optional\n * @korean 기술후위치\n */\n endingPosition?: EndingPosition;\n\n /**\n * Follow-up technique damage bonus\n * 연속 공격 보너스\n *\n * Damage multiplier for chained techniques\n *\n * @example 0.3 (30% bonus) for sacrifice throws\n * @optional\n * @korean 연속공격보너스\n */\n transitionBonus?: number;\n\n /**\n * Breath restriction level (0-1 scale)\n * 호흡 제한 수준\n *\n * How much technique restricts opponent's breathing\n * Used for body locks and compression techniques\n *\n * @optional\n * @korean 호흡제한\n */\n breathRestriction?: number;\n\n /**\n * Stun chance probability (0-1 scale)\n * 기절 확률\n *\n * Chance technique stuns opponent on impact\n *\n * @example 0.4 (40% chance) for 대지강타\n * @optional\n * @korean 기절확률\n */\n stunChance?: number;\n\n /**\n * Breath loss severity\n * 호흡 상실 심각도\n *\n * How severely technique \"knocks the wind out\"\n *\n * @optional\n * @korean 호흡상실\n */\n breathLoss?: BreathLoss;\n\n /**\n * Setup speed classification\n * 준비 속도\n *\n * @optional\n * @korean 준비속도\n */\n setupSpeed?: SetupSpeed;\n\n /**\n * Penetration depth level\n * 침투 깊이\n *\n * @optional\n * @korean 침투깊이\n */\n penetrationDepth?: PenetrationDepth;\n\n /**\n * Lift height before throw\n * 들어올리기 높이\n *\n * @optional\n * @korean 들어올리기높이\n */\n liftHeight?: LiftHeight;\n\n /**\n * Rotational power level\n * 회전력 수준\n *\n * @optional\n * @korean 회전력\n */\n rotationalPower?: RotationalPower;\n\n /**\n * Momentum transfer level\n * 운동량 전달\n *\n * @optional\n * @korean 운동량전달\n */\n momentumTransfer?: MomentumTransfer;\n}\n\n/**\n * Earth crack visual effect intensity\n * 대지 균열 시각 효과 강도\n *\n * @korean 대지균열강도\n */\nexport type EarthCrackIntensity = \"none\" | \"small\" | \"medium\" | \"large\" | \"massive\";\n\n/**\n * Calculate earth crack visual intensity based on impact\n * 충격도에 따른 대지 균열 강도 계산\n *\n * @param technique - Gon technique with impact multiplier\n * @param playerStrength - Player's strength stat modifier\n * @returns Visual effect intensity level\n *\n * @korean 대지균열강도계산\n */\nexport function calculateEarthCrackIntensity(\n technique: Pick<ExtendedGonTechnique, \"earthCrackEffect\" | \"groundImpactMultiplier\">,\n playerStrength: number,\n): EarthCrackIntensity {\n if (!technique.earthCrackEffect) return \"none\";\n\n const impactScore = technique.groundImpactMultiplier * playerStrength;\n\n if (impactScore < 1.3) return \"small\";\n if (impactScore < 1.6) return \"medium\";\n if (impactScore < 1.9) return \"large\";\n return \"massive\"; // 대지강타 with high strength = spectacular\n}\n\n/**\n * Type guard to check if technique is extended Gon technique\n * 확장 곤괘 기술 여부 확인\n *\n * Checks both field presence AND type correctness for core Gon fields.\n * For value range validation (e.g., groundImpactMultiplier 1.0-2.0),\n * use `validateGonTechniqueEnhancements()`.\n *\n * @param technique - Technique to check\n * @returns True if technique has all required Gon-specific fields with correct types\n *\n * @see validateGonTechniqueEnhancements for runtime value range validation\n * @korean 확장곤괘기술확인\n */\nexport function isExtendedGonTechnique(\n technique: TrigramStanceTechnique,\n): technique is ExtendedGonTechnique {\n const hasRequiredFields =\n \"throwTrajectory\" in technique &&\n \"groundImpactMultiplier\" in technique &&\n \"controlDuration\" in technique &&\n \"supportiveHealing\" in technique &&\n \"earthCrackEffect\" in technique;\n\n if (!hasRequiredFields) {\n return false;\n }\n\n // Runtime type checking for safety - use safer type assertion\n const candidate = technique as {\n throwTrajectory: unknown;\n groundImpactMultiplier: unknown;\n controlDuration: unknown;\n supportiveHealing: unknown;\n earthCrackEffect: unknown;\n };\n\n return (\n typeof candidate.throwTrajectory === \"string\" &&\n typeof candidate.groundImpactMultiplier === \"number\" &&\n typeof candidate.controlDuration === \"number\" &&\n typeof candidate.supportiveHealing === \"number\" &&\n typeof candidate.earthCrackEffect === \"boolean\"\n );\n}\n\n/**\n * Safely cast a technique to ExtendedGonTechnique after validation.\n * Helper function to reduce code duplication and improve type safety.\n * \n * @param technique - The technique to cast\n * @returns The technique cast as ExtendedGonTechnique, or null if not valid\n * @korean 곤기술안전변환\n */\nexport function asExtendedGonTechnique(\n technique: KoreanTechnique\n): ExtendedGonTechnique | null {\n const trigramTechnique = technique as TrigramStanceTechnique;\n if (!isExtendedGonTechnique(trigramTechnique)) {\n return null;\n }\n // Safe cast after validation\n return trigramTechnique as ExtendedGonTechnique;\n}\n\n/**\n * Validate Gon technique enhancement values\n * 곤괘 기술 강화 수치 검증\n *\n * Ensures all enhancement values are within valid ranges\n *\n * @param technique - Extended Gon technique to validate\n * @returns Validation result with errors if any\n *\n * @korean 곤괘기술검증\n */\nexport function validateGonTechniqueEnhancements(\n technique: ExtendedGonTechnique,\n): { valid: boolean; errors: string[] } {\n const errors: string[] = [];\n\n // Validate groundImpactMultiplier (1.0-2.0)\n if (\n technique.groundImpactMultiplier < 1.0 ||\n technique.groundImpactMultiplier > 2.0\n ) {\n errors.push(\n `groundImpactMultiplier must be 1.0-2.0, got ${technique.groundImpactMultiplier}`,\n );\n }\n\n // Validate controlDuration (800-2000ms)\n if (technique.controlDuration < 800 || technique.controlDuration > 2000) {\n errors.push(\n `controlDuration must be 800-2000ms, got ${technique.controlDuration}ms`,\n );\n }\n\n // Validate supportiveHealing (0-10)\n if (technique.supportiveHealing < 0 || technique.supportiveHealing > 10) {\n errors.push(\n `supportiveHealing must be 0-10, got ${technique.supportiveHealing}`,\n );\n }\n\n // Validate optional fields if present\n if (technique.gripStrength !== undefined) {\n if (technique.gripStrength < 0 || technique.gripStrength > 1) {\n errors.push(`gripStrength must be 0-1, got ${technique.gripStrength}`);\n }\n }\n\n if (technique.selfRisk !== undefined) {\n if (technique.selfRisk < 0 || technique.selfRisk > 1) {\n errors.push(`selfRisk must be 0-1, got ${technique.selfRisk}`);\n }\n }\n\n if (technique.traditionalBonus !== undefined) {\n if (technique.traditionalBonus < 1.0 || technique.traditionalBonus > 2.0) {\n errors.push(\n `traditionalBonus must be 1.0-2.0, got ${technique.traditionalBonus}`,\n );\n }\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n}\n\n/**\n * Earth philosophy constants\n * 대지 철학 상수\n *\n * @korean 대지철학상수\n */\nexport const EARTH_PHILOSOPHY = {\n /**\n * Korean philosophy: \"The earth embraces and nurtures all things\"\n * 대지는 모든 것을 품고 키운다\n */\n CORE_PRINCIPLE: {\n korean: \"대지는 모든 것을 품고 키운다\",\n romanized: \"Daeji-neun modeun geoseul pumgo kiwinda\",\n english: \"The earth embraces and nurtures all things\",\n },\n\n /**\n * Grounding effect (접지 효과)\n * Physical earth contact provides regeneration\n */\n GROUNDING_EFFECT: {\n korean: \"접지 효과\",\n romanized: \"Jeobji Hyogwa\",\n english: \"Grounding Effect\",\n },\n\n /**\n * Earth's embrace (대지의 포옹)\n * Low stance connection provides stamina recovery\n */\n EARTH_EMBRACE: {\n korean: \"대지의 포옹\",\n romanized: \"Daeji-ui Po-ong\",\n english: \"Earth's Embrace\",\n },\n\n /**\n * Nurturing recovery (양육 회복)\n * Post-throw earth contact provides healing\n */\n NURTURING_RECOVERY: {\n korean: \"양육 회복\",\n romanized: \"Yangnyuk Hoibok\",\n english: \"Nurturing Recovery\",\n },\n} as const;\n\n/**\n * Ssireum cultural context\n * 씨름 문화 배경\n *\n * @korean 씨름문화\n */\nexport const SSIREUM_CONTEXT = {\n /**\n * UNESCO Intangible Cultural Heritage (2018)\n */\n UNESCO_STATUS: {\n year: 2018,\n category: \"Intangible Cultural Heritage of Humanity\",\n },\n\n /**\n * Traditional Ssireum equipment\n */\n EQUIPMENT: {\n /**\n * Satba - fabric belt wrapped around waist and thigh\n * 샅바 - 허리와 넓적다리에 감는 천 띠\n */\n SATBA: {\n korean: \"샅바\",\n romanized: \"Satba\",\n english: \"Traditional wrestling belt\",\n description:\n \"Fabric belt wrapped around waist and right thigh for grip techniques\",\n },\n\n /**\n * Morae-pan - sand circle arena\n * 모래판 - 모래 경기장\n */\n ARENA: {\n korean: \"모래판\",\n romanized: \"Morae-pan\",\n english: \"Sand circle arena\",\n diameter: \"8.5m\",\n },\n },\n\n /**\n * Key Ssireum principles\n */\n PRINCIPLES: {\n POWER_TRANSMISSION: {\n korean: \"힘의 전달\",\n romanized: \"Him-ui Jeontal\",\n english: \"Power transmission through hips\",\n },\n CENTER_CONTROL: {\n korean: \"중심 잡기\",\n romanized: \"Jungsim Japgi\",\n english: \"Controlling opponent's center of gravity\",\n },\n EARTH_CONNECTION: {\n korean: \"대지와의 연결\",\n romanized: \"Daeji-wa-ui Yeongyeol\",\n english: \"Connection with earth for power\",\n },\n },\n} as const;\n"],"mappings":";;;;;;;;;;;;;;;AAqcA,SAAgB,uBACd,WACmC;CAQnC,IAAI,EANF,qBAAqB,aACrB,4BAA4B,aAC5B,qBAAqB,aACrB,uBAAuB,aACvB,sBAAsB,YAGtB,OAAO;CAIT,MAAM,YAAY;CAQlB,OACE,OAAO,UAAU,oBAAoB,YACrC,OAAO,UAAU,2BAA2B,YAC5C,OAAO,UAAU,oBAAoB,YACrC,OAAO,UAAU,sBAAsB,YACvC,OAAO,UAAU,qBAAqB;AAE1C;;;;;;;;;AAUA,SAAgB,uBACd,WAC6B;CAC7B,MAAM,mBAAmB;CACzB,IAAI,CAAC,uBAAuB,gBAAgB,GAC1C,OAAO;CAGT,OAAO;AACT"}