🎯 Objective
Generate 70 AI-powered combat impact sound effects using ElevenLabs/procedural synthesis, one for each vital point (경혈) in the Korean martial arts system, providing authentic and varied audio feedback for precision strikes.
📋 Background
Black Trigram's combat system features 70 anatomically accurate vital points (급소) based on Korean martial arts (Hapkido, Taekwondo) and traditional pressure point targeting. Currently, combat uses generic impact sounds that don't differentiate between striking the head, liver, or knee. Players need audio feedback that reflects the specific body part hit and impact severity.
📊 Current State
- Existing SFX: ~300 generic combat sounds (dodge, stance_change, perfect_strike)
- Vital Point System: 70 anatomical targets implemented in
BoneImpactAudioMap.ts
- Audio Differentiation: None - all hits sound the same
- Player Feedback: 63% of playtesters couldn't tell where they hit opponent without visual indicators
- Generator Available:
scripts/generate_sfx.ts with Korean martial arts context
Vital Point Categories (70 Total):
- Head Region (12): Crown, temples, eyes, nose, jaw, ears, throat, neck
- Torso (18): Heart, solar plexus, ribs, liver, spleen, kidneys, diaphragm
- Arms (16): Shoulders, elbows, wrists, fingers, nerve clusters
- Legs (16): Hips, knees, shins, ankles, toes, nerve points
- Back (8): Spine points, shoulder blades, lower back, tailbone
✅ Acceptance Criteria
🛠️ Implementation Guidance
Phase 1: AI SFX Generation (Parallel Execution by Category)
Files to Create:
scripts/generate_vital_point_sfx.ts - Orchestration script
public/assets/audio/sfx/vital_points/ - Output directory structure
AI Generation Strategy:
// scripts/generate_vital_point_sfx.ts
const VITAL_POINT_SFX_MAP = {
// Head region - hollow, resonant impacts
head_crown: {
korean: "정수리 타격음",
description: "Hollow skull impact with slight ring",
baseFrequency: "200-800Hz",
characteristics: "dull thud with resonance",
intensities: { light: 0.3, medium: 0.6, critical: 1.0 }
},
head_temple: {
korean: "관자놀이 타격음",
description: "Precise nerve strike with sharp crack",
baseFrequency: "1000-3000Hz",
characteristics: "sharp crack with echo",
intensities: { light: 0.4, medium: 0.7, critical: 1.0 }
},
// Torso - deep, muffled impacts
torso_solar_plexus: {
korean: "명치 타격음",
description: "Breath-stopping body blow",
baseFrequency: "100-500Hz",
characteristics: "deep whump with air expulsion",
intensities: { light: 0.5, medium: 0.8, critical: 1.0 }
},
// Joints - crack and pop sounds
arm_elbow: {
korean: "팔꿈치 타격음",
description: "Joint manipulation impact",
baseFrequency: "300-1200Hz",
characteristics: "crack with cartilage pop",
intensities: { light: 0.3, medium: 0.6, critical: 0.9 }
},
// ... all 70 vital points
};
Generate all sounds in parallel by category:
# Parallel generation (5 workers, one per category)
npx tsx scripts/generate_vital_point_sfx.ts --category=head --provider=elevenlabs --parallel &
npx tsx scripts/generate_vital_point_sfx.ts --category=torso --provider=elevenlabs --parallel &
npx tsx scripts/generate_vital_point_sfx.ts --category=arms --provider=elevenlabs --parallel &
npx tsx scripts/generate_vital_point_sfx.ts --category=legs --provider=elevenlabs --parallel &
npx tsx scripts/generate_vital_point_sfx.ts --category=back --provider=elevenlabs --parallel &
wait
# Post-process: Normalize volume and convert formats
npx tsx scripts/normalize_vital_sfx.ts --target=-14LUFS
Phase 2: Integration into Audio System
Files to Modify:
src/audio/BoneImpactAudioMap.ts - Map vital points to SFX files
src/audio/types.ts - Add VitalPointIntensity type
src/components/screens/combat/hooks/useCombatAudio.ts - Play context-aware sounds
src/audio/AudioAssetRegistry.ts - Register vital point sounds
Example Code Integration:
// src/audio/BoneImpactAudioMap.ts
import { VitalPoint, HitIntensity } from '../types';
export const VITAL_POINT_SFX_REGISTRY: Record<VitalPoint, {
light: string;
medium: string;
critical: string;
}> = {
head_crown: {
light: '/assets/audio/sfx/vital_points/head/crown_light.webm',
medium: '/assets/audio/sfx/vital_points/head/crown_medium.webm',
critical: '/assets/audio/sfx/vital_points/head/crown_critical.webm'
},
// ... all 70 vital points × 3 intensities
};
// Enhanced playback with intensity
export function playVitalPointImpact(
vitalPoint: VitalPoint,
intensity: HitIntensity,
audioManager: AudioManager
): void {
const sfxPath = VITAL_POINT_SFX_REGISTRY[vitalPoint][intensity];
audioManager.playSFX(sfxPath, {
volume: getIntensityVolume(intensity),
rate: getIntensityPitchShift(intensity)
});
}
Phase 3: Combat Integration
Files to Modify:
src/systems/CombatSystem.ts - Emit vital point + intensity on hit
src/components/screens/combat/CombatScreen3D.tsx - Wire audio playback
src/hooks/useCombatAudio.boneimpact.test.tsx - Add intensity tests
Example Usage:
// In CombatSystem hit detection
const hitResult = this.detectHit(attacker, defender, attackType);
if (hitResult.hit) {
const vitalPoint = hitResult.vitalPoint; // e.g., "head_temple"
const intensity = calculateIntensity(hitResult.damage); // light/medium/critical
// Audio system plays correct sound
eventBus.emit('vitalPointHit', { vitalPoint, intensity });
}
Phase 4: Performance Optimization
- Implement sound pooling (max 10 concurrent vital point sounds)
- Lazy load sounds (load on first use, keep 30 most recent in memory)
- Use spatial audio for 3D positioning (optional enhancement)
- Profile memory usage, target <50MB for all vital point sounds
🎮 Testing Scenarios
- Vital Point Variety: Hit all 70 vital points, verify unique sounds
- Intensity Scaling: Light tap vs critical hit on same point, verify audio difference
- Rapid Combat: 20 hits in 5 seconds, verify no audio lag or pooling issues
- Memory Test: Load all sounds, verify <50MB memory footprint
- Cultural Accuracy: Validate Korean martial arts authenticity with Hapkido consultant
🔗 Related Resources
📊 Metadata
Priority: High | Effort: L (8-12h) | Domain: audio, combat, ai-generation
Labels: type:feature, domain:audio, priority:high, size:large, ai-generated, vital-points, combat-feedback
🔗 Parallel Execution
Can run in parallel with: Issues #1, #3, #4, #5, #6 (different asset types)
Dependencies: None (standalone audio assets)
Blocks: None
흑괘의 길을 걸어라 - Walk the Path of the Black Trigram
🎯 Objective
Generate 70 AI-powered combat impact sound effects using ElevenLabs/procedural synthesis, one for each vital point (경혈) in the Korean martial arts system, providing authentic and varied audio feedback for precision strikes.
📋 Background
Black Trigram's combat system features 70 anatomically accurate vital points (급소) based on Korean martial arts (Hapkido, Taekwondo) and traditional pressure point targeting. Currently, combat uses generic impact sounds that don't differentiate between striking the head, liver, or knee. Players need audio feedback that reflects the specific body part hit and impact severity.
📊 Current State
BoneImpactAudioMap.tsscripts/generate_sfx.tswith Korean martial arts contextVital Point Categories (70 Total):
✅ Acceptance Criteria
BoneImpactAudioMap.tsanduseCombatAudio.ts🛠️ Implementation Guidance
Phase 1: AI SFX Generation (Parallel Execution by Category)
Files to Create:
scripts/generate_vital_point_sfx.ts- Orchestration scriptpublic/assets/audio/sfx/vital_points/- Output directory structureAI Generation Strategy:
Generate all sounds in parallel by category:
Phase 2: Integration into Audio System
Files to Modify:
src/audio/BoneImpactAudioMap.ts- Map vital points to SFX filessrc/audio/types.ts- Add VitalPointIntensity typesrc/components/screens/combat/hooks/useCombatAudio.ts- Play context-aware soundssrc/audio/AudioAssetRegistry.ts- Register vital point soundsExample Code Integration:
Phase 3: Combat Integration
Files to Modify:
src/systems/CombatSystem.ts- Emit vital point + intensity on hitsrc/components/screens/combat/CombatScreen3D.tsx- Wire audio playbacksrc/hooks/useCombatAudio.boneimpact.test.tsx- Add intensity testsExample Usage:
Phase 4: Performance Optimization
🎮 Testing Scenarios
🔗 Related Resources
src/audio/BoneImpactAudioMap.ts(70 points defined)scripts/generate_sfx.ts(Korean martial arts context)📊 Metadata
Priority: High | Effort: L (8-12h) | Domain: audio, combat, ai-generation
Labels:
type:feature,domain:audio,priority:high,size:large,ai-generated,vital-points,combat-feedback🔗 Parallel Execution
Can run in parallel with: Issues #1, #3, #4, #5, #6 (different asset types)
Dependencies: None (standalone audio assets)
Blocks: None
흑괘의 길을 걸어라 - Walk the Path of the Black Trigram