Phase 1: Setup project structure and tool installation guide
- Created project directory structure - Added docs/SETUP_PHASE1.md with tool installation instructions - Added docs/AUDIO_ANALYSIS.md with game audio architecture - Added src/HomuraHimeAudioMod/ BepInEx plugin skeleton - Added patch stubs for VoiceManager, AudioDucking, EnemyAudio - Configured .gitignore for build artifacts and game files - Initialized beads issue tracker
This commit is contained in:
36
.gitignore
vendored
36
.gitignore
vendored
@@ -1,4 +1,38 @@
|
|||||||
|
|
||||||
# Dolt database files (added by bd init)
|
# Dolt database files (added by bd init)
|
||||||
.dolt/
|
.dolt/
|
||||||
*.db
|
*.db
|
||||||
|
|
||||||
|
# Build outputs
|
||||||
|
bin/
|
||||||
|
obj/
|
||||||
|
*.dll
|
||||||
|
*.pdb
|
||||||
|
*.mdb
|
||||||
|
|
||||||
|
# IDE
|
||||||
|
.vs/
|
||||||
|
.vscode/
|
||||||
|
*.user
|
||||||
|
*.suo
|
||||||
|
|
||||||
|
# OS
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
|
||||||
|
# Game files (should not be in repo)
|
||||||
|
# Uncomment if you want to track modified game files
|
||||||
|
# HomuraHime_Data/
|
||||||
|
|
||||||
|
# BepInEx (runtime generated)
|
||||||
|
BepInEx/logs/
|
||||||
|
BepInEx/cache/
|
||||||
|
BepInEx/config/
|
||||||
|
|
||||||
|
# FMOD Studio
|
||||||
|
*.cache
|
||||||
|
*~
|
||||||
|
|
||||||
|
# Temporary files
|
||||||
|
*.tmp
|
||||||
|
*.bak
|
||||||
|
*.swp
|
||||||
|
|||||||
172
docs/AUDIO_ANALYSIS.md
Normal file
172
docs/AUDIO_ANALYSIS.md
Normal file
@@ -0,0 +1,172 @@
|
|||||||
|
# HomuraHime Audio System Analysis
|
||||||
|
|
||||||
|
## Game Overview
|
||||||
|
- **Engine**: Unity 2022.3.x
|
||||||
|
- **Audio Engine**: FMOD Studio 2.02.x with Google Resonance spatial audio
|
||||||
|
- **Voice Manager**: UtageFmodVoiceManager (adapted Utage framework)
|
||||||
|
- **Platform**: Steam (uses Steamworks.NET)
|
||||||
|
|
||||||
|
## Audio Architecture
|
||||||
|
|
||||||
|
### Directory Structure
|
||||||
|
```
|
||||||
|
HomuraHime_Data\
|
||||||
|
├── Managed\
|
||||||
|
│ ├── Assembly-CSharp.dll (7.08 MB - main game logic)
|
||||||
|
│ ├── Assembly-CSharp-firstpass.dll (3.92 MB - runtime code)
|
||||||
|
│ ├── FMODUnity.dll (239 KB - FMOD Unity integration)
|
||||||
|
│ ├── FMODUnityResonance.dll (11 KB - FMOD Resonance extension)
|
||||||
|
│ └── UnityEngine.AudioModule.dll
|
||||||
|
├── Plugins\x86_64\
|
||||||
|
│ ├── fmodstudio.dll (3.16 MB - FMOD core)
|
||||||
|
│ └── resonanceaudio.dll (817 KB - Google Resonance spatial)
|
||||||
|
└── StreamingAssets\FMOD\Desktop\
|
||||||
|
└── (49 FMOD bank files - ~1.3 GB total)
|
||||||
|
```
|
||||||
|
|
||||||
|
### FMOD Bank Files
|
||||||
|
|
||||||
|
| Bank | Purpose | Size (streams) |
|
||||||
|
|------|---------|----------------|
|
||||||
|
| Master.bank | Main mixer and routing | 98.5 KB |
|
||||||
|
| BGM.bank | Background music (general) | 63.83 MB |
|
||||||
|
| BGM_Default.bank | Default BGM | 224.07 MB |
|
||||||
|
| BGM_Hub.bank | Hub area music | 14.67 MB |
|
||||||
|
| BGM_Lv0-Lv5, BGM_LvF | Level-specific music | 14-64 MB each |
|
||||||
|
| Ambience.bank | Environmental sounds | 150.97 MB |
|
||||||
|
| SFX.bank | Sound effects | 188.97 MB |
|
||||||
|
| Voice.bank | Character voice | 19.83 MB |
|
||||||
|
| PreLoad_Jump.bank | Pre-cached jump sounds | ~533 KB |
|
||||||
|
| PreLoad_FootStep_Land.bank | Pre-cached footstep sounds | ~1 MB |
|
||||||
|
|
||||||
|
**Total Audio: ~1.3 GB across 49 bank files**
|
||||||
|
|
||||||
|
## Key Audio Classes
|
||||||
|
|
||||||
|
### Voice Management
|
||||||
|
- **UtageFmodVoiceManager** - Main voice manager (Utage framework adapted)
|
||||||
|
- **CFVoiceData** / **CFVoiceEventUtility** - Custom voice event system
|
||||||
|
- **CharacterVoiceData** - Character voice data handling
|
||||||
|
- **FmodVoiceStopper** - Voice stop controller
|
||||||
|
- **get_CountVoice** / **get_IsPlayingVoice** - Voice count monitoring
|
||||||
|
|
||||||
|
### Sound Management
|
||||||
|
- **FMODSoundManager** - Main FMOD sound manager
|
||||||
|
- **SoundManager** (Utage base) - Base sound manager
|
||||||
|
- **FmodSFXEventSO**, **FmodSFXEventRef**, **FmodSFXEventDispatcher** - Custom SFX system
|
||||||
|
- **FMODEventInstance** - FMOD event instance wrapper
|
||||||
|
|
||||||
|
### Channel/Volume Control
|
||||||
|
- **FMOD_Channel** - Custom FMOD channel wrapper
|
||||||
|
- **VCASetting** - Volume control area settings
|
||||||
|
- **TaggedMasterVolume** - Per-tag master volume control
|
||||||
|
- **BGMChannel** - BGM channel management
|
||||||
|
|
||||||
|
### Audio Effects
|
||||||
|
- **UpdateDucking** / **DuckVolume** - Audio ducking system
|
||||||
|
- **SnapshotManager** - Snapshot management
|
||||||
|
- **FmodReverbEventController** - Reverb control
|
||||||
|
- **ZoneReverbHandler** - Zone-based reverb
|
||||||
|
|
||||||
|
### Spatial Audio
|
||||||
|
- **HHFmodListenerPosController** - FMOD listener position controller
|
||||||
|
- **resonanceaudio.dll** - Google Resonance spatial audio
|
||||||
|
|
||||||
|
### Pooling
|
||||||
|
- **SimplePool** / **ObjectPool** - Generic object pooling
|
||||||
|
- **DEFAULT_POOL_SIZE**, **VfxObjectPoolSize** - Pool size constants
|
||||||
|
|
||||||
|
## Voice Event Constants (CFVOICE Events)
|
||||||
|
|
||||||
|
The game triggers voice events for various situations:
|
||||||
|
- `CFVOICE_REWARD` - Reward sounds
|
||||||
|
- `CFVOICE_CHALLENGEBATTLE` - Challenge battle start
|
||||||
|
- `CFVOICE_BATTLE` - Battle start
|
||||||
|
- `CFVOICE_NOTE` - Note/commentary
|
||||||
|
- `CFVOICE_MHCHASING` - Chasing sequences
|
||||||
|
- `CFVOICE_ELECTRIFYING` - Electrifying events
|
||||||
|
- `CFVOICE_HH` / `HH_Behaviour` - HomuraHime behavior events
|
||||||
|
- `CFVOICE_ENEMY` - Enemy-related voice
|
||||||
|
- `CFVOICE_QTE_SHIKIGAMI` - QTE shikigami events
|
||||||
|
- `CFVOICE_BATTLERANK` - Battle rank announcements
|
||||||
|
- And many more...
|
||||||
|
|
||||||
|
## Enemy System
|
||||||
|
|
||||||
|
### Enemy Audio Triggers
|
||||||
|
- **EnemyBehaviorManger** - Enemy behavior management
|
||||||
|
- **EnemyAttackBase**, **EnemyAttackAction**, **EnemyAttackBlockedAction** - Attack handling
|
||||||
|
- **EnemyIndicatorController** - Visual indicators for enemies
|
||||||
|
- **SetEnemyAI** - AI setting method
|
||||||
|
- **EnemyState** - Enemy state tracking
|
||||||
|
|
||||||
|
### HUD/Indicator Classes
|
||||||
|
- **HUDIndicatorPhase** / **HUDIndicatorPhaseHandler** - Phase indicator handling
|
||||||
|
- **CDHUDIndicatorHandler** - Cooldown HUD indicator
|
||||||
|
- **IndicatorManager** - Indicator management
|
||||||
|
|
||||||
|
## Audio Configuration
|
||||||
|
|
||||||
|
### Pool-Related Constants
|
||||||
|
- `DEFAULT_POOL_SIZE` - Default pool size
|
||||||
|
- `VfxObjectPoolSize` - VFX pool size
|
||||||
|
- `ObjectPoolSize` - Generic object pool size
|
||||||
|
- `poolPreloadnum` - Pool preload count
|
||||||
|
- `preloadCountPerPrefab` - Per-prefab preload count
|
||||||
|
|
||||||
|
### FMOD Channel Constants
|
||||||
|
- `MAXCHANNELS` - Maximum channel count
|
||||||
|
- `ERR_TOOMANYCHANNELS` - Channel overflow error
|
||||||
|
- `ERR_CHANNEL_ALLOC` - Channel allocation error
|
||||||
|
- `VIRTUALVOICE` - Virtual voice management
|
||||||
|
- `CHANNELPRIORITY` - Channel priority setting
|
||||||
|
- `MAX_CHANNEL_WIDTH` - Maximum channel width
|
||||||
|
|
||||||
|
## Key Findings
|
||||||
|
|
||||||
|
1. **No explicit voice limit constants** visible in string analysis - voice limit may be managed internally by FMOD or Utage framework
|
||||||
|
2. **Audio ducking system exists** - `UpdateDucking` and `DuckVolume` present
|
||||||
|
3. **Voice pooling exists** - Object pooling with `DEFAULT_POOL_SIZE` constants
|
||||||
|
4. **Lip-sync support** - Using `uLipSyncFMOD` for voice synchronization
|
||||||
|
5. **Priority system** - `CHANNELPRIORITY` and `Priority` fields for channel prioritization
|
||||||
|
6. **Event-driven voice system** - Voices triggered via CFVOICE event constants
|
||||||
|
|
||||||
|
## Source File Paths (from DLL strings)
|
||||||
|
|
||||||
|
These are the original Unity asset paths in the game source:
|
||||||
|
- `Assets/4.Developer/Andy/UtageVoiceManager/UtageFmodVoiceManager.cs`
|
||||||
|
- `Assets/4.Developer/Andy/UtageVoiceManager/UtageFmodVoiceSetting.cs`
|
||||||
|
- `Assets/4.Developer/Andy/UtageVoiceManager/FmodVoiceStopper.cs`
|
||||||
|
- `Assets/4.Developer/Andy/UtageVoiceManager/DEAudioFadeManager.cs`
|
||||||
|
- `Assets/4.Developer/Andy/UtageVoiceManager/SnapshotManager.cs`
|
||||||
|
- `Assets/4.Developer/Andy/UtageVoiceManager/FmodReverbEventController.cs`
|
||||||
|
- `Assets/1.HonoHime/Core/FMODUtility/Scripts/FMODSoundManager.cs`
|
||||||
|
- `Assets/1.HonoHime/Core/FMODUtility/Scripts/MMFeedbacks/FMOD_Channel.cs`
|
||||||
|
- `Assets/1.HonoHime/Core/mLibrary/ObjectPool/SimplePool.cs`
|
||||||
|
|
||||||
|
## Game Data Files
|
||||||
|
|
||||||
|
Audio-related configuration may exist in:
|
||||||
|
- `HomuraHime_Data\StreamingAssets\HomuraHimeData\csv\EnemyData.json`
|
||||||
|
- `HomuraHime_Data\StreamingAssets\HomuraHimeData\json\BattleRound.json`
|
||||||
|
- `HomuraHime_Data\StreamingAssets\HomuraHimeData\json\EnemyData.json`
|
||||||
|
|
||||||
|
## Potential Audio Glitch Causes
|
||||||
|
|
||||||
|
Based on architecture analysis:
|
||||||
|
|
||||||
|
1. **Voice Limit Exhaustion** - Too many simultaneous FMOD events
|
||||||
|
2. **Missing Audio Ducking Rules** - No automatic volume reduction during intense combat
|
||||||
|
3. **Improper Event Instance Cleanup** - Voices not being released properly
|
||||||
|
4. **CPU Pressure from Spatial Audio** - Resonance audio processing overhead
|
||||||
|
5. **Pool Size Limitations** - Object pool too small for audio components
|
||||||
|
|
||||||
|
## Enemy Behavior Indicator Issues
|
||||||
|
|
||||||
|
Potential causes for unclear enemy audio cues:
|
||||||
|
|
||||||
|
1. **Low Mix Volume** - Enemy sounds mixed too low in Master.bank
|
||||||
|
2. **Insufficient Spatial Positioning** - Sounds not directional enough
|
||||||
|
3. **Lack of State Variation** - Same sounds for all enemy states
|
||||||
|
4. **Audio Masking** - Other sounds drowning out enemy cues
|
||||||
|
5. **Missing Parameter Changes** - No FMOD parameter automation for enemy state
|
||||||
277
docs/SETUP_PHASE1.md
Normal file
277
docs/SETUP_PHASE1.md
Normal file
@@ -0,0 +1,277 @@
|
|||||||
|
# Phase 1: Environment Setup Guide
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
This phase covers installation of all required modding tools for HomuraHime audio modding.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Tool 1: BepInEx 5.x (Runtime Mod Framework)
|
||||||
|
|
||||||
|
### What It Does
|
||||||
|
Enables runtime patching of game code without modifying original DLLs. Required for audio voice limit patches.
|
||||||
|
|
||||||
|
### Download
|
||||||
|
```
|
||||||
|
https://github.com/BepInEx/BepInEx/releases
|
||||||
|
```
|
||||||
|
- Download: **BepInEx 5.4.x** (latest stable)
|
||||||
|
- File: `BepInEx_x64_5.4.x.zip`
|
||||||
|
|
||||||
|
### Installation Steps
|
||||||
|
|
||||||
|
1. **Backup original game files** (optional but recommended)
|
||||||
|
```
|
||||||
|
C:\apps\steam\steamapps\common\Homura Hime\
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Extract BepInEx to game directory**
|
||||||
|
```
|
||||||
|
Extract BepInEx_x64_5.4.x.zip contents to:
|
||||||
|
C:\apps\steam\steamapps\common\Homura Hime\
|
||||||
|
```
|
||||||
|
|
||||||
|
After extraction, you should have:
|
||||||
|
```
|
||||||
|
Homura Hime\
|
||||||
|
├── BepInEx\
|
||||||
|
├── HomuraHime.exe
|
||||||
|
├── HomuraHime_Data\
|
||||||
|
└── winhttp.dll (BepInEx loader)
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Run game once to generate configs**
|
||||||
|
```
|
||||||
|
Launch HomuraHime via Steam
|
||||||
|
Let it run for ~10 seconds until main menu appears
|
||||||
|
Close game
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Verify installation**
|
||||||
|
```
|
||||||
|
Check for: BepInEx\LogOutput.log
|
||||||
|
Check for: BepInEx\config\
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Tool 2: FMOD Studio 2.02.x (Audio Bank Editor)
|
||||||
|
|
||||||
|
### What It Does
|
||||||
|
Allows editing of FMOD bank files (.bank) to modify audio events, voice limits, ducking, and enemy cue sounds.
|
||||||
|
|
||||||
|
### Download
|
||||||
|
```
|
||||||
|
https://fmod.com/studio
|
||||||
|
```
|
||||||
|
- Click "Download" → "FMOD Studio" (Windows)
|
||||||
|
- **Free for non-commercial use** (per FMOD licensing)
|
||||||
|
- You will need to create an account
|
||||||
|
|
||||||
|
### Installation Steps
|
||||||
|
|
||||||
|
1. **Run the FMOD Studio installer**
|
||||||
|
```
|
||||||
|
fmod_studio_installer_2.02.x.exe
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Choose installation location**
|
||||||
|
```
|
||||||
|
Recommended: C:\Program Files\FMOD Studio\
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Launch FMOD Studio**
|
||||||
|
```
|
||||||
|
Start Menu → FMOD Studio 2.02
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Verify installation**
|
||||||
|
```
|
||||||
|
Help → About FMOD Studio
|
||||||
|
Should show version 2.02.x
|
||||||
|
```
|
||||||
|
|
||||||
|
### Important Notes
|
||||||
|
- HomuraHime uses **FMOD Studio 2.02.x** - using a different major version may cause compatibility issues
|
||||||
|
- The game uses FMOD **Desktop** banks (not iOS/Android)
|
||||||
|
- Banks are located at: `HomuraHime_Data\StreamingAssets\FMOD\Desktop\`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Tool 3: AssetRipper (Asset Extraction)
|
||||||
|
|
||||||
|
### What It Does
|
||||||
|
Extracts game assets from Unity games, including FMOD bank files for editing.
|
||||||
|
|
||||||
|
### Download
|
||||||
|
```
|
||||||
|
https://github.com/sRcAss/AssetRipper/releases
|
||||||
|
```
|
||||||
|
- Download: **AssetRipper_x.x.xx.zip** (latest)
|
||||||
|
- File size: ~100 MB
|
||||||
|
|
||||||
|
### Installation Steps
|
||||||
|
|
||||||
|
1. **Extract to tools directory**
|
||||||
|
```
|
||||||
|
Extract to: C:\projects\HomuraHime-Mods\tools\AssetRipper\
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Launch AssetRipper**
|
||||||
|
```
|
||||||
|
AssetRipper.exe
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **No installation needed** - it's a standalone executable
|
||||||
|
|
||||||
|
### Verify Installation
|
||||||
|
```
|
||||||
|
Run AssetRipper.exe - should open GUI without errors
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Tool 4: ILSpy (.NET Decompiler)
|
||||||
|
|
||||||
|
### What It Does
|
||||||
|
Decompiles .NET assemblies (DLLs) to C# code for analysis. Used to find audio hook points.
|
||||||
|
|
||||||
|
### Download
|
||||||
|
```
|
||||||
|
https://github.com/icsharpcode/ILSpy/releases
|
||||||
|
```
|
||||||
|
- Download: **ILSpy_x.x.x.zip** or **ILSpy_4_0.msi** (installer)
|
||||||
|
- Or use: **ILSpyCmd** (command-line version)
|
||||||
|
|
||||||
|
### Installation Steps (GUI Version)
|
||||||
|
|
||||||
|
1. **Extract to tools directory**
|
||||||
|
```
|
||||||
|
Extract to: C:\projects\HomuraHime-Mods\tools\ILSpy\
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Launch ILSpy**
|
||||||
|
```
|
||||||
|
ILSpy.exe
|
||||||
|
```
|
||||||
|
|
||||||
|
### Installation Steps (VS Code Extension - Alternative)
|
||||||
|
|
||||||
|
1. **In VS Code, press Ctrl+Shift+X**
|
||||||
|
2. **Search "ILSpy"**
|
||||||
|
3. **Install "ILSpy for Visual Studio Code"**
|
||||||
|
|
||||||
|
### Verify Installation
|
||||||
|
```
|
||||||
|
Run ILSpy.exe - should open GUI
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Tool 5: Unity 2022.3.x (Optional - Script Compilation)
|
||||||
|
|
||||||
|
### What It Does
|
||||||
|
Required only if you need to compile modified C# scripts. Most audio patches can be done via BepInEx without Unity.
|
||||||
|
|
||||||
|
### Download
|
||||||
|
```
|
||||||
|
https://unity.com/download
|
||||||
|
```
|
||||||
|
- Choose: "Unity 2022.3 LTS"
|
||||||
|
- Or: https://unity.com/releases/editor/whats-new/2022.3
|
||||||
|
|
||||||
|
### Installation Steps
|
||||||
|
|
||||||
|
1. **Run Unity Hub installer**
|
||||||
|
```
|
||||||
|
UnityHubSetup.exe
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Install with these components**
|
||||||
|
- Unity 2022.3.x
|
||||||
|
- Microsoft Visual Studio Community (for scripting)
|
||||||
|
- Android Build Support (optional)
|
||||||
|
|
||||||
|
3. **Activation**
|
||||||
|
- Use free personal license
|
||||||
|
|
||||||
|
### Is This Required?
|
||||||
|
**Probably NOT** for audio mods. You likely only need this if:
|
||||||
|
- You want to recompile modified game scripts
|
||||||
|
- You need to understand game structure deeply
|
||||||
|
- BepInEx patches require compilation
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Project Directory Structure
|
||||||
|
|
||||||
|
After completing Phase 1, your project should look like:
|
||||||
|
|
||||||
|
```
|
||||||
|
C:\projects\HomuraHime-Mods\
|
||||||
|
├── .beads/ (beads issue tracker)
|
||||||
|
├── .git/ (git repository)
|
||||||
|
├── AGENTS.md (agent instructions)
|
||||||
|
├── docs/
|
||||||
|
│ ├── SETUP_PHASE1.md (this file)
|
||||||
|
│ ├── AUDIO_ANALYSIS.md (from explore agent)
|
||||||
|
│ └── (future phase docs)
|
||||||
|
├── tools/
|
||||||
|
│ ├── BepInEx/ (installed in game folder)
|
||||||
|
│ ├── FMOD/ (installed via installer)
|
||||||
|
│ ├── AssetRipper/
|
||||||
|
│ │ └── AssetRipper.exe
|
||||||
|
│ └── ILSpy/
|
||||||
|
│ └── ILSpy.exe
|
||||||
|
└── src/ (future: mod source code)
|
||||||
|
└── HomuraHimeAudioMod/
|
||||||
|
```
|
||||||
|
|
||||||
|
And your game folder:
|
||||||
|
|
||||||
|
```
|
||||||
|
C:\apps\steam\steamapps\common\Homura Hime\
|
||||||
|
├── BepInEx\ (NEW - BepInEx framework)
|
||||||
|
├── HomuraHime.exe
|
||||||
|
├── HomuraHime_Data\
|
||||||
|
│ ├── Managed\
|
||||||
|
│ │ └── (original DLLs)
|
||||||
|
│ └── StreamingAssets\
|
||||||
|
│ └── FMOD\
|
||||||
|
│ └── Desktop\
|
||||||
|
│ ├── SFX.bank
|
||||||
|
│ ├── Ambience.bank
|
||||||
|
│ └── (other banks)
|
||||||
|
├── winhttp.dll (NEW - BepInEx loader)
|
||||||
|
└── (other game files)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Verification Checklist
|
||||||
|
|
||||||
|
After Phase 1 installation, verify each tool:
|
||||||
|
|
||||||
|
| Tool | Verification | Expected Result |
|
||||||
|
|------|--------------|-----------------|
|
||||||
|
| BepInEx | Check `BepInEx\LogOutput.log` | Log file exists after game runs |
|
||||||
|
| FMOD Studio | Launch app | Opens without errors, shows version 2.02.x |
|
||||||
|
| AssetRipper | Launch `AssetRipper.exe` | GUI opens |
|
||||||
|
| ILSpy | Launch `ILSpy.exe` | GUI opens with tree view |
|
||||||
|
| Unity 2022.3 | Launch Unity Hub | Lists 2022.3.x as available |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Next Steps
|
||||||
|
|
||||||
|
After completing Phase 1:
|
||||||
|
- Proceed to **Phase 2: Code Analysis**
|
||||||
|
- Use ILSpy to decompile and analyze audio classes
|
||||||
|
- Document voice limits and hook points
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Phase 1 Issues
|
||||||
|
|
||||||
|
| Issue ID | Status |
|
||||||
|
|----------|--------|
|
||||||
|
| HomuraHime-Mods-9ji | In Progress |
|
||||||
33
src/HomuraHimeAudioMod/HomuraHimeAudioMod.csproj
Normal file
33
src/HomuraHimeAudioMod/HomuraHimeAudioMod.csproj
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net48</TargetFramework>
|
||||||
|
<AssemblyName>HomuraHimeAudioMod</AssemblyName>
|
||||||
|
<RootNamespace>HomuraHimeAudioMod</RootNamespace>
|
||||||
|
<Version>1.0.0</Version>
|
||||||
|
<Authors>Ed</Authors>
|
||||||
|
<Description>Audio improvements mod for HomuraHime - fixes glitches and improves enemy indicators</Description>
|
||||||
|
<GameAssemblyPath>C:\apps\steam\steamapps\common\Homura Hime\HomuraHime_Data\Managed</GameAssemblyPath>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="0Harmony" Version="2.2.2" />
|
||||||
|
<PackageReference Include="BepInEx" Version="5.4.21" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="FMODUnity">
|
||||||
|
<HintPath>$(GameAssemblyPath)\FMODUnity.dll</HintPath>
|
||||||
|
<Private>false</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="UnityEngine.AudioModule">
|
||||||
|
<HintPath>$(GameAssemblyPath)\UnityEngine.AudioModule.dll</HintPath>
|
||||||
|
<Private>false</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Assembly-CSharp">
|
||||||
|
<HintPath>$(GameAssemblyPath)\Assembly-CSharp.dll</HintPath>
|
||||||
|
<Private>false</Private>
|
||||||
|
</Reference>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
19
src/HomuraHimeAudioMod/Patches/AudioDuckingPatch.cs
Normal file
19
src/HomuraHimeAudioMod/Patches/AudioDuckingPatch.cs
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
using HarmonyLib;
|
||||||
|
|
||||||
|
namespace HomuraHimeAudioMod.Patches
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Patches for audio ducking system improvements.
|
||||||
|
/// TO BE IMPLEMENTED AFTER PHASE 2 CODE ANALYSIS
|
||||||
|
/// </summary>
|
||||||
|
public class AudioDuckingPatch
|
||||||
|
{
|
||||||
|
public static void Apply(ref Harmony harmony)
|
||||||
|
{
|
||||||
|
// TODO: After Phase 2, implement patches for:
|
||||||
|
// - Improve ducking fade times
|
||||||
|
// - Adjust duck amounts for combat
|
||||||
|
// - Add custom ducking rules
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
19
src/HomuraHimeAudioMod/Patches/EnemyAudioPatch.cs
Normal file
19
src/HomuraHimeAudioMod/Patches/EnemyAudioPatch.cs
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
using HarmonyLib;
|
||||||
|
|
||||||
|
namespace HomuraHimeAudioMod.Patches
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Patches for enemy behavior audio indicator improvements.
|
||||||
|
/// TO BE IMPLEMENTED AFTER PHASE 2 CODE ANALYSIS
|
||||||
|
/// </summary>
|
||||||
|
public class EnemyAudioPatch
|
||||||
|
{
|
||||||
|
public static void Apply(ref Harmony harmony)
|
||||||
|
{
|
||||||
|
// TODO: After Phase 2, implement patches for:
|
||||||
|
// - Boost enemy indicator volumes
|
||||||
|
// - Improve state change audio cues
|
||||||
|
// - Add debug logging for enemy audio
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
19
src/HomuraHimeAudioMod/Patches/VoiceManagerPatch.cs
Normal file
19
src/HomuraHimeAudioMod/Patches/VoiceManagerPatch.cs
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
using HarmonyLib;
|
||||||
|
|
||||||
|
namespace HomuraHimeAudioMod.Patches
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Patches for voice limit and voice manager improvements.
|
||||||
|
/// TO BE IMPLEMENTED AFTER PHASE 2 CODE ANALYSIS
|
||||||
|
/// </summary>
|
||||||
|
public class VoiceManagerPatch
|
||||||
|
{
|
||||||
|
public static void Apply(ref Harmony harmony)
|
||||||
|
{
|
||||||
|
// TODO: After Phase 2, implement patches for:
|
||||||
|
// - Increase max voice count
|
||||||
|
// - Improve voice stealing behavior
|
||||||
|
// - Adjust pooling sizes
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
47
src/HomuraHimeAudioMod/Plugin.cs
Normal file
47
src/HomuraHimeAudioMod/Plugin.cs
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
using BepInEx;
|
||||||
|
using BepInEx.Logging;
|
||||||
|
using HarmonyLib;
|
||||||
|
|
||||||
|
namespace HomuraHimeAudioMod
|
||||||
|
{
|
||||||
|
[BepInPlugin(PluginInfo.PLUGIN_GUID, PluginInfo.PLUGIN_NAME, PluginInfo.PLUGIN_VERSION)]
|
||||||
|
public class Plugin : BaseUnityPlugin
|
||||||
|
{
|
||||||
|
public const string PLUGIN_GUID = "com.homurahime.audiomod";
|
||||||
|
public const string PLUGIN_NAME = "HomuraHime Audio Mod";
|
||||||
|
public const string PLUGIN_VERSION = "1.0.0";
|
||||||
|
|
||||||
|
private static Plugin instance;
|
||||||
|
private static ManualLogSource logger;
|
||||||
|
private Harmony harmony;
|
||||||
|
|
||||||
|
public static ManualLogSource Log => logger;
|
||||||
|
|
||||||
|
private void Awake()
|
||||||
|
{
|
||||||
|
instance = this;
|
||||||
|
logger = Logger;
|
||||||
|
|
||||||
|
harmony = new Harmony(PluginInfo.PLUGIN_GUID);
|
||||||
|
|
||||||
|
ApplyPatches();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ApplyPatches()
|
||||||
|
{
|
||||||
|
Log.LogInfo($"Applying audio patches...");
|
||||||
|
|
||||||
|
// Phase 2 will populate these patch classes after code analysis
|
||||||
|
// VoiceManagerPatch.Apply(ref harmony);
|
||||||
|
// AudioDuckingPatch.Apply(ref harmony);
|
||||||
|
// EnemyAudioPatch.Apply(ref harmony);
|
||||||
|
|
||||||
|
Log.LogInfo($"Patches applied successfully");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnDestroy()
|
||||||
|
{
|
||||||
|
harmony?.UnpatchAll();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
19
src/HomuraHimeAudioMod/Properties/AssemblyInfo.cs
Normal file
19
src/HomuraHimeAudioMod/Properties/AssemblyInfo.cs
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
[assembly: AssemblyTitle("HomuraHimeAudioMod")]
|
||||||
|
[assembly: AssemblyDescription("Audio improvements mod for HomuraHime")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("HomuraHimeAudioMod")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © 2026")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
[assembly: Guid("xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")]
|
||||||
|
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||||
Reference in New Issue
Block a user