kruillin-lab/VoiceMaster

successor to npcvoicemaster

C#

0

28 commits

updated Jul 8, 2026

See the code

README

VoiceMaster - Complete Build Package

What's Included

This is a complete, buildable VoiceMaster project with all dependencies:

VoiceMaster_Complete_With_Dependencies/
├── VoiceMaster.sln          ← Open this in Visual Studio
├── VoiceMaster/             ← Main plugin project
│   ├── VoiceMaster.csproj
│   ├── Plugin.cs
│   ├── Helper/
│   │   └── Addons/
│   │       ├── AddonTalkHelper.cs (NPC dialogue gating)
│   │       ├── AddonSelectStringHelper.cs (Player choices)
│   │       └── ...
│   └── ...
└── OtterGui/                ← UI dependency
    ├── OtterGui.csproj
    └── OtterGuiInternal/    ← UI internal dependency
        └── OtterGuiInternal.csproj

Building

  1. Open VoiceMaster.sln in Visual Studio 2022
  2. Right-click on Solution → Restore NuGet Packages
  3. Build → Build Solution (or press F6)
  4. Output: VoiceMaster\bin\x64\Release\VoiceMaster.dll

Option 2: Command Line

cd VoiceMaster_Complete_With_Dependencies
dotnet restore
dotnet build VoiceMaster.sln -c Release

Output will be in VoiceMaster\bin\x64\Release\

Installation

After building:

  1. Copy these files to %AppData%\XIVLauncher\devPlugins\VoiceMaster\:

    • VoiceMaster.dll
    • VoiceMaster.json
    • bass.dll (audio library)
  2. In FFXIV, type /xlplugins to open the plugin installer

  3. Click "Dev Tools" tab

  4. Scan for dev plugins or restart the game

Project Structure

VoiceMaster (Main Plugin)

Key Components:

  • Plugin.cs - Main entry point, plugin lifecycle
  • Helper/Addons/ - Dialogue gating core (from Echokraut)
    • AddonTalkHelper.cs - NPC dialogue (speak-on-change)
    • AddonSelectStringHelper.cs - Player choices (repeatable)
    • AddonCutSceneSelectStringHelper.cs - Cutscene choices
  • Backends/ - TTS backend integration (Alltalk)
  • Windows/ - UI windows (config, debug, etc.)
  • Helper/Functional/ - Core functionality
  • DataClasses/ - Data structures

OtterGui (Dependency)

UI utility library used by VoiceMaster for custom UI components like:

  • ClippedSelectableCombo<> - Dropdown selectors
  • Custom ImGui extensions
  • ImGui helper functions

Contains: OtterGuiInternal subdirectory (low-level ImGui wrappers)

Commands

Once loaded in-game:

  • /vm - Open main configuration
  • /vmtalk - Talk window TTS settings
  • /vmbtalk - Battle talk TTS settings
  • /vmbubble - Speech bubble TTS settings
  • /vmchat - Chat TTS settings

Dialogue Behavior (From Echokraut)

NPC Dialogue (AddonTalkHelper)

✅ Speaks once per unique dialogue
✅ No repeats on identical text
✅ Resets when Talk window closes
✅ Works in world and cutscenes

How it works:

private static AddonTalkState lastValue;

private void Mutate(AddonTalkState nextValue)
{
    if (lastValue.Equals(nextValue))
        return;  // Skip duplicate
    
    lastValue = nextValue;
    HandleChange(nextValue);
}

// Reset on window close
if (!visible && wasTalking)
{
    lastValue = new AddonTalkState();
}

Player Dialogue (SelectString Helpers)

✅ Always speaks when selected
✅ Fully repeatable (same choice can be reselected)
✅ Separate pipeline from NPC
✅ Works in regular + cutscene dialogues

How it works:

  • Fires on PreFinalize event (when player confirms selection)
  • No suppression logic
  • Every selection triggers speech

Troubleshooting

Build Errors

