blacktrigram 0.7.39 → 0.7.40
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.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.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.map +1 -1
- package/lib/components/screens/combat/components/hud/CombatRightHUD.js.map +1 -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.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.js.map +1 -1
- package/lib/components/screens/combat/hooks/useCombatState.js.map +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.map +1 -1
- 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.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.js.map +1 -1
- 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.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.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.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.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 +3 -90
- package/lib/systems/animation/builders/KeyframeInterpolation.js.map +1 -1
- package/lib/systems/animation/builders/KickPhaseApplicator.js.map +1 -1
- package/lib/systems/animation/builders/KoreanGuardPositions.js.map +1 -1
- package/lib/systems/animation/builders/MartialArtsAnimationBuilder.js.map +1 -1
- 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/DefensiveAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/FootworkSkeletalAnimations.js.map +1 -1
- package/lib/systems/animation/catalogs/RecoveryAnimations.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.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/core/AnimationHitTiming.js.map +1 -1
- package/lib/systems/animation/core/AnimationOptimizations.js.map +1 -1
- package/lib/systems/animation/core/AnimationPriority.js.map +1 -1
- package/lib/systems/animation/core/AnimationRegistry.js.map +1 -1
- package/lib/systems/animation/core/AnimationStateMachine.js.map +1 -1
- 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/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.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.map +1 -1
- package/lib/systems/combat/BreakingStatusEffects.js.map +1 -1
- package/lib/systems/combat/CombatStateSystem.js.map +1 -1
- 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.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.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/GonTechniques.js.map +1 -1
- package/lib/systems/trigram/techniques/SonTechniques.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/types/AccessibilityTypes.js.map +1 -1
- package/lib/types/PhysicsTypes.js.map +1 -1
- package/lib/types/common.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/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/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/physics.js.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.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.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 +5 -5
|
@@ -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":";;;;;;;;;;;;;;;;;;;;;;;;;AA4CA,IAAa,iBAAkD;CAE7D;EACE,IAAI;EACJ,MAAM;GACJ,QAAQ;GACR,SAAS;GACT,WAAW;GACZ;EACD,YAAY;EACZ,aAAa;EACb,WAAW;EACX,aAAa;GACX,QAAQ;GACR,SAAS;GACV;EACD,QAAQ,cAAc;EACtB,MAAM,iBAAiB;EACvB,YAAY,WAAW;EACvB,QAAQ;EACR,QAAQ;EACR,aAAa;EACb,UAAU;EACV,aAAa;GACX,UAAU;GACV,eAAe;GACf,eAAe;GAChB;EACD,eAAe;EACf,cAAc;EACd,YAAY;EACZ,gBAAgB;EAChB,SAAS,EAAE;EAEX,aAAa;EACb,eAAe;EACf,gBAAgB;EAEhB,mBAAmB;EACnB,aAAa;EAGb,eAAe,cAAc;EAC7B,gBAAgB;EAChB,UAAU;EACV,OAAO;EACP,OAAO;EAIP,iBAAiB;EACjB,wBAAwB;EACxB,iBAAiB;EACjB,mBAAmB;EACnB,kBAAkB;EAClB,cAAc;EACf;CAGD;EACE,IAAI;EACJ,MAAM;GACJ,QAAQ;GACR,SAAS;GACT,WAAW;GACZ;EACD,YAAY;EACZ,aAAa;EACb,WAAW;EACX,aAAa;GACX,QAAQ;GACR,SAAS;GACV;EACD,QAAQ,cAAc;EACtB,MAAM,iBAAiB;EACvB,YAAY,WAAW;EACvB,QAAQ;EACR,QAAQ;EACR,aAAa;EACb,UAAU;EACV,aAAa;GACX,UAAU;GACV,eAAe;GACf,eAAe;GAChB;EACD,eAAe;EACf,cAAc;EACd,YAAY;EACZ,gBAAgB;EAChB,SAAS,EAAE;EAEX,aAAa;EACb,eAAe;EACf,gBAAgB;EAEhB,mBAAmB;EACnB,aAAa;EAGb,eAAe,cAAc;EAC7B,gBAAgB;EAChB,UAAU;EACV,OAAO;EACP,OAAO;EAIP,iBAAiB;EACjB,wBAAwB;EACxB,iBAAiB;EACjB,mBAAmB;EACnB,kBAAkB;EAClB,gBAAgB;EAChB,cAAc;EACf;CACD;EACE,IAAI;EACJ,MAAM;GACJ,QAAQ;GACR,SAAS;GACT,WAAW;GACZ;EACD,YAAY;EACZ,aAAa;EACb,WAAW;EACX,aAAa;GACX,QAAQ;GACR,SAAS;GACV;EACD,QAAQ,cAAc;EACtB,MAAM,iBAAiB;EACvB,YAAY,WAAW;EACvB,QAAQ;EACR,QAAQ;EACR,aAAa;EACb,UAAU;EACV,aAAa;GACX,UAAU;GACV,eAAe;GACf,eAAe;GAChB;EACD,eAAe;EACf,cAAc;EACd,YAAY;EACZ,gBAAgB;EAChB,SAAS,EAAE;EAEX,aAAa;EACb,eAAe;EACf,gBAAgB;EAEhB,mBAAmB;EACnB,aAAa;EAGb,eAAe,cAAc;EAC7B,gBAAgB;EAChB,UAAU;EACV,OAAO;EACP,OAAO;EAIP,iBAAiB;EACjB,wBAAwB;EACxB,iBAAiB;EACjB,mBAAmB;EACnB,kBAAkB;EAClB,kBAAkB;EAClB,YAAY;EACb;CAGD;EACE,IAAI;EACJ,MAAM;GACJ,QAAQ;GACR,SAAS;GACT,WAAW;GACZ;EACD,YAAY;EACZ,aAAa;EACb,WAAW;EACX,aAAa;GACX,QAAQ;GACR,SAAS;GACV;EACD,QAAQ,cAAc;EACtB,MAAM,iBAAiB;EACvB,YAAY,WAAW;EACvB,QAAQ;EACR,QAAQ;EACR,aAAa;EACb,UAAU;EACV,aAAa;GACX,UAAU;GACV,eAAe;GACf,eAAe;GAChB;EACD,eAAe;EACf,cAAc;EACd,YAAY;EACZ,gBAAgB;EAChB,SAAS,EAAE;EAEX,aAAa;EACb,eAAe;EACf,gBAAgB;EAEhB,mBAAmB;EACnB,aAAa;EAGb,eAAe,cAAc;EAC7B,gBAAgB;EAChB,UAAU;EACV,OAAO;EACP,OAAO;EAIP,iBAAiB;EACjB,wBAAwB;EACxB,iBAAiB;EACjB,mBAAmB;EACnB,kBAAkB;EAClB,mBAAmB;EACnB,iBAAiB;EACjB,kBAAkB;EAClB,cAAc;EACf;CACD;EACE,IAAI;EACJ,MAAM;GACJ,QAAQ;GACR,SAAS;GACT,WAAW;GACZ;EACD,YAAY;EACZ,aAAa;EACb,WAAW;EACX,aAAa;GACX,QAAQ;GACR,SAAS;GACV;EACD,QAAQ,cAAc;EACtB,MAAM,iBAAiB;EACvB,YAAY,WAAW;EACvB,QAAQ;EACR,QAAQ;EACR,aAAa;EACb,UAAU;EACV,aAAa;GACX,UAAU;GACV,eAAe;GACf,eAAe;GAChB;EACD,eAAe;EACf,cAAc;EACd,YAAY;EACZ,gBAAgB;EAChB,SAAS,EAAE;EAEX,aAAa;EACb,eAAe;EACf,gBAAgB;EAEhB,mBAAmB;EACnB,aAAa;EAGb,eAAe,cAAc;EAC7B,gBAAgB;EAChB,UAAU;EACV,OAAO;EACP,OAAO;EAIP,iBAAiB;EACjB,wBAAwB;EACxB,iBAAiB;EACjB,mBAAmB;EACnB,kBAAkB;EAClB,YAAY;EACZ,YAAY;EACZ,YAAY;EACZ,cAAc;EACd,gBAAgB;EACjB;CACD;EACE,IAAI;EACJ,MAAM;GACJ,QAAQ;GACR,SAAS;GACT,WAAW;GACZ;EACD,YAAY;EACZ,aAAa;EACb,WAAW;EACX,aAAa;GACX,QAAQ;GACR,SAAS;GACV;EACD,QAAQ,cAAc;EACtB,MAAM,iBAAiB;EACvB,YAAY,WAAW;EACvB,QAAQ;EACR,QAAQ;EACR,aAAa;EACb,UAAU;EACV,aAAa;GACX,UAAU;GACV,eAAe;GACf,eAAe;GAChB;EACD,eAAe;EACf,cAAc;EACd,YAAY;EACZ,gBAAgB;EAChB,SAAS,EAAE;EAEX,aAAa;EACb,eAAe;EACf,gBAAgB;EAEhB,mBAAmB;EACnB,aAAa;EAGb,eAAe,cAAc;EAC7B,gBAAgB;EAChB,UAAU;EACV,OAAO;EACP,OAAO;EAIP,iBAAiB;EACjB,wBAAwB;EACxB,iBAAiB;EACjB,mBAAmB;EACnB,kBAAkB;EAClB,cAAc;EACd,mBAAmB;EACnB,cAAc;EACf;CACD;EACE,IAAI;EACJ,MAAM;GACJ,QAAQ;GACR,SAAS;GACT,WAAW;GACZ;EACD,YAAY;EACZ,aAAa;EACb,WAAW;EACX,aAAa;GACX,QAAQ;GACR,SAAS;GACV;EACD,QAAQ,cAAc;EACtB,MAAM,iBAAiB;EACvB,YAAY,WAAW;EACvB,QAAQ;EACR,QAAQ;EACR,aAAa;EACb,UAAU;EACV,aAAa;GACX,UAAU;GACV,eAAe;GACf,eAAe;GAChB;EACD,eAAe;EACf,cAAc;EACd,YAAY;EACZ,gBAAgB;EAChB,SAAS,EAAE;EAEX,aAAa;EACb,eAAe;EACf,gBAAgB;EAEhB,mBAAmB;EACnB,aAAa;EAGb,eAAe,cAAc;EAC7B,gBAAgB;EAChB,UAAU;EACV,OAAO;EACP,OAAO;EAIP,iBAAiB;EACjB,wBAAwB;EACxB,iBAAiB;EACjB,mBAAmB;EACnB,kBAAkB;EAClB,UAAU;EACV,kBAAkB;EAClB,gBAAgB;EAChB,iBAAiB;EACjB,cAAc;EACf;CACF;;;;AAKD,IAAa,sBAAsB,eAAe;;;;AAKlD,SAAgB,oBACd,IACkC;CAClC,OAAO,eAAe,MAAM,MAAM,EAAE,OAAO,GAAG;;;;;AAMhD,SAAgB,uBACd,MACiC;CACjC,OAAO,eAAe,QAAQ,MAAM,EAAE,SAAS,KAAK"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SonTechniques.js","names":[],"sources":["../../../../src/systems/trigram/techniques/SonTechniques.ts"],"sourcesContent":["/**\n * ☴ 손 (SON) - Wind Stance Techniques\n * 선풍연격 - Continuous Pressure (Taekyon Rhythmic Combat)\n *\n * The Wind stance (손괘) embodies continuous pressure and rhythmic flow.\n * Based on traditional Taekyon (택견) - the oldest Korean martial art,\n * emphasizing fluid footwork, rhythmic movement, and unrelenting pressure.\n *\n * Philosophy: \"바람처럼 끊임없이 흐르라\" - Flow endlessly like the wind\n *\n * @module SonTechniques\n */\n\nimport type { TrigramStanceTechnique } from \"@/systems/vitalpoint\";\nimport {\n CombatAttackType,\n DamageType,\n TrigramStance,\n} from \"../../../types/common\";\nimport { AnimationType } from \"../../animation\";\n\n/**\n * SON stance techniques - Wind / Continuous Pressure\n * Taekyon rhythmic combat with continuous flowing attacks\n *\n * Technique characteristics:\n * - Continuous pressure attacks\n * - Rhythmic striking patterns\n * - Fluid footwork integration\n * - Destabilizing movements\n *\n * Animation speeds are calibrated for rhythmic flow:\n * - Fast: 1.2-1.3 (rapid footwork, quick strikes)\n * - Normal: 1.0 (standard techniques)\n * - Sustained: 0.9-1.0 (continuous pressure)\n */\nexport const SON_TECHNIQUES: readonly TrigramStanceTechnique[] = [\n // ============= Primary Technique =============\n {\n id: \"son_whirlwind_barrage\",\n name: {\n korean: \"선풍연격\",\n english: \"Whirlwind Barrage\",\n romanized: \"seonpung_yeongyeok\",\n },\n koreanName: \"선풍연격\",\n englishName: \"Whirlwind Barrage\",\n romanized: \"seonpung_yeongyeok\",\n description: {\n korean: \"바람처럼 연속적인 공격\",\n english: \"Continuous attacks like wind\",\n },\n stance: TrigramStance.SON,\n type: CombatAttackType.STRIKE,\n damageType: DamageType.BLUNT,\n damage: 22,\n kiCost: 8,\n staminaCost: 30,\n accuracy: 0.7,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.95,\n },\n executionTime: 560,\n recoveryTime: 840,\n critChance: 0.06,\n critMultiplier: 1.2,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"punch\", // Type: shared category\n animationId: \"son_whirlwind_barrage\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Continuous striking pattern\n animationType: AnimationType.RAPID_BARRAGE,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"short\",\n speed: 1.5,\n // Son (Wind) combo flow properties - 선풍연쇄 (Whirlwind Chain)\n comboWindow: 200, // 200ms timing window for next technique\n comboPriority: 1, // Starter technique - opens combo chains\n pressureStacks: 2, // Applies 2 pressure stacks on hit\n },\n\n // ============= Taekyon Footwork Techniques =============\n {\n id: \"son_sweeping_low_kick\",\n name: {\n korean: \"품밟기\",\n english: \"Sweeping Foot Attack\",\n romanized: \"pum-balbgi\",\n },\n koreanName: \"품밟기\",\n englishName: \"Sweeping Foot Attack\",\n romanized: \"pum-balbgi\",\n description: {\n korean: \"택견의 낮은 발차기로 발목을 쓸어 넘어뜨림\",\n english: \"Taekyon low sweeping kick targeting ankles\",\n },\n stance: TrigramStance.SON,\n type: CombatAttackType.KICK,\n damageType: DamageType.BLUNT,\n damage: 20,\n kiCost: 10,\n staminaCost: 22,\n accuracy: 0.82,\n reachConfig: {\n bodyPart: \"leg\",\n techniqueType: \"kick\",\n baseExtension: 0.95,\n },\n executionTime: 770,\n recoveryTime: 1190,\n critChance: 0.12,\n critMultiplier: 1.4,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"kick\", // Type: shared category\n animationId: \"son_sweeping_low_kick\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Low sweeping kick\n animationType: AnimationType.SON_SWEEPING_LOW_KICK,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"medium\",\n speed: 1.1,\n // Son (Wind) combo flow properties\n comboWindow: 200,\n comboPriority: 2, // Mid-chain technique - bridges combos\n pressureStacks: 1, // Applies 1 pressure stack on hit\n },\n {\n id: \"son_rapid_footwork\",\n name: {\n korean: \"품밟기연환\",\n english: \"Rapid Footwork Chain\",\n romanized: \"pum-balbgi-yeonhwan\",\n },\n koreanName: \"품밟기연환\",\n englishName: \"Rapid Footwork Chain\",\n romanized: \"pum-balbgi-yeonhwan\",\n description: {\n korean: \"택견의 빠른 발놀림으로 연속 타격\",\n english: \"Taekyon rapid footwork with continuous strikes\",\n },\n stance: TrigramStance.SON,\n type: CombatAttackType.KICK,\n damageType: DamageType.BLUNT,\n damage: 28,\n kiCost: 16,\n staminaCost: 24,\n accuracy: 0.74,\n reachConfig: {\n bodyPart: \"leg\",\n techniqueType: \"kick\",\n baseExtension: 1.05,\n },\n executionTime: 840,\n recoveryTime: 1260,\n critChance: 0.16,\n critMultiplier: 1.6,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"footwork\", // Type: shared category\n animationId: \"son_rapid_footwork\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Rapid footwork sequence\n animationType: AnimationType.SON_RAPID_FOOTWORK,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"medium\",\n speed: 1.2,\n // Son (Wind) combo flow properties\n comboWindow: 200,\n comboPriority: 2, // Mid-chain technique - bridges combos\n pressureStacks: 2, // Applies 2 pressure stacks on hit\n },\n\n // ============= Rhythmic Striking Techniques =============\n {\n id: \"son_rhythmic_strikes\",\n name: {\n korean: \"결련수\",\n english: \"Rhythmic Hand Strikes\",\n romanized: \"gyeolryeon-su\",\n },\n koreanName: \"결련수\",\n englishName: \"Rhythmic Hand Strikes\",\n romanized: \"gyeolryeon-su\",\n description: {\n korean: \"택견의 리듬감 있는 연속 손타격\",\n english: \"Taekyon rhythmic continuous hand strikes\",\n },\n stance: TrigramStance.SON,\n type: CombatAttackType.STRIKE,\n damageType: DamageType.PRESSURE,\n damage: 24,\n kiCost: 12,\n staminaCost: 28,\n accuracy: 0.85,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.95,\n },\n executionTime: 630,\n recoveryTime: 979,\n critChance: 0.22,\n critMultiplier: 2.0,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"punch\", // Type: shared category\n animationId: \"son_rhythmic_strikes\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Rhythmic hand combination\n animationType: AnimationType.SON_RHYTHMIC_STRIKES,\n animationSpeed: 0.75,\n category: \"special\",\n range: \"short\",\n speed: 1.2,\n // Son (Wind) combo flow properties\n comboWindow: 200,\n comboPriority: 3, // Finisher technique - ends combos\n pressureStacks: 3, // Applies 3 pressure stacks on hit (high pressure)\n },\n {\n id: \"son_flowing_push\",\n name: {\n korean: \"밀기\",\n english: \"Flowing Push\",\n romanized: \"mil-gi\",\n },\n koreanName: \"밀기\",\n englishName: \"Flowing Push\",\n romanized: \"mil-gi\",\n description: {\n korean: \"택견의 밀기로 상대의 균형을 무너뜨림\",\n english: \"Taekyon push disrupting opponent's balance\",\n },\n stance: TrigramStance.SON,\n type: CombatAttackType.STRIKE,\n damageType: DamageType.PRESSURE,\n damage: 20,\n kiCost: 8,\n staminaCost: 20,\n accuracy: 0.85,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 700,\n recoveryTime: 1050,\n critChance: 0.1,\n critMultiplier: 1.3,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"strike\", // Type: shared category\n animationId: \"son_flowing_push\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Flowing push movement\n animationType: AnimationType.SON_FLOWING_PUSH,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"short\",\n speed: 1.0,\n // Son (Wind) combo flow properties\n comboWindow: 200,\n comboPriority: 1, // Starter technique - opens combo chains\n pressureStacks: 1, // Applies 1 pressure stack on hit\n },\n\n // ============= Spinning Techniques =============\n {\n id: \"son_spinning_elbow\",\n name: {\n korean: \"돌려팔꿈치\",\n english: \"Spinning Elbow\",\n romanized: \"dollyeo-palkkumchi\",\n },\n koreanName: \"돌려팔꿈치\",\n englishName: \"Spinning Elbow\",\n romanized: \"dollyeo-palkkumchi\",\n description: {\n korean: \"회전하며 연속적으로 가하는 팔꿈치 공격\",\n english: \"Continuous spinning elbow strikes\",\n },\n stance: TrigramStance.SON,\n type: CombatAttackType.ELBOW,\n damageType: DamageType.BLUNT,\n damage: 26,\n kiCost: 14,\n staminaCost: 26,\n accuracy: 0.76,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"elbow\",\n baseExtension: 0.5,\n },\n executionTime: 770,\n recoveryTime: 1190,\n critChance: 0.14,\n critMultiplier: 1.5,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"elbow_strike\", // Type: shared category\n animationId: \"son_spinning_elbow\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Spinning elbow attack\n animationType: AnimationType.ELBOW_STRIKE,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"short\",\n speed: 1.1,\n // Son (Wind) combo flow properties\n comboWindow: 200,\n comboPriority: 3, // Finisher technique - ends combos\n pressureStacks: 2, // Applies 2 pressure stacks on hit\n },\n] as const;\n\n/**\n * Get SON techniques count\n */\nexport const SON_TECHNIQUE_COUNT = SON_TECHNIQUES.length;\n\n/**\n * Get SON technique by ID\n */\nexport function getSonTechniqueById(\n id: string,\n): TrigramStanceTechnique | undefined {\n return SON_TECHNIQUES.find((t) => t.id === id);\n}\n\n/**\n * Get all SON techniques by attack type\n */\nexport function getSonTechniquesByType(\n type: CombatAttackType,\n): readonly TrigramStanceTechnique[] {\n return SON_TECHNIQUES.filter((t) => t.type === type);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SonTechniques.js","names":[],"sources":["../../../../src/systems/trigram/techniques/SonTechniques.ts"],"sourcesContent":["/**\n * ☴ 손 (SON) - Wind Stance Techniques\n * 선풍연격 - Continuous Pressure (Taekyon Rhythmic Combat)\n *\n * The Wind stance (손괘) embodies continuous pressure and rhythmic flow.\n * Based on traditional Taekyon (택견) - the oldest Korean martial art,\n * emphasizing fluid footwork, rhythmic movement, and unrelenting pressure.\n *\n * Philosophy: \"바람처럼 끊임없이 흐르라\" - Flow endlessly like the wind\n *\n * @module SonTechniques\n */\n\nimport type { TrigramStanceTechnique } from \"@/systems/vitalpoint\";\nimport {\n CombatAttackType,\n DamageType,\n TrigramStance,\n} from \"../../../types/common\";\nimport { AnimationType } from \"../../animation\";\n\n/**\n * SON stance techniques - Wind / Continuous Pressure\n * Taekyon rhythmic combat with continuous flowing attacks\n *\n * Technique characteristics:\n * - Continuous pressure attacks\n * - Rhythmic striking patterns\n * - Fluid footwork integration\n * - Destabilizing movements\n *\n * Animation speeds are calibrated for rhythmic flow:\n * - Fast: 1.2-1.3 (rapid footwork, quick strikes)\n * - Normal: 1.0 (standard techniques)\n * - Sustained: 0.9-1.0 (continuous pressure)\n */\nexport const SON_TECHNIQUES: readonly TrigramStanceTechnique[] = [\n // ============= Primary Technique =============\n {\n id: \"son_whirlwind_barrage\",\n name: {\n korean: \"선풍연격\",\n english: \"Whirlwind Barrage\",\n romanized: \"seonpung_yeongyeok\",\n },\n koreanName: \"선풍연격\",\n englishName: \"Whirlwind Barrage\",\n romanized: \"seonpung_yeongyeok\",\n description: {\n korean: \"바람처럼 연속적인 공격\",\n english: \"Continuous attacks like wind\",\n },\n stance: TrigramStance.SON,\n type: CombatAttackType.STRIKE,\n damageType: DamageType.BLUNT,\n damage: 22,\n kiCost: 8,\n staminaCost: 30,\n accuracy: 0.7,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.95,\n },\n executionTime: 560,\n recoveryTime: 840,\n critChance: 0.06,\n critMultiplier: 1.2,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"punch\", // Type: shared category\n animationId: \"son_whirlwind_barrage\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Continuous striking pattern\n animationType: AnimationType.RAPID_BARRAGE,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"short\",\n speed: 1.5,\n // Son (Wind) combo flow properties - 선풍연쇄 (Whirlwind Chain)\n comboWindow: 200, // 200ms timing window for next technique\n comboPriority: 1, // Starter technique - opens combo chains\n pressureStacks: 2, // Applies 2 pressure stacks on hit\n },\n\n // ============= Taekyon Footwork Techniques =============\n {\n id: \"son_sweeping_low_kick\",\n name: {\n korean: \"품밟기\",\n english: \"Sweeping Foot Attack\",\n romanized: \"pum-balbgi\",\n },\n koreanName: \"품밟기\",\n englishName: \"Sweeping Foot Attack\",\n romanized: \"pum-balbgi\",\n description: {\n korean: \"택견의 낮은 발차기로 발목을 쓸어 넘어뜨림\",\n english: \"Taekyon low sweeping kick targeting ankles\",\n },\n stance: TrigramStance.SON,\n type: CombatAttackType.KICK,\n damageType: DamageType.BLUNT,\n damage: 20,\n kiCost: 10,\n staminaCost: 22,\n accuracy: 0.82,\n reachConfig: {\n bodyPart: \"leg\",\n techniqueType: \"kick\",\n baseExtension: 0.95,\n },\n executionTime: 770,\n recoveryTime: 1190,\n critChance: 0.12,\n critMultiplier: 1.4,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"kick\", // Type: shared category\n animationId: \"son_sweeping_low_kick\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Low sweeping kick\n animationType: AnimationType.SON_SWEEPING_LOW_KICK,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"medium\",\n speed: 1.1,\n // Son (Wind) combo flow properties\n comboWindow: 200,\n comboPriority: 2, // Mid-chain technique - bridges combos\n pressureStacks: 1, // Applies 1 pressure stack on hit\n },\n {\n id: \"son_rapid_footwork\",\n name: {\n korean: \"품밟기연환\",\n english: \"Rapid Footwork Chain\",\n romanized: \"pum-balbgi-yeonhwan\",\n },\n koreanName: \"품밟기연환\",\n englishName: \"Rapid Footwork Chain\",\n romanized: \"pum-balbgi-yeonhwan\",\n description: {\n korean: \"택견의 빠른 발놀림으로 연속 타격\",\n english: \"Taekyon rapid footwork with continuous strikes\",\n },\n stance: TrigramStance.SON,\n type: CombatAttackType.KICK,\n damageType: DamageType.BLUNT,\n damage: 28,\n kiCost: 16,\n staminaCost: 24,\n accuracy: 0.74,\n reachConfig: {\n bodyPart: \"leg\",\n techniqueType: \"kick\",\n baseExtension: 1.05,\n },\n executionTime: 840,\n recoveryTime: 1260,\n critChance: 0.16,\n critMultiplier: 1.6,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"footwork\", // Type: shared category\n animationId: \"son_rapid_footwork\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Rapid footwork sequence\n animationType: AnimationType.SON_RAPID_FOOTWORK,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"medium\",\n speed: 1.2,\n // Son (Wind) combo flow properties\n comboWindow: 200,\n comboPriority: 2, // Mid-chain technique - bridges combos\n pressureStacks: 2, // Applies 2 pressure stacks on hit\n },\n\n // ============= Rhythmic Striking Techniques =============\n {\n id: \"son_rhythmic_strikes\",\n name: {\n korean: \"결련수\",\n english: \"Rhythmic Hand Strikes\",\n romanized: \"gyeolryeon-su\",\n },\n koreanName: \"결련수\",\n englishName: \"Rhythmic Hand Strikes\",\n romanized: \"gyeolryeon-su\",\n description: {\n korean: \"택견의 리듬감 있는 연속 손타격\",\n english: \"Taekyon rhythmic continuous hand strikes\",\n },\n stance: TrigramStance.SON,\n type: CombatAttackType.STRIKE,\n damageType: DamageType.PRESSURE,\n damage: 24,\n kiCost: 12,\n staminaCost: 28,\n accuracy: 0.85,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.95,\n },\n executionTime: 630,\n recoveryTime: 979,\n critChance: 0.22,\n critMultiplier: 2.0,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"punch\", // Type: shared category\n animationId: \"son_rhythmic_strikes\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Rhythmic hand combination\n animationType: AnimationType.SON_RHYTHMIC_STRIKES,\n animationSpeed: 0.75,\n category: \"special\",\n range: \"short\",\n speed: 1.2,\n // Son (Wind) combo flow properties\n comboWindow: 200,\n comboPriority: 3, // Finisher technique - ends combos\n pressureStacks: 3, // Applies 3 pressure stacks on hit (high pressure)\n },\n {\n id: \"son_flowing_push\",\n name: {\n korean: \"밀기\",\n english: \"Flowing Push\",\n romanized: \"mil-gi\",\n },\n koreanName: \"밀기\",\n englishName: \"Flowing Push\",\n romanized: \"mil-gi\",\n description: {\n korean: \"택견의 밀기로 상대의 균형을 무너뜨림\",\n english: \"Taekyon push disrupting opponent's balance\",\n },\n stance: TrigramStance.SON,\n type: CombatAttackType.STRIKE,\n damageType: DamageType.PRESSURE,\n damage: 20,\n kiCost: 8,\n staminaCost: 20,\n accuracy: 0.85,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"punch\",\n baseExtension: 0.9,\n },\n executionTime: 700,\n recoveryTime: 1050,\n critChance: 0.1,\n critMultiplier: 1.3,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"strike\", // Type: shared category\n animationId: \"son_flowing_push\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Flowing push movement\n animationType: AnimationType.SON_FLOWING_PUSH,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"short\",\n speed: 1.0,\n // Son (Wind) combo flow properties\n comboWindow: 200,\n comboPriority: 1, // Starter technique - opens combo chains\n pressureStacks: 1, // Applies 1 pressure stack on hit\n },\n\n // ============= Spinning Techniques =============\n {\n id: \"son_spinning_elbow\",\n name: {\n korean: \"돌려팔꿈치\",\n english: \"Spinning Elbow\",\n romanized: \"dollyeo-palkkumchi\",\n },\n koreanName: \"돌려팔꿈치\",\n englishName: \"Spinning Elbow\",\n romanized: \"dollyeo-palkkumchi\",\n description: {\n korean: \"회전하며 연속적으로 가하는 팔꿈치 공격\",\n english: \"Continuous spinning elbow strikes\",\n },\n stance: TrigramStance.SON,\n type: CombatAttackType.ELBOW,\n damageType: DamageType.BLUNT,\n damage: 26,\n kiCost: 14,\n staminaCost: 26,\n accuracy: 0.76,\n reachConfig: {\n bodyPart: \"arm\",\n techniqueType: \"elbow\",\n baseExtension: 0.5,\n },\n executionTime: 770,\n recoveryTime: 1190,\n critChance: 0.14,\n critMultiplier: 1.5,\n effects: [],\n // NEW ARCHITECTURE: Separate type (category) from ID (unique)\n animationCategory: \"elbow_strike\", // Type: shared category\n animationId: \"son_spinning_elbow\", // ID: unique 1-1 mapping\n // Legacy field for backward compatibility\n // Animation: Spinning elbow attack\n animationType: AnimationType.ELBOW_STRIKE,\n animationSpeed: 0.75,\n category: \"medium\",\n range: \"short\",\n speed: 1.1,\n // Son (Wind) combo flow properties\n comboWindow: 200,\n comboPriority: 3, // Finisher technique - ends combos\n pressureStacks: 2, // Applies 2 pressure stacks on hit\n },\n] as const;\n\n/**\n * Get SON techniques count\n */\nexport const SON_TECHNIQUE_COUNT = SON_TECHNIQUES.length;\n\n/**\n * Get SON technique by ID\n */\nexport function getSonTechniqueById(\n id: string,\n): TrigramStanceTechnique | undefined {\n return SON_TECHNIQUES.find((t) => t.id === id);\n}\n\n/**\n * Get all SON techniques by attack type\n */\nexport function getSonTechniquesByType(\n type: CombatAttackType,\n): readonly TrigramStanceTechnique[] {\n return SON_TECHNIQUES.filter((t) => t.type === type);\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TechniqueConfig.js","names":[],"sources":["../../../../src/systems/trigram/techniques/TechniqueConfig.ts"],"sourcesContent":["/**\n * Technique Configuration & Constants\n * 한국 무술 기법 설정 및 상수\n *\n * Contains all configuration, modifiers, effectiveness matrices,\n * and metadata for the Korean martial arts technique system.\n *\n * @module TechniqueConfig\n */\n\nimport {\n CombatAttackType,\n DamageType,\n TrigramStance,\n} from \"../../../types/common\";\n\n// =====================================================\n// TECHNIQUE MODIFIERS\n// =====================================================\n\n/**\n * Technique effectiveness modifiers\n */\nexport const TECHNIQUE_MODIFIERS = {\n DAMAGE_VARIANCE: 0.15, // ±15% damage variance\n CRITICAL_DAMAGE_BASE: 1.5,\n VITAL_POINT_BONUS: 2.0,\n STANCE_MISMATCH_PENALTY: 0.8,\n COMBO_MULTIPLIER: 1.1,\n} as const;\n\n// =====================================================\n// TECHNIQUE PROPERTIES\n// =====================================================\n\n/**\n * Base properties for each combat attack type\n */\nexport const TECHNIQUE_PROPERTIES: Record<\n CombatAttackType,\n {\n readonly baseDamage: number;\n readonly range: number;\n readonly accuracy: number;\n readonly kiCost: number;\n readonly staminaCost: number;\n }\n> = {\n [CombatAttackType.STRIKE]: {\n baseDamage: 20,\n range: 1.0,\n accuracy: 0.85,\n kiCost: 15,\n staminaCost: 10,\n },\n [CombatAttackType.THRUST]: {\n baseDamage: 25,\n range: 1.5,\n accuracy: 0.9,\n kiCost: 18,\n staminaCost: 12,\n },\n [CombatAttackType.BLOCK]: {\n baseDamage: 5,\n range: 0.5,\n accuracy: 0.95,\n kiCost: 8,\n staminaCost: 15,\n },\n [CombatAttackType.COUNTER_ATTACK]: {\n baseDamage: 22,\n range: 1.0,\n accuracy: 0.88,\n kiCost: 20,\n staminaCost: 15,\n },\n [CombatAttackType.THROW]: {\n baseDamage: 30,\n range: 0.8,\n accuracy: 0.75,\n kiCost: 25,\n staminaCost: 20,\n },\n [CombatAttackType.GRAPPLE]: {\n baseDamage: 15,\n range: 0.6,\n accuracy: 0.8,\n kiCost: 20,\n staminaCost: 25,\n },\n [CombatAttackType.PRESSURE_POINT]: {\n baseDamage: 12,\n range: 0.8,\n accuracy: 0.95,\n kiCost: 25,\n staminaCost: 8,\n },\n [CombatAttackType.NERVE_STRIKE]: {\n baseDamage: 18,\n range: 1.0,\n accuracy: 0.9,\n kiCost: 22,\n staminaCost: 12,\n },\n [CombatAttackType.PUNCH]: {\n baseDamage: 18,\n range: 1.2,\n accuracy: 0.88,\n kiCost: 12,\n staminaCost: 8,\n },\n [CombatAttackType.KICK]: {\n baseDamage: 22,\n range: 1.8,\n accuracy: 0.82,\n kiCost: 16,\n staminaCost: 14,\n },\n [CombatAttackType.ELBOW]: {\n baseDamage: 26,\n range: 0.9,\n accuracy: 0.86,\n kiCost: 18,\n staminaCost: 12,\n },\n [CombatAttackType.KNEE]: {\n baseDamage: 28,\n range: 0.7,\n accuracy: 0.84,\n kiCost: 20,\n staminaCost: 16,\n },\n} as const;\n\n// =====================================================\n// DAMAGE TYPE EFFECTIVENESS\n// =====================================================\n\n/**\n * Damage type effectiveness against different body tissues\n * 데미지 유형별 조직 효과 매트릭스\n */\nexport const DAMAGE_TYPE_EFFECTIVENESS: Record<\n DamageType,\n Record<string, number>\n> = {\n blunt: {\n bone: 1.3,\n muscle: 1.1,\n organ: 1.0,\n nerve: 0.8,\n vascular: 0.9,\n joint: 1.2,\n },\n piercing: {\n bone: 0.7,\n muscle: 1.2,\n organ: 1.4,\n nerve: 1.1,\n vascular: 1.5,\n joint: 0.8,\n },\n slashing: {\n bone: 0.5,\n muscle: 1.3,\n organ: 1.1,\n nerve: 0.9,\n vascular: 1.4,\n joint: 0.7,\n },\n pressure: {\n bone: 0.6,\n muscle: 0.9,\n organ: 1.1,\n nerve: 1.6,\n vascular: 1.3,\n joint: 1.0,\n },\n nerve: {\n bone: 0.4,\n muscle: 0.8,\n organ: 1.0,\n nerve: 1.8,\n vascular: 1.2,\n joint: 0.9,\n },\n joint: {\n bone: 1.1,\n muscle: 0.9,\n organ: 0.7,\n nerve: 0.8,\n vascular: 0.6,\n joint: 1.7,\n },\n internal: {\n bone: 0.3,\n muscle: 0.7,\n organ: 1.5,\n nerve: 1.3,\n vascular: 1.1,\n joint: 0.5,\n },\n impact: {\n bone: 1.2,\n muscle: 1.0,\n organ: 1.1,\n nerve: 0.9,\n vascular: 0.8,\n joint: 1.3,\n },\n crushing: {\n bone: 1.5,\n muscle: 1.2,\n organ: 1.3,\n nerve: 0.7,\n vascular: 0.8,\n joint: 1.4,\n },\n sharp: {\n bone: 0.6,\n muscle: 1.4,\n organ: 1.2,\n nerve: 1.0,\n vascular: 1.6,\n joint: 0.8,\n },\n electric: {\n bone: 0.2,\n muscle: 1.0,\n organ: 0.9,\n nerve: 2.0,\n vascular: 1.1,\n joint: 0.5,\n },\n fire: {\n bone: 0.3,\n muscle: 1.1,\n organ: 1.2,\n nerve: 1.4,\n vascular: 1.0,\n joint: 0.6,\n },\n ice: {\n bone: 0.4,\n muscle: 0.8,\n organ: 0.9,\n nerve: 1.2,\n vascular: 0.7,\n joint: 1.1,\n },\n poison: {\n bone: 0.1,\n muscle: 0.6,\n organ: 1.8,\n nerve: 1.5,\n vascular: 1.7,\n joint: 0.3,\n },\n psychic: {\n bone: 0.0,\n muscle: 0.2,\n organ: 0.5,\n nerve: 2.2,\n vascular: 0.4,\n joint: 0.1,\n },\n blood: {\n bone: 0.2,\n muscle: 0.8,\n organ: 1.0,\n nerve: 0.5,\n vascular: 2.0,\n joint: 0.3,\n },\n} as const;\n\n// =====================================================\n// TRIGRAM TECHNIQUE PROPERTIES\n// =====================================================\n\n/**\n * Korean trigram technique properties (팔괘 기법 특성)\n */\nexport const TRIGRAM_TECHNIQUE_PROPERTIES = {\n geon: {\n korean: \"건괘\",\n english: \"Heaven\",\n element: \"metal\",\n nature: \"yang\",\n combatStyle: \"direct_force\",\n preferredDamageTypes: [\"blunt\", \"crushing\", \"impact\"],\n philosophy: \"정의로운 행동을 통한 압도적 힘\",\n },\n tae: {\n korean: \"태괘\",\n english: \"Lake\",\n element: \"metal\",\n nature: \"yin\",\n combatStyle: \"fluid_adaptation\",\n preferredDamageTypes: [\"pressure\", \"joint\", \"nerve\"],\n philosophy: \"부드러운 지속성이 경직된 저항을 이긴다\",\n },\n li: {\n korean: \"리괘\",\n english: \"Fire\",\n element: \"fire\",\n nature: \"yang\",\n combatStyle: \"precision_strikes\",\n preferredDamageTypes: [\"piercing\", \"sharp\", \"fire\"],\n philosophy: \"외과적 정밀함으로 약점을 조명한다\",\n },\n jin: {\n korean: \"진괘\",\n english: \"Thunder\",\n element: \"wood\",\n nature: \"yang\",\n combatStyle: \"explosive_power\",\n preferredDamageTypes: [\"electric\", \"impact\", \"blunt\"],\n philosophy: \"번개처럼 치고 천둥처럼 움직인다\",\n },\n son: {\n korean: \"손괘\",\n english: \"Wind\",\n element: \"wood\",\n nature: \"yin\",\n combatStyle: \"continuous_pressure\",\n preferredDamageTypes: [\"slashing\", \"pressure\", \"nerve\"],\n philosophy: \"지속적인 부드러운 힘이 모든 방어를 관통한다\",\n },\n gam: {\n korean: \"감괘\",\n english: \"Water\",\n element: \"water\",\n nature: \"yang\",\n combatStyle: \"adaptive_flow\",\n preferredDamageTypes: [\"blood\", \"poison\", \"internal\"],\n philosophy: \"장애물 주위로 흘러 급소를 타격한다\",\n },\n gan: {\n korean: \"간괘\",\n english: \"Mountain\",\n element: \"earth\",\n nature: \"yang\",\n combatStyle: \"immovable_defense\",\n preferredDamageTypes: [\"blunt\", \"crushing\", \"internal\"],\n philosophy: \"정적 속에 무한한 잠재 에너지를 담는다\",\n },\n gon: {\n korean: \"곤괘\",\n english: \"Earth\",\n element: \"earth\",\n nature: \"yin\",\n combatStyle: \"supportive_control\",\n preferredDamageTypes: [\"joint\", \"pressure\", \"internal\"],\n philosophy: \"지원하고 양육하여 승리를 이룬다\",\n },\n} as const;\n\n// =====================================================\n// KOREAN NAMING CONVENTIONS\n// =====================================================\n\n/**\n * Korean technique naming convention (한국 무술 명명법)\n */\nexport const TECHNIQUE_NAMING = {\n prefixes: {\n heaven: \"천\", // Heaven/Sky\n earth: \"지\", // Earth\n human: \"인\", // Human\n wind: \"풍\", // Wind\n thunder: \"뇌\", // Thunder\n fire: \"화\", // Fire\n water: \"수\", // Water\n mountain: \"산\", // Mountain\n },\n suffixes: {\n strike: \"격\", // Strike/Hit\n thrust: \"찌르기\", // Thrust/Stab\n block: \"막기\", // Block/Defend\n throw: \"던지기\", // Throw\n technique: \"술\", // Technique/Art\n method: \"법\", // Method/Way\n },\n} as const;\n\n// =====================================================\n// TECHNIQUE CATEGORIES\n// =====================================================\n\n/**\n * Korean martial arts technique categories (한국 무술 기법 분류)\n */\nexport const KOREAN_TECHNIQUE_CATEGORIES = {\n striking: {\n korean: \"타격술\",\n english: \"Striking Techniques\",\n subcategories: [\"punch\", \"kick\", \"elbow\", \"knee\", \"palm\"],\n },\n grappling: {\n korean: \"잡기술\",\n english: \"Grappling Techniques\",\n subcategories: [\"throw\", \"takedown\", \"joint_lock\", \"choke\"],\n },\n pressure_point: {\n korean: \"혈도술\",\n english: \"Pressure Point Techniques\",\n subcategories: [\"nerve_strike\", \"blood_flow\", \"ki_disruption\"],\n },\n defensive: {\n korean: \"방어술\",\n english: \"Defensive Techniques\",\n subcategories: [\"block\", \"parry\", \"dodge\", \"counter\"],\n },\n} as const;\n\n// =====================================================\n// DIFFICULTY LEVELS\n// =====================================================\n\n/**\n * Korean technique difficulty progression (한국 무술 난이도 체계)\n */\nexport const TECHNIQUE_DIFFICULTY_LEVELS = {\n basic: {\n korean: \"기초\",\n english: \"Basic\",\n requirements: { ki: 10, stamina: 8, experience: 0 },\n },\n intermediate: {\n korean: \"중급\",\n english: \"Intermediate\",\n requirements: { ki: 20, stamina: 15, experience: 100 },\n },\n advanced: {\n korean: \"고급\",\n english: \"Advanced\",\n requirements: { ki: 35, stamina: 25, experience: 500 },\n },\n master: {\n korean: \"사범\",\n english: \"Master\",\n requirements: { ki: 50, stamina: 40, experience: 1000 },\n },\n} as const;\n\n// =====================================================\n// ARCHETYPE BONUSES\n// =====================================================\n\n/**\n * Korean archetype combat specializations (한국 무사 유형별 전투 특화)\n */\nexport const ARCHETYPE_TECHNIQUE_BONUSES = {\n musa: {\n korean: \"무사\",\n english: \"Traditional Warrior\",\n philosophy: \"Honor through strength, disciplined combat\",\n combatStyle: \"Direct confrontation, overwhelming force\",\n preferredTrigrams: [\"geon\", \"jin\"],\n techniques: {\n 관절기법: \"Joint manipulation and control\",\n 급소타격: \"Military-taught pressure point targeting\",\n 제압술: \"Honor-based control methods\",\n },\n bonuses: {\n damageResistance: 1.2,\n jointTechniques: 1.5,\n militaryDiscipline: 1.3,\n darkOpsEffectiveness: 0.85,\n damageBonus: 1.2,\n accuracyBonus: 1.1,\n kiEfficiency: 1.0,\n staminaEfficiency: 1.1,\n },\n preferredTechniques: [\"strike\", \"block\", \"counter_attack\"],\n },\n amsalja: {\n korean: \"암살자\",\n english: \"Shadow Assassin\",\n philosophy: \"Efficiency through invisibility, one perfect strike\",\n combatStyle: \"Stealth approaches, instant takedowns\",\n preferredTrigrams: [\"son\", \"gam\", \"li\"],\n techniques: {\n 무성제압: \"Silent takedowns preventing vocal response\",\n 신경파괴: \"Precise neural disruption for stealth\",\n 호흡차단: \"Silent breathing and consciousness targeting\",\n 암흑작전: \"Dark Ops techniques for silent incapacitation\",\n },\n bonuses: {\n stealthMultiplier: 1.8,\n oneStrikeKill: 2.0,\n silentMovement: 1.5,\n darkOpsEffectiveness: 1.3,\n nightOperationsBonus: 1.25,\n damageBonus: 1.5,\n accuracyBonus: 1.3,\n kiEfficiency: 1.2,\n staminaEfficiency: 0.9,\n },\n preferredTechniques: [\n \"nerve_strike\",\n \"pressure_point\",\n \"thrust\",\n \"darkops\",\n ],\n },\n hacker: {\n korean: \"해커\",\n english: \"Cyber Warrior\",\n philosophy: \"Information as power, technological advantage\",\n combatStyle: \"Environmental manipulation, tech-assisted strikes\",\n preferredTrigrams: [\"li\", \"tae\"],\n techniques: {\n 해부학적분석: \"Data-driven approach to vital points\",\n 생체역학파괴: \"Tech-enhanced body mechanics understanding\",\n 체계적제압: \"Algorithm-based damage accumulation\",\n 디지털타격: \"Digital targeting systems for Dark Ops\",\n },\n bonuses: {\n precisionAnalysis: 1.6,\n environmentalControl: 1.4,\n dataOptimization: 1.3,\n darkOpsEffectiveness: 1.1,\n damageBonus: 1.1,\n accuracyBonus: 1.4,\n kiEfficiency: 1.3,\n staminaEfficiency: 1.0,\n },\n preferredTechniques: [\"pressure_point\", \"nerve_strike\"],\n },\n jeongbo_yowon: {\n korean: \"정보요원\",\n english: \"Intelligence Operative\",\n philosophy: \"Knowledge through observation, strategic thinking\",\n combatStyle: \"Psychological manipulation, precise timing\",\n preferredTrigrams: [\"gan\", \"gon\"],\n techniques: {\n 고통순응: \"Intelligence-based submission through pain\",\n 심리적압박: \"Mental intimidation through technique\",\n 정보추출: \"Combat methods from interrogation training\",\n 첩보전술: \"Espionage tactics and Dark Ops methods\",\n },\n bonuses: {\n psychologicalWarfare: 1.5,\n strategicAnalysis: 1.4,\n painCompliance: 1.7,\n darkOpsEffectiveness: 1.15,\n damageBonus: 1.1,\n accuracyBonus: 1.2,\n kiEfficiency: 1.1,\n staminaEfficiency: 1.2,\n },\n preferredTechniques: [\"grapple\", \"pressure_point\"],\n },\n jojik_pokryeokbae: {\n korean: \"조직폭력배\",\n english: \"Organized Crime\",\n philosophy: \"Survival through ruthlessness, practical violence\",\n combatStyle: \"Dirty fighting, improvised weapons\",\n preferredTrigrams: [\"jin\", \"gam\"],\n techniques: {\n 환경활용: \"Street-smart use of surroundings as weapons\",\n 더러운기법: \"Brutal eye attacks, groin strikes, hair pulling\",\n 생존격투: \"Underground whatever-it-takes combat\",\n 무자비술: \"Ruthless Dark Ops adaptations\",\n },\n bonuses: {\n dirtyFighting: 1.8,\n survivalInstinct: 1.6,\n streetSmart: 1.5,\n darkOpsEffectiveness: 1.05,\n damageBonus: 1.3,\n accuracyBonus: 0.9,\n kiEfficiency: 0.9,\n staminaEfficiency: 1.3,\n },\n preferredTechniques: [\"strike\", \"throw\", \"grapple\"],\n },\n} as const;\n\n// =====================================================\n// STANCE-TRIGRAM MAPPING\n// =====================================================\n\n/**\n * Map TrigramStance enum to trigram key strings\n */\nexport function getTrigramKey(\n stance: TrigramStance\n): keyof typeof TRIGRAM_TECHNIQUE_PROPERTIES {\n const stanceMap: Record<\n TrigramStance,\n keyof typeof TRIGRAM_TECHNIQUE_PROPERTIES\n > = {\n [TrigramStance.GEON]: \"geon\",\n [TrigramStance.TAE]: \"tae\",\n [TrigramStance.LI]: \"li\",\n [TrigramStance.JIN]: \"jin\",\n [TrigramStance.SON]: \"son\",\n [TrigramStance.GAM]: \"gam\",\n [TrigramStance.GAN]: \"gan\",\n [TrigramStance.GON]: \"gon\",\n };\n return stanceMap[stance];\n}\n\n/**\n * Get trigram properties by stance\n */\nexport function getTrigramProperties(stance: TrigramStance) {\n const key = getTrigramKey(stance);\n return TRIGRAM_TECHNIQUE_PROPERTIES[key];\n}\n\n/**\n * Calculate damage effectiveness for a damage type against tissue\n */\nexport function calculateDamageEffectiveness(\n damageType: DamageType,\n tissueType: string\n): number {\n const effectiveness = DAMAGE_TYPE_EFFECTIVENESS[damageType];\n return effectiveness?.[tissueType] ?? 1.0;\n}\n"],"mappings":";;;;;;;;;;;;;;AAuBA,IAAa,sBAAsB;CACjC,iBAAiB;CACjB,sBAAsB;CACtB,mBAAmB;CACnB,yBAAyB;CACzB,kBAAkB;CACnB;;;;AASD,IAAa,uBAST;EACD,iBAAiB,SAAS;EACzB,YAAY;EACZ,OAAO;EACP,UAAU;EACV,QAAQ;EACR,aAAa;EACd;EACA,iBAAiB,SAAS;EACzB,YAAY;EACZ,OAAO;EACP,UAAU;EACV,QAAQ;EACR,aAAa;EACd;EACA,iBAAiB,QAAQ;EACxB,YAAY;EACZ,OAAO;EACP,UAAU;EACV,QAAQ;EACR,aAAa;EACd;EACA,iBAAiB,iBAAiB;EACjC,YAAY;EACZ,OAAO;EACP,UAAU;EACV,QAAQ;EACR,aAAa;EACd;EACA,iBAAiB,QAAQ;EACxB,YAAY;EACZ,OAAO;EACP,UAAU;EACV,QAAQ;EACR,aAAa;EACd;EACA,iBAAiB,UAAU;EAC1B,YAAY;EACZ,OAAO;EACP,UAAU;EACV,QAAQ;EACR,aAAa;EACd;EACA,iBAAiB,iBAAiB;EACjC,YAAY;EACZ,OAAO;EACP,UAAU;EACV,QAAQ;EACR,aAAa;EACd;EACA,iBAAiB,eAAe;EAC/B,YAAY;EACZ,OAAO;EACP,UAAU;EACV,QAAQ;EACR,aAAa;EACd;EACA,iBAAiB,QAAQ;EACxB,YAAY;EACZ,OAAO;EACP,UAAU;EACV,QAAQ;EACR,aAAa;EACd;EACA,iBAAiB,OAAO;EACvB,YAAY;EACZ,OAAO;EACP,UAAU;EACV,QAAQ;EACR,aAAa;EACd;EACA,iBAAiB,QAAQ;EACxB,YAAY;EACZ,OAAO;EACP,UAAU;EACV,QAAQ;EACR,aAAa;EACd;EACA,iBAAiB,OAAO;EACvB,YAAY;EACZ,OAAO;EACP,UAAU;EACV,QAAQ;EACR,aAAa;EACd;CACF;;;;;AAUD,IAAa,4BAGT;CACF,OAAO;EACL,MAAM;EACN,QAAQ;EACR,OAAO;EACP,OAAO;EACP,UAAU;EACV,OAAO;EACR;CACD,UAAU;EACR,MAAM;EACN,QAAQ;EACR,OAAO;EACP,OAAO;EACP,UAAU;EACV,OAAO;EACR;CACD,UAAU;EACR,MAAM;EACN,QAAQ;EACR,OAAO;EACP,OAAO;EACP,UAAU;EACV,OAAO;EACR;CACD,UAAU;EACR,MAAM;EACN,QAAQ;EACR,OAAO;EACP,OAAO;EACP,UAAU;EACV,OAAO;EACR;CACD,OAAO;EACL,MAAM;EACN,QAAQ;EACR,OAAO;EACP,OAAO;EACP,UAAU;EACV,OAAO;EACR;CACD,OAAO;EACL,MAAM;EACN,QAAQ;EACR,OAAO;EACP,OAAO;EACP,UAAU;EACV,OAAO;EACR;CACD,UAAU;EACR,MAAM;EACN,QAAQ;EACR,OAAO;EACP,OAAO;EACP,UAAU;EACV,OAAO;EACR;CACD,QAAQ;EACN,MAAM;EACN,QAAQ;EACR,OAAO;EACP,OAAO;EACP,UAAU;EACV,OAAO;EACR;CACD,UAAU;EACR,MAAM;EACN,QAAQ;EACR,OAAO;EACP,OAAO;EACP,UAAU;EACV,OAAO;EACR;CACD,OAAO;EACL,MAAM;EACN,QAAQ;EACR,OAAO;EACP,OAAO;EACP,UAAU;EACV,OAAO;EACR;CACD,UAAU;EACR,MAAM;EACN,QAAQ;EACR,OAAO;EACP,OAAO;EACP,UAAU;EACV,OAAO;EACR;CACD,MAAM;EACJ,MAAM;EACN,QAAQ;EACR,OAAO;EACP,OAAO;EACP,UAAU;EACV,OAAO;EACR;CACD,KAAK;EACH,MAAM;EACN,QAAQ;EACR,OAAO;EACP,OAAO;EACP,UAAU;EACV,OAAO;EACR;CACD,QAAQ;EACN,MAAM;EACN,QAAQ;EACR,OAAO;EACP,OAAO;EACP,UAAU;EACV,OAAO;EACR;CACD,SAAS;EACP,MAAM;EACN,QAAQ;EACR,OAAO;EACP,OAAO;EACP,UAAU;EACV,OAAO;EACR;CACD,OAAO;EACL,MAAM;EACN,QAAQ;EACR,OAAO;EACP,OAAO;EACP,UAAU;EACV,OAAO;EACR;CACF;;;;AASD,IAAa,+BAA+B;CAC1C,MAAM;EACJ,QAAQ;EACR,SAAS;EACT,SAAS;EACT,QAAQ;EACR,aAAa;EACb,sBAAsB;GAAC;GAAS;GAAY;GAAS;EACrD,YAAY;EACb;CACD,KAAK;EACH,QAAQ;EACR,SAAS;EACT,SAAS;EACT,QAAQ;EACR,aAAa;EACb,sBAAsB;GAAC;GAAY;GAAS;GAAQ;EACpD,YAAY;EACb;CACD,IAAI;EACF,QAAQ;EACR,SAAS;EACT,SAAS;EACT,QAAQ;EACR,aAAa;EACb,sBAAsB;GAAC;GAAY;GAAS;GAAO;EACnD,YAAY;EACb;CACD,KAAK;EACH,QAAQ;EACR,SAAS;EACT,SAAS;EACT,QAAQ;EACR,aAAa;EACb,sBAAsB;GAAC;GAAY;GAAU;GAAQ;EACrD,YAAY;EACb;CACD,KAAK;EACH,QAAQ;EACR,SAAS;EACT,SAAS;EACT,QAAQ;EACR,aAAa;EACb,sBAAsB;GAAC;GAAY;GAAY;GAAQ;EACvD,YAAY;EACb;CACD,KAAK;EACH,QAAQ;EACR,SAAS;EACT,SAAS;EACT,QAAQ;EACR,aAAa;EACb,sBAAsB;GAAC;GAAS;GAAU;GAAW;EACrD,YAAY;EACb;CACD,KAAK;EACH,QAAQ;EACR,SAAS;EACT,SAAS;EACT,QAAQ;EACR,aAAa;EACb,sBAAsB;GAAC;GAAS;GAAY;GAAW;EACvD,YAAY;EACb;CACD,KAAK;EACH,QAAQ;EACR,SAAS;EACT,SAAS;EACT,QAAQ;EACR,aAAa;EACb,sBAAsB;GAAC;GAAS;GAAY;GAAW;EACvD,YAAY;EACb;CACF;;;;AASD,IAAa,mBAAmB;CAC9B,UAAU;EACR,QAAQ;EACR,OAAO;EACP,OAAO;EACP,MAAM;EACN,SAAS;EACT,MAAM;EACN,OAAO;EACP,UAAU;EACX;CACD,UAAU;EACR,QAAQ;EACR,QAAQ;EACR,OAAO;EACP,OAAO;EACP,WAAW;EACX,QAAQ;EACT;CACF;;;;AASD,IAAa,8BAA8B;CACzC,UAAU;EACR,QAAQ;EACR,SAAS;EACT,eAAe;GAAC;GAAS;GAAQ;GAAS;GAAQ;GAAO;EAC1D;CACD,WAAW;EACT,QAAQ;EACR,SAAS;EACT,eAAe;GAAC;GAAS;GAAY;GAAc;GAAQ;EAC5D;CACD,gBAAgB;EACd,QAAQ;EACR,SAAS;EACT,eAAe;GAAC;GAAgB;GAAc;GAAgB;EAC/D;CACD,WAAW;EACT,QAAQ;EACR,SAAS;EACT,eAAe;GAAC;GAAS;GAAS;GAAS;GAAU;EACtD;CACF;;;;AASD,IAAa,8BAA8B;CACzC,OAAO;EACL,QAAQ;EACR,SAAS;EACT,cAAc;GAAE,IAAI;GAAI,SAAS;GAAG,YAAY;GAAG;EACpD;CACD,cAAc;EACZ,QAAQ;EACR,SAAS;EACT,cAAc;GAAE,IAAI;GAAI,SAAS;GAAI,YAAY;GAAK;EACvD;CACD,UAAU;EACR,QAAQ;EACR,SAAS;EACT,cAAc;GAAE,IAAI;GAAI,SAAS;GAAI,YAAY;GAAK;EACvD;CACD,QAAQ;EACN,QAAQ;EACR,SAAS;EACT,cAAc;GAAE,IAAI;GAAI,SAAS;GAAI,YAAY;GAAM;EACxD;CACF;;;;AAgJD,SAAgB,cACd,QAC2C;AAc3C,QAAO;GATJ,cAAc,OAAO;GACrB,cAAc,MAAM;GACpB,cAAc,KAAK;GACnB,cAAc,MAAM;GACpB,cAAc,MAAM;GACpB,cAAc,MAAM;GACpB,cAAc,MAAM;GACpB,cAAc,MAAM;EAEhB,CAAU;;;;;AAMnB,SAAgB,qBAAqB,QAAuB;AAE1D,QAAO,6BADK,cAAc,OACU;;;;;AAMtC,SAAgB,6BACd,YACA,YACQ;AAER,QADsB,0BAA0B,cACzB,eAAe"}
|
|
1
|
+
{"version":3,"file":"TechniqueConfig.js","names":[],"sources":["../../../../src/systems/trigram/techniques/TechniqueConfig.ts"],"sourcesContent":["/**\n * Technique Configuration & Constants\n * 한국 무술 기법 설정 및 상수\n *\n * Contains all configuration, modifiers, effectiveness matrices,\n * and metadata for the Korean martial arts technique system.\n *\n * @module TechniqueConfig\n */\n\nimport {\n CombatAttackType,\n DamageType,\n TrigramStance,\n} from \"../../../types/common\";\n\n// =====================================================\n// TECHNIQUE MODIFIERS\n// =====================================================\n\n/**\n * Technique effectiveness modifiers\n */\nexport const TECHNIQUE_MODIFIERS = {\n DAMAGE_VARIANCE: 0.15, // ±15% damage variance\n CRITICAL_DAMAGE_BASE: 1.5,\n VITAL_POINT_BONUS: 2.0,\n STANCE_MISMATCH_PENALTY: 0.8,\n COMBO_MULTIPLIER: 1.1,\n} as const;\n\n// =====================================================\n// TECHNIQUE PROPERTIES\n// =====================================================\n\n/**\n * Base properties for each combat attack type\n */\nexport const TECHNIQUE_PROPERTIES: Record<\n CombatAttackType,\n {\n readonly baseDamage: number;\n readonly range: number;\n readonly accuracy: number;\n readonly kiCost: number;\n readonly staminaCost: number;\n }\n> = {\n [CombatAttackType.STRIKE]: {\n baseDamage: 20,\n range: 1.0,\n accuracy: 0.85,\n kiCost: 15,\n staminaCost: 10,\n },\n [CombatAttackType.THRUST]: {\n baseDamage: 25,\n range: 1.5,\n accuracy: 0.9,\n kiCost: 18,\n staminaCost: 12,\n },\n [CombatAttackType.BLOCK]: {\n baseDamage: 5,\n range: 0.5,\n accuracy: 0.95,\n kiCost: 8,\n staminaCost: 15,\n },\n [CombatAttackType.COUNTER_ATTACK]: {\n baseDamage: 22,\n range: 1.0,\n accuracy: 0.88,\n kiCost: 20,\n staminaCost: 15,\n },\n [CombatAttackType.THROW]: {\n baseDamage: 30,\n range: 0.8,\n accuracy: 0.75,\n kiCost: 25,\n staminaCost: 20,\n },\n [CombatAttackType.GRAPPLE]: {\n baseDamage: 15,\n range: 0.6,\n accuracy: 0.8,\n kiCost: 20,\n staminaCost: 25,\n },\n [CombatAttackType.PRESSURE_POINT]: {\n baseDamage: 12,\n range: 0.8,\n accuracy: 0.95,\n kiCost: 25,\n staminaCost: 8,\n },\n [CombatAttackType.NERVE_STRIKE]: {\n baseDamage: 18,\n range: 1.0,\n accuracy: 0.9,\n kiCost: 22,\n staminaCost: 12,\n },\n [CombatAttackType.PUNCH]: {\n baseDamage: 18,\n range: 1.2,\n accuracy: 0.88,\n kiCost: 12,\n staminaCost: 8,\n },\n [CombatAttackType.KICK]: {\n baseDamage: 22,\n range: 1.8,\n accuracy: 0.82,\n kiCost: 16,\n staminaCost: 14,\n },\n [CombatAttackType.ELBOW]: {\n baseDamage: 26,\n range: 0.9,\n accuracy: 0.86,\n kiCost: 18,\n staminaCost: 12,\n },\n [CombatAttackType.KNEE]: {\n baseDamage: 28,\n range: 0.7,\n accuracy: 0.84,\n kiCost: 20,\n staminaCost: 16,\n },\n} as const;\n\n// =====================================================\n// DAMAGE TYPE EFFECTIVENESS\n// =====================================================\n\n/**\n * Damage type effectiveness against different body tissues\n * 데미지 유형별 조직 효과 매트릭스\n */\nexport const DAMAGE_TYPE_EFFECTIVENESS: Record<\n DamageType,\n Record<string, number>\n> = {\n blunt: {\n bone: 1.3,\n muscle: 1.1,\n organ: 1.0,\n nerve: 0.8,\n vascular: 0.9,\n joint: 1.2,\n },\n piercing: {\n bone: 0.7,\n muscle: 1.2,\n organ: 1.4,\n nerve: 1.1,\n vascular: 1.5,\n joint: 0.8,\n },\n slashing: {\n bone: 0.5,\n muscle: 1.3,\n organ: 1.1,\n nerve: 0.9,\n vascular: 1.4,\n joint: 0.7,\n },\n pressure: {\n bone: 0.6,\n muscle: 0.9,\n organ: 1.1,\n nerve: 1.6,\n vascular: 1.3,\n joint: 1.0,\n },\n nerve: {\n bone: 0.4,\n muscle: 0.8,\n organ: 1.0,\n nerve: 1.8,\n vascular: 1.2,\n joint: 0.9,\n },\n joint: {\n bone: 1.1,\n muscle: 0.9,\n organ: 0.7,\n nerve: 0.8,\n vascular: 0.6,\n joint: 1.7,\n },\n internal: {\n bone: 0.3,\n muscle: 0.7,\n organ: 1.5,\n nerve: 1.3,\n vascular: 1.1,\n joint: 0.5,\n },\n impact: {\n bone: 1.2,\n muscle: 1.0,\n organ: 1.1,\n nerve: 0.9,\n vascular: 0.8,\n joint: 1.3,\n },\n crushing: {\n bone: 1.5,\n muscle: 1.2,\n organ: 1.3,\n nerve: 0.7,\n vascular: 0.8,\n joint: 1.4,\n },\n sharp: {\n bone: 0.6,\n muscle: 1.4,\n organ: 1.2,\n nerve: 1.0,\n vascular: 1.6,\n joint: 0.8,\n },\n electric: {\n bone: 0.2,\n muscle: 1.0,\n organ: 0.9,\n nerve: 2.0,\n vascular: 1.1,\n joint: 0.5,\n },\n fire: {\n bone: 0.3,\n muscle: 1.1,\n organ: 1.2,\n nerve: 1.4,\n vascular: 1.0,\n joint: 0.6,\n },\n ice: {\n bone: 0.4,\n muscle: 0.8,\n organ: 0.9,\n nerve: 1.2,\n vascular: 0.7,\n joint: 1.1,\n },\n poison: {\n bone: 0.1,\n muscle: 0.6,\n organ: 1.8,\n nerve: 1.5,\n vascular: 1.7,\n joint: 0.3,\n },\n psychic: {\n bone: 0.0,\n muscle: 0.2,\n organ: 0.5,\n nerve: 2.2,\n vascular: 0.4,\n joint: 0.1,\n },\n blood: {\n bone: 0.2,\n muscle: 0.8,\n organ: 1.0,\n nerve: 0.5,\n vascular: 2.0,\n joint: 0.3,\n },\n} as const;\n\n// =====================================================\n// TRIGRAM TECHNIQUE PROPERTIES\n// =====================================================\n\n/**\n * Korean trigram technique properties (팔괘 기법 특성)\n */\nexport const TRIGRAM_TECHNIQUE_PROPERTIES = {\n geon: {\n korean: \"건괘\",\n english: \"Heaven\",\n element: \"metal\",\n nature: \"yang\",\n combatStyle: \"direct_force\",\n preferredDamageTypes: [\"blunt\", \"crushing\", \"impact\"],\n philosophy: \"정의로운 행동을 통한 압도적 힘\",\n },\n tae: {\n korean: \"태괘\",\n english: \"Lake\",\n element: \"metal\",\n nature: \"yin\",\n combatStyle: \"fluid_adaptation\",\n preferredDamageTypes: [\"pressure\", \"joint\", \"nerve\"],\n philosophy: \"부드러운 지속성이 경직된 저항을 이긴다\",\n },\n li: {\n korean: \"리괘\",\n english: \"Fire\",\n element: \"fire\",\n nature: \"yang\",\n combatStyle: \"precision_strikes\",\n preferredDamageTypes: [\"piercing\", \"sharp\", \"fire\"],\n philosophy: \"외과적 정밀함으로 약점을 조명한다\",\n },\n jin: {\n korean: \"진괘\",\n english: \"Thunder\",\n element: \"wood\",\n nature: \"yang\",\n combatStyle: \"explosive_power\",\n preferredDamageTypes: [\"electric\", \"impact\", \"blunt\"],\n philosophy: \"번개처럼 치고 천둥처럼 움직인다\",\n },\n son: {\n korean: \"손괘\",\n english: \"Wind\",\n element: \"wood\",\n nature: \"yin\",\n combatStyle: \"continuous_pressure\",\n preferredDamageTypes: [\"slashing\", \"pressure\", \"nerve\"],\n philosophy: \"지속적인 부드러운 힘이 모든 방어를 관통한다\",\n },\n gam: {\n korean: \"감괘\",\n english: \"Water\",\n element: \"water\",\n nature: \"yang\",\n combatStyle: \"adaptive_flow\",\n preferredDamageTypes: [\"blood\", \"poison\", \"internal\"],\n philosophy: \"장애물 주위로 흘러 급소를 타격한다\",\n },\n gan: {\n korean: \"간괘\",\n english: \"Mountain\",\n element: \"earth\",\n nature: \"yang\",\n combatStyle: \"immovable_defense\",\n preferredDamageTypes: [\"blunt\", \"crushing\", \"internal\"],\n philosophy: \"정적 속에 무한한 잠재 에너지를 담는다\",\n },\n gon: {\n korean: \"곤괘\",\n english: \"Earth\",\n element: \"earth\",\n nature: \"yin\",\n combatStyle: \"supportive_control\",\n preferredDamageTypes: [\"joint\", \"pressure\", \"internal\"],\n philosophy: \"지원하고 양육하여 승리를 이룬다\",\n },\n} as const;\n\n// =====================================================\n// KOREAN NAMING CONVENTIONS\n// =====================================================\n\n/**\n * Korean technique naming convention (한국 무술 명명법)\n */\nexport const TECHNIQUE_NAMING = {\n prefixes: {\n heaven: \"천\", // Heaven/Sky\n earth: \"지\", // Earth\n human: \"인\", // Human\n wind: \"풍\", // Wind\n thunder: \"뇌\", // Thunder\n fire: \"화\", // Fire\n water: \"수\", // Water\n mountain: \"산\", // Mountain\n },\n suffixes: {\n strike: \"격\", // Strike/Hit\n thrust: \"찌르기\", // Thrust/Stab\n block: \"막기\", // Block/Defend\n throw: \"던지기\", // Throw\n technique: \"술\", // Technique/Art\n method: \"법\", // Method/Way\n },\n} as const;\n\n// =====================================================\n// TECHNIQUE CATEGORIES\n// =====================================================\n\n/**\n * Korean martial arts technique categories (한국 무술 기법 분류)\n */\nexport const KOREAN_TECHNIQUE_CATEGORIES = {\n striking: {\n korean: \"타격술\",\n english: \"Striking Techniques\",\n subcategories: [\"punch\", \"kick\", \"elbow\", \"knee\", \"palm\"],\n },\n grappling: {\n korean: \"잡기술\",\n english: \"Grappling Techniques\",\n subcategories: [\"throw\", \"takedown\", \"joint_lock\", \"choke\"],\n },\n pressure_point: {\n korean: \"혈도술\",\n english: \"Pressure Point Techniques\",\n subcategories: [\"nerve_strike\", \"blood_flow\", \"ki_disruption\"],\n },\n defensive: {\n korean: \"방어술\",\n english: \"Defensive Techniques\",\n subcategories: [\"block\", \"parry\", \"dodge\", \"counter\"],\n },\n} as const;\n\n// =====================================================\n// DIFFICULTY LEVELS\n// =====================================================\n\n/**\n * Korean technique difficulty progression (한국 무술 난이도 체계)\n */\nexport const TECHNIQUE_DIFFICULTY_LEVELS = {\n basic: {\n korean: \"기초\",\n english: \"Basic\",\n requirements: { ki: 10, stamina: 8, experience: 0 },\n },\n intermediate: {\n korean: \"중급\",\n english: \"Intermediate\",\n requirements: { ki: 20, stamina: 15, experience: 100 },\n },\n advanced: {\n korean: \"고급\",\n english: \"Advanced\",\n requirements: { ki: 35, stamina: 25, experience: 500 },\n },\n master: {\n korean: \"사범\",\n english: \"Master\",\n requirements: { ki: 50, stamina: 40, experience: 1000 },\n },\n} as const;\n\n// =====================================================\n// ARCHETYPE BONUSES\n// =====================================================\n\n/**\n * Korean archetype combat specializations (한국 무사 유형별 전투 특화)\n */\nexport const ARCHETYPE_TECHNIQUE_BONUSES = {\n musa: {\n korean: \"무사\",\n english: \"Traditional Warrior\",\n philosophy: \"Honor through strength, disciplined combat\",\n combatStyle: \"Direct confrontation, overwhelming force\",\n preferredTrigrams: [\"geon\", \"jin\"],\n techniques: {\n 관절기법: \"Joint manipulation and control\",\n 급소타격: \"Military-taught pressure point targeting\",\n 제압술: \"Honor-based control methods\",\n },\n bonuses: {\n damageResistance: 1.2,\n jointTechniques: 1.5,\n militaryDiscipline: 1.3,\n darkOpsEffectiveness: 0.85,\n damageBonus: 1.2,\n accuracyBonus: 1.1,\n kiEfficiency: 1.0,\n staminaEfficiency: 1.1,\n },\n preferredTechniques: [\"strike\", \"block\", \"counter_attack\"],\n },\n amsalja: {\n korean: \"암살자\",\n english: \"Shadow Assassin\",\n philosophy: \"Efficiency through invisibility, one perfect strike\",\n combatStyle: \"Stealth approaches, instant takedowns\",\n preferredTrigrams: [\"son\", \"gam\", \"li\"],\n techniques: {\n 무성제압: \"Silent takedowns preventing vocal response\",\n 신경파괴: \"Precise neural disruption for stealth\",\n 호흡차단: \"Silent breathing and consciousness targeting\",\n 암흑작전: \"Dark Ops techniques for silent incapacitation\",\n },\n bonuses: {\n stealthMultiplier: 1.8,\n oneStrikeKill: 2.0,\n silentMovement: 1.5,\n darkOpsEffectiveness: 1.3,\n nightOperationsBonus: 1.25,\n damageBonus: 1.5,\n accuracyBonus: 1.3,\n kiEfficiency: 1.2,\n staminaEfficiency: 0.9,\n },\n preferredTechniques: [\n \"nerve_strike\",\n \"pressure_point\",\n \"thrust\",\n \"darkops\",\n ],\n },\n hacker: {\n korean: \"해커\",\n english: \"Cyber Warrior\",\n philosophy: \"Information as power, technological advantage\",\n combatStyle: \"Environmental manipulation, tech-assisted strikes\",\n preferredTrigrams: [\"li\", \"tae\"],\n techniques: {\n 해부학적분석: \"Data-driven approach to vital points\",\n 생체역학파괴: \"Tech-enhanced body mechanics understanding\",\n 체계적제압: \"Algorithm-based damage accumulation\",\n 디지털타격: \"Digital targeting systems for Dark Ops\",\n },\n bonuses: {\n precisionAnalysis: 1.6,\n environmentalControl: 1.4,\n dataOptimization: 1.3,\n darkOpsEffectiveness: 1.1,\n damageBonus: 1.1,\n accuracyBonus: 1.4,\n kiEfficiency: 1.3,\n staminaEfficiency: 1.0,\n },\n preferredTechniques: [\"pressure_point\", \"nerve_strike\"],\n },\n jeongbo_yowon: {\n korean: \"정보요원\",\n english: \"Intelligence Operative\",\n philosophy: \"Knowledge through observation, strategic thinking\",\n combatStyle: \"Psychological manipulation, precise timing\",\n preferredTrigrams: [\"gan\", \"gon\"],\n techniques: {\n 고통순응: \"Intelligence-based submission through pain\",\n 심리적압박: \"Mental intimidation through technique\",\n 정보추출: \"Combat methods from interrogation training\",\n 첩보전술: \"Espionage tactics and Dark Ops methods\",\n },\n bonuses: {\n psychologicalWarfare: 1.5,\n strategicAnalysis: 1.4,\n painCompliance: 1.7,\n darkOpsEffectiveness: 1.15,\n damageBonus: 1.1,\n accuracyBonus: 1.2,\n kiEfficiency: 1.1,\n staminaEfficiency: 1.2,\n },\n preferredTechniques: [\"grapple\", \"pressure_point\"],\n },\n jojik_pokryeokbae: {\n korean: \"조직폭력배\",\n english: \"Organized Crime\",\n philosophy: \"Survival through ruthlessness, practical violence\",\n combatStyle: \"Dirty fighting, improvised weapons\",\n preferredTrigrams: [\"jin\", \"gam\"],\n techniques: {\n 환경활용: \"Street-smart use of surroundings as weapons\",\n 더러운기법: \"Brutal eye attacks, groin strikes, hair pulling\",\n 생존격투: \"Underground whatever-it-takes combat\",\n 무자비술: \"Ruthless Dark Ops adaptations\",\n },\n bonuses: {\n dirtyFighting: 1.8,\n survivalInstinct: 1.6,\n streetSmart: 1.5,\n darkOpsEffectiveness: 1.05,\n damageBonus: 1.3,\n accuracyBonus: 0.9,\n kiEfficiency: 0.9,\n staminaEfficiency: 1.3,\n },\n preferredTechniques: [\"strike\", \"throw\", \"grapple\"],\n },\n} as const;\n\n// =====================================================\n// STANCE-TRIGRAM MAPPING\n// =====================================================\n\n/**\n * Map TrigramStance enum to trigram key strings\n */\nexport function getTrigramKey(\n stance: TrigramStance\n): keyof typeof TRIGRAM_TECHNIQUE_PROPERTIES {\n const stanceMap: Record<\n TrigramStance,\n keyof typeof TRIGRAM_TECHNIQUE_PROPERTIES\n > = {\n [TrigramStance.GEON]: \"geon\",\n [TrigramStance.TAE]: \"tae\",\n [TrigramStance.LI]: \"li\",\n [TrigramStance.JIN]: \"jin\",\n [TrigramStance.SON]: \"son\",\n [TrigramStance.GAM]: \"gam\",\n [TrigramStance.GAN]: \"gan\",\n [TrigramStance.GON]: \"gon\",\n };\n return stanceMap[stance];\n}\n\n/**\n * Get trigram properties by stance\n */\nexport function getTrigramProperties(stance: TrigramStance) {\n const key = getTrigramKey(stance);\n return TRIGRAM_TECHNIQUE_PROPERTIES[key];\n}\n\n/**\n * Calculate damage effectiveness for a damage type against tissue\n */\nexport function calculateDamageEffectiveness(\n damageType: DamageType,\n tissueType: string\n): number {\n const effectiveness = DAMAGE_TYPE_EFFECTIVENESS[damageType];\n return effectiveness?.[tissueType] ?? 1.0;\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/systems/trigram/techniques/index.ts"],"sourcesContent":["/**\n * Techniques Module Index\n * 한국 무술 기법 모듈\n *\n * This module provides modular access to all Korean martial arts techniques\n * organized by trigram stance, plus Dark Ops techniques and configuration.\n *\n * Structure:\n * - Individual stance files (Geon, Tae, Li, Jin, Son, Gam, Gan, Gon)\n * - Dark Ops techniques for 암살자 archetype\n * - Configuration and constants\n *\n * @module techniques\n */\n\nimport { TrigramStance } from \"../../../types/common\";\nimport type { KoreanTechnique } from \"../../vitalpoint/types\";\n\n// =====================================================\n// STANCE TECHNIQUE IMPORTS\n// =====================================================\n\n// Basic stance techniques (array only)\nexport { GEON_TECHNIQUES } from \"./GeonTechniques\";\nexport { JIN_TECHNIQUES } from \"./JinTechniques\";\nexport { LI_TECHNIQUES } from \"./LiTechniques\";\nexport { TAE_TECHNIQUES } from \"./TaeTechniques\";\n\n// Extended stance techniques (with helper functions)\nexport {\n GAM_TECHNIQUE_COUNT,\n GAM_TECHNIQUES,\n getGamTechniqueById,\n getGamTechniquesByType,\n} from \"./GamTechniques\";\nexport {\n GAN_TECHNIQUE_COUNT,\n GAN_TECHNIQUES,\n getGanTechniqueById,\n getGanTechniquesByType,\n} from \"./GanTechniques\";\nexport {\n getGonTechniqueById,\n getGonTechniquesByType,\n GON_TECHNIQUE_COUNT,\n GON_TECHNIQUES,\n} from \"./GonTechniques\";\nexport {\n getSonTechniqueById,\n getSonTechniquesByType,\n SON_TECHNIQUE_COUNT,\n SON_TECHNIQUES,\n} from \"./SonTechniques\";\n\n// Import for composition\nimport { GAM_TECHNIQUES } from \"./GamTechniques\";\nimport { GAN_TECHNIQUES } from \"./GanTechniques\";\nimport { GEON_TECHNIQUES } from \"./GeonTechniques\";\nimport { GON_TECHNIQUES } from \"./GonTechniques\";\nimport { JIN_TECHNIQUES } from \"./JinTechniques\";\nimport { LI_TECHNIQUES } from \"./LiTechniques\";\nimport { SON_TECHNIQUES } from \"./SonTechniques\";\nimport { TAE_TECHNIQUES } from \"./TaeTechniques\";\n\n// =====================================================\n// DARK OPS TECHNIQUE IMPORTS\n// =====================================================\n\nexport {\n DARK_OPS_ARCHETYPE_BONUSES,\n DARK_OPS_NIGHT_BONUS,\n DARK_OPS_SPECIAL_EFFECTS,\n DARK_OPS_TECHNIQUE_COUNT,\n DARK_OPS_TECHNIQUES,\n DARK_OPS_UNITS,\n getDarkOpsArchetypeBonus,\n getDarkOpsTechniqueById,\n getDarkOpsTechniquesByUnit,\n} from \"./DarkOpsTechniques\";\n\n// =====================================================\n// CONFIGURATION IMPORTS\n// =====================================================\n\nexport {\n ARCHETYPE_TECHNIQUE_BONUSES,\n calculateDamageEffectiveness,\n DAMAGE_TYPE_EFFECTIVENESS,\n getTrigramKey,\n getTrigramProperties,\n KOREAN_TECHNIQUE_CATEGORIES,\n TECHNIQUE_DIFFICULTY_LEVELS,\n TECHNIQUE_MODIFIERS,\n TECHNIQUE_NAMING,\n TECHNIQUE_PROPERTIES,\n TRIGRAM_TECHNIQUE_PROPERTIES,\n} from \"./TechniqueConfig\";\n\n// =====================================================\n// COMPOSED TRIGRAM TECHNIQUES\n// =====================================================\n\n/**\n * Complete TRIGRAM_TECHNIQUES map organized by stance\n * This is the primary technique lookup used throughout the game\n *\n * 팔괘 기술 전체 맵 (스탠스별 구성)\n */\nexport const TRIGRAM_TECHNIQUES: Record<\n TrigramStance,\n readonly KoreanTechnique[]\n> = {\n [TrigramStance.GEON]: GEON_TECHNIQUES,\n [TrigramStance.TAE]: TAE_TECHNIQUES,\n [TrigramStance.LI]: LI_TECHNIQUES,\n [TrigramStance.JIN]: JIN_TECHNIQUES,\n [TrigramStance.SON]: SON_TECHNIQUES,\n [TrigramStance.GAM]: GAM_TECHNIQUES,\n [TrigramStance.GAN]: GAN_TECHNIQUES,\n [TrigramStance.GON]: GON_TECHNIQUES,\n} as const;\n\n// =====================================================\n// HELPER FUNCTIONS\n// =====================================================\n\n/**\n * Get all techniques for a specific stance\n */\nexport function getTechniquesByStance(\n stance: TrigramStance\n): readonly KoreanTechnique[] {\n return TRIGRAM_TECHNIQUES[stance] ?? [];\n}\n\n/**\n * Get a technique by ID from any stance\n */\nexport function getTechniqueById(id: string): KoreanTechnique | undefined {\n for (const techniques of Object.values(TRIGRAM_TECHNIQUES)) {\n const technique = techniques.find((t) => t.id === id);\n if (technique) return technique;\n }\n return undefined;\n}\n\n/**\n * Get all techniques across all stances\n */\nexport function getAllTechniques(): readonly KoreanTechnique[] {\n return Object.values(TRIGRAM_TECHNIQUES).flat();\n}\n\n/**\n * Get total technique count\n */\nexport function getTotalTechniqueCount(): number {\n return Object.values(TRIGRAM_TECHNIQUES).reduce(\n (sum, techniques) => sum + techniques.length,\n 0\n );\n}\n\n/**\n * Get technique count by stance\n */\nexport function getTechniqueCountByStance(): Record<TrigramStance, number> {\n return {\n [TrigramStance.GEON]: GEON_TECHNIQUES.length,\n [TrigramStance.TAE]: TAE_TECHNIQUES.length,\n [TrigramStance.LI]: LI_TECHNIQUES.length,\n [TrigramStance.JIN]: JIN_TECHNIQUES.length,\n [TrigramStance.SON]: SON_TECHNIQUES.length,\n [TrigramStance.GAM]: GAM_TECHNIQUES.length,\n [TrigramStance.GAN]: GAN_TECHNIQUES.length,\n [TrigramStance.GON]: GON_TECHNIQUES.length,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4GA,IAAa,qBAGT;EACD,cAAc,OAAO;EACrB,cAAc,MAAM;EACpB,cAAc,KAAK;EACnB,cAAc,MAAM;EACpB,cAAc,MAAM;EACpB,cAAc,MAAM;EACpB,cAAc,MAAM;EACpB,cAAc,MAAM;CACtB;;;;AASD,SAAgB,sBACd,QAC4B;
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/systems/trigram/techniques/index.ts"],"sourcesContent":["/**\n * Techniques Module Index\n * 한국 무술 기법 모듈\n *\n * This module provides modular access to all Korean martial arts techniques\n * organized by trigram stance, plus Dark Ops techniques and configuration.\n *\n * Structure:\n * - Individual stance files (Geon, Tae, Li, Jin, Son, Gam, Gan, Gon)\n * - Dark Ops techniques for 암살자 archetype\n * - Configuration and constants\n *\n * @module techniques\n */\n\nimport { TrigramStance } from \"../../../types/common\";\nimport type { KoreanTechnique } from \"../../vitalpoint/types\";\n\n// =====================================================\n// STANCE TECHNIQUE IMPORTS\n// =====================================================\n\n// Basic stance techniques (array only)\nexport { GEON_TECHNIQUES } from \"./GeonTechniques\";\nexport { JIN_TECHNIQUES } from \"./JinTechniques\";\nexport { LI_TECHNIQUES } from \"./LiTechniques\";\nexport { TAE_TECHNIQUES } from \"./TaeTechniques\";\n\n// Extended stance techniques (with helper functions)\nexport {\n GAM_TECHNIQUE_COUNT,\n GAM_TECHNIQUES,\n getGamTechniqueById,\n getGamTechniquesByType,\n} from \"./GamTechniques\";\nexport {\n GAN_TECHNIQUE_COUNT,\n GAN_TECHNIQUES,\n getGanTechniqueById,\n getGanTechniquesByType,\n} from \"./GanTechniques\";\nexport {\n getGonTechniqueById,\n getGonTechniquesByType,\n GON_TECHNIQUE_COUNT,\n GON_TECHNIQUES,\n} from \"./GonTechniques\";\nexport {\n getSonTechniqueById,\n getSonTechniquesByType,\n SON_TECHNIQUE_COUNT,\n SON_TECHNIQUES,\n} from \"./SonTechniques\";\n\n// Import for composition\nimport { GAM_TECHNIQUES } from \"./GamTechniques\";\nimport { GAN_TECHNIQUES } from \"./GanTechniques\";\nimport { GEON_TECHNIQUES } from \"./GeonTechniques\";\nimport { GON_TECHNIQUES } from \"./GonTechniques\";\nimport { JIN_TECHNIQUES } from \"./JinTechniques\";\nimport { LI_TECHNIQUES } from \"./LiTechniques\";\nimport { SON_TECHNIQUES } from \"./SonTechniques\";\nimport { TAE_TECHNIQUES } from \"./TaeTechniques\";\n\n// =====================================================\n// DARK OPS TECHNIQUE IMPORTS\n// =====================================================\n\nexport {\n DARK_OPS_ARCHETYPE_BONUSES,\n DARK_OPS_NIGHT_BONUS,\n DARK_OPS_SPECIAL_EFFECTS,\n DARK_OPS_TECHNIQUE_COUNT,\n DARK_OPS_TECHNIQUES,\n DARK_OPS_UNITS,\n getDarkOpsArchetypeBonus,\n getDarkOpsTechniqueById,\n getDarkOpsTechniquesByUnit,\n} from \"./DarkOpsTechniques\";\n\n// =====================================================\n// CONFIGURATION IMPORTS\n// =====================================================\n\nexport {\n ARCHETYPE_TECHNIQUE_BONUSES,\n calculateDamageEffectiveness,\n DAMAGE_TYPE_EFFECTIVENESS,\n getTrigramKey,\n getTrigramProperties,\n KOREAN_TECHNIQUE_CATEGORIES,\n TECHNIQUE_DIFFICULTY_LEVELS,\n TECHNIQUE_MODIFIERS,\n TECHNIQUE_NAMING,\n TECHNIQUE_PROPERTIES,\n TRIGRAM_TECHNIQUE_PROPERTIES,\n} from \"./TechniqueConfig\";\n\n// =====================================================\n// COMPOSED TRIGRAM TECHNIQUES\n// =====================================================\n\n/**\n * Complete TRIGRAM_TECHNIQUES map organized by stance\n * This is the primary technique lookup used throughout the game\n *\n * 팔괘 기술 전체 맵 (스탠스별 구성)\n */\nexport const TRIGRAM_TECHNIQUES: Record<\n TrigramStance,\n readonly KoreanTechnique[]\n> = {\n [TrigramStance.GEON]: GEON_TECHNIQUES,\n [TrigramStance.TAE]: TAE_TECHNIQUES,\n [TrigramStance.LI]: LI_TECHNIQUES,\n [TrigramStance.JIN]: JIN_TECHNIQUES,\n [TrigramStance.SON]: SON_TECHNIQUES,\n [TrigramStance.GAM]: GAM_TECHNIQUES,\n [TrigramStance.GAN]: GAN_TECHNIQUES,\n [TrigramStance.GON]: GON_TECHNIQUES,\n} as const;\n\n// =====================================================\n// HELPER FUNCTIONS\n// =====================================================\n\n/**\n * Get all techniques for a specific stance\n */\nexport function getTechniquesByStance(\n stance: TrigramStance\n): readonly KoreanTechnique[] {\n return TRIGRAM_TECHNIQUES[stance] ?? [];\n}\n\n/**\n * Get a technique by ID from any stance\n */\nexport function getTechniqueById(id: string): KoreanTechnique | undefined {\n for (const techniques of Object.values(TRIGRAM_TECHNIQUES)) {\n const technique = techniques.find((t) => t.id === id);\n if (technique) return technique;\n }\n return undefined;\n}\n\n/**\n * Get all techniques across all stances\n */\nexport function getAllTechniques(): readonly KoreanTechnique[] {\n return Object.values(TRIGRAM_TECHNIQUES).flat();\n}\n\n/**\n * Get total technique count\n */\nexport function getTotalTechniqueCount(): number {\n return Object.values(TRIGRAM_TECHNIQUES).reduce(\n (sum, techniques) => sum + techniques.length,\n 0\n );\n}\n\n/**\n * Get technique count by stance\n */\nexport function getTechniqueCountByStance(): Record<TrigramStance, number> {\n return {\n [TrigramStance.GEON]: GEON_TECHNIQUES.length,\n [TrigramStance.TAE]: TAE_TECHNIQUES.length,\n [TrigramStance.LI]: LI_TECHNIQUES.length,\n [TrigramStance.JIN]: JIN_TECHNIQUES.length,\n [TrigramStance.SON]: SON_TECHNIQUES.length,\n [TrigramStance.GAM]: GAM_TECHNIQUES.length,\n [TrigramStance.GAN]: GAN_TECHNIQUES.length,\n [TrigramStance.GON]: GON_TECHNIQUES.length,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4GA,IAAa,qBAGT;EACD,cAAc,OAAO;EACrB,cAAc,MAAM;EACpB,cAAc,KAAK;EACnB,cAAc,MAAM;EACpB,cAAc,MAAM;EACpB,cAAc,MAAM;EACpB,cAAc,MAAM;EACpB,cAAc,MAAM;CACtB;;;;AASD,SAAgB,sBACd,QAC4B;CAC5B,OAAO,mBAAmB,WAAW,EAAE;;;;;AAMzC,SAAgB,iBAAiB,IAAyC;CACxE,KAAK,MAAM,cAAc,OAAO,OAAO,mBAAmB,EAAE;EAC1D,MAAM,YAAY,WAAW,MAAM,MAAM,EAAE,OAAO,GAAG;EACrD,IAAI,WAAW,OAAO;;;;;;AAQ1B,SAAgB,mBAA+C;CAC7D,OAAO,OAAO,OAAO,mBAAmB,CAAC,MAAM;;;;;AAMjD,SAAgB,yBAAiC;CAC/C,OAAO,OAAO,OAAO,mBAAmB,CAAC,QACtC,KAAK,eAAe,MAAM,WAAW,QACtC,EACD;;;;;AAMH,SAAgB,4BAA2D;CACzE,OAAO;GACJ,cAAc,OAAO,gBAAgB;GACrC,cAAc,MAAM,eAAe;GACnC,cAAc,KAAK,cAAc;GACjC,cAAc,MAAM,eAAe;GACnC,cAAc,MAAM,eAAe;GACnC,cAAc,MAAM,eAAe;GACnC,cAAc,MAAM,eAAe;GACnC,cAAc,MAAM,eAAe;EACrC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GonTechniqueExtensions.js","names":[],"sources":["../../../../src/systems/trigram/types/GonTechniqueExtensions.ts"],"sourcesContent":["/**\n * ☷ 곤 (GON) - Earth Stance Technique Extensions\n * Gon-specific metadata for authentic Ssireum/Hapkido grappling mechanics\n *\n * Extends base TrigramStanceTechnique with Earth-specific properties:\n * - Throw trajectory mechanics (던지기 궤적)\n * - Ground impact multipliers (지면 충격 배수)\n * - Grappling control duration (잡기 제어 시간)\n * - Supportive healing (대지 치유)\n * - Earth visual effects (대지 시각 효과)\n *\n * Based on authentic Korean martial arts:\n * - Ssireum (씨름) - Traditional Korean wrestling\n * - Hapkido (합기도) - Joint locks and throws\n *\n * @module GonTechniqueExtensions\n * @korean 곤괘기술확장\n */\n\nimport type { TrigramStanceTechnique, KoreanTechnique } from \"@/systems/vitalpoint\";\n\n/**\n * Throw trajectory types for Gon techniques\n * 던지기 궤적 유형\n *\n * Describes the physical path of the throw for animation and physics\n *\n * @korean 던지기궤적유형\n */\nexport type ThrowTrajectory =\n | \"arc_over_hip\" // 엉덩이 넘기기 - Over the hip rotation (classic Ssireum)\n | \"horizontal_sweep\" // 수평 쓸기 - Horizontal sweeping motion\n | \"forward_drive\" // 앞 밀어붙이기 - Forward driving takedown\n | \"vertical_slam\" // 수직 강타 - Straight down slam\n | \"circular_trip\" // 원형 걸기 - Circular tripping motion\n | \"sacrifice_arc\" // 희생 던지기 궤적 - Sacrifice throw trajectory\n | \"clinch_control\" // 잡기 제어 - Clinch/grip control (no throw)\n | \"arc_downward\" // 호 아래로 - Downward arcing throw\n | \"spiral\" // 나선형 - Spiral/twisting throw\n | \"direct_slam\"; // 직접 내리찍기 - Direct impact slam\n\n/**\n * Takedown type classification\n * 넘어뜨리기 분류\n *\n * @korean 넘어뜨리기분류\n */\nexport type TakedownType =\n | \"leg_reap\" // 다리걸기 - Leg reaping technique\n | \"hip_throw\" // 엉덩이던지기 - Hip throw technique\n | \"body_lock\" // 몸통잡기 - Body lock takedown\n | \"sacrifice\" // 희생던지기 - Sacrifice throw\n | \"slam\" // 내리찍기 - Slam/driving technique\n | \"sweep\"; // 쓸기 - Sweeping technique\n\n/**\n * Sweep direction for leg techniques\n * 쓸기 방향\n *\n * @korean 쓸기방향\n */\nexport type SweepDirection =\n | \"inward\" // 안쪽 - Inner reap (안다리걸기)\n | \"outward\" // 바깥쪽 - Outer reap (바깥다리걸기)\n | \"backwards\" // 뒤쪽 - Backwards sweep\n | \"circular\"; // 원형 - Circular sweep\n\n/**\n * Ending position after throw\n * 던지기 후 위치\n *\n * @korean 던지기후위치\n */\nexport type EndingPosition =\n | \"standing_dominant\" // 서있기 우세 - Opponent down, attacker standing\n | \"mount\" // 기마 자세 - Top mount position\n | \"side_control\" // 옆 제어 - Side control position\n | \"back_control\" // 뒤 제어 - Back control position\n | \"ground_mutual\"; // 둘 다 지면 - Both fighters on ground\n\n/**\n * Breath loss severity\n * 호흡 상실 심각도\n *\n * @korean 호흡상실심각도\n */\nexport type BreathLoss = \"mild\" | \"moderate\" | \"severe\";\n\n/**\n * Lift height for throwing techniques\n * 들어올리기 높이\n *\n * @korean 들어올리기높이\n */\nexport type LiftHeight = \"none\" | \"low\" | \"medium\" | \"high\";\n\n/**\n * Rotational power level\n * 회전력 수준\n *\n * @korean 회전력수준\n */\nexport type RotationalPower = \"low\" | \"medium\" | \"high\";\n\n/**\n * Momentum transfer level\n * 운동량 전달 수준\n *\n * @korean 운동량전달수준\n */\nexport type MomentumTransfer = \"low\" | \"medium\" | \"high\";\n\n/**\n * Setup speed for technique execution\n * 기술 준비 속도\n *\n * @korean 기술준비속도\n */\nexport type SetupSpeed = \"slow\" | \"medium\" | \"fast\";\n\n/**\n * Penetration depth for stance/level change\n * 침투 깊이\n *\n * @korean 침투깊이\n */\nexport type PenetrationDepth = \"high\" | \"medium\" | \"low\";\n\n/**\n * Extended Gon technique with Earth-specific mechanics\n * 대지 특화 기술 확장 인터페이스\n *\n * Adds authentic Ssireum/Hapkido grappling mechanics to base technique.\n * All Gon stance techniques should implement this interface.\n *\n * **Korean Martial Arts Context**:\n * - Ssireum (씨름): Traditional Korean wrestling with satba belt\n * - Hapkido (합기도): Joint locks, throws, circular motion\n *\n * **Earth Philosophy** (대지 철학):\n * \"대지는 모든 것을 품고 키운다\" - The earth embraces and nurtures all things\n *\n * @korean 확장곤괘기술\n */\nexport interface ExtendedGonTechnique extends TrigramStanceTechnique {\n // ============= CORE FIELDS (Phase 1 Implementation) =============\n\n /**\n * Physical trajectory path of the throw\n * 던지기 궤적\n *\n * Determines animation path and physics simulation\n *\n * @example \"arc_over_hip\" for traditional Ssireum throw\n * @korean 던지기궤적\n */\n throwTrajectory: ThrowTrajectory;\n\n /**\n * Ground impact damage multiplier (1.0-2.0 range)\n * 지면 충격 배수\n *\n * Multiplies base damage when opponent hits ground.\n * - 1.0-1.2: Low impact (controlled takedowns)\n * - 1.3-1.5: Medium impact (standard throws)\n * - 1.6-1.8: High impact (power throws)\n * - 1.9-2.0: Maximum impact (slams)\n *\n * **Formula**: `Final Damage = Base Damage × groundImpactMultiplier × (1 + strength_modifier)`\n *\n * @example 2.0 for 대지강타 (Ground Pound) - maximum impact\n * @korean 지면충격배수\n */\n groundImpactMultiplier: number;\n\n /**\n * Post-throw control duration in milliseconds\n * 던지기 후 제어 시간\n *\n * Duration attacker maintains positional advantage after throw.\n * Affects follow-up attack windows and defender recovery time.\n *\n * **Range**: 800ms (brief) to 2000ms (dominant)\n *\n * @example 1800 for 씨름던지기 (Ssireum Throw) - strong control\n * @korean 제어시간\n */\n controlDuration: number;\n\n /**\n * Earth's supportive healing value (0-10 scale)\n * 대지 치유 수치\n *\n * HP restored from earth connection during technique execution.\n * Based on Korean philosophy: earth nurtures all things.\n *\n * **Typical Range**: 1-6 for combat techniques\n * - 0-2: Minimal earth connection (aggressive)\n * - 3-4: Moderate earth connection (standard Ssireum)\n * - 5-6: Strong earth connection (traditional, sacrifice throws)\n * - 7-10: RESERVED for meditation/healing techniques\n *\n * **Formula**: `HP Restored = supportiveHealing × (1 + earth_affinity_stat)`\n *\n * @example 5 for 씨름던지기 - traditional technique bonus\n * @korean 대지치유\n */\n supportiveHealing: number;\n\n /**\n * Whether technique creates earth crack visual effect\n * 대지 균열 효과 여부\n *\n * If true, ground impact creates visual feedback:\n * - Earth crack patterns (Korean pottery-inspired)\n * - Dust clouds (yellow-brown 황토색)\n * - Shockwave ripples (for high impact)\n *\n * **Intensity scales with**: groundImpactMultiplier\n *\n * @example true for all throws/slams, false for clinch control\n * @korean 대지균열효과\n */\n earthCrackEffect: boolean;\n\n // ============= OPTIONAL ADVANCED FIELDS (Phase 3) =============\n\n /**\n * Requires traditional Ssireum satba belt grip\n * 샅바 잡기 필요 여부\n *\n * If true, technique uses traditional Korean wrestling belt mechanics\n *\n * @optional\n * @korean 샅바필요\n */\n satbaGripRequired?: boolean;\n\n /**\n * Cultural authenticity damage bonus\n * 전통 무술 보너스\n *\n * Damage multiplier for traditional Korean techniques\n * Rewards using authentic martial arts\n *\n * @example 1.15 (15% bonus) for 씨름던지기\n * @optional\n * @korean 전통보너스\n */\n traditionalBonus?: number;\n\n /**\n * Grip strength for escape difficulty (0-1 scale)\n * 잡기 강도\n *\n * Higher values make technique harder to escape from\n * 1.0 = unbreakable, 0.0 = no grip\n *\n * @optional\n * @korean 잡기강도\n */\n gripStrength?: number;\n\n /**\n * Takedown classification\n * 넘어뜨리기 유형\n *\n * @optional\n * @korean 넘어뜨리기유형\n */\n takedownType?: TakedownType;\n\n /**\n * Sweep direction for leg techniques\n * 쓸기 방향\n *\n * @optional\n * @korean 쓸기방향\n */\n sweepDirection?: SweepDirection;\n\n /**\n * Self-risk factor (0-1 scale)\n * 자기 위험도\n *\n * Chance of self-damage from technique (e.g., sacrifice throws)\n * 0.2 = 20% chance of taking damage yourself\n *\n * @optional\n * @korean 자기위험도\n */\n selfRisk?: number;\n\n /**\n * Counter vulnerability (0-1 scale)\n * 반격 취약성\n *\n * How easily technique can be countered during execution\n * Higher = more vulnerable to counter-attacks\n *\n * @optional\n * @korean 반격취약성\n */\n counterVulnerability?: number;\n\n /**\n * Positional outcome after technique\n * 기술 후 위치\n *\n * @optional\n * @korean 기술후위치\n */\n endingPosition?: EndingPosition;\n\n /**\n * Follow-up technique damage bonus\n * 연속 공격 보너스\n *\n * Damage multiplier for chained techniques\n *\n * @example 0.3 (30% bonus) for sacrifice throws\n * @optional\n * @korean 연속공격보너스\n */\n transitionBonus?: number;\n\n /**\n * Breath restriction level (0-1 scale)\n * 호흡 제한 수준\n *\n * How much technique restricts opponent's breathing\n * Used for body locks and compression techniques\n *\n * @optional\n * @korean 호흡제한\n */\n breathRestriction?: number;\n\n /**\n * Stun chance probability (0-1 scale)\n * 기절 확률\n *\n * Chance technique stuns opponent on impact\n *\n * @example 0.4 (40% chance) for 대지강타\n * @optional\n * @korean 기절확률\n */\n stunChance?: number;\n\n /**\n * Breath loss severity\n * 호흡 상실 심각도\n *\n * How severely technique \"knocks the wind out\"\n *\n * @optional\n * @korean 호흡상실\n */\n breathLoss?: BreathLoss;\n\n /**\n * Setup speed classification\n * 준비 속도\n *\n * @optional\n * @korean 준비속도\n */\n setupSpeed?: SetupSpeed;\n\n /**\n * Penetration depth level\n * 침투 깊이\n *\n * @optional\n * @korean 침투깊이\n */\n penetrationDepth?: PenetrationDepth;\n\n /**\n * Lift height before throw\n * 들어올리기 높이\n *\n * @optional\n * @korean 들어올리기높이\n */\n liftHeight?: LiftHeight;\n\n /**\n * Rotational power level\n * 회전력 수준\n *\n * @optional\n * @korean 회전력\n */\n rotationalPower?: RotationalPower;\n\n /**\n * Momentum transfer level\n * 운동량 전달\n *\n * @optional\n * @korean 운동량전달\n */\n momentumTransfer?: MomentumTransfer;\n}\n\n/**\n * Earth crack visual effect intensity\n * 대지 균열 시각 효과 강도\n *\n * @korean 대지균열강도\n */\nexport type EarthCrackIntensity = \"none\" | \"small\" | \"medium\" | \"large\" | \"massive\";\n\n/**\n * Calculate earth crack visual intensity based on impact\n * 충격도에 따른 대지 균열 강도 계산\n *\n * @param technique - Gon technique with impact multiplier\n * @param playerStrength - Player's strength stat modifier\n * @returns Visual effect intensity level\n *\n * @korean 대지균열강도계산\n */\nexport function calculateEarthCrackIntensity(\n technique: Pick<ExtendedGonTechnique, \"earthCrackEffect\" | \"groundImpactMultiplier\">,\n playerStrength: number,\n): EarthCrackIntensity {\n if (!technique.earthCrackEffect) return \"none\";\n\n const impactScore = technique.groundImpactMultiplier * playerStrength;\n\n if (impactScore < 1.3) return \"small\";\n if (impactScore < 1.6) return \"medium\";\n if (impactScore < 1.9) return \"large\";\n return \"massive\"; // 대지강타 with high strength = spectacular\n}\n\n/**\n * Type guard to check if technique is extended Gon technique\n * 확장 곤괘 기술 여부 확인\n *\n * Checks both field presence AND type correctness for core Gon fields.\n * For value range validation (e.g., groundImpactMultiplier 1.0-2.0),\n * use `validateGonTechniqueEnhancements()`.\n *\n * @param technique - Technique to check\n * @returns True if technique has all required Gon-specific fields with correct types\n *\n * @see validateGonTechniqueEnhancements for runtime value range validation\n * @korean 확장곤괘기술확인\n */\nexport function isExtendedGonTechnique(\n technique: TrigramStanceTechnique,\n): technique is ExtendedGonTechnique {\n const hasRequiredFields =\n \"throwTrajectory\" in technique &&\n \"groundImpactMultiplier\" in technique &&\n \"controlDuration\" in technique &&\n \"supportiveHealing\" in technique &&\n \"earthCrackEffect\" in technique;\n\n if (!hasRequiredFields) {\n return false;\n }\n\n // Runtime type checking for safety - use safer type assertion\n const candidate = technique as {\n throwTrajectory: unknown;\n groundImpactMultiplier: unknown;\n controlDuration: unknown;\n supportiveHealing: unknown;\n earthCrackEffect: unknown;\n };\n\n return (\n typeof candidate.throwTrajectory === \"string\" &&\n typeof candidate.groundImpactMultiplier === \"number\" &&\n typeof candidate.controlDuration === \"number\" &&\n typeof candidate.supportiveHealing === \"number\" &&\n typeof candidate.earthCrackEffect === \"boolean\"\n );\n}\n\n/**\n * Safely cast a technique to ExtendedGonTechnique after validation.\n * Helper function to reduce code duplication and improve type safety.\n * \n * @param technique - The technique to cast\n * @returns The technique cast as ExtendedGonTechnique, or null if not valid\n * @korean 곤기술안전변환\n */\nexport function asExtendedGonTechnique(\n technique: KoreanTechnique\n): ExtendedGonTechnique | null {\n const trigramTechnique = technique as TrigramStanceTechnique;\n if (!isExtendedGonTechnique(trigramTechnique)) {\n return null;\n }\n // Safe cast after validation\n return trigramTechnique as ExtendedGonTechnique;\n}\n\n/**\n * Validate Gon technique enhancement values\n * 곤괘 기술 강화 수치 검증\n *\n * Ensures all enhancement values are within valid ranges\n *\n * @param technique - Extended Gon technique to validate\n * @returns Validation result with errors if any\n *\n * @korean 곤괘기술검증\n */\nexport function validateGonTechniqueEnhancements(\n technique: ExtendedGonTechnique,\n): { valid: boolean; errors: string[] } {\n const errors: string[] = [];\n\n // Validate groundImpactMultiplier (1.0-2.0)\n if (\n technique.groundImpactMultiplier < 1.0 ||\n technique.groundImpactMultiplier > 2.0\n ) {\n errors.push(\n `groundImpactMultiplier must be 1.0-2.0, got ${technique.groundImpactMultiplier}`,\n );\n }\n\n // Validate controlDuration (800-2000ms)\n if (technique.controlDuration < 800 || technique.controlDuration > 2000) {\n errors.push(\n `controlDuration must be 800-2000ms, got ${technique.controlDuration}ms`,\n );\n }\n\n // Validate supportiveHealing (0-10)\n if (technique.supportiveHealing < 0 || technique.supportiveHealing > 10) {\n errors.push(\n `supportiveHealing must be 0-10, got ${technique.supportiveHealing}`,\n );\n }\n\n // Validate optional fields if present\n if (technique.gripStrength !== undefined) {\n if (technique.gripStrength < 0 || technique.gripStrength > 1) {\n errors.push(`gripStrength must be 0-1, got ${technique.gripStrength}`);\n }\n }\n\n if (technique.selfRisk !== undefined) {\n if (technique.selfRisk < 0 || technique.selfRisk > 1) {\n errors.push(`selfRisk must be 0-1, got ${technique.selfRisk}`);\n }\n }\n\n if (technique.traditionalBonus !== undefined) {\n if (technique.traditionalBonus < 1.0 || technique.traditionalBonus > 2.0) {\n errors.push(\n `traditionalBonus must be 1.0-2.0, got ${technique.traditionalBonus}`,\n );\n }\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n}\n\n/**\n * Earth philosophy constants\n * 대지 철학 상수\n *\n * @korean 대지철학상수\n */\nexport const EARTH_PHILOSOPHY = {\n /**\n * Korean philosophy: \"The earth embraces and nurtures all things\"\n * 대지는 모든 것을 품고 키운다\n */\n CORE_PRINCIPLE: {\n korean: \"대지는 모든 것을 품고 키운다\",\n romanized: \"Daeji-neun modeun geoseul pumgo kiwinda\",\n english: \"The earth embraces and nurtures all things\",\n },\n\n /**\n * Grounding effect (접지 효과)\n * Physical earth contact provides regeneration\n */\n GROUNDING_EFFECT: {\n korean: \"접지 효과\",\n romanized: \"Jeobji Hyogwa\",\n english: \"Grounding Effect\",\n },\n\n /**\n * Earth's embrace (대지의 포옹)\n * Low stance connection provides stamina recovery\n */\n EARTH_EMBRACE: {\n korean: \"대지의 포옹\",\n romanized: \"Daeji-ui Po-ong\",\n english: \"Earth's Embrace\",\n },\n\n /**\n * Nurturing recovery (양육 회복)\n * Post-throw earth contact provides healing\n */\n NURTURING_RECOVERY: {\n korean: \"양육 회복\",\n romanized: \"Yangnyuk Hoibok\",\n english: \"Nurturing Recovery\",\n },\n} as const;\n\n/**\n * Ssireum cultural context\n * 씨름 문화 배경\n *\n * @korean 씨름문화\n */\nexport const SSIREUM_CONTEXT = {\n /**\n * UNESCO Intangible Cultural Heritage (2018)\n */\n UNESCO_STATUS: {\n year: 2018,\n category: \"Intangible Cultural Heritage of Humanity\",\n },\n\n /**\n * Traditional Ssireum equipment\n */\n EQUIPMENT: {\n /**\n * Satba - fabric belt wrapped around waist and thigh\n * 샅바 - 허리와 넓적다리에 감는 천 띠\n */\n SATBA: {\n korean: \"샅바\",\n romanized: \"Satba\",\n english: \"Traditional wrestling belt\",\n description:\n \"Fabric belt wrapped around waist and right thigh for grip techniques\",\n },\n\n /**\n * Morae-pan - sand circle arena\n * 모래판 - 모래 경기장\n */\n ARENA: {\n korean: \"모래판\",\n romanized: \"Morae-pan\",\n english: \"Sand circle arena\",\n diameter: \"8.5m\",\n },\n },\n\n /**\n * Key Ssireum principles\n */\n PRINCIPLES: {\n POWER_TRANSMISSION: {\n korean: \"힘의 전달\",\n romanized: \"Him-ui Jeontal\",\n english: \"Power transmission through hips\",\n },\n CENTER_CONTROL: {\n korean: \"중심 잡기\",\n romanized: \"Jungsim Japgi\",\n english: \"Controlling opponent's center of gravity\",\n },\n EARTH_CONNECTION: {\n korean: \"대지와의 연결\",\n romanized: \"Daeji-wa-ui Yeongyeol\",\n english: \"Connection with earth for power\",\n },\n },\n} as const;\n"],"mappings":";;;;;;;;;;;;;;;AAqcA,SAAgB,uBACd,WACmC;AAQnC,KAAI,EANF,qBAAqB,aACrB,4BAA4B,aAC5B,qBAAqB,aACrB,uBAAuB,aACvB,sBAAsB,WAGtB,QAAO;CAIT,MAAM,YAAY;AAQlB,QACE,OAAO,UAAU,oBAAoB,YACrC,OAAO,UAAU,2BAA2B,YAC5C,OAAO,UAAU,oBAAoB,YACrC,OAAO,UAAU,sBAAsB,YACvC,OAAO,UAAU,qBAAqB;;;;;;;;;;AAY1C,SAAgB,uBACd,WAC6B;CAC7B,MAAM,mBAAmB;AACzB,KAAI,CAAC,uBAAuB,iBAAiB,CAC3C,QAAO;AAGT,QAAO"}
|
|
1
|
+
{"version":3,"file":"GonTechniqueExtensions.js","names":[],"sources":["../../../../src/systems/trigram/types/GonTechniqueExtensions.ts"],"sourcesContent":["/**\n * ☷ 곤 (GON) - Earth Stance Technique Extensions\n * Gon-specific metadata for authentic Ssireum/Hapkido grappling mechanics\n *\n * Extends base TrigramStanceTechnique with Earth-specific properties:\n * - Throw trajectory mechanics (던지기 궤적)\n * - Ground impact multipliers (지면 충격 배수)\n * - Grappling control duration (잡기 제어 시간)\n * - Supportive healing (대지 치유)\n * - Earth visual effects (대지 시각 효과)\n *\n * Based on authentic Korean martial arts:\n * - Ssireum (씨름) - Traditional Korean wrestling\n * - Hapkido (합기도) - Joint locks and throws\n *\n * @module GonTechniqueExtensions\n * @korean 곤괘기술확장\n */\n\nimport type { TrigramStanceTechnique, KoreanTechnique } from \"@/systems/vitalpoint\";\n\n/**\n * Throw trajectory types for Gon techniques\n * 던지기 궤적 유형\n *\n * Describes the physical path of the throw for animation and physics\n *\n * @korean 던지기궤적유형\n */\nexport type ThrowTrajectory =\n | \"arc_over_hip\" // 엉덩이 넘기기 - Over the hip rotation (classic Ssireum)\n | \"horizontal_sweep\" // 수평 쓸기 - Horizontal sweeping motion\n | \"forward_drive\" // 앞 밀어붙이기 - Forward driving takedown\n | \"vertical_slam\" // 수직 강타 - Straight down slam\n | \"circular_trip\" // 원형 걸기 - Circular tripping motion\n | \"sacrifice_arc\" // 희생 던지기 궤적 - Sacrifice throw trajectory\n | \"clinch_control\" // 잡기 제어 - Clinch/grip control (no throw)\n | \"arc_downward\" // 호 아래로 - Downward arcing throw\n | \"spiral\" // 나선형 - Spiral/twisting throw\n | \"direct_slam\"; // 직접 내리찍기 - Direct impact slam\n\n/**\n * Takedown type classification\n * 넘어뜨리기 분류\n *\n * @korean 넘어뜨리기분류\n */\nexport type TakedownType =\n | \"leg_reap\" // 다리걸기 - Leg reaping technique\n | \"hip_throw\" // 엉덩이던지기 - Hip throw technique\n | \"body_lock\" // 몸통잡기 - Body lock takedown\n | \"sacrifice\" // 희생던지기 - Sacrifice throw\n | \"slam\" // 내리찍기 - Slam/driving technique\n | \"sweep\"; // 쓸기 - Sweeping technique\n\n/**\n * Sweep direction for leg techniques\n * 쓸기 방향\n *\n * @korean 쓸기방향\n */\nexport type SweepDirection =\n | \"inward\" // 안쪽 - Inner reap (안다리걸기)\n | \"outward\" // 바깥쪽 - Outer reap (바깥다리걸기)\n | \"backwards\" // 뒤쪽 - Backwards sweep\n | \"circular\"; // 원형 - Circular sweep\n\n/**\n * Ending position after throw\n * 던지기 후 위치\n *\n * @korean 던지기후위치\n */\nexport type EndingPosition =\n | \"standing_dominant\" // 서있기 우세 - Opponent down, attacker standing\n | \"mount\" // 기마 자세 - Top mount position\n | \"side_control\" // 옆 제어 - Side control position\n | \"back_control\" // 뒤 제어 - Back control position\n | \"ground_mutual\"; // 둘 다 지면 - Both fighters on ground\n\n/**\n * Breath loss severity\n * 호흡 상실 심각도\n *\n * @korean 호흡상실심각도\n */\nexport type BreathLoss = \"mild\" | \"moderate\" | \"severe\";\n\n/**\n * Lift height for throwing techniques\n * 들어올리기 높이\n *\n * @korean 들어올리기높이\n */\nexport type LiftHeight = \"none\" | \"low\" | \"medium\" | \"high\";\n\n/**\n * Rotational power level\n * 회전력 수준\n *\n * @korean 회전력수준\n */\nexport type RotationalPower = \"low\" | \"medium\" | \"high\";\n\n/**\n * Momentum transfer level\n * 운동량 전달 수준\n *\n * @korean 운동량전달수준\n */\nexport type MomentumTransfer = \"low\" | \"medium\" | \"high\";\n\n/**\n * Setup speed for technique execution\n * 기술 준비 속도\n *\n * @korean 기술준비속도\n */\nexport type SetupSpeed = \"slow\" | \"medium\" | \"fast\";\n\n/**\n * Penetration depth for stance/level change\n * 침투 깊이\n *\n * @korean 침투깊이\n */\nexport type PenetrationDepth = \"high\" | \"medium\" | \"low\";\n\n/**\n * Extended Gon technique with Earth-specific mechanics\n * 대지 특화 기술 확장 인터페이스\n *\n * Adds authentic Ssireum/Hapkido grappling mechanics to base technique.\n * All Gon stance techniques should implement this interface.\n *\n * **Korean Martial Arts Context**:\n * - Ssireum (씨름): Traditional Korean wrestling with satba belt\n * - Hapkido (합기도): Joint locks, throws, circular motion\n *\n * **Earth Philosophy** (대지 철학):\n * \"대지는 모든 것을 품고 키운다\" - The earth embraces and nurtures all things\n *\n * @korean 확장곤괘기술\n */\nexport interface ExtendedGonTechnique extends TrigramStanceTechnique {\n // ============= CORE FIELDS (Phase 1 Implementation) =============\n\n /**\n * Physical trajectory path of the throw\n * 던지기 궤적\n *\n * Determines animation path and physics simulation\n *\n * @example \"arc_over_hip\" for traditional Ssireum throw\n * @korean 던지기궤적\n */\n throwTrajectory: ThrowTrajectory;\n\n /**\n * Ground impact damage multiplier (1.0-2.0 range)\n * 지면 충격 배수\n *\n * Multiplies base damage when opponent hits ground.\n * - 1.0-1.2: Low impact (controlled takedowns)\n * - 1.3-1.5: Medium impact (standard throws)\n * - 1.6-1.8: High impact (power throws)\n * - 1.9-2.0: Maximum impact (slams)\n *\n * **Formula**: `Final Damage = Base Damage × groundImpactMultiplier × (1 + strength_modifier)`\n *\n * @example 2.0 for 대지강타 (Ground Pound) - maximum impact\n * @korean 지면충격배수\n */\n groundImpactMultiplier: number;\n\n /**\n * Post-throw control duration in milliseconds\n * 던지기 후 제어 시간\n *\n * Duration attacker maintains positional advantage after throw.\n * Affects follow-up attack windows and defender recovery time.\n *\n * **Range**: 800ms (brief) to 2000ms (dominant)\n *\n * @example 1800 for 씨름던지기 (Ssireum Throw) - strong control\n * @korean 제어시간\n */\n controlDuration: number;\n\n /**\n * Earth's supportive healing value (0-10 scale)\n * 대지 치유 수치\n *\n * HP restored from earth connection during technique execution.\n * Based on Korean philosophy: earth nurtures all things.\n *\n * **Typical Range**: 1-6 for combat techniques\n * - 0-2: Minimal earth connection (aggressive)\n * - 3-4: Moderate earth connection (standard Ssireum)\n * - 5-6: Strong earth connection (traditional, sacrifice throws)\n * - 7-10: RESERVED for meditation/healing techniques\n *\n * **Formula**: `HP Restored = supportiveHealing × (1 + earth_affinity_stat)`\n *\n * @example 5 for 씨름던지기 - traditional technique bonus\n * @korean 대지치유\n */\n supportiveHealing: number;\n\n /**\n * Whether technique creates earth crack visual effect\n * 대지 균열 효과 여부\n *\n * If true, ground impact creates visual feedback:\n * - Earth crack patterns (Korean pottery-inspired)\n * - Dust clouds (yellow-brown 황토색)\n * - Shockwave ripples (for high impact)\n *\n * **Intensity scales with**: groundImpactMultiplier\n *\n * @example true for all throws/slams, false for clinch control\n * @korean 대지균열효과\n */\n earthCrackEffect: boolean;\n\n // ============= OPTIONAL ADVANCED FIELDS (Phase 3) =============\n\n /**\n * Requires traditional Ssireum satba belt grip\n * 샅바 잡기 필요 여부\n *\n * If true, technique uses traditional Korean wrestling belt mechanics\n *\n * @optional\n * @korean 샅바필요\n */\n satbaGripRequired?: boolean;\n\n /**\n * Cultural authenticity damage bonus\n * 전통 무술 보너스\n *\n * Damage multiplier for traditional Korean techniques\n * Rewards using authentic martial arts\n *\n * @example 1.15 (15% bonus) for 씨름던지기\n * @optional\n * @korean 전통보너스\n */\n traditionalBonus?: number;\n\n /**\n * Grip strength for escape difficulty (0-1 scale)\n * 잡기 강도\n *\n * Higher values make technique harder to escape from\n * 1.0 = unbreakable, 0.0 = no grip\n *\n * @optional\n * @korean 잡기강도\n */\n gripStrength?: number;\n\n /**\n * Takedown classification\n * 넘어뜨리기 유형\n *\n * @optional\n * @korean 넘어뜨리기유형\n */\n takedownType?: TakedownType;\n\n /**\n * Sweep direction for leg techniques\n * 쓸기 방향\n *\n * @optional\n * @korean 쓸기방향\n */\n sweepDirection?: SweepDirection;\n\n /**\n * Self-risk factor (0-1 scale)\n * 자기 위험도\n *\n * Chance of self-damage from technique (e.g., sacrifice throws)\n * 0.2 = 20% chance of taking damage yourself\n *\n * @optional\n * @korean 자기위험도\n */\n selfRisk?: number;\n\n /**\n * Counter vulnerability (0-1 scale)\n * 반격 취약성\n *\n * How easily technique can be countered during execution\n * Higher = more vulnerable to counter-attacks\n *\n * @optional\n * @korean 반격취약성\n */\n counterVulnerability?: number;\n\n /**\n * Positional outcome after technique\n * 기술 후 위치\n *\n * @optional\n * @korean 기술후위치\n */\n endingPosition?: EndingPosition;\n\n /**\n * Follow-up technique damage bonus\n * 연속 공격 보너스\n *\n * Damage multiplier for chained techniques\n *\n * @example 0.3 (30% bonus) for sacrifice throws\n * @optional\n * @korean 연속공격보너스\n */\n transitionBonus?: number;\n\n /**\n * Breath restriction level (0-1 scale)\n * 호흡 제한 수준\n *\n * How much technique restricts opponent's breathing\n * Used for body locks and compression techniques\n *\n * @optional\n * @korean 호흡제한\n */\n breathRestriction?: number;\n\n /**\n * Stun chance probability (0-1 scale)\n * 기절 확률\n *\n * Chance technique stuns opponent on impact\n *\n * @example 0.4 (40% chance) for 대지강타\n * @optional\n * @korean 기절확률\n */\n stunChance?: number;\n\n /**\n * Breath loss severity\n * 호흡 상실 심각도\n *\n * How severely technique \"knocks the wind out\"\n *\n * @optional\n * @korean 호흡상실\n */\n breathLoss?: BreathLoss;\n\n /**\n * Setup speed classification\n * 준비 속도\n *\n * @optional\n * @korean 준비속도\n */\n setupSpeed?: SetupSpeed;\n\n /**\n * Penetration depth level\n * 침투 깊이\n *\n * @optional\n * @korean 침투깊이\n */\n penetrationDepth?: PenetrationDepth;\n\n /**\n * Lift height before throw\n * 들어올리기 높이\n *\n * @optional\n * @korean 들어올리기높이\n */\n liftHeight?: LiftHeight;\n\n /**\n * Rotational power level\n * 회전력 수준\n *\n * @optional\n * @korean 회전력\n */\n rotationalPower?: RotationalPower;\n\n /**\n * Momentum transfer level\n * 운동량 전달\n *\n * @optional\n * @korean 운동량전달\n */\n momentumTransfer?: MomentumTransfer;\n}\n\n/**\n * Earth crack visual effect intensity\n * 대지 균열 시각 효과 강도\n *\n * @korean 대지균열강도\n */\nexport type EarthCrackIntensity = \"none\" | \"small\" | \"medium\" | \"large\" | \"massive\";\n\n/**\n * Calculate earth crack visual intensity based on impact\n * 충격도에 따른 대지 균열 강도 계산\n *\n * @param technique - Gon technique with impact multiplier\n * @param playerStrength - Player's strength stat modifier\n * @returns Visual effect intensity level\n *\n * @korean 대지균열강도계산\n */\nexport function calculateEarthCrackIntensity(\n technique: Pick<ExtendedGonTechnique, \"earthCrackEffect\" | \"groundImpactMultiplier\">,\n playerStrength: number,\n): EarthCrackIntensity {\n if (!technique.earthCrackEffect) return \"none\";\n\n const impactScore = technique.groundImpactMultiplier * playerStrength;\n\n if (impactScore < 1.3) return \"small\";\n if (impactScore < 1.6) return \"medium\";\n if (impactScore < 1.9) return \"large\";\n return \"massive\"; // 대지강타 with high strength = spectacular\n}\n\n/**\n * Type guard to check if technique is extended Gon technique\n * 확장 곤괘 기술 여부 확인\n *\n * Checks both field presence AND type correctness for core Gon fields.\n * For value range validation (e.g., groundImpactMultiplier 1.0-2.0),\n * use `validateGonTechniqueEnhancements()`.\n *\n * @param technique - Technique to check\n * @returns True if technique has all required Gon-specific fields with correct types\n *\n * @see validateGonTechniqueEnhancements for runtime value range validation\n * @korean 확장곤괘기술확인\n */\nexport function isExtendedGonTechnique(\n technique: TrigramStanceTechnique,\n): technique is ExtendedGonTechnique {\n const hasRequiredFields =\n \"throwTrajectory\" in technique &&\n \"groundImpactMultiplier\" in technique &&\n \"controlDuration\" in technique &&\n \"supportiveHealing\" in technique &&\n \"earthCrackEffect\" in technique;\n\n if (!hasRequiredFields) {\n return false;\n }\n\n // Runtime type checking for safety - use safer type assertion\n const candidate = technique as {\n throwTrajectory: unknown;\n groundImpactMultiplier: unknown;\n controlDuration: unknown;\n supportiveHealing: unknown;\n earthCrackEffect: unknown;\n };\n\n return (\n typeof candidate.throwTrajectory === \"string\" &&\n typeof candidate.groundImpactMultiplier === \"number\" &&\n typeof candidate.controlDuration === \"number\" &&\n typeof candidate.supportiveHealing === \"number\" &&\n typeof candidate.earthCrackEffect === \"boolean\"\n );\n}\n\n/**\n * Safely cast a technique to ExtendedGonTechnique after validation.\n * Helper function to reduce code duplication and improve type safety.\n * \n * @param technique - The technique to cast\n * @returns The technique cast as ExtendedGonTechnique, or null if not valid\n * @korean 곤기술안전변환\n */\nexport function asExtendedGonTechnique(\n technique: KoreanTechnique\n): ExtendedGonTechnique | null {\n const trigramTechnique = technique as TrigramStanceTechnique;\n if (!isExtendedGonTechnique(trigramTechnique)) {\n return null;\n }\n // Safe cast after validation\n return trigramTechnique as ExtendedGonTechnique;\n}\n\n/**\n * Validate Gon technique enhancement values\n * 곤괘 기술 강화 수치 검증\n *\n * Ensures all enhancement values are within valid ranges\n *\n * @param technique - Extended Gon technique to validate\n * @returns Validation result with errors if any\n *\n * @korean 곤괘기술검증\n */\nexport function validateGonTechniqueEnhancements(\n technique: ExtendedGonTechnique,\n): { valid: boolean; errors: string[] } {\n const errors: string[] = [];\n\n // Validate groundImpactMultiplier (1.0-2.0)\n if (\n technique.groundImpactMultiplier < 1.0 ||\n technique.groundImpactMultiplier > 2.0\n ) {\n errors.push(\n `groundImpactMultiplier must be 1.0-2.0, got ${technique.groundImpactMultiplier}`,\n );\n }\n\n // Validate controlDuration (800-2000ms)\n if (technique.controlDuration < 800 || technique.controlDuration > 2000) {\n errors.push(\n `controlDuration must be 800-2000ms, got ${technique.controlDuration}ms`,\n );\n }\n\n // Validate supportiveHealing (0-10)\n if (technique.supportiveHealing < 0 || technique.supportiveHealing > 10) {\n errors.push(\n `supportiveHealing must be 0-10, got ${technique.supportiveHealing}`,\n );\n }\n\n // Validate optional fields if present\n if (technique.gripStrength !== undefined) {\n if (technique.gripStrength < 0 || technique.gripStrength > 1) {\n errors.push(`gripStrength must be 0-1, got ${technique.gripStrength}`);\n }\n }\n\n if (technique.selfRisk !== undefined) {\n if (technique.selfRisk < 0 || technique.selfRisk > 1) {\n errors.push(`selfRisk must be 0-1, got ${technique.selfRisk}`);\n }\n }\n\n if (technique.traditionalBonus !== undefined) {\n if (technique.traditionalBonus < 1.0 || technique.traditionalBonus > 2.0) {\n errors.push(\n `traditionalBonus must be 1.0-2.0, got ${technique.traditionalBonus}`,\n );\n }\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n}\n\n/**\n * Earth philosophy constants\n * 대지 철학 상수\n *\n * @korean 대지철학상수\n */\nexport const EARTH_PHILOSOPHY = {\n /**\n * Korean philosophy: \"The earth embraces and nurtures all things\"\n * 대지는 모든 것을 품고 키운다\n */\n CORE_PRINCIPLE: {\n korean: \"대지는 모든 것을 품고 키운다\",\n romanized: \"Daeji-neun modeun geoseul pumgo kiwinda\",\n english: \"The earth embraces and nurtures all things\",\n },\n\n /**\n * Grounding effect (접지 효과)\n * Physical earth contact provides regeneration\n */\n GROUNDING_EFFECT: {\n korean: \"접지 효과\",\n romanized: \"Jeobji Hyogwa\",\n english: \"Grounding Effect\",\n },\n\n /**\n * Earth's embrace (대지의 포옹)\n * Low stance connection provides stamina recovery\n */\n EARTH_EMBRACE: {\n korean: \"대지의 포옹\",\n romanized: \"Daeji-ui Po-ong\",\n english: \"Earth's Embrace\",\n },\n\n /**\n * Nurturing recovery (양육 회복)\n * Post-throw earth contact provides healing\n */\n NURTURING_RECOVERY: {\n korean: \"양육 회복\",\n romanized: \"Yangnyuk Hoibok\",\n english: \"Nurturing Recovery\",\n },\n} as const;\n\n/**\n * Ssireum cultural context\n * 씨름 문화 배경\n *\n * @korean 씨름문화\n */\nexport const SSIREUM_CONTEXT = {\n /**\n * UNESCO Intangible Cultural Heritage (2018)\n */\n UNESCO_STATUS: {\n year: 2018,\n category: \"Intangible Cultural Heritage of Humanity\",\n },\n\n /**\n * Traditional Ssireum equipment\n */\n EQUIPMENT: {\n /**\n * Satba - fabric belt wrapped around waist and thigh\n * 샅바 - 허리와 넓적다리에 감는 천 띠\n */\n SATBA: {\n korean: \"샅바\",\n romanized: \"Satba\",\n english: \"Traditional wrestling belt\",\n description:\n \"Fabric belt wrapped around waist and right thigh for grip techniques\",\n },\n\n /**\n * Morae-pan - sand circle arena\n * 모래판 - 모래 경기장\n */\n ARENA: {\n korean: \"모래판\",\n romanized: \"Morae-pan\",\n english: \"Sand circle arena\",\n diameter: \"8.5m\",\n },\n },\n\n /**\n * Key Ssireum principles\n */\n PRINCIPLES: {\n POWER_TRANSMISSION: {\n korean: \"힘의 전달\",\n romanized: \"Him-ui Jeontal\",\n english: \"Power transmission through hips\",\n },\n CENTER_CONTROL: {\n korean: \"중심 잡기\",\n romanized: \"Jungsim Japgi\",\n english: \"Controlling opponent's center of gravity\",\n },\n EARTH_CONNECTION: {\n korean: \"대지와의 연결\",\n romanized: \"Daeji-wa-ui Yeongyeol\",\n english: \"Connection with earth for power\",\n },\n },\n} as const;\n"],"mappings":";;;;;;;;;;;;;;;AAqcA,SAAgB,uBACd,WACmC;CAQnC,IAAI,EANF,qBAAqB,aACrB,4BAA4B,aAC5B,qBAAqB,aACrB,uBAAuB,aACvB,sBAAsB,YAGtB,OAAO;CAIT,MAAM,YAAY;CAQlB,OACE,OAAO,UAAU,oBAAoB,YACrC,OAAO,UAAU,2BAA2B,YAC5C,OAAO,UAAU,oBAAoB,YACrC,OAAO,UAAU,sBAAsB,YACvC,OAAO,UAAU,qBAAqB;;;;;;;;;;AAY1C,SAAgB,uBACd,WAC6B;CAC7B,MAAM,mBAAmB;CACzB,IAAI,CAAC,uBAAuB,iBAAiB,EAC3C,OAAO;CAGT,OAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../../src/systems/trigram/types.ts"],"sourcesContent":["/**\n * Type definitions for trigram types\n * Auto-generated by type migration script\n */\n\n// Trigram system imports from shared types\nimport { TrigramStance } from \"../../types/common\";\n\nimport {\n KOREAN_COLORS,\n type KoreanText,\n type PlayerArchetype,\n} from \"../../types\";\nimport { EffectType } from \"../effects\";\n\n/**\n * Stance laterality representing which foot/side is forward.\n *\n * **Korean**: 자세 측면성\n *\n * In authentic Korean martial arts (태권도, 합기도, 택견), stances have\n * distinct left and right configurations:\n * - **왼발서기 (Oenbal Seogi)**: Left foot forward, left guard high\n * - **오른발서기 (Oreun Bal Seogi)**: Right foot forward, right guard high\n *\n * @public\n * @category Trigram System\n * @korean 측면성\n */\nexport type StanceLaterality = \"left\" | \"right\";\n\n/**\n * Combined stance with laterality for complete stance specification.\n *\n * **Korean**: 측면 포함 자세\n *\n * Combines the trigram stance (8 types) with laterality (2 sides) to create\n * 16 distinct stance configurations. Format: `{stance}_{laterality}`\n *\n * Examples:\n * - \"geon_left\" - Heaven stance, left foot forward\n * - \"tae_right\" - Lake stance, right foot forward\n *\n * @public\n * @category Trigram System\n * @korean 측면포함자세\n */\nexport type StanceWithSide = `${TrigramStance}_${StanceLaterality}`;\n\n/**\n * Parse a combined stance+laterality string into its components.\n *\n * **Korean**: 자세 측면 분리\n *\n * Takes a string in the format \"stance_laterality\" and returns the\n * individual stance and laterality components.\n *\n * @param stanceWithSide - Combined stance string (e.g., \"geon_left\")\n * @returns Object with stance and laterality, or null if invalid format\n *\n * @example\n * ```typescript\n * const result = parseStanceWithSide(\"geon_left\");\n * // { stance: \"geon\", laterality: \"left\" }\n *\n * const invalid = parseStanceWithSide(\"invalid\");\n * // null\n * ```\n *\n * @public\n * @category Trigram System\n * @korean 자세측면분리\n */\nexport function parseStanceWithSide(\n stanceWithSide: string\n): { stance: TrigramStance; laterality: StanceLaterality } | null {\n const parts = stanceWithSide.split(\"_\");\n if (parts.length !== 2) {\n return null;\n }\n\n const [stancePart, lateralityPart] = parts;\n\n // Validate stance\n if (!Object.values(TrigramStance).includes(stancePart as TrigramStance)) {\n return null;\n }\n\n // Validate laterality\n if (lateralityPart !== \"left\" && lateralityPart !== \"right\") {\n return null;\n }\n\n return {\n stance: stancePart as TrigramStance,\n laterality: lateralityPart as StanceLaterality,\n };\n}\n\n/**\n * Create a combined stance+laterality string.\n *\n * **Korean**: 자세 측면 결합\n *\n * Combines a trigram stance and laterality into a single string identifier.\n *\n * @param stance - Trigram stance\n * @param laterality - Stance laterality\n * @returns Combined string in format \"stance_laterality\"\n *\n * @example\n * ```typescript\n * const combined = combineStanceWithSide(\"geon\", \"left\");\n * // \"geon_left\"\n * ```\n *\n * @public\n * @category Trigram System\n * @korean 자세측면결합\n */\nexport function combineStanceWithSide(\n stance: TrigramStance,\n laterality: StanceLaterality\n): StanceWithSide {\n return `${stance}_${laterality}` as StanceWithSide;\n}\n\nexport interface TrigramTransitionCost {\n readonly ki: number;\n readonly stamina: number;\n readonly timeMilliseconds: number;\n}\n\nexport interface TrigramTransitionRule {\n readonly from: TrigramStance;\n readonly to: TrigramStance;\n readonly cost: TrigramTransitionCost;\n readonly effectiveness: number;\n readonly conditions?: ReadonlyArray<{\n type: \"player_stat\" | \"archetype\" | \"active_effect\";\n stat?: \"health\" | \"ki\" | \"stamina\";\n archetype?: PlayerArchetype;\n effectType?: EffectType;\n threshold?: number;\n value?: boolean | string;\n }>;\n readonly description: KoreanText;\n}\n\nexport interface TransitionMetrics {\n readonly cost: TrigramTransitionCost;\n readonly effectiveness: number;\n readonly risk: number;\n readonly stamina: number;\n readonly timeMilliseconds: number;\n}\n\nexport interface TransitionPath {\n readonly path: readonly TrigramStance[];\n readonly totalCost: TrigramTransitionCost;\n readonly effectiveness: number;\n readonly name: string;\n readonly description: KoreanText;\n}\n\nexport interface TrigramTheme {\n readonly primary: number;\n readonly secondary: number;\n readonly active: number;\n readonly hover: number;\n readonly text: number;\n}\n\nexport interface TrigramData {\n readonly id: TrigramStance;\n readonly korean: string;\n readonly english: string;\n readonly symbol: string;\n readonly element: string;\n readonly nature: \"yin\" | \"yang\";\n readonly philosophy: KoreanText;\n readonly combat: KoreanText;\n readonly theme: TrigramTheme;\n readonly name: KoreanText;\n readonly defensiveBonus: number;\n readonly kiFlowModifier: number;\n readonly techniques: {\n readonly primary: {\n readonly korean: string;\n readonly english: string;\n readonly damage: number;\n readonly kiCost: number;\n readonly staminaCost: number;\n readonly hitChance: number;\n readonly criticalChance: number;\n readonly description: KoreanText;\n readonly targetAreas: readonly string[];\n readonly effects: readonly string[];\n };\n };\n}\n\nexport interface StanceTransition {\n readonly from: TrigramStance;\n readonly to: TrigramStance;\n readonly difficulty: number;\n readonly time: number;\n readonly kiCost: number;\n readonly requirements?: string[];\n}\n\nexport interface TrigramPhilosophy {\n readonly trigram: TrigramStance;\n readonly principle: KoreanText;\n readonly application: KoreanText;\n readonly strengthsAgainst: readonly TrigramStance[];\n readonly weaknessesAgainst: readonly TrigramStance[];\n}\n\nexport interface TrigramCombatStyle {\n readonly trigram: TrigramStance;\n readonly combatApproach: string;\n readonly preferredRange: \"close\" | \"medium\" | \"long\";\n readonly focusArea: \"offense\" | \"defense\" | \"balance\";\n readonly keyCharacteristics: readonly string[];\n}\n\n// Minimal representations to avoid deep coupling to other systems\nexport interface TrigramTechniqueSummary {\n readonly id: string;\n readonly stance: TrigramStance;\n readonly name?: KoreanText;\n}\n\nexport interface TrigramPlayerContext {\n readonly currentStance?: TrigramStance;\n readonly ki?: number;\n readonly stamina?: number;\n}\n\nexport interface TrigramSystemInterface {\n getTechniqueForStance: (\n stance: TrigramStance,\n archetype?: PlayerArchetype\n ) => TrigramTechniqueSummary | undefined;\n calculateStanceEffectiveness: (\n attackerStance: TrigramStance,\n defenderStance: TrigramStance,\n technique?: TrigramTechniqueSummary\n ) => number;\n isValidTransition: (from: TrigramStance, to: TrigramStance) => boolean;\n getTransitionCost: (\n from: TrigramStance,\n to: TrigramStance,\n player?: TrigramPlayerContext\n ) => { ki: number; stamina: number; timeMs: number };\n recommendStance: (\n player: TrigramPlayerContext,\n opponent?: TrigramPlayerContext\n ) => TrigramStance;\n}\n\nexport interface TrigramSystem {\n readonly getCurrentStance: (playerId: string) => TrigramStance;\n readonly changeStance: (playerId: string, stance: TrigramStance) => boolean;\n readonly getStanceEffectiveness: (\n attacker: TrigramStance,\n defender: TrigramStance\n ) => number;\n}\n\n// Ki flow factors with all required properties\nexport interface KiFlowFactors {\n readonly playerLevelModifier: number;\n readonly stanceAffinity: number;\n readonly distance: number; // Added missing property\n readonly elementalHarmony: number; // Added missing property\n}\n\n// Trigram effectiveness matrix\nexport interface TrigramEffectivenessMatrix {\n readonly [attacker: string]: {\n readonly [defender: string]: number;\n };\n}\n\n// Trigram stance transition\nexport interface TrigramTransition {\n readonly from: TrigramStance;\n readonly to: TrigramStance;\n readonly difficulty: number;\n readonly kiCost: number;\n readonly staminaCost: number;\n readonly transitionTime: number;\n}\n\n// Archetype-trigram affinity\nexport interface ArchetypeTrigramAffinity {\n readonly archetype: PlayerArchetype;\n readonly preferredTrigrams: readonly TrigramStance[];\n readonly bonusEffectiveness: Record<TrigramStance, number>;\n readonly penaltyTrigrams: readonly TrigramStance[];\n}\n\n// Order of Trigrams for UI elements like wheels or selection lists\nexport const TRIGRAM_STANCES_ORDER: readonly TrigramStance[] = [\n \"geon\" as TrigramStance,\n \"tae\" as TrigramStance,\n \"li\" as TrigramStance,\n \"jin\" as TrigramStance,\n \"son\" as TrigramStance,\n \"gam\" as TrigramStance,\n \"gan\" as TrigramStance,\n \"gon\" as TrigramStance,\n] as const;\n\nexport const TRIGRAM_DATA: Record<TrigramStance, TrigramStanceData> = {\n [TrigramStance.GEON]: {\n name: { korean: \"건\", english: \"Heaven\" },\n symbol: \"☰\",\n element: \"metal\",\n nature: \"yang\",\n chinese: \"天\",\n attribute: { korean: \"강건\", chinese: \"剛健\" },\n meaning: { korean: \"창조와 리더십\", english: \"Creation and Leadership\" },\n philosophy: { korean: \"하늘\", english: \"Heaven\" },\n combat: { korean: \"직접 공격\", english: \"Direct attack\" },\n theme: {\n primary: KOREAN_COLORS.TRIGRAM_GEON_PRIMARY,\n secondary: KOREAN_COLORS.WHITE_SOLID,\n },\n defensiveBonus: 1.0,\n kiFlowModifier: 1.0,\n techniques: {\n primary: {\n korean: \"천둥벽력\",\n english: \"Thunder Strike\",\n damage: 15,\n kiCost: 8,\n staminaCost: 12,\n hitChance: 0.85,\n criticalChance: 0.12,\n description: {\n korean: \"하늘의 힘으로 적을 타격한다\",\n english: \"Strike the enemy with heavenly force\",\n },\n targetAreas: [\"torso\", \"head\"],\n effects: [\"stun\"],\n },\n },\n },\n [TrigramStance.TAE]: {\n name: { korean: \"태\", english: \"Lake\" },\n symbol: \"☱\",\n element: \"metal\",\n nature: \"yin\",\n chinese: \"澤\",\n attribute: { korean: \"기쁨\", chinese: \"愉悅\" },\n meaning: { korean: \"기쁨과 교류\", english: \"Joy and Exchange\" },\n philosophy: { korean: \"호수\", english: \"Lake\" },\n combat: { korean: \"유동적 적응\", english: \"Fluid adaptation\" },\n theme: {\n primary: KOREAN_COLORS.TRIGRAM_TAE_PRIMARY,\n secondary: KOREAN_COLORS.UI_STEEL_GRAY,\n },\n defensiveBonus: 1.1,\n kiFlowModifier: 1.2,\n techniques: {\n primary: {\n korean: \"유수연타\",\n english: \"Flowing Strikes\",\n damage: 10,\n kiCost: 5,\n staminaCost: 8,\n hitChance: 0.9,\n criticalChance: 0.1,\n description: {\n korean: \"물의 흐름처럼 연속적인 타격\",\n english: \"Continuous strikes like flowing water\",\n },\n targetAreas: [\"torso\", \"arms\"],\n effects: [\"knockback\"],\n },\n },\n },\n [TrigramStance.LI]: {\n name: { korean: \"리\", english: \"Fire\" },\n symbol: \"☲\",\n element: \"metal\",\n nature: \"yang\",\n chinese: \"火\",\n attribute: { korean: \"광명\", chinese: \"光明\" },\n meaning: { korean: \"열정과 명료함\", english: \"Passion and Clarity\" },\n philosophy: { korean: \"불\", english: \"Fire\" },\n combat: { korean: \"접근 공격\", english: \"Close attack\" },\n theme: {\n primary: KOREAN_COLORS.TRIGRAM_LI_PRIMARY,\n secondary: KOREAN_COLORS.ACCENT_RED,\n },\n defensiveBonus: 0.9,\n kiFlowModifier: 1.1,\n techniques: {\n primary: {\n korean: \"화염베기\",\n english: \"Flame Slash\",\n damage: 18,\n kiCost: 9,\n staminaCost: 11,\n hitChance: 0.8,\n criticalChance: 0.15,\n description: {\n korean: \"불의 형상을 한 날카로운 베기\",\n english: \"A sharp slash in the form of fire\",\n },\n targetAreas: [\"torso\", \"legs\"],\n effects: [\"burn\"],\n },\n },\n },\n [TrigramStance.JIN]: {\n name: { korean: \"진\", english: \"Thunder\" },\n symbol: \"☳\",\n element: \"metal\",\n nature: \"yang\",\n chinese: \"雷\",\n attribute: { korean: \"진동\", chinese: \"震動\" },\n meaning: { korean: \"움직임과 각성\", english: \"Movement and Awakening\" },\n philosophy: { korean: \"천둥\", english: \"Thunder\" },\n combat: { korean: \"돌진 공격\", english: \"Charge attack\" },\n theme: {\n primary: KOREAN_COLORS.TRIGRAM_JIN_PRIMARY,\n secondary: KOREAN_COLORS.SECONDARY_YELLOW,\n },\n defensiveBonus: 0.8,\n kiFlowModifier: 1.3,\n techniques: {\n primary: {\n korean: \"천둥의 박치기\",\n english: \"Thunder Clap\",\n damage: 20,\n kiCost: 10,\n staminaCost: 15,\n hitChance: 0.82,\n criticalChance: 0.18,\n description: {\n korean: \"천둥의 힘으로 적을 가격\",\n english: \"Strike the enemy with the force of thunder\",\n },\n targetAreas: [\"head\", \"torso\"],\n effects: [\"stun\", \"knockback\"],\n },\n },\n },\n [TrigramStance.SON]: {\n name: { korean: \"손\", english: \"Wind\" },\n symbol: \"☴\",\n element: \"metal\",\n nature: \"yin\",\n chinese: \"風\",\n attribute: { korean: \"손순\", chinese: \"巽順\" },\n meaning: { korean: \"침투와 영향\", english: \"Penetration and Influence\" },\n philosophy: { korean: \"바람\", english: \"Wind\" },\n combat: { korean: \"회피 공격\", english: \"Evasive attack\" },\n theme: {\n primary: KOREAN_COLORS.TRIGRAM_SON_PRIMARY,\n secondary: KOREAN_COLORS.POSITIVE_GREEN_DARK,\n },\n defensiveBonus: 1.2,\n kiFlowModifier: 0.9,\n techniques: {\n primary: {\n korean: \"바람베기\",\n english: \"Wind Cut\",\n damage: 12,\n kiCost: 6,\n staminaCost: 10,\n hitChance: 0.88,\n criticalChance: 0.14,\n description: {\n korean: \"바람의 힘으로 적을 베어내다\",\n english: \"Cut through the enemy with the power of wind\",\n },\n targetAreas: [\"torso\", \"arms\"],\n effects: [\"bleed\"],\n },\n },\n },\n [TrigramStance.GAM]: {\n name: { korean: \"감\", english: \"Water\" },\n symbol: \"☵\",\n element: \"metal\",\n nature: \"yin\",\n chinese: \"水\",\n attribute: { korean: \"험난\", chinese: \"險難\" },\n meaning: { korean: \"적응과 흐름\", english: \"Adaptation and Flow\" },\n philosophy: { korean: \"물\", english: \"Water\" },\n combat: { korean: \"유동 공격\", english: \"Flowing attack\" },\n theme: {\n primary: KOREAN_COLORS.TRIGRAM_GAM_PRIMARY,\n secondary: KOREAN_COLORS.PRIMARY_BLUE_DARK,\n },\n defensiveBonus: 1.3,\n kiFlowModifier: 1.1,\n techniques: {\n primary: {\n korean: \"수륙재해\",\n english: \"Water Whip\",\n damage: 14,\n kiCost: 7,\n staminaCost: 9,\n hitChance: 0.84,\n criticalChance: 0.13,\n description: {\n korean: \"물의 힘으로 적을 휘감아 타격\",\n english: \"Strike the enemy by wrapping them with the power of water\",\n },\n targetAreas: [\"torso\", \"legs\"],\n effects: [\"drown\"],\n },\n },\n },\n [TrigramStance.GAN]: {\n name: { korean: \"간\", english: \"Mountain\" },\n symbol: \"☶\",\n element: \"metal\",\n nature: \"yin\",\n chinese: \"山\",\n attribute: { korean: \"지정\", chinese: \"止靜\" },\n meaning: { korean: \"안정과 명상\", english: \"Stability and Meditation\" },\n philosophy: { korean: \"산\", english: \"Mountain\" },\n combat: { korean: \"방어 자세\", english: \"Defensive stance\" },\n theme: {\n primary: KOREAN_COLORS.TRIGRAM_GAN_PRIMARY,\n secondary: KOREAN_COLORS.UI_STEEL_GRAY_DARK,\n },\n defensiveBonus: 1.4,\n kiFlowModifier: 0.8,\n techniques: {\n primary: {\n korean: \"산의 수호\",\n english: \"Mountain Guard\",\n damage: 0,\n kiCost: 10,\n staminaCost: 15,\n hitChance: 1.0,\n criticalChance: 0.0,\n description: {\n korean: \"산처럼 견고한 방어 자세\",\n english: \"A defensive stance as solid as a mountain\",\n },\n targetAreas: [\"torso\"],\n effects: [\"block\"],\n },\n },\n },\n [TrigramStance.GON]: {\n name: { korean: \"곤\", english: \"Earth\" },\n symbol: \"☷\",\n element: \"metal\",\n nature: \"yang\",\n chinese: \"地\",\n attribute: { korean: \"순종\", chinese: \"順從\" },\n meaning: { korean: \"수용과 지지\", english: \"Receptiveness and Support\" },\n philosophy: { korean: \"지구\", english: \"Earth\" },\n combat: { korean: \"포용 공격\", english: \"Embracing attack\" },\n theme: {\n primary: KOREAN_COLORS.TRIGRAM_GON_PRIMARY,\n secondary: KOREAN_COLORS.SECONDARY_BROWN_DARK,\n },\n defensiveBonus: 1.1,\n kiFlowModifier: 1.2,\n techniques: {\n primary: {\n korean: \"지구의 방패\",\n english: \"Earth Shield\",\n damage: 0,\n kiCost: 12,\n staminaCost: 16,\n hitChance: 1.0,\n criticalChance: 0.0,\n description: {\n korean: \"지구의 힘으로 적의 공격을 막다\",\n english: \"Block the enemy's attack with the power of earth\",\n },\n targetAreas: [\"torso\"],\n effects: [\"block\"],\n },\n },\n },\n} as const;\n\n/**\n * Data structure for a Trigram stance containing philosophical,\n * combat, and visual properties for the Eight Trigrams system.\n * Includes Chinese characters, Korean/English names, attributes, and meanings.\n */\nexport interface TrigramStanceData {\n readonly name: { korean: string; english: string };\n readonly symbol: string;\n readonly element: string;\n readonly nature: \"yin\" | \"yang\";\n readonly chinese: string; // Chinese character (天, 澤, etc.)\n readonly attribute: { korean: string; chinese: string }; // Attribute (剛健, etc.)\n readonly meaning: { korean: string; english: string }; // Core meaning\n readonly philosophy: { korean: string; english: string };\n readonly combat: { korean: string; english: string };\n readonly theme: {\n primary: number;\n secondary: number;\n };\n readonly defensiveBonus: number;\n readonly kiFlowModifier: number;\n readonly techniques: {\n primary: {\n korean: string;\n english: string;\n damage: number;\n kiCost: number;\n staminaCost: number;\n hitChance: number;\n criticalChance: number;\n description: { korean: string; english: string };\n targetAreas: string[];\n effects: string[];\n };\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../../src/systems/trigram/types.ts"],"sourcesContent":["/**\n * Type definitions for trigram types\n * Auto-generated by type migration script\n */\n\n// Trigram system imports from shared types\nimport { TrigramStance } from \"../../types/common\";\n\nimport {\n KOREAN_COLORS,\n type KoreanText,\n type PlayerArchetype,\n} from \"../../types\";\nimport { EffectType } from \"../effects\";\n\n/**\n * Stance laterality representing which foot/side is forward.\n *\n * **Korean**: 자세 측면성\n *\n * In authentic Korean martial arts (태권도, 합기도, 택견), stances have\n * distinct left and right configurations:\n * - **왼발서기 (Oenbal Seogi)**: Left foot forward, left guard high\n * - **오른발서기 (Oreun Bal Seogi)**: Right foot forward, right guard high\n *\n * @public\n * @category Trigram System\n * @korean 측면성\n */\nexport type StanceLaterality = \"left\" | \"right\";\n\n/**\n * Combined stance with laterality for complete stance specification.\n *\n * **Korean**: 측면 포함 자세\n *\n * Combines the trigram stance (8 types) with laterality (2 sides) to create\n * 16 distinct stance configurations. Format: `{stance}_{laterality}`\n *\n * Examples:\n * - \"geon_left\" - Heaven stance, left foot forward\n * - \"tae_right\" - Lake stance, right foot forward\n *\n * @public\n * @category Trigram System\n * @korean 측면포함자세\n */\nexport type StanceWithSide = `${TrigramStance}_${StanceLaterality}`;\n\n/**\n * Parse a combined stance+laterality string into its components.\n *\n * **Korean**: 자세 측면 분리\n *\n * Takes a string in the format \"stance_laterality\" and returns the\n * individual stance and laterality components.\n *\n * @param stanceWithSide - Combined stance string (e.g., \"geon_left\")\n * @returns Object with stance and laterality, or null if invalid format\n *\n * @example\n * ```typescript\n * const result = parseStanceWithSide(\"geon_left\");\n * // { stance: \"geon\", laterality: \"left\" }\n *\n * const invalid = parseStanceWithSide(\"invalid\");\n * // null\n * ```\n *\n * @public\n * @category Trigram System\n * @korean 자세측면분리\n */\nexport function parseStanceWithSide(\n stanceWithSide: string\n): { stance: TrigramStance; laterality: StanceLaterality } | null {\n const parts = stanceWithSide.split(\"_\");\n if (parts.length !== 2) {\n return null;\n }\n\n const [stancePart, lateralityPart] = parts;\n\n // Validate stance\n if (!Object.values(TrigramStance).includes(stancePart as TrigramStance)) {\n return null;\n }\n\n // Validate laterality\n if (lateralityPart !== \"left\" && lateralityPart !== \"right\") {\n return null;\n }\n\n return {\n stance: stancePart as TrigramStance,\n laterality: lateralityPart as StanceLaterality,\n };\n}\n\n/**\n * Create a combined stance+laterality string.\n *\n * **Korean**: 자세 측면 결합\n *\n * Combines a trigram stance and laterality into a single string identifier.\n *\n * @param stance - Trigram stance\n * @param laterality - Stance laterality\n * @returns Combined string in format \"stance_laterality\"\n *\n * @example\n * ```typescript\n * const combined = combineStanceWithSide(\"geon\", \"left\");\n * // \"geon_left\"\n * ```\n *\n * @public\n * @category Trigram System\n * @korean 자세측면결합\n */\nexport function combineStanceWithSide(\n stance: TrigramStance,\n laterality: StanceLaterality\n): StanceWithSide {\n return `${stance}_${laterality}` as StanceWithSide;\n}\n\nexport interface TrigramTransitionCost {\n readonly ki: number;\n readonly stamina: number;\n readonly timeMilliseconds: number;\n}\n\nexport interface TrigramTransitionRule {\n readonly from: TrigramStance;\n readonly to: TrigramStance;\n readonly cost: TrigramTransitionCost;\n readonly effectiveness: number;\n readonly conditions?: ReadonlyArray<{\n type: \"player_stat\" | \"archetype\" | \"active_effect\";\n stat?: \"health\" | \"ki\" | \"stamina\";\n archetype?: PlayerArchetype;\n effectType?: EffectType;\n threshold?: number;\n value?: boolean | string;\n }>;\n readonly description: KoreanText;\n}\n\nexport interface TransitionMetrics {\n readonly cost: TrigramTransitionCost;\n readonly effectiveness: number;\n readonly risk: number;\n readonly stamina: number;\n readonly timeMilliseconds: number;\n}\n\nexport interface TransitionPath {\n readonly path: readonly TrigramStance[];\n readonly totalCost: TrigramTransitionCost;\n readonly effectiveness: number;\n readonly name: string;\n readonly description: KoreanText;\n}\n\nexport interface TrigramTheme {\n readonly primary: number;\n readonly secondary: number;\n readonly active: number;\n readonly hover: number;\n readonly text: number;\n}\n\nexport interface TrigramData {\n readonly id: TrigramStance;\n readonly korean: string;\n readonly english: string;\n readonly symbol: string;\n readonly element: string;\n readonly nature: \"yin\" | \"yang\";\n readonly philosophy: KoreanText;\n readonly combat: KoreanText;\n readonly theme: TrigramTheme;\n readonly name: KoreanText;\n readonly defensiveBonus: number;\n readonly kiFlowModifier: number;\n readonly techniques: {\n readonly primary: {\n readonly korean: string;\n readonly english: string;\n readonly damage: number;\n readonly kiCost: number;\n readonly staminaCost: number;\n readonly hitChance: number;\n readonly criticalChance: number;\n readonly description: KoreanText;\n readonly targetAreas: readonly string[];\n readonly effects: readonly string[];\n };\n };\n}\n\nexport interface StanceTransition {\n readonly from: TrigramStance;\n readonly to: TrigramStance;\n readonly difficulty: number;\n readonly time: number;\n readonly kiCost: number;\n readonly requirements?: string[];\n}\n\nexport interface TrigramPhilosophy {\n readonly trigram: TrigramStance;\n readonly principle: KoreanText;\n readonly application: KoreanText;\n readonly strengthsAgainst: readonly TrigramStance[];\n readonly weaknessesAgainst: readonly TrigramStance[];\n}\n\nexport interface TrigramCombatStyle {\n readonly trigram: TrigramStance;\n readonly combatApproach: string;\n readonly preferredRange: \"close\" | \"medium\" | \"long\";\n readonly focusArea: \"offense\" | \"defense\" | \"balance\";\n readonly keyCharacteristics: readonly string[];\n}\n\n// Minimal representations to avoid deep coupling to other systems\nexport interface TrigramTechniqueSummary {\n readonly id: string;\n readonly stance: TrigramStance;\n readonly name?: KoreanText;\n}\n\nexport interface TrigramPlayerContext {\n readonly currentStance?: TrigramStance;\n readonly ki?: number;\n readonly stamina?: number;\n}\n\nexport interface TrigramSystemInterface {\n getTechniqueForStance: (\n stance: TrigramStance,\n archetype?: PlayerArchetype\n ) => TrigramTechniqueSummary | undefined;\n calculateStanceEffectiveness: (\n attackerStance: TrigramStance,\n defenderStance: TrigramStance,\n technique?: TrigramTechniqueSummary\n ) => number;\n isValidTransition: (from: TrigramStance, to: TrigramStance) => boolean;\n getTransitionCost: (\n from: TrigramStance,\n to: TrigramStance,\n player?: TrigramPlayerContext\n ) => { ki: number; stamina: number; timeMs: number };\n recommendStance: (\n player: TrigramPlayerContext,\n opponent?: TrigramPlayerContext\n ) => TrigramStance;\n}\n\nexport interface TrigramSystem {\n readonly getCurrentStance: (playerId: string) => TrigramStance;\n readonly changeStance: (playerId: string, stance: TrigramStance) => boolean;\n readonly getStanceEffectiveness: (\n attacker: TrigramStance,\n defender: TrigramStance\n ) => number;\n}\n\n// Ki flow factors with all required properties\nexport interface KiFlowFactors {\n readonly playerLevelModifier: number;\n readonly stanceAffinity: number;\n readonly distance: number; // Added missing property\n readonly elementalHarmony: number; // Added missing property\n}\n\n// Trigram effectiveness matrix\nexport interface TrigramEffectivenessMatrix {\n readonly [attacker: string]: {\n readonly [defender: string]: number;\n };\n}\n\n// Trigram stance transition\nexport interface TrigramTransition {\n readonly from: TrigramStance;\n readonly to: TrigramStance;\n readonly difficulty: number;\n readonly kiCost: number;\n readonly staminaCost: number;\n readonly transitionTime: number;\n}\n\n// Archetype-trigram affinity\nexport interface ArchetypeTrigramAffinity {\n readonly archetype: PlayerArchetype;\n readonly preferredTrigrams: readonly TrigramStance[];\n readonly bonusEffectiveness: Record<TrigramStance, number>;\n readonly penaltyTrigrams: readonly TrigramStance[];\n}\n\n// Order of Trigrams for UI elements like wheels or selection lists\nexport const TRIGRAM_STANCES_ORDER: readonly TrigramStance[] = [\n \"geon\" as TrigramStance,\n \"tae\" as TrigramStance,\n \"li\" as TrigramStance,\n \"jin\" as TrigramStance,\n \"son\" as TrigramStance,\n \"gam\" as TrigramStance,\n \"gan\" as TrigramStance,\n \"gon\" as TrigramStance,\n] as const;\n\nexport const TRIGRAM_DATA: Record<TrigramStance, TrigramStanceData> = {\n [TrigramStance.GEON]: {\n name: { korean: \"건\", english: \"Heaven\" },\n symbol: \"☰\",\n element: \"metal\",\n nature: \"yang\",\n chinese: \"天\",\n attribute: { korean: \"강건\", chinese: \"剛健\" },\n meaning: { korean: \"창조와 리더십\", english: \"Creation and Leadership\" },\n philosophy: { korean: \"하늘\", english: \"Heaven\" },\n combat: { korean: \"직접 공격\", english: \"Direct attack\" },\n theme: {\n primary: KOREAN_COLORS.TRIGRAM_GEON_PRIMARY,\n secondary: KOREAN_COLORS.WHITE_SOLID,\n },\n defensiveBonus: 1.0,\n kiFlowModifier: 1.0,\n techniques: {\n primary: {\n korean: \"천둥벽력\",\n english: \"Thunder Strike\",\n damage: 15,\n kiCost: 8,\n staminaCost: 12,\n hitChance: 0.85,\n criticalChance: 0.12,\n description: {\n korean: \"하늘의 힘으로 적을 타격한다\",\n english: \"Strike the enemy with heavenly force\",\n },\n targetAreas: [\"torso\", \"head\"],\n effects: [\"stun\"],\n },\n },\n },\n [TrigramStance.TAE]: {\n name: { korean: \"태\", english: \"Lake\" },\n symbol: \"☱\",\n element: \"metal\",\n nature: \"yin\",\n chinese: \"澤\",\n attribute: { korean: \"기쁨\", chinese: \"愉悅\" },\n meaning: { korean: \"기쁨과 교류\", english: \"Joy and Exchange\" },\n philosophy: { korean: \"호수\", english: \"Lake\" },\n combat: { korean: \"유동적 적응\", english: \"Fluid adaptation\" },\n theme: {\n primary: KOREAN_COLORS.TRIGRAM_TAE_PRIMARY,\n secondary: KOREAN_COLORS.UI_STEEL_GRAY,\n },\n defensiveBonus: 1.1,\n kiFlowModifier: 1.2,\n techniques: {\n primary: {\n korean: \"유수연타\",\n english: \"Flowing Strikes\",\n damage: 10,\n kiCost: 5,\n staminaCost: 8,\n hitChance: 0.9,\n criticalChance: 0.1,\n description: {\n korean: \"물의 흐름처럼 연속적인 타격\",\n english: \"Continuous strikes like flowing water\",\n },\n targetAreas: [\"torso\", \"arms\"],\n effects: [\"knockback\"],\n },\n },\n },\n [TrigramStance.LI]: {\n name: { korean: \"리\", english: \"Fire\" },\n symbol: \"☲\",\n element: \"metal\",\n nature: \"yang\",\n chinese: \"火\",\n attribute: { korean: \"광명\", chinese: \"光明\" },\n meaning: { korean: \"열정과 명료함\", english: \"Passion and Clarity\" },\n philosophy: { korean: \"불\", english: \"Fire\" },\n combat: { korean: \"접근 공격\", english: \"Close attack\" },\n theme: {\n primary: KOREAN_COLORS.TRIGRAM_LI_PRIMARY,\n secondary: KOREAN_COLORS.ACCENT_RED,\n },\n defensiveBonus: 0.9,\n kiFlowModifier: 1.1,\n techniques: {\n primary: {\n korean: \"화염베기\",\n english: \"Flame Slash\",\n damage: 18,\n kiCost: 9,\n staminaCost: 11,\n hitChance: 0.8,\n criticalChance: 0.15,\n description: {\n korean: \"불의 형상을 한 날카로운 베기\",\n english: \"A sharp slash in the form of fire\",\n },\n targetAreas: [\"torso\", \"legs\"],\n effects: [\"burn\"],\n },\n },\n },\n [TrigramStance.JIN]: {\n name: { korean: \"진\", english: \"Thunder\" },\n symbol: \"☳\",\n element: \"metal\",\n nature: \"yang\",\n chinese: \"雷\",\n attribute: { korean: \"진동\", chinese: \"震動\" },\n meaning: { korean: \"움직임과 각성\", english: \"Movement and Awakening\" },\n philosophy: { korean: \"천둥\", english: \"Thunder\" },\n combat: { korean: \"돌진 공격\", english: \"Charge attack\" },\n theme: {\n primary: KOREAN_COLORS.TRIGRAM_JIN_PRIMARY,\n secondary: KOREAN_COLORS.SECONDARY_YELLOW,\n },\n defensiveBonus: 0.8,\n kiFlowModifier: 1.3,\n techniques: {\n primary: {\n korean: \"천둥의 박치기\",\n english: \"Thunder Clap\",\n damage: 20,\n kiCost: 10,\n staminaCost: 15,\n hitChance: 0.82,\n criticalChance: 0.18,\n description: {\n korean: \"천둥의 힘으로 적을 가격\",\n english: \"Strike the enemy with the force of thunder\",\n },\n targetAreas: [\"head\", \"torso\"],\n effects: [\"stun\", \"knockback\"],\n },\n },\n },\n [TrigramStance.SON]: {\n name: { korean: \"손\", english: \"Wind\" },\n symbol: \"☴\",\n element: \"metal\",\n nature: \"yin\",\n chinese: \"風\",\n attribute: { korean: \"손순\", chinese: \"巽順\" },\n meaning: { korean: \"침투와 영향\", english: \"Penetration and Influence\" },\n philosophy: { korean: \"바람\", english: \"Wind\" },\n combat: { korean: \"회피 공격\", english: \"Evasive attack\" },\n theme: {\n primary: KOREAN_COLORS.TRIGRAM_SON_PRIMARY,\n secondary: KOREAN_COLORS.POSITIVE_GREEN_DARK,\n },\n defensiveBonus: 1.2,\n kiFlowModifier: 0.9,\n techniques: {\n primary: {\n korean: \"바람베기\",\n english: \"Wind Cut\",\n damage: 12,\n kiCost: 6,\n staminaCost: 10,\n hitChance: 0.88,\n criticalChance: 0.14,\n description: {\n korean: \"바람의 힘으로 적을 베어내다\",\n english: \"Cut through the enemy with the power of wind\",\n },\n targetAreas: [\"torso\", \"arms\"],\n effects: [\"bleed\"],\n },\n },\n },\n [TrigramStance.GAM]: {\n name: { korean: \"감\", english: \"Water\" },\n symbol: \"☵\",\n element: \"metal\",\n nature: \"yin\",\n chinese: \"水\",\n attribute: { korean: \"험난\", chinese: \"險難\" },\n meaning: { korean: \"적응과 흐름\", english: \"Adaptation and Flow\" },\n philosophy: { korean: \"물\", english: \"Water\" },\n combat: { korean: \"유동 공격\", english: \"Flowing attack\" },\n theme: {\n primary: KOREAN_COLORS.TRIGRAM_GAM_PRIMARY,\n secondary: KOREAN_COLORS.PRIMARY_BLUE_DARK,\n },\n defensiveBonus: 1.3,\n kiFlowModifier: 1.1,\n techniques: {\n primary: {\n korean: \"수륙재해\",\n english: \"Water Whip\",\n damage: 14,\n kiCost: 7,\n staminaCost: 9,\n hitChance: 0.84,\n criticalChance: 0.13,\n description: {\n korean: \"물의 힘으로 적을 휘감아 타격\",\n english: \"Strike the enemy by wrapping them with the power of water\",\n },\n targetAreas: [\"torso\", \"legs\"],\n effects: [\"drown\"],\n },\n },\n },\n [TrigramStance.GAN]: {\n name: { korean: \"간\", english: \"Mountain\" },\n symbol: \"☶\",\n element: \"metal\",\n nature: \"yin\",\n chinese: \"山\",\n attribute: { korean: \"지정\", chinese: \"止靜\" },\n meaning: { korean: \"안정과 명상\", english: \"Stability and Meditation\" },\n philosophy: { korean: \"산\", english: \"Mountain\" },\n combat: { korean: \"방어 자세\", english: \"Defensive stance\" },\n theme: {\n primary: KOREAN_COLORS.TRIGRAM_GAN_PRIMARY,\n secondary: KOREAN_COLORS.UI_STEEL_GRAY_DARK,\n },\n defensiveBonus: 1.4,\n kiFlowModifier: 0.8,\n techniques: {\n primary: {\n korean: \"산의 수호\",\n english: \"Mountain Guard\",\n damage: 0,\n kiCost: 10,\n staminaCost: 15,\n hitChance: 1.0,\n criticalChance: 0.0,\n description: {\n korean: \"산처럼 견고한 방어 자세\",\n english: \"A defensive stance as solid as a mountain\",\n },\n targetAreas: [\"torso\"],\n effects: [\"block\"],\n },\n },\n },\n [TrigramStance.GON]: {\n name: { korean: \"곤\", english: \"Earth\" },\n symbol: \"☷\",\n element: \"metal\",\n nature: \"yang\",\n chinese: \"地\",\n attribute: { korean: \"순종\", chinese: \"順從\" },\n meaning: { korean: \"수용과 지지\", english: \"Receptiveness and Support\" },\n philosophy: { korean: \"지구\", english: \"Earth\" },\n combat: { korean: \"포용 공격\", english: \"Embracing attack\" },\n theme: {\n primary: KOREAN_COLORS.TRIGRAM_GON_PRIMARY,\n secondary: KOREAN_COLORS.SECONDARY_BROWN_DARK,\n },\n defensiveBonus: 1.1,\n kiFlowModifier: 1.2,\n techniques: {\n primary: {\n korean: \"지구의 방패\",\n english: \"Earth Shield\",\n damage: 0,\n kiCost: 12,\n staminaCost: 16,\n hitChance: 1.0,\n criticalChance: 0.0,\n description: {\n korean: \"지구의 힘으로 적의 공격을 막다\",\n english: \"Block the enemy's attack with the power of earth\",\n },\n targetAreas: [\"torso\"],\n effects: [\"block\"],\n },\n },\n },\n} as const;\n\n/**\n * Data structure for a Trigram stance containing philosophical,\n * combat, and visual properties for the Eight Trigrams system.\n * Includes Chinese characters, Korean/English names, attributes, and meanings.\n */\nexport interface TrigramStanceData {\n readonly name: { korean: string; english: string };\n readonly symbol: string;\n readonly element: string;\n readonly nature: \"yin\" | \"yang\";\n readonly chinese: string; // Chinese character (天, 澤, etc.)\n readonly attribute: { korean: string; chinese: string }; // Attribute (剛健, etc.)\n readonly meaning: { korean: string; english: string }; // Core meaning\n readonly philosophy: { korean: string; english: string };\n readonly combat: { korean: string; english: string };\n readonly theme: {\n primary: number;\n secondary: number;\n };\n readonly defensiveBonus: number;\n readonly kiFlowModifier: number;\n readonly techniques: {\n primary: {\n korean: string;\n english: string;\n damage: number;\n kiCost: number;\n staminaCost: number;\n hitChance: number;\n criticalChance: number;\n description: { korean: string; english: string };\n targetAreas: string[];\n effects: string[];\n };\n };\n}\n"],"mappings":"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"}
|