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.
- package/lib/App2.js.map +1 -1
- package/lib/audio/AudioAssetLoader.js.map +1 -1
- package/lib/audio/AudioAssetRegistry.js.map +1 -1
- package/lib/audio/AudioCache.js.map +1 -1
- package/lib/audio/AudioManager.js.map +1 -1
- package/lib/audio/AudioMonitor.js.map +1 -1
- package/lib/audio/AudioPool.js.map +1 -1
- package/lib/audio/AudioProvider.js.map +1 -1
- package/lib/audio/AudioUtils.js.map +1 -1
- package/lib/audio/BoneImpactAudioMap.js.map +1 -1
- package/lib/audio/VariantSelector.js.map +1 -1
- package/lib/audio/types.js.map +1 -1
- package/lib/components/screens/combat/CombatScreen3D.d.ts.map +1 -1
- package/lib/components/screens/combat/CombatScreen3D.js +29 -25
- package/lib/components/screens/combat/CombatScreen3D.js.map +1 -1
- package/lib/components/screens/combat/components/controls/CombatButtons.js.map +1 -1
- package/lib/components/screens/combat/components/controls/CombatControlsPanel.js.map +1 -1
- package/lib/components/screens/combat/components/controls/ControlsGuide.js.map +1 -1
- package/lib/components/screens/combat/components/controls/KeyboardHints.js.map +1 -1
- package/lib/components/screens/combat/components/controls/PauseMenu.js.map +1 -1
- package/lib/components/screens/combat/components/controls/PauseMenuButton.js.map +1 -1
- package/lib/components/screens/combat/components/controls/QuickSettings.js.map +1 -1
- package/lib/components/screens/combat/components/effects/BloodDecals3D.js.map +1 -1
- package/lib/components/screens/combat/components/effects/BloodLossOverlayHtml.js.map +1 -1
- package/lib/components/screens/combat/components/effects/BloodParticles3D.js.map +1 -1
- package/lib/components/screens/combat/components/effects/BloodViscosity3D.js.map +1 -1
- package/lib/components/screens/combat/components/effects/CombatParticleEffects3D.js.map +1 -1
- package/lib/components/screens/combat/components/effects/ConsciousnessBlur.js.map +1 -1
- package/lib/components/screens/combat/components/effects/InternalDamage3D.js.map +1 -1
- package/lib/components/screens/combat/components/effects/PainVignette.js.map +1 -1
- package/lib/components/screens/combat/components/effects/ParticleAudio3D.js.map +1 -1
- package/lib/components/screens/combat/components/effects/TraumaOverlay3D.js.map +1 -1
- package/lib/components/screens/combat/components/feedback/MatchCountdown.js.map +1 -1
- package/lib/components/screens/combat/components/feedback/RoundAnnouncementOverlayHtml.js.map +1 -1
- package/lib/components/screens/combat/components/feedback/RoundDisplayStatus.js.map +1 -1
- package/lib/components/screens/combat/components/feedback/RoundStartAnnouncementOverlayHtml.js.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatBottomHUD.d.ts.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatBottomHUD.js +2 -2
- package/lib/components/screens/combat/components/hud/CombatBottomHUD.js.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatLeftHUD.js.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatPortraitStatusStrip.js +1 -1
- package/lib/components/screens/combat/components/hud/CombatPortraitStatusStrip.js.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatRightHUD.js.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatTopHUD.d.ts.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatTopHUD.js +2 -1
- package/lib/components/screens/combat/components/hud/CombatTopHUD.js.map +1 -1
- package/lib/components/screens/combat/components/hud/DifficultyIndicator.js.map +1 -1
- package/lib/components/screens/combat/components/hud/FPSMonitor.js.map +1 -1
- package/lib/components/screens/combat/components/hud/MobileControlsWrapper.js.map +1 -1
- package/lib/components/screens/combat/components/hud/PlayerStateOverlayHtml.js.map +1 -1
- package/lib/components/screens/combat/components/indicators/BalanceIndicator.js.map +1 -1
- package/lib/components/screens/combat/components/indicators/InputBufferDisplay.js.map +1 -1
- package/lib/components/screens/combat/components/indicators/StaminaWarning.js.map +1 -1
- package/lib/components/screens/combat/components/indicators/TechniqueNameDisplay.js.map +1 -1
- package/lib/components/screens/combat/helpers/AnimationUpdater.d.ts.map +1 -1
- package/lib/components/screens/combat/helpers/AnimationUpdater.js +4 -2
- package/lib/components/screens/combat/helpers/AnimationUpdater.js.map +1 -1
- package/lib/components/screens/combat/helpers/combatHelpers.js.map +1 -1
- package/lib/components/screens/combat/hooks/useAICombat.js.map +1 -1
- package/lib/components/screens/combat/hooks/useCombatActions.js.map +1 -1
- package/lib/components/screens/combat/hooks/useCombatAttackMovement.js.map +1 -1
- package/lib/components/screens/combat/hooks/useCombatAudio.js.map +1 -1
- package/lib/components/screens/combat/hooks/useCombatLayout.d.ts.map +1 -1
- package/lib/components/screens/combat/hooks/useCombatLayout.js +11 -5
- package/lib/components/screens/combat/hooks/useCombatLayout.js.map +1 -1
- package/lib/components/screens/combat/hooks/useCombatState.js.map +1 -1
- package/lib/components/screens/controls/ControlsScreen3D.js +1 -1
- package/lib/components/screens/controls/ControlsScreen3D.js.map +1 -1
- package/lib/components/screens/controls/components/ControlBindingsOverlayHtml.js.map +1 -1
- package/lib/components/screens/controls/components/ControlCategoryTabsOverlayHtml.js.map +1 -1
- package/lib/components/screens/controls/components/GamepadVisualization3D.js.map +1 -1
- package/lib/components/screens/controls/components/InteractiveControlDemoOverlayHtml.js.map +1 -1
- package/lib/components/screens/controls/components/Key3D.js.map +1 -1
- package/lib/components/screens/controls/components/VisualKeyboard3D.js.map +1 -1
- package/lib/components/screens/controls/constants/ControlsConstants.js.map +1 -1
- package/lib/components/screens/controls/hooks/useControlsState.js.map +1 -1
- package/lib/components/screens/endscreen/EndScreen3D.js.map +1 -1
- package/lib/components/screens/endscreen/components/DefeatAnimation3D.js.map +1 -1
- package/lib/components/screens/endscreen/components/MatchStatisticsDisplayOverlayHtml.js.map +1 -1
- package/lib/components/screens/endscreen/components/NavigationButtonsOverlayHtml.js.map +1 -1
- package/lib/components/screens/endscreen/components/PerformanceBreakdownOverlayHtml.js.map +1 -1
- package/lib/components/screens/endscreen/components/PerformanceRatingOverlayHtml.js.map +1 -1
- package/lib/components/screens/endscreen/components/VictoryAnimation3D.js.map +1 -1
- package/lib/components/screens/endscreen/components/WinnerDisplayOverlayHtml.js.map +1 -1
- package/lib/components/screens/intro/IntroScreen3D.js +1 -1
- package/lib/components/screens/intro/IntroScreen3D.js.map +1 -1
- package/lib/components/screens/intro/components/AbilityListOverlayHtml.js.map +1 -1
- package/lib/components/screens/intro/components/ArchetypeCardGridOverlayHtml.js.map +1 -1
- package/lib/components/screens/intro/components/ArchetypeCardOverlayHtml.js.map +1 -1
- package/lib/components/screens/intro/components/ArchetypeDisplayOverlayHtml.js.map +1 -1
- package/lib/components/screens/intro/components/EnhancedArchetypeDisplayOverlayHtml.js.map +1 -1
- package/lib/components/screens/intro/components/MenuButtonsOverlayHtml.js.map +1 -1
- package/lib/components/screens/intro/components/MenuSectionOverlayHtml.js.map +1 -1
- package/lib/components/screens/intro/components/StatBarOverlayHtml.js.map +1 -1
- package/lib/components/screens/philosophy/PhilosophyScreen3D.js +1 -1
- package/lib/components/screens/philosophy/PhilosophyScreen3D.js.map +1 -1
- package/lib/components/screens/training/TrainingScreen3D.d.ts.map +1 -1
- package/lib/components/screens/training/TrainingScreen3D.js +3 -11
- package/lib/components/screens/training/TrainingScreen3D.js.map +1 -1
- package/lib/components/screens/training/components/AnatomyControlsOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/AnatomyOverlay3D.js.map +1 -1
- package/lib/components/screens/training/components/FootPlacementMarkers3D.js.map +1 -1
- package/lib/components/screens/training/components/FootworkDrillsOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/HitFeedbackEffect3D.js.map +1 -1
- package/lib/components/screens/training/components/TrainingButtonsOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/TrainingControlsOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/TrainingDummy3D.js.map +1 -1
- package/lib/components/screens/training/components/TrainingFeedbackOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/TrainingModeSelectorOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/TrainingStatsOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/VitalPointMarker3D.js.map +1 -1
- package/lib/components/screens/training/components/VitalPointTrainingOverlayHtml.js.map +1 -1
- package/lib/components/screens/training/components/hud/TrainingBottomHUD.d.ts.map +1 -1
- package/lib/components/screens/training/components/hud/TrainingBottomHUD.js +2 -2
- package/lib/components/screens/training/components/hud/TrainingBottomHUD.js.map +1 -1
- package/lib/components/screens/training/components/hud/TrainingLeftHUD.js.map +1 -1
- package/lib/components/screens/training/components/hud/TrainingRightHUD.js.map +1 -1
- package/lib/components/screens/training/components/hud/TrainingTopHUD.js.map +1 -1
- package/lib/components/screens/training/hooks/useAttackMovement.js.map +1 -1
- package/lib/components/screens/training/hooks/useTrainingActions.d.ts +1 -0
- package/lib/components/screens/training/hooks/useTrainingActions.d.ts.map +1 -1
- package/lib/components/screens/training/hooks/useTrainingActions.js +6 -4
- package/lib/components/screens/training/hooks/useTrainingActions.js.map +1 -1
- package/lib/components/screens/training/hooks/useTrainingLayout.d.ts.map +1 -1
- package/lib/components/screens/training/hooks/useTrainingLayout.js +11 -5
- package/lib/components/screens/training/hooks/useTrainingLayout.js.map +1 -1
- package/lib/components/screens/training/hooks/useTrainingState.js.map +1 -1
- package/lib/components/shared/base/BaseButton.js.map +1 -1
- package/lib/components/shared/base/BaseButtonOverlayHtml.js.map +1 -1
- package/lib/components/shared/base/BasePanel.js.map +1 -1
- package/lib/components/shared/base/BaseText.js.map +1 -1
- package/lib/components/shared/base/useKoreanTheme.js.map +1 -1
- package/lib/components/shared/debug/PerformanceDebugOverlayHtml.js.map +1 -1
- package/lib/components/shared/mobile/ActionButtons.js.map +1 -1
- package/lib/components/shared/mobile/GestureRecognizerPure.js.map +1 -1
- package/lib/components/shared/mobile/HapticController.js.map +1 -1
- package/lib/components/shared/mobile/MobileControlsPure.js.map +1 -1
- package/lib/components/shared/mobile/StanceWheelPure.js.map +1 -1
- package/lib/components/shared/mobile/TouchOptimizer.js.map +1 -1
- package/lib/components/shared/mobile/VirtualDPad.js.map +1 -1
- package/lib/components/shared/three/anatomy/BodySurface.js.map +1 -1
- package/lib/components/shared/three/anatomy/BoneAttachedMuscles.js.map +1 -1
- package/lib/components/shared/three/anatomy/BoneClothing.js.map +1 -1
- package/lib/components/shared/three/anatomy/BoneRenderer.js.map +1 -1
- package/lib/components/shared/three/anatomy/Face3D.js.map +1 -1
- package/lib/components/shared/three/anatomy/Foot3D.js.map +1 -1
- package/lib/components/shared/three/anatomy/Hand3D.js.map +1 -1
- package/lib/components/shared/three/effects/ActionFeedback.js.map +1 -1
- package/lib/components/shared/three/effects/DamageNumbers.js.map +1 -1
- package/lib/components/shared/three/effects/HitEffects3D.js.map +1 -1
- package/lib/components/shared/three/effects/PlayerStateIndicators.js.map +1 -1
- package/lib/components/shared/three/effects/StanceSymbol3D.js.map +1 -1
- package/lib/components/shared/three/effects/StanceTransitionEffect.js.map +1 -1
- package/lib/components/shared/three/effects/VitalPointMarkers3D.js.map +1 -1
- package/lib/components/shared/three/indicators/ElementalColorSystem.js.map +1 -1
- package/lib/components/shared/three/indicators/GuardIndicator.js.map +1 -1
- package/lib/components/shared/three/indicators/HapticFeedback.js.map +1 -1
- package/lib/components/shared/three/indicators/StanceChangeIndicator.js.map +1 -1
- package/lib/components/shared/three/models/Player3DWithTransitions.js.map +1 -1
- package/lib/components/shared/three/models/SkeletalPlayer3D.d.ts.map +1 -1
- package/lib/components/shared/three/models/SkeletalPlayer3D.js +7 -5
- package/lib/components/shared/three/models/SkeletalPlayer3D.js.map +1 -1
- package/lib/components/shared/three/optimization/AdaptiveQuality.js.map +1 -1
- package/lib/components/shared/three/scene/AtmosphericParticles3D.js.map +1 -1
- package/lib/components/shared/three/scene/BackgroundScene3D.js.map +1 -1
- package/lib/components/shared/three/scene/CombatArena3D.js.map +1 -1
- package/lib/components/shared/three/scene/KoreanSignage3D.js.map +1 -1
- package/lib/components/shared/three/ui/ArchetypeCard.js.map +1 -1
- package/lib/components/shared/three/ui/BodyPartHealthDisplay.js.map +1 -1
- package/lib/components/shared/three/ui/BreathingIndicator2.js.map +1 -1
- package/lib/components/shared/three/ui/CombatReadinessBar.js.map +1 -1
- package/lib/components/shared/three/ui/ComboCounter.js.map +1 -1
- package/lib/components/shared/three/ui/HealthBar.js.map +1 -1
- package/lib/components/shared/three/ui/KoreanButton.js.map +1 -1
- package/lib/components/shared/three/ui/KoreanPanel.js.map +1 -1
- package/lib/components/shared/three/ui/KoreanText.js.map +1 -1
- package/lib/components/shared/three/ui/MenuList.js.map +1 -1
- package/lib/components/shared/three/ui/PlayerHUD.js.map +1 -1
- package/lib/components/shared/three/ui/ProgressBar.js.map +1 -1
- package/lib/components/shared/three/ui/SpeedIndicatorHUD.js.map +1 -1
- package/lib/components/shared/three/ui/StaminaBar.js.map +1 -1
- package/lib/components/shared/three/ui/TechniqueBar.js.map +1 -1
- package/lib/components/shared/three/ui/TechniqueCard.js.map +1 -1
- package/lib/components/shared/three/ui/VitalPointOverlayControlsHtml.js.map +1 -1
- package/lib/components/shared/ui/BackButton.js.map +1 -1
- package/lib/components/shared/ui/BaseHUDContainer.js.map +1 -1
- package/lib/components/shared/ui/CombatTimer.js.map +1 -1
- package/lib/components/shared/ui/ErrorModal.js.map +1 -1
- package/lib/components/shared/ui/LoadingState.js.map +1 -1
- package/lib/components/shared/ui/SplashScreen.js +2 -2
- package/lib/components/shared/ui/SplashScreen.js.map +1 -1
- package/lib/components/shared/ui/VitalPointOverlayControlsPure.js.map +1 -1
- package/lib/components/shared/ui/VolumeControl.js.map +1 -1
- package/lib/components/shared/ui/shared/ConfirmDialog.js.map +1 -1
- package/lib/components/ui/combat/BalanceIndicatorOverlayHtml.js.map +1 -1
- package/lib/constants/bodyDimensions.js.map +1 -1
- package/lib/constants/bodyRenderingConstants.js.map +1 -1
- package/lib/data/archetypeClothing.js.map +1 -1
- package/lib/data/archetypePhysicalAttributes.js.map +1 -1
- package/lib/data/techniqueMappings.js.map +1 -1
- package/lib/data/techniques.js.map +1 -1
- package/lib/hooks/useActionFeedback.js.map +1 -1
- package/lib/hooks/useBalanceAnimations.js.map +1 -1
- package/lib/hooks/useCombatTimer.js.map +1 -1
- package/lib/hooks/useDebounce.js.map +1 -1
- package/lib/hooks/useHUDLayout.d.ts.map +1 -1
- package/lib/hooks/useHUDLayout.js +3 -2
- package/lib/hooks/useHUDLayout.js.map +1 -1
- package/lib/hooks/useHandPoseTransitions.js.map +1 -1
- package/lib/hooks/useKeyboardControls.js.map +1 -1
- package/lib/hooks/useMatchCountdown.js.map +1 -1
- package/lib/hooks/useMuscleActivation.js.map +1 -1
- package/lib/hooks/usePauseMenu.js.map +1 -1
- package/lib/hooks/usePlayerAnimation.js.map +1 -1
- package/lib/hooks/useResponsiveLayout.js.map +1 -1
- package/lib/hooks/useRoundTransition.js.map +1 -1
- package/lib/hooks/useSkeletalAnimation.d.ts.map +1 -1
- package/lib/hooks/useSkeletalAnimation.js +1 -1
- package/lib/hooks/useSkeletalAnimation.js.map +1 -1
- package/lib/hooks/useTechniqueSelection.js.map +1 -1
- package/lib/hooks/useThrottle.js.map +1 -1
- package/lib/hooks/useTouchControls.js.map +1 -1
- package/lib/hooks/useWebGLContextLossHandler.js.map +1 -1
- package/lib/hooks/useWindowSize.js.map +1 -1
- package/lib/systems/CombatSystem.js.map +1 -1
- package/lib/systems/EffectCalculator.js.map +1 -1
- package/lib/systems/LayoutSystem.js.map +1 -1
- package/lib/systems/PlayerEffectManager.js.map +1 -1
- package/lib/systems/ResponsiveScaling.js.map +1 -1
- package/lib/systems/TrigramSystem.js.map +1 -1
- package/lib/systems/VitalPointSystem.js.map +1 -1
- package/lib/systems/ai/AIPersonality.js.map +1 -1
- package/lib/systems/ai/AdaptiveDifficulty.js +16 -16
- package/lib/systems/ai/AdaptiveDifficulty.js.map +1 -1
- package/lib/systems/ai/ArchetypeEnforcer.js.map +1 -1
- package/lib/systems/ai/ComboSystem.js.map +1 -1
- package/lib/systems/ai/DecisionTree.js.map +1 -1
- package/lib/systems/ai/TrainingAI.js.map +1 -1
- package/lib/systems/ai/types.js.map +1 -1
- package/lib/systems/animation/builders/AnimationBuilder.js.map +1 -1
- package/lib/systems/animation/builders/HandPoseApplicator.js.map +1 -1
- package/lib/systems/animation/builders/HandPoses.js.map +1 -1
- package/lib/systems/animation/builders/KeyframeConfig.js.map +1 -1
- package/lib/systems/animation/builders/KeyframeInterpolation.js.map +1 -1
- package/lib/systems/animation/builders/KickPhaseApplicator.d.ts +6 -0
- package/lib/systems/animation/builders/KickPhaseApplicator.d.ts.map +1 -1
- package/lib/systems/animation/builders/KickPhaseApplicator.js +16 -9
- package/lib/systems/animation/builders/KickPhaseApplicator.js.map +1 -1
- package/lib/systems/animation/builders/KoreanGuardPositions.d.ts +4 -4
- package/lib/systems/animation/builders/KoreanGuardPositions.js.map +1 -1
- package/lib/systems/animation/builders/MartialArtsAnimationBuilder.d.ts +1 -1
- package/lib/systems/animation/builders/MartialArtsAnimationBuilder.d.ts.map +1 -1
- package/lib/systems/animation/builders/MartialArtsAnimationBuilder.js +5 -5
- package/lib/systems/animation/builders/MartialArtsAnimationBuilder.js.map +1 -1
- package/lib/systems/animation/builders/MartialArtsConstants.d.ts +112 -71
- package/lib/systems/animation/builders/MartialArtsConstants.d.ts.map +1 -1
- package/lib/systems/animation/builders/MartialArtsConstants.js +113 -72
- package/lib/systems/animation/builders/MartialArtsConstants.js.map +1 -1
- package/lib/systems/animation/builders/MartialPoseApplicator.js.map +1 -1
- package/lib/systems/animation/builders/PunchPhaseApplicator.js.map +1 -1
- package/lib/systems/animation/builders/SkeletonRig.js.map +1 -1
- package/lib/systems/animation/builders/TrigramGuardApplicator.js.map +1 -1
- package/lib/systems/animation/catalogs/AttackAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/BasicAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/ComboAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/DarkOpsAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/DefensiveAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/ElbowKneeAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/EnhancedAttackAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/EnhancedElbowKneeAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/FootworkSkeletalAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/GamRedirectionAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/GamStanceAnimations.js +21 -0
- package/lib/systems/animation/catalogs/GamStanceAnimations.js.map +1 -0
- package/lib/systems/animation/catalogs/GamTechniqueAnimations.js +34 -2
- package/lib/systems/animation/catalogs/GamTechniqueAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/GanStanceAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/GanTechniqueAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/GeonStanceAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/GonTechniqueAnimations.d.ts +9 -0
- package/lib/systems/animation/catalogs/GonTechniqueAnimations.d.ts.map +1 -1
- package/lib/systems/animation/catalogs/GonTechniqueAnimations.js +288 -0
- package/lib/systems/animation/catalogs/GonTechniqueAnimations.js.map +1 -0
- package/lib/systems/animation/catalogs/GrapplingAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/JinStanceAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/JinTechniqueAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/KickAnimations.d.ts +2 -2
- package/lib/systems/animation/catalogs/KickAnimations.js +2 -2
- package/lib/systems/animation/catalogs/KickAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/LiStanceAnimations.js +14 -1
- package/lib/systems/animation/catalogs/LiStanceAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/LiTechniqueAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/MovementAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/PunchAnimations.d.ts +1 -1
- package/lib/systems/animation/catalogs/PunchAnimations.js +1 -1
- package/lib/systems/animation/catalogs/PunchAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/RecoveryAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/SonStanceAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/SonTechniqueAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/SpecializedPunchAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/StanceAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/StanceAttackAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/StanceGuardPoses.d.ts +6 -6
- package/lib/systems/animation/catalogs/StanceGuardPoses.js +36 -36
- package/lib/systems/animation/catalogs/StanceGuardPoses.js.map +1 -1
- package/lib/systems/animation/catalogs/StanceIdleAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/StanceLocomotionAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/StepSkeletalAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/TaeJointLockAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/TaeStanceAnimations.js.map +1 -1
- package/lib/systems/animation/constants/AnatomicalLimits.js.map +1 -1
- package/lib/systems/animation/core/AnimationHitTiming.js.map +1 -1
- package/lib/systems/animation/core/AnimationOptimizations.js.map +1 -1
- package/lib/systems/animation/core/AnimationPriority.js +15 -15
- package/lib/systems/animation/core/AnimationPriority.js.map +1 -1
- package/lib/systems/animation/core/AnimationRegistry.d.ts +30 -0
- package/lib/systems/animation/core/AnimationRegistry.d.ts.map +1 -1
- package/lib/systems/animation/core/AnimationRegistry.js +74 -12
- package/lib/systems/animation/core/AnimationRegistry.js.map +1 -1
- package/lib/systems/animation/core/AnimationStateMachine.js +16 -16
- package/lib/systems/animation/core/AnimationStateMachine.js.map +1 -1
- package/lib/systems/animation/core/AnimationTransitions.d.ts.map +1 -1
- package/lib/systems/animation/core/AnimationTransitions.js +34 -0
- package/lib/systems/animation/core/AnimationTransitions.js.map +1 -1
- package/lib/systems/animation/core/LateralityTransform.js.map +1 -1
- package/lib/systems/animation/core/RecoveryPhaseEnhancer.js.map +1 -1
- package/lib/systems/animation/core/TechniqueAnimationMapper.js.map +1 -1
- package/lib/systems/animation/core/TechniqueAnimationMapping.js.map +1 -1
- package/lib/systems/animation/core/index.d.ts +1 -1
- package/lib/systems/animation/core/index.d.ts.map +1 -1
- package/lib/systems/animation/core/types.d.ts +24 -0
- package/lib/systems/animation/core/types.d.ts.map +1 -1
- package/lib/systems/animation/core/types.js +27 -11
- package/lib/systems/animation/core/types.js.map +1 -1
- package/lib/systems/animation/systems/AdvancedJointMovements.js.map +1 -1
- package/lib/systems/animation/systems/BodyFacingSystem.js.map +1 -1
- package/lib/systems/animation/systems/FacialExpressions.js.map +1 -1
- package/lib/systems/animation/systems/FallAnimations.js.map +1 -1
- package/lib/systems/animation/systems/MuscleActivation.js.map +1 -1
- package/lib/systems/bodypart/BodyPartDamageIntegration.js.map +1 -1
- package/lib/systems/bodypart/BodyPartHealthSystem.js.map +1 -1
- package/lib/systems/bodypart/BodyPartPositionMapping.js.map +1 -1
- package/lib/systems/bodypart/CombatInjuryIntegration.js.map +1 -1
- package/lib/systems/bodypart/InjuryIntegration.js.map +1 -1
- package/lib/systems/bodypart/InjuryTracker.js.map +1 -1
- package/lib/systems/bodypart/MovementPenaltySystem.js.map +1 -1
- package/lib/systems/bodypart/PlayerInjuryTrackingManager.js.map +1 -1
- package/lib/systems/bodypart/types.js.map +1 -1
- package/lib/systems/breathing/BreathingDisruptionSystem.js +19 -19
- package/lib/systems/breathing/BreathingDisruptionSystem.js.map +1 -1
- package/lib/systems/breathing/feedback.js.map +1 -1
- package/lib/systems/breathing/integration.js.map +1 -1
- package/lib/systems/combat/BalanceSystem.js +19 -19
- package/lib/systems/combat/BalanceSystem.js.map +1 -1
- package/lib/systems/combat/BreakingStatusEffects.js.map +1 -1
- package/lib/systems/combat/CombatStateSystem.js +17 -17
- package/lib/systems/combat/CombatStateSystem.js.map +1 -1
- package/lib/systems/combat/ConsciousnessSystem.js +24 -24
- package/lib/systems/combat/ConsciousnessSystem.js.map +1 -1
- package/lib/systems/combat/FallIntegration.js.map +1 -1
- package/lib/systems/combat/GrappleSystem.js.map +1 -1
- package/lib/systems/combat/LimbExposureSystem.js.map +1 -1
- package/lib/systems/combat/PainResponseSystem.js +21 -21
- package/lib/systems/combat/PainResponseSystem.js.map +1 -1
- package/lib/systems/combat/TrainingCombatSystem.js.map +1 -1
- package/lib/systems/combat/painConsciousnessUtils.js.map +1 -1
- package/lib/systems/combat/typeGuards.js.map +1 -1
- package/lib/systems/effects.js.map +1 -1
- package/lib/systems/game.js.map +1 -1
- package/lib/systems/movement/InjuryMovementModifier.js.map +1 -1
- package/lib/systems/movement/helpers/AccelerationUpdater.js.map +1 -1
- package/lib/systems/movement/helpers/accelerationUtils.js.map +1 -1
- package/lib/systems/movement/integration.js.map +1 -1
- package/lib/systems/physics/AttackMovementPhysics.js.map +1 -1
- package/lib/systems/physics/CollisionDetection.js.map +1 -1
- package/lib/systems/physics/CoordinateMapper.js.map +1 -1
- package/lib/systems/physics/KnockbackPhysics.js.map +1 -1
- package/lib/systems/physics/MovementPhysics.js.map +1 -1
- package/lib/systems/physics/PhysicalReachCalculator.js.map +1 -1
- package/lib/systems/physics/SpeedModifierSystem.js +6 -6
- package/lib/systems/physics/SpeedModifierSystem.js.map +1 -1
- package/lib/systems/trigram/KoreanCulture.js.map +1 -1
- package/lib/systems/trigram/KoreanTechniques.js.map +1 -1
- package/lib/systems/trigram/StanceManager.js.map +1 -1
- package/lib/systems/trigram/TransitionCalculator.js.map +1 -1
- package/lib/systems/trigram/TrigramCalculator.js.map +1 -1
- package/lib/systems/trigram/techniques/DarkOpsTechniques.js.map +1 -1
- package/lib/systems/trigram/techniques/GamTechniques.js.map +1 -1
- package/lib/systems/trigram/techniques/GanTechniques.js.map +1 -1
- package/lib/systems/trigram/techniques/GeonTechniques.js.map +1 -1
- package/lib/systems/trigram/techniques/GonTechniques.js.map +1 -1
- package/lib/systems/trigram/techniques/JinTechniques.js.map +1 -1
- package/lib/systems/trigram/techniques/LiTechniques.js.map +1 -1
- package/lib/systems/trigram/techniques/SonTechniques.js.map +1 -1
- package/lib/systems/trigram/techniques/TaeTechniques.js.map +1 -1
- package/lib/systems/trigram/techniques/TechniqueConfig.js.map +1 -1
- package/lib/systems/trigram/techniques/index.js.map +1 -1
- package/lib/systems/trigram/types/GonTechniqueExtensions.js.map +1 -1
- package/lib/systems/trigram/types.js.map +1 -1
- package/lib/systems/types.js.map +1 -1
- package/lib/systems/vitalpoint/DamageCalculator.js.map +1 -1
- package/lib/systems/vitalpoint/HitDetection.js.map +1 -1
- package/lib/systems/vitalpoint/KoreanAnatomy.js.map +1 -1
- package/lib/systems/vitalpoint/KoreanVitalPoints.js.map +1 -1
- package/lib/systems/vitalpoint/MeridianVitalPointMapping.js.map +1 -1
- package/lib/systems/vitalpoint/VitalPointsData.js.map +1 -1
- package/lib/types/AccessibilityTypes.js.map +1 -1
- package/lib/types/LayoutTypes.js.map +1 -1
- package/lib/types/PhysicsTypes.js.map +1 -1
- package/lib/types/common.js.map +1 -1
- package/lib/types/constants/animations.js.map +1 -1
- package/lib/types/constants/colors.js.map +1 -1
- package/lib/types/constants/designSystem.js.map +1 -1
- package/lib/types/constants/index.js.map +1 -1
- package/lib/types/constants/layout.d.ts +21 -0
- package/lib/types/constants/layout.d.ts.map +1 -1
- package/lib/types/constants/layout.js +22 -1
- package/lib/types/constants/layout.js.map +1 -1
- package/lib/types/constants/performance.js.map +1 -1
- package/lib/types/constants/typography.js.map +1 -1
- package/lib/types/constants/ui.js.map +1 -1
- package/lib/types/facial.js +19 -19
- package/lib/types/facial.js.map +1 -1
- package/lib/types/hand-animation.js.map +1 -1
- package/lib/types/injury.js.map +1 -1
- package/lib/types/muscle.js.map +1 -1
- package/lib/types/physics.js.map +1 -1
- package/lib/types/physicsConstants.js.map +1 -1
- package/lib/types/player-visual.d.ts +1 -1
- package/lib/types/player-visual.d.ts.map +1 -1
- package/lib/types/skeletal.js.map +1 -1
- package/lib/types/techniqueId.js.map +1 -1
- package/lib/utils/accessibility.js.map +1 -1
- package/lib/utils/arenaWorldDimensions.js.map +1 -1
- package/lib/utils/assetConfig.js.map +1 -1
- package/lib/utils/characterScaling.js.map +1 -1
- package/lib/utils/colorHelpers.js.map +1 -1
- package/lib/utils/colorUtils.js.map +1 -1
- package/lib/utils/combatReadiness.js.map +1 -1
- package/lib/utils/controlMapping.js.map +1 -1
- package/lib/utils/deviceDetection.js +6 -7
- package/lib/utils/deviceDetection.js.map +1 -1
- package/lib/utils/effectUtils.js.map +1 -1
- package/lib/utils/fabricTextures.js.map +1 -1
- package/lib/utils/hapticFeedback.js.map +1 -1
- package/lib/utils/haptics.js.map +1 -1
- package/lib/utils/htmlOverlayHelpers.js.map +1 -1
- package/lib/utils/inputSystem.js.map +1 -1
- package/lib/utils/koreanThemeHelpers.js.map +1 -1
- package/lib/utils/math.js.map +1 -1
- package/lib/utils/mobileLayoutHelpers.js.map +1 -1
- package/lib/utils/mobileUIUtils.js.map +1 -1
- package/lib/utils/performance/PerformanceMonitor.js.map +1 -1
- package/lib/utils/performance/PerformanceOverlay3D.js.map +1 -1
- package/lib/utils/performance/usePerformanceMonitor.js.map +1 -1
- package/lib/utils/performanceOptimization.js.map +1 -1
- package/lib/utils/player3DHelpers.js.map +1 -1
- package/lib/utils/playerUtils.js.map +1 -1
- package/lib/utils/responsiveLayout.js.map +1 -1
- package/lib/utils/responsiveLayoutHelpers.d.ts +7 -0
- package/lib/utils/responsiveLayoutHelpers.d.ts.map +1 -1
- package/lib/utils/responsiveLayoutHelpers.js +16 -2
- package/lib/utils/responsiveLayoutHelpers.js.map +1 -1
- package/lib/utils/responsiveOrientationConstants.js.map +1 -1
- package/lib/utils/safeAreaUtils.js.map +1 -1
- package/lib/utils/sharedPhysicsConfig.js.map +1 -1
- package/lib/utils/skeletonScaling.js.map +1 -1
- package/lib/utils/stanceHelpers.js.map +1 -1
- package/lib/utils/threeObjectPool.js.map +1 -1
- package/lib/utils/visualEffects.js.map +1 -1
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TrigramCalculator.js","names":[],"sources":["../../../src/systems/trigram/TrigramCalculator.ts"],"sourcesContent":["import { TrigramStance } from \"../../types/common\";\nimport { StanceLaterality } from \"./types\";\n\n/**\n * Enhanced stance effectiveness matrix for Korean martial arts\n * Based on traditional I-Ching trigram relationships\n */\nconst STANCE_EFFECTIVENESS_MATRIX: Record<\n TrigramStance,\n Partial<Record<TrigramStance, number>>\n> = {\n [TrigramStance.GEON]: { [TrigramStance.GON]: 1.2, [TrigramStance.SON]: 0.8 },\n [TrigramStance.GON]: { [TrigramStance.GEON]: 0.8, [TrigramStance.GAM]: 1.2 },\n [TrigramStance.TAE]: { [TrigramStance.JIN]: 1.2, [TrigramStance.GAN]: 0.8 },\n [TrigramStance.JIN]: { [TrigramStance.TAE]: 0.8, [TrigramStance.SON]: 1.2 },\n [TrigramStance.LI]: { [TrigramStance.GAM]: 0.8, [TrigramStance.TAE]: 0.8 },\n [TrigramStance.GAM]: {\n // water extinguishes fire:\n [TrigramStance.LI]: 1.2,\n [TrigramStance.GON]: 0.8,\n },\n [TrigramStance.SON]: { [TrigramStance.GEON]: 1.2, [TrigramStance.JIN]: 0.8 },\n [TrigramStance.GAN]: { [TrigramStance.TAE]: 1.2, [TrigramStance.LI]: 0.8 },\n};\n\nexport class TrigramCalculator {\n /**\n * Calculate effectiveness of one stance against another\n */\n calculateStanceEffectiveness(\n attackerStance: TrigramStance,\n defenderStance: TrigramStance\n ): number {\n if (attackerStance === defenderStance) {\n return 1.0; // Neutral when same stance\n }\n\n const effectiveness =\n STANCE_EFFECTIVENESS_MATRIX[attackerStance]?.[defenderStance];\n return effectiveness ?? 1.0; // Default to neutral if no specific relationship\n }\n\n /**\n * Get the optimal counter stance for a given stance\n */\n getCounterStance(targetStance: TrigramStance): TrigramStance {\n let bestCounter = TrigramStance.GEON;\n let bestEffectiveness = 0;\n\n // Find stance with highest effectiveness against target\n for (const stance of Object.values(TrigramStance)) {\n const effectiveness = this.calculateStanceEffectiveness(\n stance,\n targetStance\n );\n if (effectiveness > bestEffectiveness) {\n bestEffectiveness = effectiveness;\n bestCounter = stance;\n }\n }\n\n return bestCounter;\n }\n\n /**\n * Calculate transition difficulty between stances\n */\n calculateTransitionDifficulty(\n fromStance: TrigramStance,\n toStance: TrigramStance\n ): number {\n if (fromStance === toStance) return 0;\n\n // Base difficulty for any transition\n const baseDifficulty = 0.5;\n\n // Get stance order for adjacency calculation\n const stanceOrder = Object.values(TrigramStance);\n const fromIndex = stanceOrder.indexOf(fromStance);\n const toIndex = stanceOrder.indexOf(toStance);\n\n if (fromIndex === -1 || toIndex === -1) {\n return 1.0; // Unknown stances, high difficulty\n }\n\n // Calculate distance (adjacent stances are easier)\n const distance = Math.min(\n Math.abs(toIndex - fromIndex),\n stanceOrder.length - Math.abs(toIndex - fromIndex)\n );\n\n // Normalize distance to 0-1 range and add base difficulty\n const normalizedDistance = distance / (stanceOrder.length / 2);\n return baseDifficulty + normalizedDistance * 0.5;\n }\n\n /**\n * Calculate stance effectiveness between attacker and defender\n */\n static calculateStanceEffectiveness(\n attackerStance: TrigramStance,\n defenderStance: TrigramStance\n ): number {\n // Use the effectiveness matrix from constants\n const effectiveness =\n STANCE_EFFECTIVENESS_MATRIX[attackerStance]?.[defenderStance];\n return effectiveness ?? 1.0; // Default neutral effectiveness\n }\n\n /**\n * Get optimal counter stance against opponent stance\n */\n static getCounterStance(opponentStance: TrigramStance): TrigramStance {\n // Find the stance that has highest effectiveness against opponent\n const stances = Object.values(TrigramStance);\n let bestCounter = TrigramStance.GEON;\n let bestEffectiveness = 0;\n\n stances.forEach((stance) => {\n const effectiveness = this.calculateStanceEffectiveness(\n stance,\n opponentStance\n );\n if (effectiveness > bestEffectiveness) {\n bestEffectiveness = effectiveness;\n bestCounter = stance;\n }\n });\n\n return bestCounter;\n }\n\n /**\n * Calculate difficulty of transitioning between stances\n */\n static calculateTransitionDifficulty(\n fromStance: TrigramStance,\n toStance: TrigramStance\n ): number {\n if (fromStance === toStance) {\n return 0; // No transition needed\n }\n\n // Base difficulty for any transition\n const baseDifficulty = 0.5;\n\n // Get stance order for adjacency calculation\n const stanceOrder = Object.values(TrigramStance);\n const fromIndex = stanceOrder.indexOf(fromStance);\n const toIndex = stanceOrder.indexOf(toStance);\n\n if (fromIndex === -1 || toIndex === -1) {\n return 1.0; // Unknown stances, high difficulty\n }\n\n // Calculate distance (adjacent stances are easier)\n const distance = Math.min(\n Math.abs(toIndex - fromIndex),\n stanceOrder.length - Math.abs(toIndex - fromIndex)\n );\n\n // Normalize distance to 0-1 range and add base difficulty\n const normalizedDistance = distance / (stanceOrder.length / 2);\n return baseDifficulty + normalizedDistance * 0.5;\n }\n\n /**\n * Calculate laterality modifier based on stance matching.\n * \n * In Korean martial arts, matched stances (both fighters in same laterality)\n * create tactical advantages for mid-level attacks as centerlines are more exposed.\n * Mismatched stances (opposite laterality) provide defensive advantages as lead guards\n * naturally protect the centerline.\n * \n * @param attackerLaterality - Attacker's stance laterality (left or right)\n * @param defenderLaterality - Defender's stance laterality (left or right)\n * @param attackLevel - Attack level: \"high\", \"mid\", or \"low\"\n * @returns Damage multiplier (1.0 = neutral, >1.0 = advantage, <1.0 = disadvantage)\n * \n * @example\n * ```typescript\n * // Matched stances: attacker gains mid-level advantage\n * const modifier = TrigramCalculator.calculateLateralityModifier(\"left\", \"left\", \"mid\");\n * // Returns 1.15 (+15% effectiveness)\n * \n * // Mismatched stances: defender's guard protects centerline\n * const modifier = TrigramCalculator.calculateLateralityModifier(\"left\", \"right\", \"mid\");\n * // Returns 0.90 (-10% effectiveness)\n * ```\n * \n * @korean 측면성수정자계산\n */\n static calculateLateralityModifier(\n attackerLaterality: StanceLaterality,\n defenderLaterality: StanceLaterality,\n attackLevel: \"high\" | \"mid\" | \"low\" = \"mid\"\n ): number {\n const isMatched = attackerLaterality === defenderLaterality;\n\n // Laterality primarily affects mid-level attacks (centerline attacks)\n if (attackLevel === \"mid\") {\n // Matched stances: Open centerline = offensive advantage\n // Mismatched stances: Protected centerline = defensive advantage\n return isMatched ? 1.15 : 0.90;\n }\n\n // High and low attacks less affected by laterality\n // Slight tactical variation still exists\n if (attackLevel === \"high\") {\n return isMatched ? 1.05 : 0.98;\n }\n\n if (attackLevel === \"low\") {\n return isMatched ? 1.03 : 0.99;\n }\n\n // Default neutral\n return 1.0;\n }\n} // end of class\n\nexport { STANCE_EFFECTIVENESS_MATRIX };\n"],"mappings":";;;;;;AAOA,IAAM,8BAGF;EACD,cAAc,OAAO;GAAG,cAAc,MAAM;GAAM,cAAc,MAAM;
|
|
1
|
+
{"version":3,"file":"TrigramCalculator.js","names":[],"sources":["../../../src/systems/trigram/TrigramCalculator.ts"],"sourcesContent":["import { TrigramStance } from \"../../types/common\";\nimport { StanceLaterality } from \"./types\";\n\n/**\n * Enhanced stance effectiveness matrix for Korean martial arts\n * Based on traditional I-Ching trigram relationships\n */\nconst STANCE_EFFECTIVENESS_MATRIX: Record<\n TrigramStance,\n Partial<Record<TrigramStance, number>>\n> = {\n [TrigramStance.GEON]: { [TrigramStance.GON]: 1.2, [TrigramStance.SON]: 0.8 },\n [TrigramStance.GON]: { [TrigramStance.GEON]: 0.8, [TrigramStance.GAM]: 1.2 },\n [TrigramStance.TAE]: { [TrigramStance.JIN]: 1.2, [TrigramStance.GAN]: 0.8 },\n [TrigramStance.JIN]: { [TrigramStance.TAE]: 0.8, [TrigramStance.SON]: 1.2 },\n [TrigramStance.LI]: { [TrigramStance.GAM]: 0.8, [TrigramStance.TAE]: 0.8 },\n [TrigramStance.GAM]: {\n // water extinguishes fire:\n [TrigramStance.LI]: 1.2,\n [TrigramStance.GON]: 0.8,\n },\n [TrigramStance.SON]: { [TrigramStance.GEON]: 1.2, [TrigramStance.JIN]: 0.8 },\n [TrigramStance.GAN]: { [TrigramStance.TAE]: 1.2, [TrigramStance.LI]: 0.8 },\n};\n\nexport class TrigramCalculator {\n /**\n * Calculate effectiveness of one stance against another\n */\n calculateStanceEffectiveness(\n attackerStance: TrigramStance,\n defenderStance: TrigramStance\n ): number {\n if (attackerStance === defenderStance) {\n return 1.0; // Neutral when same stance\n }\n\n const effectiveness =\n STANCE_EFFECTIVENESS_MATRIX[attackerStance]?.[defenderStance];\n return effectiveness ?? 1.0; // Default to neutral if no specific relationship\n }\n\n /**\n * Get the optimal counter stance for a given stance\n */\n getCounterStance(targetStance: TrigramStance): TrigramStance {\n let bestCounter = TrigramStance.GEON;\n let bestEffectiveness = 0;\n\n // Find stance with highest effectiveness against target\n for (const stance of Object.values(TrigramStance)) {\n const effectiveness = this.calculateStanceEffectiveness(\n stance,\n targetStance\n );\n if (effectiveness > bestEffectiveness) {\n bestEffectiveness = effectiveness;\n bestCounter = stance;\n }\n }\n\n return bestCounter;\n }\n\n /**\n * Calculate transition difficulty between stances\n */\n calculateTransitionDifficulty(\n fromStance: TrigramStance,\n toStance: TrigramStance\n ): number {\n if (fromStance === toStance) return 0;\n\n // Base difficulty for any transition\n const baseDifficulty = 0.5;\n\n // Get stance order for adjacency calculation\n const stanceOrder = Object.values(TrigramStance);\n const fromIndex = stanceOrder.indexOf(fromStance);\n const toIndex = stanceOrder.indexOf(toStance);\n\n if (fromIndex === -1 || toIndex === -1) {\n return 1.0; // Unknown stances, high difficulty\n }\n\n // Calculate distance (adjacent stances are easier)\n const distance = Math.min(\n Math.abs(toIndex - fromIndex),\n stanceOrder.length - Math.abs(toIndex - fromIndex)\n );\n\n // Normalize distance to 0-1 range and add base difficulty\n const normalizedDistance = distance / (stanceOrder.length / 2);\n return baseDifficulty + normalizedDistance * 0.5;\n }\n\n /**\n * Calculate stance effectiveness between attacker and defender\n */\n static calculateStanceEffectiveness(\n attackerStance: TrigramStance,\n defenderStance: TrigramStance\n ): number {\n // Use the effectiveness matrix from constants\n const effectiveness =\n STANCE_EFFECTIVENESS_MATRIX[attackerStance]?.[defenderStance];\n return effectiveness ?? 1.0; // Default neutral effectiveness\n }\n\n /**\n * Get optimal counter stance against opponent stance\n */\n static getCounterStance(opponentStance: TrigramStance): TrigramStance {\n // Find the stance that has highest effectiveness against opponent\n const stances = Object.values(TrigramStance);\n let bestCounter = TrigramStance.GEON;\n let bestEffectiveness = 0;\n\n stances.forEach((stance) => {\n const effectiveness = this.calculateStanceEffectiveness(\n stance,\n opponentStance\n );\n if (effectiveness > bestEffectiveness) {\n bestEffectiveness = effectiveness;\n bestCounter = stance;\n }\n });\n\n return bestCounter;\n }\n\n /**\n * Calculate difficulty of transitioning between stances\n */\n static calculateTransitionDifficulty(\n fromStance: TrigramStance,\n toStance: TrigramStance\n ): number {\n if (fromStance === toStance) {\n return 0; // No transition needed\n }\n\n // Base difficulty for any transition\n const baseDifficulty = 0.5;\n\n // Get stance order for adjacency calculation\n const stanceOrder = Object.values(TrigramStance);\n const fromIndex = stanceOrder.indexOf(fromStance);\n const toIndex = stanceOrder.indexOf(toStance);\n\n if (fromIndex === -1 || toIndex === -1) {\n return 1.0; // Unknown stances, high difficulty\n }\n\n // Calculate distance (adjacent stances are easier)\n const distance = Math.min(\n Math.abs(toIndex - fromIndex),\n stanceOrder.length - Math.abs(toIndex - fromIndex)\n );\n\n // Normalize distance to 0-1 range and add base difficulty\n const normalizedDistance = distance / (stanceOrder.length / 2);\n return baseDifficulty + normalizedDistance * 0.5;\n }\n\n /**\n * Calculate laterality modifier based on stance matching.\n * \n * In Korean martial arts, matched stances (both fighters in same laterality)\n * create tactical advantages for mid-level attacks as centerlines are more exposed.\n * Mismatched stances (opposite laterality) provide defensive advantages as lead guards\n * naturally protect the centerline.\n * \n * @param attackerLaterality - Attacker's stance laterality (left or right)\n * @param defenderLaterality - Defender's stance laterality (left or right)\n * @param attackLevel - Attack level: \"high\", \"mid\", or \"low\"\n * @returns Damage multiplier (1.0 = neutral, >1.0 = advantage, <1.0 = disadvantage)\n * \n * @example\n * ```typescript\n * // Matched stances: attacker gains mid-level advantage\n * const modifier = TrigramCalculator.calculateLateralityModifier(\"left\", \"left\", \"mid\");\n * // Returns 1.15 (+15% effectiveness)\n * \n * // Mismatched stances: defender's guard protects centerline\n * const modifier = TrigramCalculator.calculateLateralityModifier(\"left\", \"right\", \"mid\");\n * // Returns 0.90 (-10% effectiveness)\n * ```\n * \n * @korean 측면성수정자계산\n */\n static calculateLateralityModifier(\n attackerLaterality: StanceLaterality,\n defenderLaterality: StanceLaterality,\n attackLevel: \"high\" | \"mid\" | \"low\" = \"mid\"\n ): number {\n const isMatched = attackerLaterality === defenderLaterality;\n\n // Laterality primarily affects mid-level attacks (centerline attacks)\n if (attackLevel === \"mid\") {\n // Matched stances: Open centerline = offensive advantage\n // Mismatched stances: Protected centerline = defensive advantage\n return isMatched ? 1.15 : 0.90;\n }\n\n // High and low attacks less affected by laterality\n // Slight tactical variation still exists\n if (attackLevel === \"high\") {\n return isMatched ? 1.05 : 0.98;\n }\n\n if (attackLevel === \"low\") {\n return isMatched ? 1.03 : 0.99;\n }\n\n // Default neutral\n return 1.0;\n }\n} // end of class\n\nexport { STANCE_EFFECTIVENESS_MATRIX };\n"],"mappings":";;;;;;AAOA,IAAM,8BAGF;EACD,cAAc,OAAO;GAAG,cAAc,MAAM;GAAM,cAAc,MAAM;CAAI;EAC1E,cAAc,MAAM;GAAG,cAAc,OAAO;GAAM,cAAc,MAAM;CAAI;EAC1E,cAAc,MAAM;GAAG,cAAc,MAAM;GAAM,cAAc,MAAM;CAAI;EACzE,cAAc,MAAM;GAAG,cAAc,MAAM;GAAM,cAAc,MAAM;CAAI;EACzE,cAAc,KAAK;GAAG,cAAc,MAAM;GAAM,cAAc,MAAM;CAAI;EACxE,cAAc,MAAM;GAElB,cAAc,KAAK;GACnB,cAAc,MAAM;CACvB;EACC,cAAc,MAAM;GAAG,cAAc,OAAO;GAAM,cAAc,MAAM;CAAI;EAC1E,cAAc,MAAM;GAAG,cAAc,MAAM;GAAM,cAAc,KAAK;CAAI;AAC3E;AAEA,IAAa,oBAAb,MAA+B;;;;CAI7B,6BACE,gBACA,gBACQ;EACR,IAAI,mBAAmB,gBACrB,OAAO;EAKT,OADE,4BAA4B,kBAAkB,mBACxB;CAC1B;;;;CAKA,iBAAiB,cAA4C;EAC3D,IAAI,cAAc,cAAc;EAChC,IAAI,oBAAoB;EAGxB,KAAK,MAAM,UAAU,OAAO,OAAO,aAAa,GAAG;GACjD,MAAM,gBAAgB,KAAK,6BACzB,QACA,YACF;GACA,IAAI,gBAAgB,mBAAmB;IACrC,oBAAoB;IACpB,cAAc;GAChB;EACF;EAEA,OAAO;CACT;;;;CAKA,8BACE,YACA,UACQ;EACR,IAAI,eAAe,UAAU,OAAO;EAGpC,MAAM,iBAAiB;EAGvB,MAAM,cAAc,OAAO,OAAO,aAAa;EAC/C,MAAM,YAAY,YAAY,QAAQ,UAAU;EAChD,MAAM,UAAU,YAAY,QAAQ,QAAQ;EAE5C,IAAI,cAAc,MAAM,YAAY,IAClC,OAAO;EAWT,OAAO,iBAPU,KAAK,IACpB,KAAK,IAAI,UAAU,SAAS,GAC5B,YAAY,SAAS,KAAK,IAAI,UAAU,SAAS,CAIxB,KAAY,YAAY,SAAS,KACf;CAC/C;;;;CAKA,OAAO,6BACL,gBACA,gBACQ;EAIR,OADE,4BAA4B,kBAAkB,mBACxB;CAC1B;;;;CAKA,OAAO,iBAAiB,gBAA8C;EAEpE,MAAM,UAAU,OAAO,OAAO,aAAa;EAC3C,IAAI,cAAc,cAAc;EAChC,IAAI,oBAAoB;EAExB,QAAQ,SAAS,WAAW;GAC1B,MAAM,gBAAgB,KAAK,6BACzB,QACA,cACF;GACA,IAAI,gBAAgB,mBAAmB;IACrC,oBAAoB;IACpB,cAAc;GAChB;EACF,CAAC;EAED,OAAO;CACT;;;;CAKA,OAAO,8BACL,YACA,UACQ;EACR,IAAI,eAAe,UACjB,OAAO;EAIT,MAAM,iBAAiB;EAGvB,MAAM,cAAc,OAAO,OAAO,aAAa;EAC/C,MAAM,YAAY,YAAY,QAAQ,UAAU;EAChD,MAAM,UAAU,YAAY,QAAQ,QAAQ;EAE5C,IAAI,cAAc,MAAM,YAAY,IAClC,OAAO;EAWT,OAAO,iBAPU,KAAK,IACpB,KAAK,IAAI,UAAU,SAAS,GAC5B,YAAY,SAAS,KAAK,IAAI,UAAU,SAAS,CAIxB,KAAY,YAAY,SAAS,KACf;CAC/C;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BA,OAAO,4BACL,oBACA,oBACA,cAAsC,OAC9B;EACR,MAAM,YAAY,uBAAuB;EAGzC,IAAI,gBAAgB,OAGlB,OAAO,YAAY,OAAO;EAK5B,IAAI,gBAAgB,QAClB,OAAO,YAAY,OAAO;EAG5B,IAAI,gBAAgB,OAClB,OAAO,YAAY,OAAO;EAI5B,OAAO;CACT;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DarkOpsTechniques.js","names":[],"sources":["../../../../src/systems/trigram/techniques/DarkOpsTechniques.ts"],"sourcesContent":["/**\n * 🌑 Dark Ops Techniques (암흑작전 기술)\n * Silent Incapacitation & Tactical Assassination\n *\n * Special operations techniques designed for the 암살자 (Amsalja) archetype.\n * Based on 5 specialized Korean Dark Ops units with focus on silent takedowns,\n * nerve disruption, and rapid incapacitation.\n *\n * Philosophy: \"그림자처럼 움직이고 바람처럼 사라져라\"\n * Move like shadow, vanish like wind\n *\n * @module DarkOpsTechniques\n */\n\nimport type { KoreanTechnique } from \"@/systems/vitalpoint\";\nimport {\n CombatAttackType,\n DamageType,\n PlayerArchetype,\n TrigramStance,\n} from \"../../../types/common\";\nimport { AnimationType } from \"../../animation\";\n\n// =====================================================\n// DARK OPS UNIT DEFINITIONS\n// =====================================================\n\n/**\n * Dark Ops unit specializations (암흑작전 부대 특화)\n */\nexport const DARK_OPS_UNITS = {\n DARK_OPERATIONS: \"암흑작전부대\", // Dark Operations Unit - Silent Infiltration\n SHADOW_COMMANDO: \"암흑특공대\", // Shadow Commando Brigade - Demolition Tactics\n NIGHTFALL_SQUADRON: \"심야작전부대\", // Nightfall Squadron - Night Operations\n BLACK_OPS_TASK_FORCE: \"블랙옵스부대\", // Black Ops Task Force - Cyber-Enhanced\n DEEP_SEA_UNIT: \"심해침투부대\", // Deep Sea Unit - Amphibious Combat\n} as const;\n\n// =====================================================\n// DARK OPS TECHNIQUES\n// =====================================================\n\n/**\n * Dark Ops techniques array - Silent incapacitation and tactical assassination\n * Designed for 암살자 (Amsalja) archetype with +30% effectiveness bonus\n *\n * Animation speeds are calibrated for stealth and precision:\n * - Silent: 0.8-0.9 (slow, controlled movements)\n * - Normal: 1.0 (standard techniques)\n * - Rapid: 1.1-1.2 (quick incapacitation)\n */\nexport const DARK_OPS_TECHNIQUES: readonly KoreanTechnique[] = [\n // ===== 암흑작전부대 (Dark Operations Unit) - Silent Infiltration =====\n {\n id: \"darkops_silent_carotid\",\n name: {\n korean: \"은밀 경동맥 차단\",\n english: \"Silent Carotid Strike\",\n romanized: \"Eunmil Gyeongdongmaek Chadan\",\n },\n koreanName: \"은밀 경동맥 차단\",\n englishName: \"Silent Carotid Strike\",\n romanized: \"Eunmil Gyeongdongmaek Chadan\",\n description: {\n korean:\n \"경동맥을 압박하여 소리 없이 실신시킴. 3초 내 무의식 유발. 암흑작전부대의 침투 기술.\",\n english:\n \"Silent carotid compression causing unconsciousness within 3 seconds. Dark Operations Unit infiltration technique.\",\n },\n stance: TrigramStance.GAM,\n type: CombatAttackType.PRESSURE_POINT,\n damageType: DamageType.PRESSURE,\n damage: 28,\n kiCost: 30,\n staminaCost: 25,\n accuracy: 0.92,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 840,\n recoveryTime: 1400,\n critChance: 0.25,\n critMultiplier: 2.0,\n effects: [],\n // Animation: Silent choking motion\n animationType: AnimationType.GRAPPLE,\n animationSpeed: 0.65,\n animationCategory: \"grapple\", // Type: shared category\n animationId: \"darkops_silent_carotid\", // ID: unique 1-1 mapping\n },\n {\n id: \"darkops_nerve_paralysis\",\n name: {\n korean: \"신경마비타격\",\n english: \"Nerve Paralysis Strike\",\n romanized: \"Singyeong Mabi Tagyeok\",\n },\n koreanName: \"신경마비타격\",\n englishName: \"Nerve Paralysis Strike\",\n romanized: \"Singyeong Mabi Tagyeok\",\n description: {\n korean: \"신경총을 정밀 타격하여 사지 마비 유발. 블랙옵스 기술 강화.\",\n english:\n \"Precise nerve cluster strike causing limb paralysis. Black Ops tech-enhanced technique.\",\n },\n stance: TrigramStance.LI,\n type: CombatAttackType.NERVE_STRIKE,\n damageType: DamageType.NERVE,\n damage: 26,\n kiCost: 25,\n staminaCost: 20,\n accuracy: 0.95,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.95,\n },\n executionTime: 700,\n recoveryTime: 1260,\n critChance: 0.3,\n critMultiplier: 2.2,\n effects: [],\n // Animation: Precision nerve strike\n animationType: AnimationType.JAB,\n animationSpeed: 0.75,\n animationCategory: \"strike\", // Type: shared category\n animationId: \"darkops_nerve_paralysis\", // ID: unique 1-1 mapping\n },\n\n // ===== 암흑특공대 (Shadow Commando Brigade) - Demolition Tactics =====\n {\n id: \"darkops_liver_disruption\",\n name: {\n korean: \"간 타격\",\n english: \"Liver Disruption Strike\",\n romanized: \"Gan Tagyeok\",\n },\n koreanName: \"간 타격\",\n englishName: \"Liver Disruption Strike\",\n romanized: \"Gan Tagyeok\",\n description: {\n korean:\n \"간을 강타하여 내부 출혈과 급격한 체력 소진 유발. 암흑특공대 폭파 전술.\",\n english:\n \"Powerful liver strike causing internal trauma and rapid stamina drain. Shadow Commando explosive tactic.\",\n },\n stance: TrigramStance.JIN,\n type: CombatAttackType.STRIKE,\n damageType: DamageType.INTERNAL,\n damage: 35,\n kiCost: 28,\n staminaCost: 30,\n accuracy: 0.85,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 979,\n recoveryTime: 1540,\n critChance: 0.22,\n critMultiplier: 2.1,\n effects: [],\n // Animation: Powerful body hook\n animationType: AnimationType.HOOK,\n animationSpeed: 0.75,\n animationCategory: \"strike\", // Type: shared category\n animationId: \"darkops_liver_disruption\", // ID: unique 1-1 mapping\n },\n {\n id: \"darkops_kidney_strike\",\n name: {\n korean: \"신장충격\",\n english: \"Kidney Shock\",\n romanized: \"Sinjang Chunggyeok\",\n },\n koreanName: \"신장충격\",\n englishName: \"Kidney Shock\",\n romanized: \"Sinjang Chunggyeok\",\n description: {\n korean:\n \"신장을 타격하여 극심한 고통과 일시적 마비 유발. 폭발적 힘의 암흑특공대 기술.\",\n english:\n \"Kidney strike causing severe pain and temporary paralysis. Shadow Commando explosive force technique.\",\n },\n stance: TrigramStance.JIN,\n type: CombatAttackType.STRIKE,\n damageType: DamageType.INTERNAL,\n damage: 33,\n kiCost: 26,\n staminaCost: 28,\n accuracy: 0.82,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 909,\n recoveryTime: 1470,\n critChance: 0.2,\n critMultiplier: 2.0,\n effects: [],\n // Animation: Short hook to kidney\n animationType: AnimationType.HOOK,\n animationSpeed: 0.75,\n animationCategory: \"strike\", // Type: shared category\n animationId: \"darkops_kidney_strike\", // ID: unique 1-1 mapping\n },\n\n // ===== 심야작전부대 (Nightfall Squadron) - Night Operations =====\n {\n id: \"darkops_throat_strike\",\n name: {\n korean: \"후두차단\",\n english: \"Throat Disruption\",\n romanized: \"Hudu Chadan\",\n },\n koreanName: \"후두차단\",\n englishName: \"Throat Disruption\",\n romanized: \"Hudu Chadan\",\n description: {\n korean:\n \"후두를 타격하여 호흡 곤란과 발성 불가 유발. 심야작전부대의 무음 제압술.\",\n english:\n \"Throat strike causing breathing difficulty and voice loss. Nightfall Squadron silent suppression technique.\",\n },\n stance: TrigramStance.SON,\n type: CombatAttackType.STRIKE,\n damageType: DamageType.PRESSURE,\n damage: 30,\n kiCost: 24,\n staminaCost: 22,\n accuracy: 0.88,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.95,\n },\n executionTime: 770,\n recoveryTime: 1330,\n critChance: 0.24,\n critMultiplier: 2.1,\n effects: [],\n // Animation: Throat strike\n animationType: AnimationType.JAB,\n animationSpeed: 0.75,\n animationCategory: \"strike\", // Type: shared category\n animationId: \"darkops_throat_strike\", // ID: unique 1-1 mapping\n },\n {\n id: \"darkops_solar_plexus_paralyze\",\n name: {\n korean: \"명치마비\",\n english: \"Solar Plexus Paralysis\",\n romanized: \"Myeongchi Mabi\",\n },\n koreanName: \"명치마비\",\n englishName: \"Solar Plexus Paralysis\",\n romanized: \"Myeongchi Mabi\",\n description: {\n korean:\n \"명치를 정밀 타격하여 횡격막 마비와 호흡 정지. 심야작전부대 야간 전술.\",\n english:\n \"Precise solar plexus strike causing diaphragm paralysis and breath cessation. Nightfall Squadron night tactic.\",\n },\n stance: TrigramStance.LI,\n type: CombatAttackType.THRUST,\n damageType: DamageType.NERVE,\n damage: 32,\n kiCost: 28,\n staminaCost: 24,\n accuracy: 0.9,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.95,\n },\n executionTime: 840,\n recoveryTime: 1400,\n critChance: 0.26,\n critMultiplier: 2.2,\n effects: [],\n // Animation: Precision thrust\n animationType: AnimationType.JAB,\n animationSpeed: 0.75,\n animationCategory: \"strike\", // Type: shared category\n animationId: \"darkops_solar_plexus_paralyze\", // ID: unique 1-1 mapping\n },\n\n // ===== 블랙옵스부대 (Black Ops Task Force) - Cyber-Enhanced Combat =====\n {\n id: \"darkops_brachial_plexus_strike\",\n name: {\n korean: \"상완신경타격\",\n english: \"Brachial Plexus Strike\",\n romanized: \"Sangwan Singyeong Tagyeok\",\n },\n koreanName: \"상완신경타격\",\n englishName: \"Brachial Plexus Strike\",\n romanized: \"Sangwan Singyeong Tagyeok\",\n description: {\n korean:\n \"상완 신경총을 타격하여 팔 전체 마비. 블랙옵스 사이버 분석 기반 정밀 타격.\",\n english:\n \"Brachial plexus strike causing complete arm paralysis. Black Ops cyber-analysis precision targeting.\",\n },\n stance: TrigramStance.LI,\n type: CombatAttackType.NERVE_STRIKE,\n damageType: DamageType.NERVE,\n damage: 28,\n kiCost: 26,\n staminaCost: 20,\n accuracy: 0.94,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.95,\n },\n executionTime: 770,\n recoveryTime: 1260,\n critChance: 0.28,\n critMultiplier: 2.3,\n effects: [],\n // Animation: Arm strike\n animationType: AnimationType.JAB,\n animationSpeed: 0.75,\n animationCategory: \"strike\", // Type: shared category\n animationId: \"darkops_brachial_plexus_strike\", // ID: unique 1-1 mapping\n },\n {\n id: \"darkops_femoral_nerve_strike\",\n name: {\n korean: \"대퇴신경타격\",\n english: \"Femoral Nerve Strike\",\n romanized: \"Daetoe Singyeong Tagyeok\",\n },\n koreanName: \"대퇴신경타격\",\n englishName: \"Femoral Nerve Strike\",\n romanized: \"Daetoe Singyeong Tagyeok\",\n description: {\n korean: \"대퇴 신경을 타격하여 다리 이동 불가. 블랙옵스 디지털 표적 지정.\",\n english:\n \"Femoral nerve strike disabling leg mobility. Black Ops digital targeting system.\",\n },\n stance: TrigramStance.LI,\n type: CombatAttackType.KICK,\n damageType: DamageType.NERVE,\n damage: 30,\n kiCost: 24,\n staminaCost: 26,\n accuracy: 0.9,\n reachConfig: {\n bodyPart: \"leg\",\n techniqueType: \"kick\",\n baseExtension: 0.95,\n },\n executionTime: 840,\n recoveryTime: 1400,\n critChance: 0.24,\n critMultiplier: 2.1,\n effects: [],\n // Animation: Low kick to thigh\n animationType: AnimationType.LOW_KICK,\n animationSpeed: 0.75,\n animationCategory: \"kick\", // Type: shared category\n animationId: \"darkops_femoral_nerve_strike\", // ID: unique 1-1 mapping\n },\n\n // ===== 심해침투부대 (Deep Sea Unit) - Amphibious Combat =====\n {\n id: \"darkops_rear_choke\",\n name: {\n korean: \"후방목졸임\",\n english: \"Rear Naked Choke\",\n romanized: \"Hubang Mokjorim\",\n },\n koreanName: \"후방목졸임\",\n englishName: \"Rear Naked Choke\",\n romanized: \"Hubang Mokjorim\",\n description: {\n korean:\n \"후방에서 목을 조여 혈류 차단과 의식 상실. 심해침투부대 수중 전투 기술.\",\n english:\n \"Rear choke cutting blood flow and causing unconsciousness. Deep Sea Unit underwater combat technique.\",\n },\n stance: TrigramStance.GAM,\n type: CombatAttackType.GRAPPLE,\n damageType: DamageType.PRESSURE,\n damage: 34,\n kiCost: 30,\n staminaCost: 32,\n accuracy: 0.86,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 1120,\n recoveryTime: 1680,\n critChance: 0.22,\n critMultiplier: 2.0,\n effects: [],\n // Animation: Rear choke hold\n animationType: AnimationType.GRAPPLE,\n animationSpeed: 0.7,\n animationCategory: \"grapple\", // Type: shared category\n animationId: \"darkops_rear_choke\", // ID: unique 1-1 mapping\n },\n {\n id: \"darkops_spinal_strike\",\n name: {\n korean: \"척추타격\",\n english: \"Spinal Column Strike\",\n romanized: \"Cheokchu Tagyeok\",\n },\n koreanName: \"척추타격\",\n englishName: \"Spinal Column Strike\",\n romanized: \"Cheokchu Tagyeok\",\n description: {\n korean:\n \"척추를 타격하여 전신 마비와 의식 상실. 심해침투부대 치명적 기술.\",\n english:\n \"Spinal column strike causing full-body paralysis and unconsciousness. Deep Sea Unit lethal technique.\",\n },\n stance: TrigramStance.GEON,\n type: CombatAttackType.STRIKE,\n damageType: DamageType.NERVE,\n damage: 40,\n kiCost: 35,\n staminaCost: 35,\n accuracy: 0.78,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.95,\n },\n executionTime: 1050,\n recoveryTime: 1610,\n critChance: 0.3,\n critMultiplier: 2.5,\n effects: [],\n // Animation: Powerful back strike\n animationType: AnimationType.CROSS,\n animationSpeed: 0.75,\n animationCategory: \"strike\", // Type: shared category\n animationId: \"darkops_spinal_strike\", // ID: unique 1-1 mapping\n },\n\n // ===== Additional Dark Ops Techniques - Mixed Units =====\n {\n id: \"darkops_jaw_dislocation\",\n name: {\n korean: \"턱탈구\",\n english: \"Jaw Dislocation\",\n romanized: \"Teok Talgu\",\n },\n koreanName: \"턱탈구\",\n englishName: \"Jaw Dislocation\",\n romanized: \"Teok Talgu\",\n description: {\n korean: \"턱을 비틀어 탈구시키고 의식 혼미. 암흑작전부대 신속 무력화.\",\n english:\n \"Twisting jaw causing dislocation and disorientation. Dark Operations rapid incapacitation.\",\n },\n stance: TrigramStance.TAE,\n type: CombatAttackType.GRAPPLE,\n damageType: DamageType.JOINT,\n damage: 30,\n kiCost: 22,\n staminaCost: 24,\n accuracy: 0.88,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.65,\n },\n executionTime: 840,\n recoveryTime: 1400,\n critChance: 0.24,\n critMultiplier: 2.0,\n effects: [],\n // Animation: Jaw manipulation (grapple-based dislocation)\n animationType: AnimationType.GRAPPLE,\n animationSpeed: 0.7,\n animationCategory: \"grapple\", // Type: shared category\n animationId: \"darkops_jaw_dislocation\", // ID: unique 1-1 mapping\n },\n {\n id: \"darkops_temple_strike\",\n name: {\n korean: \"관자놀이급타\",\n english: \"Temple Knockout Strike\",\n romanized: \"Gwanja-nori Geubta\",\n },\n koreanName: \"관자놀이급타\",\n englishName: \"Temple Knockout Strike\",\n romanized: \"Gwanja-nori Geubta\",\n description: {\n korean: \"관자놀이를 정확히 타격하여 즉시 의식 상실. 블랙옵스 치명 타격.\",\n english:\n \"Precise temple strike causing immediate unconsciousness. Black Ops lethal targeting.\",\n },\n stance: TrigramStance.LI,\n type: CombatAttackType.STRIKE,\n damageType: DamageType.BLUNT,\n damage: 38,\n kiCost: 32,\n staminaCost: 28,\n accuracy: 0.92,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 770,\n recoveryTime: 1330,\n critChance: 0.32,\n critMultiplier: 2.4,\n effects: [],\n // Animation: Temple strike\n animationType: AnimationType.HOOK,\n animationSpeed: 0.75,\n animationCategory: \"strike\", // Type: shared category\n animationId: \"darkops_temple_strike\", // ID: unique 1-1 mapping\n },\n {\n id: \"darkops_achilles_sever\",\n name: {\n korean: \"아킬레스절단\",\n english: \"Achilles Tendon Sever\",\n romanized: \"Akilles Jeoldan\",\n },\n koreanName: \"아킬레스절단\",\n englishName: \"Achilles Tendon Sever\",\n romanized: \"Akilles Jeoldan\",\n description: {\n korean: \"아킬레스건을 공격하여 이동 불가. 암흑특공대 무력화 기술.\",\n english:\n \"Achilles tendon strike disabling mobility. Shadow Commando incapacitation technique.\",\n },\n stance: TrigramStance.GON,\n type: CombatAttackType.KICK,\n damageType: DamageType.CRUSHING,\n damage: 32,\n kiCost: 26,\n staminaCost: 28,\n accuracy: 0.84,\n reachConfig: {\n bodyPart: \"leg\",\n techniqueType: \"kick\",\n baseExtension: 0.95,\n },\n executionTime: 909,\n recoveryTime: 1470,\n critChance: 0.26,\n critMultiplier: 2.2,\n effects: [],\n // Animation: Low cutting kick\n animationType: AnimationType.LOW_KICK,\n animationSpeed: 0.75,\n animationCategory: \"kick\", // Type: shared category\n animationId: \"darkops_achilles_sever\", // ID: unique 1-1 mapping\n },\n {\n id: \"darkops_ear_strike\",\n name: {\n korean: \"귓바퀴타격\",\n english: \"Ear Box Strike\",\n romanized: \"Gwitbakwi Tagyeok\",\n },\n koreanName: \"귓바퀴타격\",\n englishName: \"Ear Box Strike\",\n romanized: \"Gwitbakwi Tagyeok\",\n description: {\n korean:\n \"양쪽 귀를 동시 타격하여 고막 파열과 평형 상실. 심야작전부대 방향 감각 교란.\",\n english:\n \"Simultaneous ear strikes rupturing eardrums and disrupting balance. Nightfall Squadron disorientation tactic.\",\n },\n stance: TrigramStance.SON,\n type: CombatAttackType.STRIKE,\n damageType: DamageType.BLUNT,\n damage: 28,\n kiCost: 24,\n staminaCost: 22,\n accuracy: 0.86,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 700,\n recoveryTime: 1260,\n critChance: 0.22,\n critMultiplier: 2.0,\n effects: [],\n // Animation: Double palm strike\n animationType: AnimationType.PALM_STRIKE,\n animationSpeed: 0.75,\n animationCategory: \"strike\", // Type: shared category\n animationId: \"darkops_ear_strike\", // ID: unique 1-1 mapping\n },\n {\n id: \"darkops_eye_gouge\",\n name: {\n korean: \"안구공격\",\n english: \"Eye Strike\",\n romanized: \"Angu Gonggyeok\",\n },\n koreanName: \"안구공격\",\n englishName: \"Eye Strike\",\n romanized: \"Angu Gonggyeok\",\n description: {\n korean:\n \"눈을 정밀 공격하여 시각 상실과 전투 무력화. 암살자 특화 치명 기술.\",\n english:\n \"Precise eye strike causing vision loss and combat incapacitation. Assassin specialty lethal technique.\",\n },\n stance: TrigramStance.LI,\n type: CombatAttackType.THRUST,\n damageType: DamageType.PIERCING,\n damage: 36,\n kiCost: 30,\n staminaCost: 26,\n accuracy: 0.9,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.95,\n },\n executionTime: 700,\n recoveryTime: 1260,\n critChance: 0.3,\n critMultiplier: 2.4,\n effects: [],\n // Animation: Precision finger thrust\n animationType: AnimationType.JAB,\n animationSpeed: 0.75,\n animationCategory: \"strike\", // Type: shared category\n animationId: \"darkops_eye_gouge\", // ID: unique 1-1 mapping\n },\n] as const;\n\n// =====================================================\n// DARK OPS CONFIGURATION\n// =====================================================\n\n/**\n * Dark Ops archetype bonus configuration\n * 암살자 (Amsalja) gets +30% effectiveness with all Dark Ops techniques\n */\nexport const DARK_OPS_ARCHETYPE_BONUSES: Record<PlayerArchetype, number> = {\n [PlayerArchetype.AMSALJA]: 1.3, // +30% for Shadow Assassin archetype\n [PlayerArchetype.JEONGBO_YOWON]: 1.15, // +15% for Intelligence Operative\n [PlayerArchetype.HACKER]: 1.1, // +10% for Cyber Warrior (tech synergy)\n [PlayerArchetype.MUSA]: 0.85, // -15% for Traditional Warrior (dishonorable)\n [PlayerArchetype.JOJIK_POKRYEOKBAE]: 1.05, // +5% for Organized Crime (ruthless)\n} as const;\n\n/**\n * Dark Ops night operations bonus\n * Time-of-day effectiveness multiplier (simulated)\n */\nexport const DARK_OPS_NIGHT_BONUS = {\n night: 1.25, // +25% at night (00:00 - 06:00, 18:00 - 23:59)\n day: 1.0, // Normal during day (06:00 - 18:00)\n twilight: 1.15, // +15% during twilight (05:00 - 07:00, 17:00 - 19:00)\n} as const;\n\n/**\n * Dark Ops special effects configuration\n */\nexport const DARK_OPS_SPECIAL_EFFECTS = {\n silent: {\n korean: \"무음 공격\",\n english: \"Silent Attack\",\n description: {\n korean: \"적에게 경보를 발생시키지 않음\",\n english: \"Does not alert enemies\",\n },\n noAlert: true,\n },\n paralysis: {\n korean: \"마비\",\n english: \"Paralysis\",\n description: {\n korean: \"일시적 또는 영구적 사지 마비\",\n english: \"Temporary or permanent limb paralysis\",\n },\n duration: 3000, // 3 seconds\n },\n unconsciousness: {\n korean: \"의식 상실\",\n english: \"Unconsciousness\",\n description: {\n korean: \"즉시 의식을 잃음\",\n english: \"Immediate loss of consciousness\",\n },\n duration: 5000, // 5 seconds\n },\n breathingDifficulty: {\n korean: \"호흡 곤란\",\n english: \"Breathing Difficulty\",\n description: {\n korean: \"호흡 재생 -75%\",\n english: \"Breathing regen -75%\",\n },\n staminaRegenPenalty: -0.75,\n duration: 5000, // 5 seconds\n },\n disorientation: {\n korean: \"방향 감각 상실\",\n english: \"Disorientation\",\n description: {\n korean: \"정확도 -50%\",\n english: \"Accuracy -50%\",\n },\n accuracyPenalty: -0.5,\n duration: 4000, // 4 seconds\n },\n} as const;\n\n// =====================================================\n// HELPER FUNCTIONS\n// =====================================================\n\n/**\n * Get Dark Ops techniques count\n */\nexport const DARK_OPS_TECHNIQUE_COUNT = DARK_OPS_TECHNIQUES.length;\n\n/**\n * Get Dark Ops technique by ID\n */\nexport function getDarkOpsTechniqueById(\n id: string,\n): KoreanTechnique | undefined {\n return DARK_OPS_TECHNIQUES.find((t) => t.id === id);\n}\n\n/**\n * Get all Dark Ops techniques for a specific unit\n */\nexport function getDarkOpsTechniquesByUnit(\n unitType: keyof typeof DARK_OPS_UNITS,\n): readonly KoreanTechnique[] {\n // Map technique IDs to units based on prefix patterns\n const unitPrefixMap: Record<string, string[]> = {\n DARK_OPERATIONS: [\"darkops_silent_carotid\", \"darkops_jaw_dislocation\"],\n SHADOW_COMMANDO: [\n \"darkops_liver_disruption\",\n \"darkops_kidney_strike\",\n \"darkops_achilles_sever\",\n ],\n NIGHTFALL_SQUADRON: [\n \"darkops_throat_strike\",\n \"darkops_solar_plexus_paralyze\",\n \"darkops_ear_strike\",\n ],\n BLACK_OPS_TASK_FORCE: [\n \"darkops_nerve_paralysis\",\n \"darkops_brachial_plexus_strike\",\n \"darkops_femoral_nerve_strike\",\n \"darkops_temple_strike\",\n ],\n DEEP_SEA_UNIT: [\"darkops_rear_choke\", \"darkops_spinal_strike\"],\n };\n\n const techniqueIds = unitPrefixMap[unitType] ?? [];\n return DARK_OPS_TECHNIQUES.filter((t) => techniqueIds.includes(t.id));\n}\n\n/**\n * Get archetype effectiveness multiplier for Dark Ops\n */\nexport function getDarkOpsArchetypeBonus(archetype: PlayerArchetype): number {\n return DARK_OPS_ARCHETYPE_BONUSES[archetype] ?? 1.0;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DarkOpsTechniques.js","names":[],"sources":["../../../../src/systems/trigram/techniques/DarkOpsTechniques.ts"],"sourcesContent":["/**\n * 🌑 Dark Ops Techniques (암흑작전 기술)\n * Silent Incapacitation & Tactical Assassination\n *\n * Special operations techniques designed for the 암살자 (Amsalja) archetype.\n * Based on 5 specialized Korean Dark Ops units with focus on silent takedowns,\n * nerve disruption, and rapid incapacitation.\n *\n * Philosophy: \"그림자처럼 움직이고 바람처럼 사라져라\"\n * Move like shadow, vanish like wind\n *\n * @module DarkOpsTechniques\n */\n\nimport type { KoreanTechnique } from \"@/systems/vitalpoint\";\nimport {\n CombatAttackType,\n DamageType,\n PlayerArchetype,\n TrigramStance,\n} from \"../../../types/common\";\nimport { AnimationType } from \"../../animation\";\n\n// =====================================================\n// DARK OPS UNIT DEFINITIONS\n// =====================================================\n\n/**\n * Dark Ops unit specializations (암흑작전 부대 특화)\n */\nexport const DARK_OPS_UNITS = {\n DARK_OPERATIONS: \"암흑작전부대\", // Dark Operations Unit - Silent Infiltration\n SHADOW_COMMANDO: \"암흑특공대\", // Shadow Commando Brigade - Demolition Tactics\n NIGHTFALL_SQUADRON: \"심야작전부대\", // Nightfall Squadron - Night Operations\n BLACK_OPS_TASK_FORCE: \"블랙옵스부대\", // Black Ops Task Force - Cyber-Enhanced\n DEEP_SEA_UNIT: \"심해침투부대\", // Deep Sea Unit - Amphibious Combat\n} as const;\n\n// =====================================================\n// DARK OPS TECHNIQUES\n// =====================================================\n\n/**\n * Dark Ops techniques array - Silent incapacitation and tactical assassination\n * Designed for 암살자 (Amsalja) archetype with +30% effectiveness bonus\n *\n * Animation speeds are calibrated for stealth and precision:\n * - Silent: 0.8-0.9 (slow, controlled movements)\n * - Normal: 1.0 (standard techniques)\n * - Rapid: 1.1-1.2 (quick incapacitation)\n */\nexport const DARK_OPS_TECHNIQUES: readonly KoreanTechnique[] = [\n // ===== 암흑작전부대 (Dark Operations Unit) - Silent Infiltration =====\n {\n id: \"darkops_silent_carotid\",\n name: {\n korean: \"은밀 경동맥 차단\",\n english: \"Silent Carotid Strike\",\n romanized: \"Eunmil Gyeongdongmaek Chadan\",\n },\n koreanName: \"은밀 경동맥 차단\",\n englishName: \"Silent Carotid Strike\",\n romanized: \"Eunmil Gyeongdongmaek Chadan\",\n description: {\n korean:\n \"경동맥을 압박하여 소리 없이 실신시킴. 3초 내 무의식 유발. 암흑작전부대의 침투 기술.\",\n english:\n \"Silent carotid compression causing unconsciousness within 3 seconds. Dark Operations Unit infiltration technique.\",\n },\n stance: TrigramStance.GAM,\n type: CombatAttackType.PRESSURE_POINT,\n damageType: DamageType.PRESSURE,\n damage: 28,\n kiCost: 30,\n staminaCost: 25,\n accuracy: 0.92,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 840,\n recoveryTime: 1400,\n critChance: 0.25,\n critMultiplier: 2.0,\n effects: [],\n // Animation: Silent choking motion\n animationType: AnimationType.GRAPPLE,\n animationSpeed: 0.65,\n animationCategory: \"grapple\", // Type: shared category\n animationId: \"darkops_silent_carotid\", // ID: unique 1-1 mapping\n },\n {\n id: \"darkops_nerve_paralysis\",\n name: {\n korean: \"신경마비타격\",\n english: \"Nerve Paralysis Strike\",\n romanized: \"Singyeong Mabi Tagyeok\",\n },\n koreanName: \"신경마비타격\",\n englishName: \"Nerve Paralysis Strike\",\n romanized: \"Singyeong Mabi Tagyeok\",\n description: {\n korean: \"신경총을 정밀 타격하여 사지 마비 유발. 블랙옵스 기술 강화.\",\n english:\n \"Precise nerve cluster strike causing limb paralysis. Black Ops tech-enhanced technique.\",\n },\n stance: TrigramStance.LI,\n type: CombatAttackType.NERVE_STRIKE,\n damageType: DamageType.NERVE,\n damage: 26,\n kiCost: 25,\n staminaCost: 20,\n accuracy: 0.95,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.95,\n },\n executionTime: 700,\n recoveryTime: 1260,\n critChance: 0.3,\n critMultiplier: 2.2,\n effects: [],\n // Animation: Precision nerve strike\n animationType: AnimationType.JAB,\n animationSpeed: 0.75,\n animationCategory: \"strike\", // Type: shared category\n animationId: \"darkops_nerve_paralysis\", // ID: unique 1-1 mapping\n },\n\n // ===== 암흑특공대 (Shadow Commando Brigade) - Demolition Tactics =====\n {\n id: \"darkops_liver_disruption\",\n name: {\n korean: \"간 타격\",\n english: \"Liver Disruption Strike\",\n romanized: \"Gan Tagyeok\",\n },\n koreanName: \"간 타격\",\n englishName: \"Liver Disruption Strike\",\n romanized: \"Gan Tagyeok\",\n description: {\n korean:\n \"간을 강타하여 내부 출혈과 급격한 체력 소진 유발. 암흑특공대 폭파 전술.\",\n english:\n \"Powerful liver strike causing internal trauma and rapid stamina drain. Shadow Commando explosive tactic.\",\n },\n stance: TrigramStance.JIN,\n type: CombatAttackType.STRIKE,\n damageType: DamageType.INTERNAL,\n damage: 35,\n kiCost: 28,\n staminaCost: 30,\n accuracy: 0.85,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 979,\n recoveryTime: 1540,\n critChance: 0.22,\n critMultiplier: 2.1,\n effects: [],\n // Animation: Powerful body hook\n animationType: AnimationType.HOOK,\n animationSpeed: 0.75,\n animationCategory: \"strike\", // Type: shared category\n animationId: \"darkops_liver_disruption\", // ID: unique 1-1 mapping\n },\n {\n id: \"darkops_kidney_strike\",\n name: {\n korean: \"신장충격\",\n english: \"Kidney Shock\",\n romanized: \"Sinjang Chunggyeok\",\n },\n koreanName: \"신장충격\",\n englishName: \"Kidney Shock\",\n romanized: \"Sinjang Chunggyeok\",\n description: {\n korean:\n \"신장을 타격하여 극심한 고통과 일시적 마비 유발. 폭발적 힘의 암흑특공대 기술.\",\n english:\n \"Kidney strike causing severe pain and temporary paralysis. Shadow Commando explosive force technique.\",\n },\n stance: TrigramStance.JIN,\n type: CombatAttackType.STRIKE,\n damageType: DamageType.INTERNAL,\n damage: 33,\n kiCost: 26,\n staminaCost: 28,\n accuracy: 0.82,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 909,\n recoveryTime: 1470,\n critChance: 0.2,\n critMultiplier: 2.0,\n effects: [],\n // Animation: Short hook to kidney\n animationType: AnimationType.HOOK,\n animationSpeed: 0.75,\n animationCategory: \"strike\", // Type: shared category\n animationId: \"darkops_kidney_strike\", // ID: unique 1-1 mapping\n },\n\n // ===== 심야작전부대 (Nightfall Squadron) - Night Operations =====\n {\n id: \"darkops_throat_strike\",\n name: {\n korean: \"후두차단\",\n english: \"Throat Disruption\",\n romanized: \"Hudu Chadan\",\n },\n koreanName: \"후두차단\",\n englishName: \"Throat Disruption\",\n romanized: \"Hudu Chadan\",\n description: {\n korean:\n \"후두를 타격하여 호흡 곤란과 발성 불가 유발. 심야작전부대의 무음 제압술.\",\n english:\n \"Throat strike causing breathing difficulty and voice loss. Nightfall Squadron silent suppression technique.\",\n },\n stance: TrigramStance.SON,\n type: CombatAttackType.STRIKE,\n damageType: DamageType.PRESSURE,\n damage: 30,\n kiCost: 24,\n staminaCost: 22,\n accuracy: 0.88,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.95,\n },\n executionTime: 770,\n recoveryTime: 1330,\n critChance: 0.24,\n critMultiplier: 2.1,\n effects: [],\n // Animation: Throat strike\n animationType: AnimationType.JAB,\n animationSpeed: 0.75,\n animationCategory: \"strike\", // Type: shared category\n animationId: \"darkops_throat_strike\", // ID: unique 1-1 mapping\n },\n {\n id: \"darkops_solar_plexus_paralyze\",\n name: {\n korean: \"명치마비\",\n english: \"Solar Plexus Paralysis\",\n romanized: \"Myeongchi Mabi\",\n },\n koreanName: \"명치마비\",\n englishName: \"Solar Plexus Paralysis\",\n romanized: \"Myeongchi Mabi\",\n description: {\n korean:\n \"명치를 정밀 타격하여 횡격막 마비와 호흡 정지. 심야작전부대 야간 전술.\",\n english:\n \"Precise solar plexus strike causing diaphragm paralysis and breath cessation. Nightfall Squadron night tactic.\",\n },\n stance: TrigramStance.LI,\n type: CombatAttackType.THRUST,\n damageType: DamageType.NERVE,\n damage: 32,\n kiCost: 28,\n staminaCost: 24,\n accuracy: 0.9,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.95,\n },\n executionTime: 840,\n recoveryTime: 1400,\n critChance: 0.26,\n critMultiplier: 2.2,\n effects: [],\n // Animation: Precision thrust\n animationType: AnimationType.JAB,\n animationSpeed: 0.75,\n animationCategory: \"strike\", // Type: shared category\n animationId: \"darkops_solar_plexus_paralyze\", // ID: unique 1-1 mapping\n },\n\n // ===== 블랙옵스부대 (Black Ops Task Force) - Cyber-Enhanced Combat =====\n {\n id: \"darkops_brachial_plexus_strike\",\n name: {\n korean: \"상완신경타격\",\n english: \"Brachial Plexus Strike\",\n romanized: \"Sangwan Singyeong Tagyeok\",\n },\n koreanName: \"상완신경타격\",\n englishName: \"Brachial Plexus Strike\",\n romanized: \"Sangwan Singyeong Tagyeok\",\n description: {\n korean:\n \"상완 신경총을 타격하여 팔 전체 마비. 블랙옵스 사이버 분석 기반 정밀 타격.\",\n english:\n \"Brachial plexus strike causing complete arm paralysis. Black Ops cyber-analysis precision targeting.\",\n },\n stance: TrigramStance.LI,\n type: CombatAttackType.NERVE_STRIKE,\n damageType: DamageType.NERVE,\n damage: 28,\n kiCost: 26,\n staminaCost: 20,\n accuracy: 0.94,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.95,\n },\n executionTime: 770,\n recoveryTime: 1260,\n critChance: 0.28,\n critMultiplier: 2.3,\n effects: [],\n // Animation: Arm strike\n animationType: AnimationType.JAB,\n animationSpeed: 0.75,\n animationCategory: \"strike\", // Type: shared category\n animationId: \"darkops_brachial_plexus_strike\", // ID: unique 1-1 mapping\n },\n {\n id: \"darkops_femoral_nerve_strike\",\n name: {\n korean: \"대퇴신경타격\",\n english: \"Femoral Nerve Strike\",\n romanized: \"Daetoe Singyeong Tagyeok\",\n },\n koreanName: \"대퇴신경타격\",\n englishName: \"Femoral Nerve Strike\",\n romanized: \"Daetoe Singyeong Tagyeok\",\n description: {\n korean: \"대퇴 신경을 타격하여 다리 이동 불가. 블랙옵스 디지털 표적 지정.\",\n english:\n \"Femoral nerve strike disabling leg mobility. Black Ops digital targeting system.\",\n },\n stance: TrigramStance.LI,\n type: CombatAttackType.KICK,\n damageType: DamageType.NERVE,\n damage: 30,\n kiCost: 24,\n staminaCost: 26,\n accuracy: 0.9,\n reachConfig: {\n bodyPart: \"leg\",\n techniqueType: \"kick\",\n baseExtension: 0.95,\n },\n executionTime: 840,\n recoveryTime: 1400,\n critChance: 0.24,\n critMultiplier: 2.1,\n effects: [],\n // Animation: Low kick to thigh\n animationType: AnimationType.LOW_KICK,\n animationSpeed: 0.75,\n animationCategory: \"kick\", // Type: shared category\n animationId: \"darkops_femoral_nerve_strike\", // ID: unique 1-1 mapping\n },\n\n // ===== 심해침투부대 (Deep Sea Unit) - Amphibious Combat =====\n {\n id: \"darkops_rear_choke\",\n name: {\n korean: \"후방목졸임\",\n english: \"Rear Naked Choke\",\n romanized: \"Hubang Mokjorim\",\n },\n koreanName: \"후방목졸임\",\n englishName: \"Rear Naked Choke\",\n romanized: \"Hubang Mokjorim\",\n description: {\n korean:\n \"후방에서 목을 조여 혈류 차단과 의식 상실. 심해침투부대 수중 전투 기술.\",\n english:\n \"Rear choke cutting blood flow and causing unconsciousness. Deep Sea Unit underwater combat technique.\",\n },\n stance: TrigramStance.GAM,\n type: CombatAttackType.GRAPPLE,\n damageType: DamageType.PRESSURE,\n damage: 34,\n kiCost: 30,\n staminaCost: 32,\n accuracy: 0.86,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 1120,\n recoveryTime: 1680,\n critChance: 0.22,\n critMultiplier: 2.0,\n effects: [],\n // Animation: Rear choke hold\n animationType: AnimationType.GRAPPLE,\n animationSpeed: 0.7,\n animationCategory: \"grapple\", // Type: shared category\n animationId: \"darkops_rear_choke\", // ID: unique 1-1 mapping\n },\n {\n id: \"darkops_spinal_strike\",\n name: {\n korean: \"척추타격\",\n english: \"Spinal Column Strike\",\n romanized: \"Cheokchu Tagyeok\",\n },\n koreanName: \"척추타격\",\n englishName: \"Spinal Column Strike\",\n romanized: \"Cheokchu Tagyeok\",\n description: {\n korean:\n \"척추를 타격하여 전신 마비와 의식 상실. 심해침투부대 치명적 기술.\",\n english:\n \"Spinal column strike causing full-body paralysis and unconsciousness. Deep Sea Unit lethal technique.\",\n },\n stance: TrigramStance.GEON,\n type: CombatAttackType.STRIKE,\n damageType: DamageType.NERVE,\n damage: 40,\n kiCost: 35,\n staminaCost: 35,\n accuracy: 0.78,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.95,\n },\n executionTime: 1050,\n recoveryTime: 1610,\n critChance: 0.3,\n critMultiplier: 2.5,\n effects: [],\n // Animation: Powerful back strike\n animationType: AnimationType.CROSS,\n animationSpeed: 0.75,\n animationCategory: \"strike\", // Type: shared category\n animationId: \"darkops_spinal_strike\", // ID: unique 1-1 mapping\n },\n\n // ===== Additional Dark Ops Techniques - Mixed Units =====\n {\n id: \"darkops_jaw_dislocation\",\n name: {\n korean: \"턱탈구\",\n english: \"Jaw Dislocation\",\n romanized: \"Teok Talgu\",\n },\n koreanName: \"턱탈구\",\n englishName: \"Jaw Dislocation\",\n romanized: \"Teok Talgu\",\n description: {\n korean: \"턱을 비틀어 탈구시키고 의식 혼미. 암흑작전부대 신속 무력화.\",\n english:\n \"Twisting jaw causing dislocation and disorientation. Dark Operations rapid incapacitation.\",\n },\n stance: TrigramStance.TAE,\n type: CombatAttackType.GRAPPLE,\n damageType: DamageType.JOINT,\n damage: 30,\n kiCost: 22,\n staminaCost: 24,\n accuracy: 0.88,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.65,\n },\n executionTime: 840,\n recoveryTime: 1400,\n critChance: 0.24,\n critMultiplier: 2.0,\n effects: [],\n // Animation: Jaw manipulation (grapple-based dislocation)\n animationType: AnimationType.GRAPPLE,\n animationSpeed: 0.7,\n animationCategory: \"grapple\", // Type: shared category\n animationId: \"darkops_jaw_dislocation\", // ID: unique 1-1 mapping\n },\n {\n id: \"darkops_temple_strike\",\n name: {\n korean: \"관자놀이급타\",\n english: \"Temple Knockout Strike\",\n romanized: \"Gwanja-nori Geubta\",\n },\n koreanName: \"관자놀이급타\",\n englishName: \"Temple Knockout Strike\",\n romanized: \"Gwanja-nori Geubta\",\n description: {\n korean: \"관자놀이를 정확히 타격하여 즉시 의식 상실. 블랙옵스 치명 타격.\",\n english:\n \"Precise temple strike causing immediate unconsciousness. Black Ops lethal targeting.\",\n },\n stance: TrigramStance.LI,\n type: CombatAttackType.STRIKE,\n damageType: DamageType.BLUNT,\n damage: 38,\n kiCost: 32,\n staminaCost: 28,\n accuracy: 0.92,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 770,\n recoveryTime: 1330,\n critChance: 0.32,\n critMultiplier: 2.4,\n effects: [],\n // Animation: Temple strike\n animationType: AnimationType.HOOK,\n animationSpeed: 0.75,\n animationCategory: \"strike\", // Type: shared category\n animationId: \"darkops_temple_strike\", // ID: unique 1-1 mapping\n },\n {\n id: \"darkops_achilles_sever\",\n name: {\n korean: \"아킬레스절단\",\n english: \"Achilles Tendon Sever\",\n romanized: \"Akilles Jeoldan\",\n },\n koreanName: \"아킬레스절단\",\n englishName: \"Achilles Tendon Sever\",\n romanized: \"Akilles Jeoldan\",\n description: {\n korean: \"아킬레스건을 공격하여 이동 불가. 암흑특공대 무력화 기술.\",\n english:\n \"Achilles tendon strike disabling mobility. Shadow Commando incapacitation technique.\",\n },\n stance: TrigramStance.GON,\n type: CombatAttackType.KICK,\n damageType: DamageType.CRUSHING,\n damage: 32,\n kiCost: 26,\n staminaCost: 28,\n accuracy: 0.84,\n reachConfig: {\n bodyPart: \"leg\",\n techniqueType: \"kick\",\n baseExtension: 0.95,\n },\n executionTime: 909,\n recoveryTime: 1470,\n critChance: 0.26,\n critMultiplier: 2.2,\n effects: [],\n // Animation: Low cutting kick\n animationType: AnimationType.LOW_KICK,\n animationSpeed: 0.75,\n animationCategory: \"kick\", // Type: shared category\n animationId: \"darkops_achilles_sever\", // ID: unique 1-1 mapping\n },\n {\n id: \"darkops_ear_strike\",\n name: {\n korean: \"귓바퀴타격\",\n english: \"Ear Box Strike\",\n romanized: \"Gwitbakwi Tagyeok\",\n },\n koreanName: \"귓바퀴타격\",\n englishName: \"Ear Box Strike\",\n romanized: \"Gwitbakwi Tagyeok\",\n description: {\n korean:\n \"양쪽 귀를 동시 타격하여 고막 파열과 평형 상실. 심야작전부대 방향 감각 교란.\",\n english:\n \"Simultaneous ear strikes rupturing eardrums and disrupting balance. Nightfall Squadron disorientation tactic.\",\n },\n stance: TrigramStance.SON,\n type: CombatAttackType.STRIKE,\n damageType: DamageType.BLUNT,\n damage: 28,\n kiCost: 24,\n staminaCost: 22,\n accuracy: 0.86,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 700,\n recoveryTime: 1260,\n critChance: 0.22,\n critMultiplier: 2.0,\n effects: [],\n // Animation: Double palm strike\n animationType: AnimationType.PALM_STRIKE,\n animationSpeed: 0.75,\n animationCategory: \"strike\", // Type: shared category\n animationId: \"darkops_ear_strike\", // ID: unique 1-1 mapping\n },\n {\n id: \"darkops_eye_gouge\",\n name: {\n korean: \"안구공격\",\n english: \"Eye Strike\",\n romanized: \"Angu Gonggyeok\",\n },\n koreanName: \"안구공격\",\n englishName: \"Eye Strike\",\n romanized: \"Angu Gonggyeok\",\n description: {\n korean:\n \"눈을 정밀 공격하여 시각 상실과 전투 무력화. 암살자 특화 치명 기술.\",\n english:\n \"Precise eye strike causing vision loss and combat incapacitation. Assassin specialty lethal technique.\",\n },\n stance: TrigramStance.LI,\n type: CombatAttackType.THRUST,\n damageType: DamageType.PIERCING,\n damage: 36,\n kiCost: 30,\n staminaCost: 26,\n accuracy: 0.9,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.95,\n },\n executionTime: 700,\n recoveryTime: 1260,\n critChance: 0.3,\n critMultiplier: 2.4,\n effects: [],\n // Animation: Precision finger thrust\n animationType: AnimationType.JAB,\n animationSpeed: 0.75,\n animationCategory: \"strike\", // Type: shared category\n animationId: \"darkops_eye_gouge\", // ID: unique 1-1 mapping\n },\n] as const;\n\n// =====================================================\n// DARK OPS CONFIGURATION\n// =====================================================\n\n/**\n * Dark Ops archetype bonus configuration\n * 암살자 (Amsalja) gets +30% effectiveness with all Dark Ops techniques\n */\nexport const DARK_OPS_ARCHETYPE_BONUSES: Record<PlayerArchetype, number> = {\n [PlayerArchetype.AMSALJA]: 1.3, // +30% for Shadow Assassin archetype\n [PlayerArchetype.JEONGBO_YOWON]: 1.15, // +15% for Intelligence Operative\n [PlayerArchetype.HACKER]: 1.1, // +10% for Cyber Warrior (tech synergy)\n [PlayerArchetype.MUSA]: 0.85, // -15% for Traditional Warrior (dishonorable)\n [PlayerArchetype.JOJIK_POKRYEOKBAE]: 1.05, // +5% for Organized Crime (ruthless)\n} as const;\n\n/**\n * Dark Ops night operations bonus\n * Time-of-day effectiveness multiplier (simulated)\n */\nexport const DARK_OPS_NIGHT_BONUS = {\n night: 1.25, // +25% at night (00:00 - 06:00, 18:00 - 23:59)\n day: 1.0, // Normal during day (06:00 - 18:00)\n twilight: 1.15, // +15% during twilight (05:00 - 07:00, 17:00 - 19:00)\n} as const;\n\n/**\n * Dark Ops special effects configuration\n */\nexport const DARK_OPS_SPECIAL_EFFECTS = {\n silent: {\n korean: \"무음 공격\",\n english: \"Silent Attack\",\n description: {\n korean: \"적에게 경보를 발생시키지 않음\",\n english: \"Does not alert enemies\",\n },\n noAlert: true,\n },\n paralysis: {\n korean: \"마비\",\n english: \"Paralysis\",\n description: {\n korean: \"일시적 또는 영구적 사지 마비\",\n english: \"Temporary or permanent limb paralysis\",\n },\n duration: 3000, // 3 seconds\n },\n unconsciousness: {\n korean: \"의식 상실\",\n english: \"Unconsciousness\",\n description: {\n korean: \"즉시 의식을 잃음\",\n english: \"Immediate loss of consciousness\",\n },\n duration: 5000, // 5 seconds\n },\n breathingDifficulty: {\n korean: \"호흡 곤란\",\n english: \"Breathing Difficulty\",\n description: {\n korean: \"호흡 재생 -75%\",\n english: \"Breathing regen -75%\",\n },\n staminaRegenPenalty: -0.75,\n duration: 5000, // 5 seconds\n },\n disorientation: {\n korean: \"방향 감각 상실\",\n english: \"Disorientation\",\n description: {\n korean: \"정확도 -50%\",\n english: \"Accuracy -50%\",\n },\n accuracyPenalty: -0.5,\n duration: 4000, // 4 seconds\n },\n} as const;\n\n// =====================================================\n// HELPER FUNCTIONS\n// =====================================================\n\n/**\n * Get Dark Ops techniques count\n */\nexport const DARK_OPS_TECHNIQUE_COUNT = DARK_OPS_TECHNIQUES.length;\n\n/**\n * Get Dark Ops technique by ID\n */\nexport function getDarkOpsTechniqueById(\n id: string,\n): KoreanTechnique | undefined {\n return DARK_OPS_TECHNIQUES.find((t) => t.id === id);\n}\n\n/**\n * Get all Dark Ops techniques for a specific unit\n */\nexport function getDarkOpsTechniquesByUnit(\n unitType: keyof typeof DARK_OPS_UNITS,\n): readonly KoreanTechnique[] {\n // Map technique IDs to units based on prefix patterns\n const unitPrefixMap: Record<string, string[]> = {\n DARK_OPERATIONS: [\"darkops_silent_carotid\", \"darkops_jaw_dislocation\"],\n SHADOW_COMMANDO: [\n \"darkops_liver_disruption\",\n \"darkops_kidney_strike\",\n \"darkops_achilles_sever\",\n ],\n NIGHTFALL_SQUADRON: [\n \"darkops_throat_strike\",\n \"darkops_solar_plexus_paralyze\",\n \"darkops_ear_strike\",\n ],\n BLACK_OPS_TASK_FORCE: [\n \"darkops_nerve_paralysis\",\n \"darkops_brachial_plexus_strike\",\n \"darkops_femoral_nerve_strike\",\n \"darkops_temple_strike\",\n ],\n DEEP_SEA_UNIT: [\"darkops_rear_choke\", \"darkops_spinal_strike\"],\n };\n\n const techniqueIds = unitPrefixMap[unitType] ?? [];\n return DARK_OPS_TECHNIQUES.filter((t) => techniqueIds.includes(t.id));\n}\n\n/**\n * Get archetype effectiveness multiplier for Dark Ops\n */\nexport function getDarkOpsArchetypeBonus(archetype: PlayerArchetype): number {\n return DARK_OPS_ARCHETYPE_BONUSES[archetype] ?? 1.0;\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GamTechniques.js","names":[],"sources":["../../../../src/systems/trigram/techniques/GamTechniques.ts"],"sourcesContent":["/**\n * ☵ 감 (GAM) - Water Stance Techniques\n * 수류반격 - Adaptive Flow (Hapkido Redirect & Counter)\n *\n * The Water stance (감괘) embodies adaptation and redirection.\n * Based on Hapkido (합기도) principles of using opponent's force\n * against them, flowing around attacks like water around rocks.\n *\n * Philosophy: \"물처럼 흘러 적의 힘을 이용하라\"\n * Flow like water and use the enemy's force\n *\n * @module GamTechniques\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 * GAM stance techniques - Water / Adaptive Flow\n * Hapkido redirect and counter techniques\n *\n * Technique characteristics:\n * - Counter-attack focus\n * - Force redirection\n * - Flowing defense-to-offense\n * - Throws using opponent's momentum\n *\n * Animation speeds are calibrated for flowing responses:\n * - Reactive: 1.1-1.2 (quick counters)\n * - Normal: 1.0 (standard redirects)\n * - Controlled: 0.9 (throwing techniques)\n */\nexport const GAM_TECHNIQUES: readonly TrigramStanceTechnique[] = [\n // ============= Primary Technique =============\n {\n id: \"gam_water_counter\",\n name: {\n korean: \"수류반격\",\n english: \"Water Counter\",\n romanized: \"suryu_bangyeok\",\n },\n koreanName: \"수류반격\",\n englishName: \"Water Counter\",\n romanized: \"suryu_bangyeok\",\n description: {\n korean: \"물의 흐름으로 적의 공격을 받아넘기는 반격\",\n english: \"Counter-attack that flows like water\",\n },\n stance: TrigramStance.GAM,\n type: CombatAttackType.COUNTER_ATTACK,\n damageType: DamageType.BLUNT,\n damage: 32,\n kiCost: 20,\n staminaCost: 12,\n accuracy: 0.85,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 1.05,\n },\n executionTime: 840,\n recoveryTime: 1260,\n critChance: 0.18,\n critMultiplier: 1.7,\n effects: [],\n // Combo metadata - Flowing counter starter\n comboWindow: 200,\n comboPriority: 1, // Starter - initiates counter flow\n pressureStacks: 2,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"counter\", // Type: shared category\n animationId: \"gam_water_counter\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Flowing counter-attack (matches TechniqueAnimationMapping)\n animationType: AnimationType.WATER_COUNTER,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"medium\",\n speed: 1.0,\n },\n\n // ============= Throwing Techniques =============\n {\n id: \"gam_redirect_throw\",\n name: {\n korean: \"유도던지기\",\n english: \"Redirect Throw\",\n romanized: \"yudo-deonjigi\",\n },\n koreanName: \"유도던지기\",\n englishName: \"Redirect Throw\",\n romanized: \"yudo-deonjigi\",\n description: {\n korean: \"합기도 방향전환으로 상대의 힘을 이용해 던짐\",\n english: \"Hapkido redirect using opponent's force for throw\",\n },\n stance: TrigramStance.GAM,\n type: CombatAttackType.THROW,\n damageType: DamageType.BLUNT,\n damage: 30,\n kiCost: 18,\n staminaCost: 24,\n accuracy: 0.82,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.7,\n },\n executionTime: 1190,\n recoveryTime: 1680,\n critChance: 0.16,\n critMultiplier: 1.8,\n effects: [],\n // Combo metadata - Force redirection throw\n comboWindow: 200,\n comboPriority: 2, // Mid-chain - momentum redirection\n pressureStacks: 2,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"throw\", // Type: shared category\n animationId: \"gam_redirect_throw\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Redirect throw motion\n animationType: AnimationType.GAM_REDIRECT_THROW,\n animationSpeed: 0.7,\n category: \"medium\",\n range: \"short\",\n speed: 0.9,\n },\n {\n id: \"gam_hip_throw\",\n name: {\n korean: \"허리던지기\",\n english: \"Hip Throw\",\n romanized: \"heori-deonjigi\",\n },\n koreanName: \"허리던지기\",\n englishName: \"Hip Throw\",\n romanized: \"heori-deonjigi\",\n description: {\n korean: \"합기도 허리 던지기로 상대를 제압\",\n english: \"Hapkido hip throw for control\",\n },\n stance: TrigramStance.GAM,\n type: CombatAttackType.THROW,\n damageType: DamageType.BLUNT,\n damage: 34,\n kiCost: 22,\n staminaCost: 28,\n accuracy: 0.8,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.7,\n },\n executionTime: 1260,\n recoveryTime: 1819,\n critChance: 0.2,\n critMultiplier: 1.9,\n effects: [],\n // Combo metadata - Control throw finisher\n comboWindow: 200,\n comboPriority: 3, // Finisher - dominant position throw\n pressureStacks: 3,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"throw\", // Type: shared category\n animationId: \"gam_hip_throw\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Hip throw motion\n animationType: AnimationType.GAM_HIP_THROW,\n animationSpeed: 0.65,\n category: \"medium\",\n range: \"short\",\n speed: 0.85,\n },\n\n // ============= Blocking & Parry Techniques =============\n {\n id: \"gam_flowing_block\",\n name: {\n korean: \"유수막기\",\n english: \"Flowing Block\",\n romanized: \"yusu-makgi\",\n },\n koreanName: \"유수막기\",\n englishName: \"Flowing Block\",\n romanized: \"yusu-makgi\",\n description: {\n korean: \"물의 흐름처럼 부드럽게 막고 반격\",\n english: \"Soft flowing block leading to counter\",\n },\n stance: TrigramStance.GAM,\n type: CombatAttackType.BLOCK,\n damageType: DamageType.BLUNT,\n damage: 20,\n kiCost: 10,\n staminaCost: 14,\n accuracy: 0.92,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 560,\n recoveryTime: 979,\n critChance: 0.08,\n critMultiplier: 1.3,\n effects: [],\n // Combo metadata - Defensive flow starter\n comboWindow: 200,\n comboPriority: 1, // Starter - soft defensive entry\n pressureStacks: 1,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"defensive\", // Type: shared category\n animationId: \"gam_flowing_block\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Soft blocking motion\n animationType: AnimationType.BLOCK,\n animationSpeed: 0.75,\n category: \"light\",\n range: \"short\",\n speed: 1.0,\n },\n {\n id: \"gam_circular_parry\",\n name: {\n korean: \"원형받기\",\n english: \"Circular Parry\",\n romanized: \"wonhyeong-batgi\",\n },\n koreanName: \"원형받기\",\n englishName: \"Circular Parry\",\n romanized: \"wonhyeong-batgi\",\n description: {\n korean: \"합기도 원형 움직임으로 공격을 무력화\",\n english: \"Hapkido circular motion neutralizing attack\",\n },\n stance: TrigramStance.GAM,\n type: CombatAttackType.COUNTER_ATTACK,\n damageType: DamageType.PRESSURE,\n damage: 24,\n kiCost: 14,\n staminaCost: 18,\n accuracy: 0.88,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 1.05,\n },\n executionTime: 770,\n recoveryTime: 1190,\n critChance: 0.12,\n critMultiplier: 1.5,\n effects: [],\n // Combo metadata - Neutralizing redirect\n comboWindow: 200,\n comboPriority: 2, // Mid-chain - circular neutralization\n pressureStacks: 2,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"defensive\", // Type: shared category\n animationId: \"gam_circular_parry\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Circular parry motion\n animationType: AnimationType.GAM_CIRCULAR_PARRY,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"medium\",\n speed: 1.0,\n },\n\n // ============= Joint Control Counter =============\n {\n id: \"gam_wrist_twist_counter\",\n name: {\n korean: \"손목비틀기반격\",\n english: \"Wrist Twist Counter\",\n romanized: \"sonmok-biteulgi-bangyeok\",\n },\n koreanName: \"손목비틀기반격\",\n englishName: \"Wrist Twist Counter\",\n romanized: \"sonmok-biteulgi-bangyeok\",\n description: {\n korean: \"공격을 받아 손목을 비틀어 반격\",\n english: \"Counter by catching and twisting wrist\",\n },\n stance: TrigramStance.GAM,\n type: CombatAttackType.COUNTER_ATTACK,\n damageType: DamageType.JOINT,\n damage: 28,\n kiCost: 16,\n staminaCost: 20,\n accuracy: 0.90,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.65,\n },\n executionTime: 979,\n recoveryTime: 1400,\n critChance: 0.25,\n critMultiplier: 2.2,\n effects: [],\n // Combo metadata - Joint control counter finisher\n comboWindow: 200,\n comboPriority: 3, // Finisher - vital point joint lock\n pressureStacks: 3,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"joint_lock\", // Type: shared category\n animationId: \"gam_wrist_twist_counter\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Wrist control transition\n animationType: AnimationType.GAM_WRIST_TWIST_COUNTER,\n animationSpeed: 0.75,\n category: \"special\",\n range: \"short\",\n speed: 1.0,\n },\n] as const;\n\n/**\n * Get GAM techniques count\n */\nexport const GAM_TECHNIQUE_COUNT = GAM_TECHNIQUES.length;\n\n/**\n * Get GAM technique by ID\n */\nexport function getGamTechniqueById(id: string): TrigramStanceTechnique | undefined {\n return GAM_TECHNIQUES.find((t) => t.id === id);\n}\n\n/**\n * Get all GAM techniques by attack type\n */\nexport function getGamTechniquesByType(\n type: CombatAttackType\n): readonly TrigramStanceTechnique[] {\n return GAM_TECHNIQUES.filter((t) => t.type === type);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"GamTechniques.js","names":[],"sources":["../../../../src/systems/trigram/techniques/GamTechniques.ts"],"sourcesContent":["/**\n * ☵ 감 (GAM) - Water Stance Techniques\n * 수류반격 - Adaptive Flow (Hapkido Redirect & Counter)\n *\n * The Water stance (감괘) embodies adaptation and redirection.\n * Based on Hapkido (합기도) principles of using opponent's force\n * against them, flowing around attacks like water around rocks.\n *\n * Philosophy: \"물처럼 흘러 적의 힘을 이용하라\"\n * Flow like water and use the enemy's force\n *\n * @module GamTechniques\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 * GAM stance techniques - Water / Adaptive Flow\n * Hapkido redirect and counter techniques\n *\n * Technique characteristics:\n * - Counter-attack focus\n * - Force redirection\n * - Flowing defense-to-offense\n * - Throws using opponent's momentum\n *\n * Animation speeds are calibrated for flowing responses:\n * - Reactive: 1.1-1.2 (quick counters)\n * - Normal: 1.0 (standard redirects)\n * - Controlled: 0.9 (throwing techniques)\n */\nexport const GAM_TECHNIQUES: readonly TrigramStanceTechnique[] = [\n // ============= Primary Technique =============\n {\n id: \"gam_water_counter\",\n name: {\n korean: \"수류반격\",\n english: \"Water Counter\",\n romanized: \"suryu_bangyeok\",\n },\n koreanName: \"수류반격\",\n englishName: \"Water Counter\",\n romanized: \"suryu_bangyeok\",\n description: {\n korean: \"물의 흐름으로 적의 공격을 받아넘기는 반격\",\n english: \"Counter-attack that flows like water\",\n },\n stance: TrigramStance.GAM,\n type: CombatAttackType.COUNTER_ATTACK,\n damageType: DamageType.BLUNT,\n damage: 32,\n kiCost: 20,\n staminaCost: 12,\n accuracy: 0.85,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 1.05,\n },\n executionTime: 840,\n recoveryTime: 1260,\n critChance: 0.18,\n critMultiplier: 1.7,\n effects: [],\n // Combo metadata - Flowing counter starter\n comboWindow: 200,\n comboPriority: 1, // Starter - initiates counter flow\n pressureStacks: 2,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"counter\", // Type: shared category\n animationId: \"gam_water_counter\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Flowing counter-attack (matches TechniqueAnimationMapping)\n animationType: AnimationType.WATER_COUNTER,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"medium\",\n speed: 1.0,\n },\n\n // ============= Throwing Techniques =============\n {\n id: \"gam_redirect_throw\",\n name: {\n korean: \"유도던지기\",\n english: \"Redirect Throw\",\n romanized: \"yudo-deonjigi\",\n },\n koreanName: \"유도던지기\",\n englishName: \"Redirect Throw\",\n romanized: \"yudo-deonjigi\",\n description: {\n korean: \"합기도 방향전환으로 상대의 힘을 이용해 던짐\",\n english: \"Hapkido redirect using opponent's force for throw\",\n },\n stance: TrigramStance.GAM,\n type: CombatAttackType.THROW,\n damageType: DamageType.BLUNT,\n damage: 30,\n kiCost: 18,\n staminaCost: 24,\n accuracy: 0.82,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.7,\n },\n executionTime: 1190,\n recoveryTime: 1680,\n critChance: 0.16,\n critMultiplier: 1.8,\n effects: [],\n // Combo metadata - Force redirection throw\n comboWindow: 200,\n comboPriority: 2, // Mid-chain - momentum redirection\n pressureStacks: 2,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"throw\", // Type: shared category\n animationId: \"gam_redirect_throw\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Redirect throw motion\n animationType: AnimationType.GAM_REDIRECT_THROW,\n animationSpeed: 0.7,\n category: \"medium\",\n range: \"short\",\n speed: 0.9,\n },\n {\n id: \"gam_hip_throw\",\n name: {\n korean: \"허리던지기\",\n english: \"Hip Throw\",\n romanized: \"heori-deonjigi\",\n },\n koreanName: \"허리던지기\",\n englishName: \"Hip Throw\",\n romanized: \"heori-deonjigi\",\n description: {\n korean: \"합기도 허리 던지기로 상대를 제압\",\n english: \"Hapkido hip throw for control\",\n },\n stance: TrigramStance.GAM,\n type: CombatAttackType.THROW,\n damageType: DamageType.BLUNT,\n damage: 34,\n kiCost: 22,\n staminaCost: 28,\n accuracy: 0.8,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.7,\n },\n executionTime: 1260,\n recoveryTime: 1819,\n critChance: 0.2,\n critMultiplier: 1.9,\n effects: [],\n // Combo metadata - Control throw finisher\n comboWindow: 200,\n comboPriority: 3, // Finisher - dominant position throw\n pressureStacks: 3,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"throw\", // Type: shared category\n animationId: \"gam_hip_throw\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Hip throw motion\n animationType: AnimationType.GAM_HIP_THROW,\n animationSpeed: 0.65,\n category: \"medium\",\n range: \"short\",\n speed: 0.85,\n },\n\n // ============= Blocking & Parry Techniques =============\n {\n id: \"gam_flowing_block\",\n name: {\n korean: \"유수막기\",\n english: \"Flowing Block\",\n romanized: \"yusu-makgi\",\n },\n koreanName: \"유수막기\",\n englishName: \"Flowing Block\",\n romanized: \"yusu-makgi\",\n description: {\n korean: \"물의 흐름처럼 부드럽게 막고 반격\",\n english: \"Soft flowing block leading to counter\",\n },\n stance: TrigramStance.GAM,\n type: CombatAttackType.BLOCK,\n damageType: DamageType.BLUNT,\n damage: 20,\n kiCost: 10,\n staminaCost: 14,\n accuracy: 0.92,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 560,\n recoveryTime: 979,\n critChance: 0.08,\n critMultiplier: 1.3,\n effects: [],\n // Combo metadata - Defensive flow starter\n comboWindow: 200,\n comboPriority: 1, // Starter - soft defensive entry\n pressureStacks: 1,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"defensive\", // Type: shared category\n animationId: \"gam_flowing_block\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Soft blocking motion\n animationType: AnimationType.BLOCK,\n animationSpeed: 0.75,\n category: \"light\",\n range: \"short\",\n speed: 1.0,\n },\n {\n id: \"gam_circular_parry\",\n name: {\n korean: \"원형받기\",\n english: \"Circular Parry\",\n romanized: \"wonhyeong-batgi\",\n },\n koreanName: \"원형받기\",\n englishName: \"Circular Parry\",\n romanized: \"wonhyeong-batgi\",\n description: {\n korean: \"합기도 원형 움직임으로 공격을 무력화\",\n english: \"Hapkido circular motion neutralizing attack\",\n },\n stance: TrigramStance.GAM,\n type: CombatAttackType.COUNTER_ATTACK,\n damageType: DamageType.PRESSURE,\n damage: 24,\n kiCost: 14,\n staminaCost: 18,\n accuracy: 0.88,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 1.05,\n },\n executionTime: 770,\n recoveryTime: 1190,\n critChance: 0.12,\n critMultiplier: 1.5,\n effects: [],\n // Combo metadata - Neutralizing redirect\n comboWindow: 200,\n comboPriority: 2, // Mid-chain - circular neutralization\n pressureStacks: 2,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"defensive\", // Type: shared category\n animationId: \"gam_circular_parry\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Circular parry motion\n animationType: AnimationType.GAM_CIRCULAR_PARRY,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"medium\",\n speed: 1.0,\n },\n\n // ============= Joint Control Counter =============\n {\n id: \"gam_wrist_twist_counter\",\n name: {\n korean: \"손목비틀기반격\",\n english: \"Wrist Twist Counter\",\n romanized: \"sonmok-biteulgi-bangyeok\",\n },\n koreanName: \"손목비틀기반격\",\n englishName: \"Wrist Twist Counter\",\n romanized: \"sonmok-biteulgi-bangyeok\",\n description: {\n korean: \"공격을 받아 손목을 비틀어 반격\",\n english: \"Counter by catching and twisting wrist\",\n },\n stance: TrigramStance.GAM,\n type: CombatAttackType.COUNTER_ATTACK,\n damageType: DamageType.JOINT,\n damage: 28,\n kiCost: 16,\n staminaCost: 20,\n accuracy: 0.90,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.65,\n },\n executionTime: 979,\n recoveryTime: 1400,\n critChance: 0.25,\n critMultiplier: 2.2,\n effects: [],\n // Combo metadata - Joint control counter finisher\n comboWindow: 200,\n comboPriority: 3, // Finisher - vital point joint lock\n pressureStacks: 3,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"joint_lock\", // Type: shared category\n animationId: \"gam_wrist_twist_counter\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Wrist control transition\n animationType: AnimationType.GAM_WRIST_TWIST_COUNTER,\n animationSpeed: 0.75,\n category: \"special\",\n range: \"short\",\n speed: 1.0,\n },\n] as const;\n\n/**\n * Get GAM techniques count\n */\nexport const GAM_TECHNIQUE_COUNT = GAM_TECHNIQUES.length;\n\n/**\n * Get GAM technique by ID\n */\nexport function getGamTechniqueById(id: string): TrigramStanceTechnique | undefined {\n return GAM_TECHNIQUES.find((t) => t.id === id);\n}\n\n/**\n * Get all GAM techniques by attack type\n */\nexport function getGamTechniquesByType(\n type: CombatAttackType\n): readonly TrigramStanceTechnique[] {\n return GAM_TECHNIQUES.filter((t) => t.type === type);\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GanTechniques.js","names":[],"sources":["../../../../src/systems/trigram/techniques/GanTechniques.ts"],"sourcesContent":["/**\n * ☶ 간 (GAN) - Mountain Stance Techniques\n * 반석방어 - Immovable Defense (Hapkido Defensive Mastery)\n *\n * The Mountain stance (간괘) embodies immovable defense and patient counter.\n * Based on Hapkido (합기도) defensive principles - rooted and unshakeable\n * like a mountain, waiting for the perfect moment to counter.\n *\n * Philosophy: \"산처럼 굳건히 서서 때를 기다려라\"\n * Stand firm like a mountain and wait for the moment\n *\n * **ENHANCED DEFENSIVE MECHANICS:**\n * - Block timing windows (blockWindow): 200-350ms for precise defense\n * - Perfect block windows (perfectBlockWindow): 60-100ms for optimal timing\n * - Damage reduction (damageReduction): 50-75% damage reduction on successful blocks\n * - Stability bonuses (stabilityBonus): 120-180% fortitude increase\n * - Rooting effects (rootingEffect): Ground connection for immovable stance\n * - Optimized execution times: 250-800ms for defensive reactions\n *\n * All 6 techniques now include defensive properties for:\n * - Immovable defense visualization\n * - Block timing indicators\n * - Damage absorption feedback\n * - Mountain/earth-themed effects\n *\n * @module GanTechniques\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 * GAN stance techniques - Mountain / Immovable Defense\n * Hapkido defensive mastery and patient counters\n *\n * Technique characteristics:\n * - Superior blocking capability\n * - Rooted defensive stances\n * - Devastating counter-attacks\n * - Control through position\n *\n * Animation speeds are calibrated for defensive timing:\n * - Quick defense: 1.1-1.2 (rapid blocks)\n * - Normal: 1.0 (standard defense)\n * - Powerful counter: 0.9-1.0 (deliberate strikes)\n */\nexport const GAN_TECHNIQUES: readonly TrigramStanceTechnique[] = [\n // ============= Primary Technique =============\n {\n id: \"gan_rock_defense\",\n name: {\n korean: \"반석방어\",\n english: \"Rock Defense\",\n romanized: \"banseok_bangeo\",\n },\n koreanName: \"반석방어\",\n englishName: \"Rock Defense\",\n romanized: \"banseok_bangeo\",\n description: {\n korean: \"바위처럼 견고한 방어 자세\",\n english: \"Solid defense like a rock\",\n },\n stance: TrigramStance.GAN,\n type: CombatAttackType.BLOCK,\n damageType: DamageType.BLUNT,\n damage: 15,\n kiCost: 5,\n staminaCost: 8,\n accuracy: 0.95,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 420,\n recoveryTime: 700,\n critChance: 0.02,\n critMultiplier: 1.0,\n effects: [],\n // Combo metadata - Solid defensive base\n comboWindow: 250,\n comboPriority: 1, // Starter - establishes defensive position\n pressureStacks: 1,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"defensive\", // Type: shared category\n animationId: \"gan_rock_defense\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Solid blocking stance\n animationType: AnimationType.GAN_ROCK_DEFENSE_BLOCK,\n animationSpeed: 0.75,\n category: \"light\",\n range: \"short\",\n speed: 1.2,\n // Defensive mechanics for immovable defense\n blockWindow: 300, // 300ms block timing window\n perfectBlockWindow: 80, // 80ms perfect block window\n damageReduction: 0.65, // 65% damage reduction\n stabilityBonus: 1.3, // 130% stability increase\n rootingEffect: true, // Creates rooting ground connection\n },\n\n // ============= Defensive Stance Techniques =============\n {\n id: \"gan_immovable_stance\",\n name: {\n korean: \"부동자세\",\n english: \"Immovable Stance\",\n romanized: \"budong-jase\",\n },\n koreanName: \"부동자세\",\n englishName: \"Immovable Stance\",\n romanized: \"budong-jase\",\n description: {\n korean: \"산처럼 움직이지 않는 견고한 방어 자세\",\n english: \"Immovable defensive stance like a mountain\",\n },\n stance: TrigramStance.GAN,\n type: CombatAttackType.BLOCK,\n damageType: DamageType.BLUNT,\n damage: 12,\n kiCost: 8,\n staminaCost: 10,\n accuracy: 0.98,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 350,\n recoveryTime: 630,\n critChance: 0.04,\n critMultiplier: 1.1,\n effects: [],\n // Combo metadata - Rooted defense stance\n comboWindow: 250,\n comboPriority: 1, // Starter - immovable foundation\n pressureStacks: 1,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"stance\", // Type: shared category\n animationId: \"gan_immovable_stance\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Rooted defensive stance\n animationType: AnimationType.GAN_IMMOVABLE_STANCE,\n animationSpeed: 0.75,\n category: \"light\",\n range: \"short\",\n speed: 1.0,\n // Defensive mechanics for maximum stability\n blockWindow: 350, // 350ms block timing window (longer for stance)\n perfectBlockWindow: 100, // 100ms perfect block window\n damageReduction: 0.75, // 75% damage reduction (highest)\n stabilityBonus: 1.8, // 180% stability increase (maximum)\n rootingEffect: true, // Deep rooting ground connection\n },\n {\n id: \"gan_iron_block\",\n name: {\n korean: \"철벽막기\",\n english: \"Iron Wall Block\",\n romanized: \"cheolbyeok-makgi\",\n },\n koreanName: \"철벽막기\",\n englishName: \"Iron Wall Block\",\n romanized: \"cheolbyeok-makgi\",\n description: {\n korean: \"합기도 강력한 막기로 공격을 완전히 차단\",\n english: \"Hapkido powerful block completely stopping attack\",\n },\n stance: TrigramStance.GAN,\n type: CombatAttackType.BLOCK,\n damageType: DamageType.BLUNT,\n damage: 20,\n kiCost: 12,\n staminaCost: 14,\n accuracy: 0.94,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 1.05,\n },\n executionTime: 560,\n recoveryTime: 909,\n critChance: 0.06,\n critMultiplier: 1.2,\n effects: [],\n // Combo metadata - Powerful blocking technique\n comboWindow: 250,\n comboPriority: 1, // Starter - wall defense\n pressureStacks: 1,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"defensive\", // Type: shared category\n animationId: \"gan_iron_block\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Powerful blocking motion (matches TechniqueAnimationMapping)\n animationType: AnimationType.IRON_BLOCK,\n animationSpeed: 0.65,\n category: \"light\",\n range: \"medium\",\n speed: 0.85,\n // Defensive mechanics for powerful block\n blockWindow: 280, // 280ms block timing window\n perfectBlockWindow: 70, // 70ms perfect block window (tight)\n damageReduction: 0.7, // 70% damage reduction\n stabilityBonus: 1.5, // 150% stability increase\n rootingEffect: true, // Strong rooting effect\n },\n\n // ============= Counter-Attack Techniques =============\n {\n id: \"gan_counter_strike\",\n name: {\n korean: \"반격타\",\n english: \"Counter Strike\",\n romanized: \"bangyeok-ta\",\n },\n koreanName: \"반격타\",\n englishName: \"Counter Strike\",\n romanized: \"bangyeok-ta\",\n description: {\n korean: \"방어 후 즉시 가하는 강력한 반격\",\n english: \"Powerful counter strike immediately after defense\",\n },\n stance: TrigramStance.GAN,\n type: CombatAttackType.COUNTER_ATTACK,\n damageType: DamageType.BLUNT,\n damage: 30,\n kiCost: 16,\n staminaCost: 20,\n accuracy: 0.92,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 1.05,\n },\n executionTime: 840,\n recoveryTime: 1330,\n critChance: 0.26,\n critMultiplier: 2.2,\n effects: [],\n // Combo metadata - Devastating counter strike\n comboWindow: 250,\n comboPriority: 3, // Finisher - powerful counter blow\n pressureStacks: 3,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"counter\", // Type: shared category\n animationId: \"gan_counter_strike\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Powerful counter attack\n animationType: AnimationType.GAN_COUNTER_STRIKE,\n animationSpeed: 0.75,\n category: \"special\",\n range: \"medium\",\n speed: 1.0,\n // Defensive mechanics for counter timing\n blockWindow: 200, // 200ms block window (tight for counter)\n perfectBlockWindow: 60, // 60ms perfect block window (very tight)\n damageReduction: 0.5, // 50% damage reduction (counter-focused)\n stabilityBonus: 1.2, // 120% stability during counter setup\n rootingEffect: false, // No rooting for counter mobility\n },\n {\n id: \"gan_reversal_technique\",\n name: {\n korean: \"역기술\",\n english: \"Reversal Technique\",\n romanized: \"yeok-gisul\",\n },\n koreanName: \"역기술\",\n englishName: \"Reversal Technique\",\n romanized: \"yeok-gisul\",\n description: {\n korean: \"상대의 공격을 받아 역으로 제압\",\n english: \"Receiving attack and reversing into control\",\n },\n stance: TrigramStance.GAN,\n type: CombatAttackType.COUNTER_ATTACK,\n damageType: DamageType.JOINT,\n damage: 28,\n kiCost: 18,\n staminaCost: 22,\n accuracy: 0.84,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 1120,\n recoveryTime: 1680,\n critChance: 0.18,\n critMultiplier: 1.8,\n effects: [],\n // Combo metadata - Control reversal technique\n comboWindow: 250,\n comboPriority: 2, // Mid-chain - defensive reversal\n pressureStacks: 2,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"counter\", // Type: shared category\n animationId: \"gan_reversal_technique\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Reversal motion\n animationType: AnimationType.GAN_REVERSAL_TECHNIQUE,\n animationSpeed: 0.7,\n category: \"medium\",\n range: \"short\",\n speed: 0.9,\n // Defensive mechanics for reversal\n blockWindow: 250, // 250ms block window for reversal setup\n perfectBlockWindow: 75, // 75ms perfect reversal window\n damageReduction: 0.55, // 55% damage reduction during reversal\n stabilityBonus: 1.4, // 140% stability for control\n rootingEffect: true, // Rooting for reversal control\n },\n\n // ============= Grappling Control =============\n {\n id: \"gan_mountain_stance_lock\",\n name: {\n korean: \"산세고정\",\n english: \"Mountain Stance Lock\",\n romanized: \"sanse-gojeong\",\n },\n koreanName: \"산세고정\",\n englishName: \"Mountain Stance Lock\",\n romanized: \"sanse-gojeong\",\n description: {\n korean: \"합기도 방어 자세에서 상대를 고정하고 제압\",\n english: \"Hapkido defensive position locking and controlling opponent\",\n },\n stance: TrigramStance.GAN,\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.14,\n critMultiplier: 1.6,\n effects: [],\n // Combo metadata - Immobilizing lock\n comboWindow: 250,\n comboPriority: 2, // Mid-chain - position control\n pressureStacks: 2,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"grapple\", // Type: shared category\n animationId: \"gan_mountain_stance_lock\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Standing control position\n animationType: AnimationType.GAN_MOUNTAIN_STANCE_LOCK,\n animationSpeed: 0.7,\n category: \"medium\",\n range: \"short\",\n speed: 0.9,\n // Defensive mechanics for grapple control\n blockWindow: 220, // 220ms block window during grapple setup\n perfectBlockWindow: 65, // 65ms perfect grapple window\n damageReduction: 0.6, // 60% damage reduction (grappling focus)\n stabilityBonus: 1.6, // 160% stability for grapple control\n rootingEffect: true, // Strong rooting for grapple lock\n },\n] as const;\n\n/**\n * Get GAN techniques count\n */\nexport const GAN_TECHNIQUE_COUNT = GAN_TECHNIQUES.length;\n\n/**\n * Get GAN technique by ID\n */\nexport function getGanTechniqueById(id: string): TrigramStanceTechnique | undefined {\n return GAN_TECHNIQUES.find((t) => t.id === id);\n}\n\n/**\n * Get all GAN techniques by attack type\n */\nexport function getGanTechniquesByType(\n type: CombatAttackType\n): readonly TrigramStanceTechnique[] {\n return GAN_TECHNIQUES.filter((t) => t.type === type);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"GanTechniques.js","names":[],"sources":["../../../../src/systems/trigram/techniques/GanTechniques.ts"],"sourcesContent":["/**\n * ☶ 간 (GAN) - Mountain Stance Techniques\n * 반석방어 - Immovable Defense (Hapkido Defensive Mastery)\n *\n * The Mountain stance (간괘) embodies immovable defense and patient counter.\n * Based on Hapkido (합기도) defensive principles - rooted and unshakeable\n * like a mountain, waiting for the perfect moment to counter.\n *\n * Philosophy: \"산처럼 굳건히 서서 때를 기다려라\"\n * Stand firm like a mountain and wait for the moment\n *\n * **ENHANCED DEFENSIVE MECHANICS:**\n * - Block timing windows (blockWindow): 200-350ms for precise defense\n * - Perfect block windows (perfectBlockWindow): 60-100ms for optimal timing\n * - Damage reduction (damageReduction): 50-75% damage reduction on successful blocks\n * - Stability bonuses (stabilityBonus): 120-180% fortitude increase\n * - Rooting effects (rootingEffect): Ground connection for immovable stance\n * - Optimized execution times: 250-800ms for defensive reactions\n *\n * All 6 techniques now include defensive properties for:\n * - Immovable defense visualization\n * - Block timing indicators\n * - Damage absorption feedback\n * - Mountain/earth-themed effects\n *\n * @module GanTechniques\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 * GAN stance techniques - Mountain / Immovable Defense\n * Hapkido defensive mastery and patient counters\n *\n * Technique characteristics:\n * - Superior blocking capability\n * - Rooted defensive stances\n * - Devastating counter-attacks\n * - Control through position\n *\n * Animation speeds are calibrated for defensive timing:\n * - Quick defense: 1.1-1.2 (rapid blocks)\n * - Normal: 1.0 (standard defense)\n * - Powerful counter: 0.9-1.0 (deliberate strikes)\n */\nexport const GAN_TECHNIQUES: readonly TrigramStanceTechnique[] = [\n // ============= Primary Technique =============\n {\n id: \"gan_rock_defense\",\n name: {\n korean: \"반석방어\",\n english: \"Rock Defense\",\n romanized: \"banseok_bangeo\",\n },\n koreanName: \"반석방어\",\n englishName: \"Rock Defense\",\n romanized: \"banseok_bangeo\",\n description: {\n korean: \"바위처럼 견고한 방어 자세\",\n english: \"Solid defense like a rock\",\n },\n stance: TrigramStance.GAN,\n type: CombatAttackType.BLOCK,\n damageType: DamageType.BLUNT,\n damage: 15,\n kiCost: 5,\n staminaCost: 8,\n accuracy: 0.95,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 420,\n recoveryTime: 700,\n critChance: 0.02,\n critMultiplier: 1.0,\n effects: [],\n // Combo metadata - Solid defensive base\n comboWindow: 250,\n comboPriority: 1, // Starter - establishes defensive position\n pressureStacks: 1,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"defensive\", // Type: shared category\n animationId: \"gan_rock_defense\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Solid blocking stance\n animationType: AnimationType.GAN_ROCK_DEFENSE_BLOCK,\n animationSpeed: 0.75,\n category: \"light\",\n range: \"short\",\n speed: 1.2,\n // Defensive mechanics for immovable defense\n blockWindow: 300, // 300ms block timing window\n perfectBlockWindow: 80, // 80ms perfect block window\n damageReduction: 0.65, // 65% damage reduction\n stabilityBonus: 1.3, // 130% stability increase\n rootingEffect: true, // Creates rooting ground connection\n },\n\n // ============= Defensive Stance Techniques =============\n {\n id: \"gan_immovable_stance\",\n name: {\n korean: \"부동자세\",\n english: \"Immovable Stance\",\n romanized: \"budong-jase\",\n },\n koreanName: \"부동자세\",\n englishName: \"Immovable Stance\",\n romanized: \"budong-jase\",\n description: {\n korean: \"산처럼 움직이지 않는 견고한 방어 자세\",\n english: \"Immovable defensive stance like a mountain\",\n },\n stance: TrigramStance.GAN,\n type: CombatAttackType.BLOCK,\n damageType: DamageType.BLUNT,\n damage: 12,\n kiCost: 8,\n staminaCost: 10,\n accuracy: 0.98,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 350,\n recoveryTime: 630,\n critChance: 0.04,\n critMultiplier: 1.1,\n effects: [],\n // Combo metadata - Rooted defense stance\n comboWindow: 250,\n comboPriority: 1, // Starter - immovable foundation\n pressureStacks: 1,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"stance\", // Type: shared category\n animationId: \"gan_immovable_stance\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Rooted defensive stance\n animationType: AnimationType.GAN_IMMOVABLE_STANCE,\n animationSpeed: 0.75,\n category: \"light\",\n range: \"short\",\n speed: 1.0,\n // Defensive mechanics for maximum stability\n blockWindow: 350, // 350ms block timing window (longer for stance)\n perfectBlockWindow: 100, // 100ms perfect block window\n damageReduction: 0.75, // 75% damage reduction (highest)\n stabilityBonus: 1.8, // 180% stability increase (maximum)\n rootingEffect: true, // Deep rooting ground connection\n },\n {\n id: \"gan_iron_block\",\n name: {\n korean: \"철벽막기\",\n english: \"Iron Wall Block\",\n romanized: \"cheolbyeok-makgi\",\n },\n koreanName: \"철벽막기\",\n englishName: \"Iron Wall Block\",\n romanized: \"cheolbyeok-makgi\",\n description: {\n korean: \"합기도 강력한 막기로 공격을 완전히 차단\",\n english: \"Hapkido powerful block completely stopping attack\",\n },\n stance: TrigramStance.GAN,\n type: CombatAttackType.BLOCK,\n damageType: DamageType.BLUNT,\n damage: 20,\n kiCost: 12,\n staminaCost: 14,\n accuracy: 0.94,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 1.05,\n },\n executionTime: 560,\n recoveryTime: 909,\n critChance: 0.06,\n critMultiplier: 1.2,\n effects: [],\n // Combo metadata - Powerful blocking technique\n comboWindow: 250,\n comboPriority: 1, // Starter - wall defense\n pressureStacks: 1,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"defensive\", // Type: shared category\n animationId: \"gan_iron_block\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Powerful blocking motion (matches TechniqueAnimationMapping)\n animationType: AnimationType.IRON_BLOCK,\n animationSpeed: 0.65,\n category: \"light\",\n range: \"medium\",\n speed: 0.85,\n // Defensive mechanics for powerful block\n blockWindow: 280, // 280ms block timing window\n perfectBlockWindow: 70, // 70ms perfect block window (tight)\n damageReduction: 0.7, // 70% damage reduction\n stabilityBonus: 1.5, // 150% stability increase\n rootingEffect: true, // Strong rooting effect\n },\n\n // ============= Counter-Attack Techniques =============\n {\n id: \"gan_counter_strike\",\n name: {\n korean: \"반격타\",\n english: \"Counter Strike\",\n romanized: \"bangyeok-ta\",\n },\n koreanName: \"반격타\",\n englishName: \"Counter Strike\",\n romanized: \"bangyeok-ta\",\n description: {\n korean: \"방어 후 즉시 가하는 강력한 반격\",\n english: \"Powerful counter strike immediately after defense\",\n },\n stance: TrigramStance.GAN,\n type: CombatAttackType.COUNTER_ATTACK,\n damageType: DamageType.BLUNT,\n damage: 30,\n kiCost: 16,\n staminaCost: 20,\n accuracy: 0.92,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 1.05,\n },\n executionTime: 840,\n recoveryTime: 1330,\n critChance: 0.26,\n critMultiplier: 2.2,\n effects: [],\n // Combo metadata - Devastating counter strike\n comboWindow: 250,\n comboPriority: 3, // Finisher - powerful counter blow\n pressureStacks: 3,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"counter\", // Type: shared category\n animationId: \"gan_counter_strike\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Powerful counter attack\n animationType: AnimationType.GAN_COUNTER_STRIKE,\n animationSpeed: 0.75,\n category: \"special\",\n range: \"medium\",\n speed: 1.0,\n // Defensive mechanics for counter timing\n blockWindow: 200, // 200ms block window (tight for counter)\n perfectBlockWindow: 60, // 60ms perfect block window (very tight)\n damageReduction: 0.5, // 50% damage reduction (counter-focused)\n stabilityBonus: 1.2, // 120% stability during counter setup\n rootingEffect: false, // No rooting for counter mobility\n },\n {\n id: \"gan_reversal_technique\",\n name: {\n korean: \"역기술\",\n english: \"Reversal Technique\",\n romanized: \"yeok-gisul\",\n },\n koreanName: \"역기술\",\n englishName: \"Reversal Technique\",\n romanized: \"yeok-gisul\",\n description: {\n korean: \"상대의 공격을 받아 역으로 제압\",\n english: \"Receiving attack and reversing into control\",\n },\n stance: TrigramStance.GAN,\n type: CombatAttackType.COUNTER_ATTACK,\n damageType: DamageType.JOINT,\n damage: 28,\n kiCost: 18,\n staminaCost: 22,\n accuracy: 0.84,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 1120,\n recoveryTime: 1680,\n critChance: 0.18,\n critMultiplier: 1.8,\n effects: [],\n // Combo metadata - Control reversal technique\n comboWindow: 250,\n comboPriority: 2, // Mid-chain - defensive reversal\n pressureStacks: 2,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"counter\", // Type: shared category\n animationId: \"gan_reversal_technique\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Reversal motion\n animationType: AnimationType.GAN_REVERSAL_TECHNIQUE,\n animationSpeed: 0.7,\n category: \"medium\",\n range: \"short\",\n speed: 0.9,\n // Defensive mechanics for reversal\n blockWindow: 250, // 250ms block window for reversal setup\n perfectBlockWindow: 75, // 75ms perfect reversal window\n damageReduction: 0.55, // 55% damage reduction during reversal\n stabilityBonus: 1.4, // 140% stability for control\n rootingEffect: true, // Rooting for reversal control\n },\n\n // ============= Grappling Control =============\n {\n id: \"gan_mountain_stance_lock\",\n name: {\n korean: \"산세고정\",\n english: \"Mountain Stance Lock\",\n romanized: \"sanse-gojeong\",\n },\n koreanName: \"산세고정\",\n englishName: \"Mountain Stance Lock\",\n romanized: \"sanse-gojeong\",\n description: {\n korean: \"합기도 방어 자세에서 상대를 고정하고 제압\",\n english: \"Hapkido defensive position locking and controlling opponent\",\n },\n stance: TrigramStance.GAN,\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.14,\n critMultiplier: 1.6,\n effects: [],\n // Combo metadata - Immobilizing lock\n comboWindow: 250,\n comboPriority: 2, // Mid-chain - position control\n pressureStacks: 2,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"grapple\", // Type: shared category\n animationId: \"gan_mountain_stance_lock\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Standing control position\n animationType: AnimationType.GAN_MOUNTAIN_STANCE_LOCK,\n animationSpeed: 0.7,\n category: \"medium\",\n range: \"short\",\n speed: 0.9,\n // Defensive mechanics for grapple control\n blockWindow: 220, // 220ms block window during grapple setup\n perfectBlockWindow: 65, // 65ms perfect grapple window\n damageReduction: 0.6, // 60% damage reduction (grappling focus)\n stabilityBonus: 1.6, // 160% stability for grapple control\n rootingEffect: true, // Strong rooting for grapple lock\n },\n] as const;\n\n/**\n * Get GAN techniques count\n */\nexport const GAN_TECHNIQUE_COUNT = GAN_TECHNIQUES.length;\n\n/**\n * Get GAN technique by ID\n */\nexport function getGanTechniqueById(id: string): TrigramStanceTechnique | undefined {\n return GAN_TECHNIQUES.find((t) => t.id === id);\n}\n\n/**\n * Get all GAN techniques by attack type\n */\nexport function getGanTechniquesByType(\n type: CombatAttackType\n): readonly TrigramStanceTechnique[] {\n return GAN_TECHNIQUES.filter((t) => t.type === type);\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeonTechniques.js","names":[],"sources":["../../../../src/systems/trigram/techniques/GeonTechniques.ts"],"sourcesContent":["/**\n * ☰ Geon (건) - Heaven Stance Techniques\n *\n * Direct force techniques based on Taekwondo power strikes.\n * Represents heavenly power and direct, decisive action.\n *\n * 건괘 - 하늘: 태권도 강력한 타격 기술\n *\n * @module systems/trigram/techniques/GeonTechniques\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 * ☰ GEON (건) - HEAVEN: Direct Force Techniques\n *\n * Taekwondo-based power strikes emphasizing direct force.\n * Element: Heaven (하늘)\n * Philosophy: Swift, decisive action with heavenly power\n *\n * @korean 건괘 - 하늘: 직접적인 힘의 기술 (태권도 타격)\n */\nexport const GEON_TECHNIQUES: readonly TrigramStanceTechnique[] = [\n {\n id: \"geon_heaven_strike\",\n name: {\n korean: \"천둥벽력\",\n english: \"Thunder Strike\",\n romanized: \"cheondung_byeokryeok\",\n },\n koreanName: \"천둥벽력\",\n englishName: \"Thunder Strike\",\n romanized: \"cheondung_byeokryeok\",\n description: {\n korean: \"하늘의 힘을 담은 직접적인 타격\",\n english: \"Direct strike imbued with heavenly power\",\n },\n stance: TrigramStance.GEON,\n type: CombatAttackType.STRIKE,\n damageType: DamageType.BLUNT,\n damage: 30,\n kiCost: 15,\n staminaCost: 20,\n accuracy: 0.8,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.95,\n },\n executionTime: 1120,\n recoveryTime: 1680,\n critChance: 0.1,\n critMultiplier: 1.5,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"punch\", // Type: shared category\n animationId: \"geon_heaven_strike\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.HEAVEN_STRIKE,\n animationSpeed: 0.7,\n category: \"medium\",\n range: \"short\",\n speed: 1.0,\n },\n {\n id: \"geon_heavenly_fist\",\n name: {\n korean: \"천권\",\n english: \"Heavenly Fist\",\n romanized: \"cheon-gwon\",\n },\n koreanName: \"천권\",\n englishName: \"Heavenly Fist\",\n romanized: \"cheon-gwon\",\n description: {\n korean: \"태권도 정권지르기로 머리를 노리는 강력한 주먹 공격\",\n english: \"Powerful Taekwondo straight punch targeting the head\",\n },\n stance: TrigramStance.GEON,\n type: CombatAttackType.PUNCH,\n damageType: DamageType.BLUNT,\n damage: 28,\n kiCost: 12,\n staminaCost: 15,\n accuracy: 0.85,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.95,\n },\n executionTime: 840,\n recoveryTime: 1260,\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: \"geon_heavenly_fist\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.GEON_HEAVENLY_FIST,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"short\",\n speed: 1.1,\n },\n {\n id: \"geon_frontal_kick\",\n name: {\n korean: \"앞차기\",\n english: \"Front Kick\",\n romanized: \"ap-chagi\",\n },\n koreanName: \"앞차기\",\n englishName: \"Front Kick\",\n romanized: \"ap-chagi\",\n description: {\n korean: \"태권도 기본 앞차기로 명치를 타격\",\n english: \"Taekwondo basic front kick targeting solar plexus\",\n },\n stance: TrigramStance.GEON,\n type: CombatAttackType.KICK,\n damageType: DamageType.BLUNT,\n damage: 32,\n kiCost: 18,\n staminaCost: 22,\n accuracy: 0.82,\n reachConfig: {\n bodyPart: \"leg\",\n techniqueType: \"kick\",\n baseExtension: 1.05,\n },\n executionTime: 980,\n recoveryTime: 1400,\n critChance: 0.15,\n critMultiplier: 1.7,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"kick\", // Type: shared category\n animationId: \"geon_frontal_kick\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.GEON_FRONTAL_KICK,\n animationSpeed: 0.7,\n category: \"medium\",\n range: \"medium\",\n speed: 1.0,\n },\n {\n id: \"geon_roundhouse_kick\",\n name: {\n korean: \"돌려차기\",\n english: \"Roundhouse Kick\",\n romanized: \"dolryeo-chagi\",\n },\n koreanName: \"돌려차기\",\n englishName: \"Roundhouse Kick\",\n romanized: \"dolryeo-chagi\",\n description: {\n korean: \"태권도 대표 기술로 관자놀이나 늑골을 타격하는 회전 발차기\",\n english: \"Signature Taekwondo spinning kick targeting temple or ribs\",\n },\n stance: TrigramStance.GEON,\n type: CombatAttackType.KICK,\n damageType: DamageType.BLUNT,\n damage: 35,\n kiCost: 20,\n staminaCost: 25,\n accuracy: 0.78,\n reachConfig: {\n bodyPart: \"leg\",\n techniqueType: \"kick\",\n baseExtension: 1.05,\n exposureWindow: {\n exposedLimb: \"right_leg\",\n startTime: 0.5,\n duration: 320,\n vulnerabilityMultiplier: 1.9,\n allowsBreaking: true,\n },\n },\n executionTime: 1120,\n recoveryTime: 1540,\n critChance: 0.18,\n critMultiplier: 1.8,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"kick\", // Type: shared category\n animationId: \"geon_roundhouse_kick\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.GEON_ROUNDHOUSE,\n animationSpeed: 0.7,\n category: \"medium\",\n range: \"medium\",\n speed: 1.0,\n },\n {\n id: \"geon_axe_kick\",\n name: {\n korean: \"내려차기\",\n english: \"Axe Kick\",\n romanized: \"naeryeo-chagi\",\n },\n koreanName: \"내려차기\",\n englishName: \"Axe Kick\",\n romanized: \"naeryeo-chagi\",\n description: {\n korean: \"위에서 아래로 내리찍는 도끼차기로 정수리나 어깨를 타격\",\n english: \"Downward axe kick striking crown or shoulder from above\",\n },\n stance: TrigramStance.GEON,\n type: CombatAttackType.KICK,\n damageType: DamageType.CRUSHING,\n damage: 38,\n kiCost: 22,\n staminaCost: 28,\n accuracy: 0.75,\n reachConfig: {\n bodyPart: \"leg\",\n techniqueType: \"kick\",\n baseExtension: 1.0,\n },\n executionTime: 1470,\n recoveryTime: 1680,\n critChance: 0.2,\n critMultiplier: 2.0,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"kick\", // Type: shared category\n animationId: \"geon_axe_kick\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.AXE_KICK,\n animationSpeed: 0.65,\n category: \"heavy\",\n range: \"medium\",\n speed: 0.9,\n },\n {\n id: \"geon_palm_strike\",\n name: {\n korean: \"장권\",\n english: \"Palm Strike\",\n romanized: \"jang-gwon\",\n },\n koreanName: \"장권\",\n englishName: \"Palm Strike\",\n romanized: \"jang-gwon\",\n description: {\n korean: \"태권도 장권으로 턱이나 명치를 타격하는 손바닥 공격\",\n english: \"Taekwondo palm heel strike targeting jaw or solar plexus\",\n },\n stance: TrigramStance.GEON,\n type: CombatAttackType.STRIKE,\n damageType: DamageType.PRESSURE,\n damage: 30,\n kiCost: 14,\n staminaCost: 18,\n accuracy: 0.88,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 910,\n recoveryTime: 1330,\n critChance: 0.25,\n critMultiplier: 2.0,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"strike\", // Type: shared category\n animationId: \"geon_palm_strike\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.GEON_PALM_STRIKE,\n animationSpeed: 0.7,\n category: \"special\",\n range: \"short\",\n speed: 1.0,\n },\n {\n id: \"geon_elbow_smash\",\n name: {\n korean: \"팔꿈치치기\",\n english: \"Elbow Smash\",\n romanized: \"palkkumchi-chigi\",\n },\n koreanName: \"팔꿈치치기\",\n englishName: \"Elbow Smash\",\n romanized: \"palkkumchi-chigi\",\n description: {\n korean: \"근거리에서 팔꿈치로 관자놀이나 턱을 강타\",\n english: \"Close-range elbow strike to temple or jaw\",\n },\n stance: TrigramStance.GEON,\n type: CombatAttackType.ELBOW,\n damageType: DamageType.BLUNT,\n damage: 33,\n kiCost: 16,\n staminaCost: 20,\n accuracy: 0.86,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"elbow\",\n baseExtension: 0.5,\n },\n executionTime: 770,\n recoveryTime: 1190,\n critChance: 0.16,\n critMultiplier: 1.8,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"elbow_strike\", // Type: shared category\n animationId: \"geon_elbow_smash\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.CRUSHING_ELBOW,\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":"GeonTechniques.js","names":[],"sources":["../../../../src/systems/trigram/techniques/GeonTechniques.ts"],"sourcesContent":["/**\n * ☰ Geon (건) - Heaven Stance Techniques\n *\n * Direct force techniques based on Taekwondo power strikes.\n * Represents heavenly power and direct, decisive action.\n *\n * 건괘 - 하늘: 태권도 강력한 타격 기술\n *\n * @module systems/trigram/techniques/GeonTechniques\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 * ☰ GEON (건) - HEAVEN: Direct Force Techniques\n *\n * Taekwondo-based power strikes emphasizing direct force.\n * Element: Heaven (하늘)\n * Philosophy: Swift, decisive action with heavenly power\n *\n * @korean 건괘 - 하늘: 직접적인 힘의 기술 (태권도 타격)\n */\nexport const GEON_TECHNIQUES: readonly TrigramStanceTechnique[] = [\n {\n id: \"geon_heaven_strike\",\n name: {\n korean: \"천둥벽력\",\n english: \"Thunder Strike\",\n romanized: \"cheondung_byeokryeok\",\n },\n koreanName: \"천둥벽력\",\n englishName: \"Thunder Strike\",\n romanized: \"cheondung_byeokryeok\",\n description: {\n korean: \"하늘의 힘을 담은 직접적인 타격\",\n english: \"Direct strike imbued with heavenly power\",\n },\n stance: TrigramStance.GEON,\n type: CombatAttackType.STRIKE,\n damageType: DamageType.BLUNT,\n damage: 30,\n kiCost: 15,\n staminaCost: 20,\n accuracy: 0.8,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.95,\n },\n executionTime: 1120,\n recoveryTime: 1680,\n critChance: 0.1,\n critMultiplier: 1.5,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"punch\", // Type: shared category\n animationId: \"geon_heaven_strike\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.HEAVEN_STRIKE,\n animationSpeed: 0.7,\n category: \"medium\",\n range: \"short\",\n speed: 1.0,\n },\n {\n id: \"geon_heavenly_fist\",\n name: {\n korean: \"천권\",\n english: \"Heavenly Fist\",\n romanized: \"cheon-gwon\",\n },\n koreanName: \"천권\",\n englishName: \"Heavenly Fist\",\n romanized: \"cheon-gwon\",\n description: {\n korean: \"태권도 정권지르기로 머리를 노리는 강력한 주먹 공격\",\n english: \"Powerful Taekwondo straight punch targeting the head\",\n },\n stance: TrigramStance.GEON,\n type: CombatAttackType.PUNCH,\n damageType: DamageType.BLUNT,\n damage: 28,\n kiCost: 12,\n staminaCost: 15,\n accuracy: 0.85,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.95,\n },\n executionTime: 840,\n recoveryTime: 1260,\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: \"geon_heavenly_fist\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.GEON_HEAVENLY_FIST,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"short\",\n speed: 1.1,\n },\n {\n id: \"geon_frontal_kick\",\n name: {\n korean: \"앞차기\",\n english: \"Front Kick\",\n romanized: \"ap-chagi\",\n },\n koreanName: \"앞차기\",\n englishName: \"Front Kick\",\n romanized: \"ap-chagi\",\n description: {\n korean: \"태권도 기본 앞차기로 명치를 타격\",\n english: \"Taekwondo basic front kick targeting solar plexus\",\n },\n stance: TrigramStance.GEON,\n type: CombatAttackType.KICK,\n damageType: DamageType.BLUNT,\n damage: 32,\n kiCost: 18,\n staminaCost: 22,\n accuracy: 0.82,\n reachConfig: {\n bodyPart: \"leg\",\n techniqueType: \"kick\",\n baseExtension: 1.05,\n },\n executionTime: 980,\n recoveryTime: 1400,\n critChance: 0.15,\n critMultiplier: 1.7,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"kick\", // Type: shared category\n animationId: \"geon_frontal_kick\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.GEON_FRONTAL_KICK,\n animationSpeed: 0.7,\n category: \"medium\",\n range: \"medium\",\n speed: 1.0,\n },\n {\n id: \"geon_roundhouse_kick\",\n name: {\n korean: \"돌려차기\",\n english: \"Roundhouse Kick\",\n romanized: \"dolryeo-chagi\",\n },\n koreanName: \"돌려차기\",\n englishName: \"Roundhouse Kick\",\n romanized: \"dolryeo-chagi\",\n description: {\n korean: \"태권도 대표 기술로 관자놀이나 늑골을 타격하는 회전 발차기\",\n english: \"Signature Taekwondo spinning kick targeting temple or ribs\",\n },\n stance: TrigramStance.GEON,\n type: CombatAttackType.KICK,\n damageType: DamageType.BLUNT,\n damage: 35,\n kiCost: 20,\n staminaCost: 25,\n accuracy: 0.78,\n reachConfig: {\n bodyPart: \"leg\",\n techniqueType: \"kick\",\n baseExtension: 1.05,\n exposureWindow: {\n exposedLimb: \"right_leg\",\n startTime: 0.5,\n duration: 320,\n vulnerabilityMultiplier: 1.9,\n allowsBreaking: true,\n },\n },\n executionTime: 1120,\n recoveryTime: 1540,\n critChance: 0.18,\n critMultiplier: 1.8,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"kick\", // Type: shared category\n animationId: \"geon_roundhouse_kick\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.GEON_ROUNDHOUSE,\n animationSpeed: 0.7,\n category: \"medium\",\n range: \"medium\",\n speed: 1.0,\n },\n {\n id: \"geon_axe_kick\",\n name: {\n korean: \"내려차기\",\n english: \"Axe Kick\",\n romanized: \"naeryeo-chagi\",\n },\n koreanName: \"내려차기\",\n englishName: \"Axe Kick\",\n romanized: \"naeryeo-chagi\",\n description: {\n korean: \"위에서 아래로 내리찍는 도끼차기로 정수리나 어깨를 타격\",\n english: \"Downward axe kick striking crown or shoulder from above\",\n },\n stance: TrigramStance.GEON,\n type: CombatAttackType.KICK,\n damageType: DamageType.CRUSHING,\n damage: 38,\n kiCost: 22,\n staminaCost: 28,\n accuracy: 0.75,\n reachConfig: {\n bodyPart: \"leg\",\n techniqueType: \"kick\",\n baseExtension: 1.0,\n },\n executionTime: 1470,\n recoveryTime: 1680,\n critChance: 0.2,\n critMultiplier: 2.0,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"kick\", // Type: shared category\n animationId: \"geon_axe_kick\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.AXE_KICK,\n animationSpeed: 0.65,\n category: \"heavy\",\n range: \"medium\",\n speed: 0.9,\n },\n {\n id: \"geon_palm_strike\",\n name: {\n korean: \"장권\",\n english: \"Palm Strike\",\n romanized: \"jang-gwon\",\n },\n koreanName: \"장권\",\n englishName: \"Palm Strike\",\n romanized: \"jang-gwon\",\n description: {\n korean: \"태권도 장권으로 턱이나 명치를 타격하는 손바닥 공격\",\n english: \"Taekwondo palm heel strike targeting jaw or solar plexus\",\n },\n stance: TrigramStance.GEON,\n type: CombatAttackType.STRIKE,\n damageType: DamageType.PRESSURE,\n damage: 30,\n kiCost: 14,\n staminaCost: 18,\n accuracy: 0.88,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 910,\n recoveryTime: 1330,\n critChance: 0.25,\n critMultiplier: 2.0,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"strike\", // Type: shared category\n animationId: \"geon_palm_strike\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.GEON_PALM_STRIKE,\n animationSpeed: 0.7,\n category: \"special\",\n range: \"short\",\n speed: 1.0,\n },\n {\n id: \"geon_elbow_smash\",\n name: {\n korean: \"팔꿈치치기\",\n english: \"Elbow Smash\",\n romanized: \"palkkumchi-chigi\",\n },\n koreanName: \"팔꿈치치기\",\n englishName: \"Elbow Smash\",\n romanized: \"palkkumchi-chigi\",\n description: {\n korean: \"근거리에서 팔꿈치로 관자놀이나 턱을 강타\",\n english: \"Close-range elbow strike to temple or jaw\",\n },\n stance: TrigramStance.GEON,\n type: CombatAttackType.ELBOW,\n damageType: DamageType.BLUNT,\n damage: 33,\n kiCost: 16,\n staminaCost: 20,\n accuracy: 0.86,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"elbow\",\n baseExtension: 0.5,\n },\n executionTime: 770,\n recoveryTime: 1190,\n critChance: 0.16,\n critMultiplier: 1.8,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"elbow_strike\", // Type: shared category\n animationId: \"geon_elbow_smash\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n animationType: AnimationType.CRUSHING_ELBOW,\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":"GonTechniques.js","names":[],"sources":["../../../../src/systems/trigram/techniques/GonTechniques.ts"],"sourcesContent":["/**\n * ☷ 곤 (GON) - Earth Stance Techniques\n * 대지포옹 - Grounding & Takedowns (Ssireum/Hapkido Throws)\n *\n * The Earth stance (곤괘) embodies grounding and powerful takedowns.\n * Based on Ssireum (씨름) traditional Korean wrestling and Hapkido throws,\n * connecting with the earth to uproot and control opponents.\n *\n * Philosophy: \"대지와 하나되어 적을 쓰러뜨려라\"\n * Become one with the earth and bring down the enemy\n *\n * @module GonTechniques\n */\n\nimport type { ExtendedGonTechnique } from \"../types/GonTechniqueExtensions\";\nimport {\n CombatAttackType,\n DamageType,\n TrigramStance,\n} from \"../../../types/common\";\nimport { AnimationType } from \"../../animation\";\n\n/**\n * GON stance techniques - Earth / Grounding & Takedowns\n * Ssireum wrestling and Hapkido throws\n *\n * Technique characteristics:\n * - Powerful takedowns\n * - Ssireum wrestling throws\n * - Ground control techniques\n * - Heavy impact throws\n *\n * Animation speeds are calibrated for power and control:\n * - Setup: 0.8-0.9 (positioning for throw)\n * - Normal: 1.0 (standard grappling)\n * - Impact: 1.1 (explosive finish)\n *\n * Enhanced with Korean martial arts expert analysis:\n * - Authentic throw trajectories from Ssireum/Hapkido\n * - Ground impact multipliers for realistic damage\n * - Post-throw control durations\n * - Earth's supportive healing philosophy\n * - Visual earth crack effects\n */\nexport const GON_TECHNIQUES: readonly ExtendedGonTechnique[] = [\n // ============= Primary Technique =============\n {\n id: \"gon_earth_embrace\",\n name: {\n korean: \"대지포옹\",\n english: \"Earth Embrace\",\n romanized: \"daeji_poong\",\n },\n koreanName: \"대지포옹\",\n englishName: \"Earth Embrace\",\n romanized: \"daeji_poong\",\n description: {\n korean: \"대지의 힘으로 상대를 제압하는 기술\",\n english: \"Grappling technique using earth's power\",\n },\n stance: TrigramStance.GON,\n type: CombatAttackType.GRAPPLE,\n damageType: DamageType.BLUNT,\n damage: 26,\n kiCost: 16,\n staminaCost: 22,\n accuracy: 0.72,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 1260,\n recoveryTime: 1819,\n critChance: 0.08,\n critMultiplier: 1.4,\n effects: [],\n // Combo metadata - Clinch control setup\n comboWindow: 230,\n comboPriority: 1, // Starter - establishes grappling position\n pressureStacks: 2,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"grapple\", // Type: shared category\n animationId: \"gon_earth_embrace\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Clinch grapple position\n animationType: AnimationType.GON_EARTH_EMBRACE,\n animationSpeed: 0.7,\n category: \"medium\",\n range: \"short\",\n speed: 0.9,\n\n // ============= GON ENHANCEMENTS (Korean Martial Arts Expert Analysis) =============\n // 앞무릎치기 (Ap-mureup-chigi) - Front Knee Push clinch control\n throwTrajectory: \"clinch_control\", // Setup position, not a throw itself\n groundImpactMultiplier: 1.0, // No impact (control only)\n controlDuration: 1500, // 1.5 seconds of grip control\n supportiveHealing: 2, // Minor Ki recovery from grounding connection\n earthCrackEffect: false, // Visual effect not needed for control\n gripStrength: 0.85, // Strong clinch grip\n },\n\n // ============= Leg Techniques =============\n {\n id: \"gon_leg_sweep\",\n name: {\n korean: \"다리걸기\",\n english: \"Leg Sweep\",\n romanized: \"dari-geolgi\",\n },\n koreanName: \"다리걸기\",\n englishName: \"Leg Sweep\",\n romanized: \"dari-geolgi\",\n description: {\n korean: \"상대의 다리를 걸어 넘어뜨리는 기술\",\n english: \"Sweeping opponent's leg for takedown\",\n },\n stance: TrigramStance.GON,\n type: CombatAttackType.KICK,\n damageType: DamageType.BLUNT,\n damage: 22,\n kiCost: 12,\n staminaCost: 18,\n accuracy: 0.8,\n reachConfig: {\n bodyPart: \"leg\",\n techniqueType: \"kick\",\n baseExtension: 0.95,\n },\n executionTime: 909,\n recoveryTime: 1330,\n critChance: 0.12,\n critMultiplier: 1.5,\n effects: [],\n // Combo metadata - Sweeping takedown\n comboWindow: 230,\n comboPriority: 2, // Mid-chain - destabilizing sweep\n pressureStacks: 2,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"sweep\", // Type: shared category\n animationId: \"gon_leg_sweep\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Reaping leg sweep\n animationType: AnimationType.GON_LEG_SWEEP,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"medium\",\n speed: 1.0,\n\n // ============= GON ENHANCEMENTS =============\n // 안다리걸기 (An-dari-geolgi) - Inner Leg Reap\n throwTrajectory: \"horizontal_sweep\", // Low sweeping arc\n groundImpactMultiplier: 1.3, // Medium impact from horizontal fall\n controlDuration: 1200, // 1.2 seconds post-sweep advantage\n supportiveHealing: 3, // Earth connection during sweep motion\n earthCrackEffect: true, // Ground sweep creates dust/crack visual\n sweepDirection: \"inward\", // 안(an) = inner reap direction\n takedownType: \"leg_reap\", // 걸기(geolgi) specific classification\n },\n {\n id: \"gon_ankle_pick\",\n name: {\n korean: \"발목잡기\",\n english: \"Ankle Pick\",\n romanized: \"balmok-japgi\",\n },\n koreanName: \"발목잡기\",\n englishName: \"Ankle Pick\",\n romanized: \"balmok-japgi\",\n description: {\n korean: \"발목을 잡아 상대를 넘어뜨리는 기술\",\n english: \"Grabbing ankle to take opponent down\",\n },\n stance: TrigramStance.GON,\n type: CombatAttackType.GRAPPLE,\n damageType: DamageType.BLUNT,\n damage: 24,\n kiCost: 14,\n staminaCost: 20,\n accuracy: 0.82,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 979,\n recoveryTime: 1400,\n critChance: 0.14,\n critMultiplier: 1.6,\n effects: [],\n // Combo metadata - Low level grappling\n comboWindow: 230,\n comboPriority: 1, // Starter - ankle control setup\n pressureStacks: 2,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"sweep\", // Type: shared category\n animationId: \"gon_ankle_pick\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Low shooting motion\n animationType: AnimationType.GRAPPLE,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"short\",\n speed: 1.1,\n\n // ============= GON ENHANCEMENTS =============\n // 발목당기기 (Balmok Danggigi) - Ankle Pull\n throwTrajectory: \"forward_drive\", // Drive forward while pulling ankle\n groundImpactMultiplier: 1.4, // Face-first fall = higher impact\n controlDuration: 1000, // 1 second of ankle control\n supportiveHealing: 4, // Strong earth connection (low stance)\n earthCrackEffect: true, // Driving motion creates ground effect\n penetrationDepth: \"low\", // Very low shooting entry\n setupSpeed: \"fast\", // Quick level change execution\n },\n\n // ============= Ssireum Throwing Techniques =============\n {\n id: \"gon_ssireum_throw\",\n name: {\n korean: \"씨름던지기\",\n english: \"Ssireum Throw\",\n romanized: \"ssireum-deonjigi\",\n },\n koreanName: \"씨름던지기\",\n englishName: \"Ssireum Throw\",\n romanized: \"ssireum-deonjigi\",\n description: {\n korean: \"한국 전통 씨름의 던지기 기술\",\n english: \"Traditional Korean wrestling throw\",\n },\n stance: TrigramStance.GON,\n type: CombatAttackType.THROW,\n damageType: DamageType.IMPACT,\n damage: 32,\n kiCost: 20,\n staminaCost: 28,\n accuracy: 0.82,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.7,\n },\n executionTime: 1190,\n recoveryTime: 1750,\n critChance: 0.24,\n critMultiplier: 2.1,\n effects: [],\n // Combo metadata - Traditional wrestling throw\n comboWindow: 230,\n comboPriority: 3, // Finisher - ssireum slam\n pressureStacks: 4,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"throw\", // Type: shared category\n animationId: \"gon_ssireum_throw\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Traditional belt throw\n animationType: AnimationType.THROW,\n animationSpeed: 0.7,\n category: \"special\",\n range: \"short\",\n speed: 0.9,\n\n // ============= GON ENHANCEMENTS =============\n // 샅바 메치기 (Satba Mechigi) - UNESCO Heritage Belt Throw\n throwTrajectory: \"arc_over_hip\", // Classical hip rotation throw\n groundImpactMultiplier: 1.7, // High impact from rotational velocity\n controlDuration: 1800, // 1.8 seconds of dominant position\n supportiveHealing: 5, // Maximum earth connection (traditional technique)\n earthCrackEffect: true, // Powerful traditional throw creates visual impact\n satbaGripRequired: true, // Uses traditional satba belt mechanics\n rotationalPower: \"high\", // Hip rotation generates force\n traditionalBonus: 1.15, // 15% damage bonus for cultural authenticity\n takedownType: \"hip_throw\", // Traditional hip throw classification\n },\n {\n id: \"gon_ground_pound\",\n name: {\n korean: \"대지강타\",\n english: \"Ground Pound\",\n romanized: \"daeji-gangta\",\n },\n koreanName: \"대지강타\",\n englishName: \"Ground Pound\",\n romanized: \"daeji-gangta\",\n description: {\n korean: \"상대를 땅에 내리찍는 강력한 던지기\",\n english: \"Powerful throw slamming opponent to ground\",\n },\n stance: TrigramStance.GON,\n type: CombatAttackType.THROW,\n damageType: DamageType.CRUSHING,\n damage: 36,\n kiCost: 24,\n staminaCost: 32,\n accuracy: 0.72,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 1470,\n recoveryTime: 1959,\n critChance: 0.2,\n critMultiplier: 2.0,\n effects: [],\n // Combo metadata - Crushing throw finisher\n comboWindow: 230,\n comboPriority: 3, // Finisher - devastating slam\n pressureStacks: 4,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"strike\", // Type: shared category\n animationId: \"gon_ground_pound\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Slam throw\n animationType: AnimationType.SLAM, // Fixed: was wrongly set to GON_BODY_LOCK_TAKEDOWN\n animationSpeed: 0.75,\n category: \"heavy\",\n range: \"short\",\n speed: 1.0,\n\n // ============= GON ENHANCEMENTS =============\n // 들어올려 메치기 (Deureo-ollyeo Mechigi) - Lift and Slam\n throwTrajectory: \"vertical_slam\", // Straight down with maximum force\n groundImpactMultiplier: 2.0, // MAXIMUM impact (highest in game)\n controlDuration: 2000, // 2 seconds of complete dominance after slam\n supportiveHealing: 1, // Minimal healing (aggressive technique)\n earthCrackEffect: true, // DRAMATIC earth crack visual (signature move)\n liftHeight: \"high\", // Full body lift before slam\n stunChance: 0.4, // 40% chance to stun opponent from impact\n breathLoss: \"severe\", // Knocks wind out (respiratory effect)\n takedownType: \"slam\", // Slam technique classification\n endingPosition: \"standing_dominant\", // Attacker standing, opponent down\n },\n {\n id: \"gon_body_lock_takedown\",\n name: {\n korean: \"몸통잡기넘어뜨리기\",\n english: \"Body Lock Takedown\",\n romanized: \"momtong-japgi-neomeotteurigi\",\n },\n koreanName: \"몸통잡기넘어뜨리기\",\n englishName: \"Body Lock Takedown\",\n romanized: \"momtong-japgi-neomeotteurigi\",\n description: {\n korean: \"몸통을 감싸 잡고 넘어뜨리는 씨름 기술\",\n english: \"Ssireum technique grabbing torso for takedown\",\n },\n stance: TrigramStance.GON,\n type: CombatAttackType.GRAPPLE,\n damageType: DamageType.BLUNT,\n damage: 28,\n kiCost: 18,\n staminaCost: 24,\n accuracy: 0.78,\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 // Combo metadata - Body lock control\n comboWindow: 230,\n comboPriority: 2, // Mid-chain - torso control\n pressureStacks: 3,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"takedown\", // Type: shared category\n animationId: \"gon_body_lock_takedown\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Body lock clinch\n animationType: AnimationType.GRAPPLE, // Fixed: was wrongly set to GON_ANKLE_PICK\n animationSpeed: 0.7,\n category: \"medium\",\n range: \"short\",\n speed: 0.9,\n\n // ============= GON ENHANCEMENTS =============\n // 허리 감싸기 (Heori Gamssagi) - Waist Wrap / Bear Hug\n throwTrajectory: \"circular_trip\", // Circular motion while tripping legs\n groundImpactMultiplier: 1.5, // Solid impact from controlled throw\n controlDuration: 1600, // 1.6 seconds of body control advantage\n supportiveHealing: 3, // Moderate earth connection\n earthCrackEffect: true, // Medium impact creates ground effect\n takedownType: \"body_lock\", // Full torso encirclement\n breathRestriction: 0.3, // 30% breath restriction from compression\n gripStrength: 0.8, // Strong bear hug grip\n },\n {\n id: \"gon_sacrifice_throw\",\n name: {\n korean: \"희생던지기\",\n english: \"Sacrifice Throw\",\n romanized: \"huisaeng-deonjigi\",\n },\n koreanName: \"희생던지기\",\n englishName: \"Sacrifice Throw\",\n romanized: \"huisaeng-deonjigi\",\n description: {\n korean: \"자신을 희생하여 상대를 크게 던지는 기술\",\n english: \"Sacrificing position to execute large throw\",\n },\n stance: TrigramStance.GON,\n type: CombatAttackType.THROW,\n damageType: DamageType.BLUNT,\n damage: 34,\n kiCost: 22,\n staminaCost: 30,\n accuracy: 0.74,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.7,\n },\n executionTime: 1330,\n recoveryTime: 1889,\n critChance: 0.18,\n critMultiplier: 1.9,\n effects: [],\n // Combo metadata - Self-sacrificing throw\n comboWindow: 230,\n comboPriority: 3, // Finisher - high-risk high-reward throw\n pressureStacks: 4,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"throw\", // Type: shared category\n animationId: \"gon_sacrifice_throw\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Sacrifice throw motion\n animationType: AnimationType.GON_SACRIFICE_THROW,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"short\",\n speed: 1.0,\n\n // ============= GON ENHANCEMENTS =============\n // 몸 바치기 (Mom Bachigi) - Body Sacrifice Throw\n throwTrajectory: \"sacrifice_arc\", // Backwards fall + forward throw\n groundImpactMultiplier: 1.6, // High impact from momentum transfer\n controlDuration: 800, // Less control (you're also on ground)\n supportiveHealing: 6, // HIGH healing (earth embrace during fall)\n earthCrackEffect: true, // Double impact (both fighters hit ground)\n selfRisk: 0.2, // 20% chance of self-damage from sacrifice\n momentumTransfer: \"high\", // Uses falling momentum for throw\n endingPosition: \"ground_mutual\", // Both fighters on ground after\n transitionBonus: 0.3, // 30% bonus to follow-up ground techniques\n takedownType: \"sacrifice\", // Sacrifice throw classification\n },\n] as const;\n\n/**\n * Get GON techniques count\n */\nexport const GON_TECHNIQUE_COUNT = GON_TECHNIQUES.length;\n\n/**\n * Get GON technique by ID\n */\nexport function getGonTechniqueById(\n id: string,\n): ExtendedGonTechnique | undefined {\n return GON_TECHNIQUES.find((t) => t.id === id);\n}\n\n/**\n * Get all GON techniques by attack type\n */\nexport function getGonTechniquesByType(\n type: CombatAttackType,\n): readonly ExtendedGonTechnique[] {\n return GON_TECHNIQUES.filter((t) => t.type === type);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"GonTechniques.js","names":[],"sources":["../../../../src/systems/trigram/techniques/GonTechniques.ts"],"sourcesContent":["/**\n * ☷ 곤 (GON) - Earth Stance Techniques\n * 대지포옹 - Grounding & Takedowns (Ssireum/Hapkido Throws)\n *\n * The Earth stance (곤괘) embodies grounding and powerful takedowns.\n * Based on Ssireum (씨름) traditional Korean wrestling and Hapkido throws,\n * connecting with the earth to uproot and control opponents.\n *\n * Philosophy: \"대지와 하나되어 적을 쓰러뜨려라\"\n * Become one with the earth and bring down the enemy\n *\n * @module GonTechniques\n */\n\nimport type { ExtendedGonTechnique } from \"../types/GonTechniqueExtensions\";\nimport {\n CombatAttackType,\n DamageType,\n TrigramStance,\n} from \"../../../types/common\";\nimport { AnimationType } from \"../../animation\";\n\n/**\n * GON stance techniques - Earth / Grounding & Takedowns\n * Ssireum wrestling and Hapkido throws\n *\n * Technique characteristics:\n * - Powerful takedowns\n * - Ssireum wrestling throws\n * - Ground control techniques\n * - Heavy impact throws\n *\n * Animation speeds are calibrated for power and control:\n * - Setup: 0.8-0.9 (positioning for throw)\n * - Normal: 1.0 (standard grappling)\n * - Impact: 1.1 (explosive finish)\n *\n * Enhanced with Korean martial arts expert analysis:\n * - Authentic throw trajectories from Ssireum/Hapkido\n * - Ground impact multipliers for realistic damage\n * - Post-throw control durations\n * - Earth's supportive healing philosophy\n * - Visual earth crack effects\n */\nexport const GON_TECHNIQUES: readonly ExtendedGonTechnique[] = [\n // ============= Primary Technique =============\n {\n id: \"gon_earth_embrace\",\n name: {\n korean: \"대지포옹\",\n english: \"Earth Embrace\",\n romanized: \"daeji_poong\",\n },\n koreanName: \"대지포옹\",\n englishName: \"Earth Embrace\",\n romanized: \"daeji_poong\",\n description: {\n korean: \"대지의 힘으로 상대를 제압하는 기술\",\n english: \"Grappling technique using earth's power\",\n },\n stance: TrigramStance.GON,\n type: CombatAttackType.GRAPPLE,\n damageType: DamageType.BLUNT,\n damage: 26,\n kiCost: 16,\n staminaCost: 22,\n accuracy: 0.72,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 1260,\n recoveryTime: 1819,\n critChance: 0.08,\n critMultiplier: 1.4,\n effects: [],\n // Combo metadata - Clinch control setup\n comboWindow: 230,\n comboPriority: 1, // Starter - establishes grappling position\n pressureStacks: 2,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"grapple\", // Type: shared category\n animationId: \"gon_earth_embrace\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Clinch grapple position\n animationType: AnimationType.GON_EARTH_EMBRACE,\n animationSpeed: 0.7,\n category: \"medium\",\n range: \"short\",\n speed: 0.9,\n\n // ============= GON ENHANCEMENTS (Korean Martial Arts Expert Analysis) =============\n // 앞무릎치기 (Ap-mureup-chigi) - Front Knee Push clinch control\n throwTrajectory: \"clinch_control\", // Setup position, not a throw itself\n groundImpactMultiplier: 1.0, // No impact (control only)\n controlDuration: 1500, // 1.5 seconds of grip control\n supportiveHealing: 2, // Minor Ki recovery from grounding connection\n earthCrackEffect: false, // Visual effect not needed for control\n gripStrength: 0.85, // Strong clinch grip\n },\n\n // ============= Leg Techniques =============\n {\n id: \"gon_leg_sweep\",\n name: {\n korean: \"다리걸기\",\n english: \"Leg Sweep\",\n romanized: \"dari-geolgi\",\n },\n koreanName: \"다리걸기\",\n englishName: \"Leg Sweep\",\n romanized: \"dari-geolgi\",\n description: {\n korean: \"상대의 다리를 걸어 넘어뜨리는 기술\",\n english: \"Sweeping opponent's leg for takedown\",\n },\n stance: TrigramStance.GON,\n type: CombatAttackType.KICK,\n damageType: DamageType.BLUNT,\n damage: 22,\n kiCost: 12,\n staminaCost: 18,\n accuracy: 0.8,\n reachConfig: {\n bodyPart: \"leg\",\n techniqueType: \"kick\",\n baseExtension: 0.95,\n },\n executionTime: 909,\n recoveryTime: 1330,\n critChance: 0.12,\n critMultiplier: 1.5,\n effects: [],\n // Combo metadata - Sweeping takedown\n comboWindow: 230,\n comboPriority: 2, // Mid-chain - destabilizing sweep\n pressureStacks: 2,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"sweep\", // Type: shared category\n animationId: \"gon_leg_sweep\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Reaping leg sweep\n animationType: AnimationType.GON_LEG_SWEEP,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"medium\",\n speed: 1.0,\n\n // ============= GON ENHANCEMENTS =============\n // 안다리걸기 (An-dari-geolgi) - Inner Leg Reap\n throwTrajectory: \"horizontal_sweep\", // Low sweeping arc\n groundImpactMultiplier: 1.3, // Medium impact from horizontal fall\n controlDuration: 1200, // 1.2 seconds post-sweep advantage\n supportiveHealing: 3, // Earth connection during sweep motion\n earthCrackEffect: true, // Ground sweep creates dust/crack visual\n sweepDirection: \"inward\", // 안(an) = inner reap direction\n takedownType: \"leg_reap\", // 걸기(geolgi) specific classification\n },\n {\n id: \"gon_ankle_pick\",\n name: {\n korean: \"발목잡기\",\n english: \"Ankle Pick\",\n romanized: \"balmok-japgi\",\n },\n koreanName: \"발목잡기\",\n englishName: \"Ankle Pick\",\n romanized: \"balmok-japgi\",\n description: {\n korean: \"발목을 잡아 상대를 넘어뜨리는 기술\",\n english: \"Grabbing ankle to take opponent down\",\n },\n stance: TrigramStance.GON,\n type: CombatAttackType.GRAPPLE,\n damageType: DamageType.BLUNT,\n damage: 24,\n kiCost: 14,\n staminaCost: 20,\n accuracy: 0.82,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 979,\n recoveryTime: 1400,\n critChance: 0.14,\n critMultiplier: 1.6,\n effects: [],\n // Combo metadata - Low level grappling\n comboWindow: 230,\n comboPriority: 1, // Starter - ankle control setup\n pressureStacks: 2,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"sweep\", // Type: shared category\n animationId: \"gon_ankle_pick\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Low shooting motion\n animationType: AnimationType.GRAPPLE,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"short\",\n speed: 1.1,\n\n // ============= GON ENHANCEMENTS =============\n // 발목당기기 (Balmok Danggigi) - Ankle Pull\n throwTrajectory: \"forward_drive\", // Drive forward while pulling ankle\n groundImpactMultiplier: 1.4, // Face-first fall = higher impact\n controlDuration: 1000, // 1 second of ankle control\n supportiveHealing: 4, // Strong earth connection (low stance)\n earthCrackEffect: true, // Driving motion creates ground effect\n penetrationDepth: \"low\", // Very low shooting entry\n setupSpeed: \"fast\", // Quick level change execution\n },\n\n // ============= Ssireum Throwing Techniques =============\n {\n id: \"gon_ssireum_throw\",\n name: {\n korean: \"씨름던지기\",\n english: \"Ssireum Throw\",\n romanized: \"ssireum-deonjigi\",\n },\n koreanName: \"씨름던지기\",\n englishName: \"Ssireum Throw\",\n romanized: \"ssireum-deonjigi\",\n description: {\n korean: \"한국 전통 씨름의 던지기 기술\",\n english: \"Traditional Korean wrestling throw\",\n },\n stance: TrigramStance.GON,\n type: CombatAttackType.THROW,\n damageType: DamageType.IMPACT,\n damage: 32,\n kiCost: 20,\n staminaCost: 28,\n accuracy: 0.82,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.7,\n },\n executionTime: 1190,\n recoveryTime: 1750,\n critChance: 0.24,\n critMultiplier: 2.1,\n effects: [],\n // Combo metadata - Traditional wrestling throw\n comboWindow: 230,\n comboPriority: 3, // Finisher - ssireum slam\n pressureStacks: 4,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"throw\", // Type: shared category\n animationId: \"gon_ssireum_throw\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Traditional belt throw\n animationType: AnimationType.THROW,\n animationSpeed: 0.7,\n category: \"special\",\n range: \"short\",\n speed: 0.9,\n\n // ============= GON ENHANCEMENTS =============\n // 샅바 메치기 (Satba Mechigi) - UNESCO Heritage Belt Throw\n throwTrajectory: \"arc_over_hip\", // Classical hip rotation throw\n groundImpactMultiplier: 1.7, // High impact from rotational velocity\n controlDuration: 1800, // 1.8 seconds of dominant position\n supportiveHealing: 5, // Maximum earth connection (traditional technique)\n earthCrackEffect: true, // Powerful traditional throw creates visual impact\n satbaGripRequired: true, // Uses traditional satba belt mechanics\n rotationalPower: \"high\", // Hip rotation generates force\n traditionalBonus: 1.15, // 15% damage bonus for cultural authenticity\n takedownType: \"hip_throw\", // Traditional hip throw classification\n },\n {\n id: \"gon_ground_pound\",\n name: {\n korean: \"대지강타\",\n english: \"Ground Pound\",\n romanized: \"daeji-gangta\",\n },\n koreanName: \"대지강타\",\n englishName: \"Ground Pound\",\n romanized: \"daeji-gangta\",\n description: {\n korean: \"상대를 땅에 내리찍는 강력한 던지기\",\n english: \"Powerful throw slamming opponent to ground\",\n },\n stance: TrigramStance.GON,\n type: CombatAttackType.THROW,\n damageType: DamageType.CRUSHING,\n damage: 36,\n kiCost: 24,\n staminaCost: 32,\n accuracy: 0.72,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 1470,\n recoveryTime: 1959,\n critChance: 0.2,\n critMultiplier: 2.0,\n effects: [],\n // Combo metadata - Crushing throw finisher\n comboWindow: 230,\n comboPriority: 3, // Finisher - devastating slam\n pressureStacks: 4,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"strike\", // Type: shared category\n animationId: \"gon_ground_pound\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Slam throw\n animationType: AnimationType.SLAM, // Fixed: was wrongly set to GON_BODY_LOCK_TAKEDOWN\n animationSpeed: 0.75,\n category: \"heavy\",\n range: \"short\",\n speed: 1.0,\n\n // ============= GON ENHANCEMENTS =============\n // 들어올려 메치기 (Deureo-ollyeo Mechigi) - Lift and Slam\n throwTrajectory: \"vertical_slam\", // Straight down with maximum force\n groundImpactMultiplier: 2.0, // MAXIMUM impact (highest in game)\n controlDuration: 2000, // 2 seconds of complete dominance after slam\n supportiveHealing: 1, // Minimal healing (aggressive technique)\n earthCrackEffect: true, // DRAMATIC earth crack visual (signature move)\n liftHeight: \"high\", // Full body lift before slam\n stunChance: 0.4, // 40% chance to stun opponent from impact\n breathLoss: \"severe\", // Knocks wind out (respiratory effect)\n takedownType: \"slam\", // Slam technique classification\n endingPosition: \"standing_dominant\", // Attacker standing, opponent down\n },\n {\n id: \"gon_body_lock_takedown\",\n name: {\n korean: \"몸통잡기넘어뜨리기\",\n english: \"Body Lock Takedown\",\n romanized: \"momtong-japgi-neomeotteurigi\",\n },\n koreanName: \"몸통잡기넘어뜨리기\",\n englishName: \"Body Lock Takedown\",\n romanized: \"momtong-japgi-neomeotteurigi\",\n description: {\n korean: \"몸통을 감싸 잡고 넘어뜨리는 씨름 기술\",\n english: \"Ssireum technique grabbing torso for takedown\",\n },\n stance: TrigramStance.GON,\n type: CombatAttackType.GRAPPLE,\n damageType: DamageType.BLUNT,\n damage: 28,\n kiCost: 18,\n staminaCost: 24,\n accuracy: 0.78,\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 // Combo metadata - Body lock control\n comboWindow: 230,\n comboPriority: 2, // Mid-chain - torso control\n pressureStacks: 3,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"takedown\", // Type: shared category\n animationId: \"gon_body_lock_takedown\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Body lock clinch\n animationType: AnimationType.GRAPPLE, // Fixed: was wrongly set to GON_ANKLE_PICK\n animationSpeed: 0.7,\n category: \"medium\",\n range: \"short\",\n speed: 0.9,\n\n // ============= GON ENHANCEMENTS =============\n // 허리 감싸기 (Heori Gamssagi) - Waist Wrap / Bear Hug\n throwTrajectory: \"circular_trip\", // Circular motion while tripping legs\n groundImpactMultiplier: 1.5, // Solid impact from controlled throw\n controlDuration: 1600, // 1.6 seconds of body control advantage\n supportiveHealing: 3, // Moderate earth connection\n earthCrackEffect: true, // Medium impact creates ground effect\n takedownType: \"body_lock\", // Full torso encirclement\n breathRestriction: 0.3, // 30% breath restriction from compression\n gripStrength: 0.8, // Strong bear hug grip\n },\n {\n id: \"gon_sacrifice_throw\",\n name: {\n korean: \"희생던지기\",\n english: \"Sacrifice Throw\",\n romanized: \"huisaeng-deonjigi\",\n },\n koreanName: \"희생던지기\",\n englishName: \"Sacrifice Throw\",\n romanized: \"huisaeng-deonjigi\",\n description: {\n korean: \"자신을 희생하여 상대를 크게 던지는 기술\",\n english: \"Sacrificing position to execute large throw\",\n },\n stance: TrigramStance.GON,\n type: CombatAttackType.THROW,\n damageType: DamageType.BLUNT,\n damage: 34,\n kiCost: 22,\n staminaCost: 30,\n accuracy: 0.74,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.7,\n },\n executionTime: 1330,\n recoveryTime: 1889,\n critChance: 0.18,\n critMultiplier: 1.9,\n effects: [],\n // Combo metadata - Self-sacrificing throw\n comboWindow: 230,\n comboPriority: 3, // Finisher - high-risk high-reward throw\n pressureStacks: 4,\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"throw\", // Type: shared category\n animationId: \"gon_sacrifice_throw\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Sacrifice throw motion\n animationType: AnimationType.GON_SACRIFICE_THROW,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"short\",\n speed: 1.0,\n\n // ============= GON ENHANCEMENTS =============\n // 몸 바치기 (Mom Bachigi) - Body Sacrifice Throw\n throwTrajectory: \"sacrifice_arc\", // Backwards fall + forward throw\n groundImpactMultiplier: 1.6, // High impact from momentum transfer\n controlDuration: 800, // Less control (you're also on ground)\n supportiveHealing: 6, // HIGH healing (earth embrace during fall)\n earthCrackEffect: true, // Double impact (both fighters hit ground)\n selfRisk: 0.2, // 20% chance of self-damage from sacrifice\n momentumTransfer: \"high\", // Uses falling momentum for throw\n endingPosition: \"ground_mutual\", // Both fighters on ground after\n transitionBonus: 0.3, // 30% bonus to follow-up ground techniques\n takedownType: \"sacrifice\", // Sacrifice throw classification\n },\n] as const;\n\n/**\n * Get GON techniques count\n */\nexport const GON_TECHNIQUE_COUNT = GON_TECHNIQUES.length;\n\n/**\n * Get GON technique by ID\n */\nexport function getGonTechniqueById(\n id: string,\n): ExtendedGonTechnique | undefined {\n return GON_TECHNIQUES.find((t) => t.id === id);\n}\n\n/**\n * Get all GON techniques by attack type\n */\nexport function getGonTechniquesByType(\n type: CombatAttackType,\n): readonly ExtendedGonTechnique[] {\n return GON_TECHNIQUES.filter((t) => t.type === type);\n}\n"],"mappings":"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"}
|