"OtterGui could not be found"

  • Make sure OtterGui folder is at the same level as VoiceMaster folder
  • Check that OtterGuiInternal is inside OtterGui folder
  • Verify VoiceMaster.csproj has: <ProjectReference Include="..\OtterGui\OtterGui.csproj" />

"Properties namespace does not exist"

  • Make sure Properties folder exists in VoiceMaster
  • Contains Resources.Designer.cs and Resources.resx
  • These are embedded resources for the plugin

Missing bass.dll

  • bass.dll is included in the VoiceMaster folder
  • It's an audio library for playback
  • Should auto-copy to output directory on build

Runtime Issues

Plugin doesn't load

  • Check Dalamud log: /xllog
  • Verify all DLL dependencies are in the plugin folder
  • Make sure you're using the dev plugin path

No TTS audio

  • Check if Alltalk backend is configured
  • Verify audio device settings
  • Check plugin configuration window: /vm

What Changed from Original Code

This is pure Echokraut with branding changes:

✅ Echokraut → VoiceMaster (all namespaces)
✅ /ekt → /vm (all commands)
✅ File names updated
✅ OtterGui properly integrated

Zero functional changes - dialogue gating is identical to proven Echokraut implementation.

Next Steps

To add features:

  1. Keep dialogue handlers (Helper/Addons/) unchanged
  2. Add new features in separate files/classes
  3. Hook into existing events if needed
  4. Test that dialogue gating remains intact

Recommended approach:

  • Don't modify AddonTalkHelper.cs
  • Don't modify SelectString helpers
  • Add new handlers for new features
  • Keep proven gating logic untouched

Credits

Based on Echokraut by Ren Nagasaki
Original: https://github.com/RenNagasaki/Echokraut
License: AGPL-3.0-or-later

OtterGui by Ottermandias
License: MIT

Support

For issues:

  1. Check build output for specific errors
  2. Verify folder structure matches above
  3. Ensure all dependencies are present
  4. Check Dalamud compatibility (Dalamud.NET.Sdk 14.0.0)

This package includes everything needed to build VoiceMaster successfully.

kruillin-lab/VoiceMaster

successor to npcvoicemaster

C#

0

28 commits

updated Jul 8, 2026

See the code

README

VoiceMaster - Complete Build Package

What's Included

This is a complete, buildable VoiceMaster project with all dependencies:

VoiceMaster_Complete_With_Dependencies/
├── VoiceMaster.sln          ← Open this in Visual Studio
├── VoiceMaster/             ← Main plugin project
│   ├── VoiceMaster.csproj
│   ├── Plugin.cs
│   ├── Helper/
│   │   └── Addons/
│   │       ├── AddonTalkHelper.cs (NPC dialogue gating)
│   │       ├── AddonSelectStringHelper.cs (Player choices)
│   │       └── ...
│   └── ...
└── OtterGui/                ← UI dependency
    ├── OtterGui.csproj
    └── OtterGuiInternal/    ← UI internal dependency
        └── OtterGuiInternal.csproj

Building

  1. Open VoiceMaster.sln in Visual Studio 2022
  2. Right-click on Solution → Restore NuGet Packages
  3. Build → Build Solution (or press F6)
  4. Output: VoiceMaster\bin\x64\Release\VoiceMaster.dll

Option 2: Command Line

cd VoiceMaster_Complete_With_Dependencies
dotnet restore
dotnet build VoiceMaster.sln -c Release

Output will be in VoiceMaster\bin\x64\Release\

Installation

After building:

  1. Copy these files to %AppData%\XIVLauncher\devPlugins\VoiceMaster\:

    • VoiceMaster.dll
    • VoiceMaster.json
    • bass.dll (audio library)
  2. In FFXIV, type /xlplugins to open the plugin installer

  3. Click "Dev Tools" tab

  4. Scan for dev plugins or restart the game

Project Structure

VoiceMaster (Main Plugin)

Key Components:

  • Plugin.cs - Main entry point, plugin lifecycle
  • Helper/Addons/ - Dialogue gating core (from Echokraut)
    • AddonTalkHelper.cs - NPC dialogue (speak-on-change)
    • AddonSelectStringHelper.cs - Player choices (repeatable)
    • AddonCutSceneSelectStringHelper.cs - Cutscene choices
  • Backends/ - TTS backend integration (Alltalk)
  • Windows/ - UI windows (config, debug, etc.)
  • Helper/Functional/ - Core functionality
  • DataClasses/ - Data structures

OtterGui (Dependency)

UI utility library used by VoiceMaster for custom UI components like:

  • ClippedSelectableCombo<> - Dropdown selectors
  • Custom ImGui extensions
  • ImGui helper functions

Contains: OtterGuiInternal subdirectory (low-level ImGui wrappers)

Commands

Once loaded in-game:

  • /vm - Open main configuration
  • /vmtalk - Talk window TTS settings
  • /vmbtalk - Battle talk TTS settings
  • /vmbubble - Speech bubble TTS settings
  • /vmchat - Chat TTS settings

Dialogue Behavior (From Echokraut)

NPC Dialogue (AddonTalkHelper)

✅ Speaks once per unique dialogue
✅ No repeats on identical text
✅ Resets when Talk window closes
✅ Works in world and cutscenes

How it works:

private static AddonTalkState lastValue;

private void Mutate(AddonTalkState nextValue)
{
    if (lastValue.Equals(nextValue))
        return;  // Skip duplicate
    
    lastValue = nextValue;
    HandleChange(nextValue);
}

// Reset on window close
if (!visible && wasTalking)
{
    lastValue = new AddonTalkState();
}

Player Dialogue (SelectString Helpers)

✅ Always speaks when selected
✅ Fully repeatable (same choice can be reselected)
✅ Separate pipeline from NPC
✅ Works in regular + cutscene dialogues

How it works:

  • Fires on PreFinalize event (when player confirms selection)
  • No suppression logic
  • Every selection triggers speech

Troubleshooting

Build Errors

"OtterGui could not be found"

  • Make sure OtterGui folder is at the same level as VoiceMaster folder
  • Check that OtterGuiInternal is inside OtterGui folder
  • Verify VoiceMaster.csproj has: <ProjectReference Include="..\OtterGui\OtterGui.csproj" />

"Properties namespace does not exist"

  • Make sure Properties folder exists in VoiceMaster
  • Contains Resources.Designer.cs and Resources.resx
  • These are embedded resources for the plugin

Missing bass.dll

  • bass.dll is included in the VoiceMaster folder
  • It's an audio library for playback
  • Should auto-copy to output directory on build

Runtime Issues

Plugin doesn't load

  • Check Dalamud log: /xllog
  • Verify all DLL dependencies are in the plugin folder
  • Make sure you're using the dev plugin path

No TTS audio

  • Check if Alltalk backend is configured
  • Verify audio device settings
  • Check plugin configuration window: /vm

What Changed from Original Code

This is pure Echokraut with branding changes:

✅ Echokraut → VoiceMaster (all namespaces)
✅ /ekt → /vm (all commands)
✅ File names updated
✅ OtterGui properly integrated

Zero functional changes - dialogue gating is identical to proven Echokraut implementation.

Next Steps

To add features:

  1. Keep dialogue handlers (Helper/Addons/) unchanged
  2. Add new features in separate files/classes
  3. Hook into existing events if needed
  4. Test that dialogue gating remains intact

Recommended approach:

  • Don't modify AddonTalkHelper.cs
  • Don't modify SelectString helpers
  • Add new handlers for new features
  • Keep proven gating logic untouched

Credits

Based on Echokraut by Ren Nagasaki
Original: https://github.com/RenNagasaki/Echokraut
License: AGPL-3.0-or-later

OtterGui by Ottermandias
License: MIT

Support

For issues:

  1. Check build output for specific errors
  2. Verify folder structure matches above
  3. Ensure all dependencies are present
  4. Check Dalamud compatibility (Dalamud.NET.Sdk 14.0.0)

This package includes everything needed to build VoiceMaster successfully.

Languages

C#

99.9%