/DragonbornSpeaksNaturally

SkyrimVR mod for dialogue and other voice control

Primary LanguageC++MIT LicenseMIT

Dragonborn Speaks Naturally (NexusMods)

DSN is composed of two projects, a plugin and a background service.

The dsn_plugin is a DLL written in C++ which hooks into SkyrimVR/SE and communicates with the background service.

The background service dsn_service is a Windows application written in C# which uses Microsoft's System.Speech API to do speech recognition. It communicates with the dsn_plugin over stdin/stdout.

Build dsn_service only

You need a Visual Studio with .NET Desktop Development modules.

Then enter dsn_service directory and double-click dsn_service.sln, a Visual Studio C# project will be loaded.

Build dsn_plugin only

You need a Visual Studio (with C++ Desktop Development module) and a CMake.

Then enter dsn_plugin directory and double-click configure.bat, a Visual Studio project will be created by Cmake and loaded automatically.

Auto install dlls to game directory after building

When you run configure.bat for the first time, you are asked about the installation path of SkyrimVR and SkyrimSE. If you want to enable the automatic installation feature, please provide the root directory of your games. If you want to disable the installation, just press Enter.

An example:

Set plugin install directories after building:
SkyrimVR game root path (empty to disable installation): E:/Games/SteamLibrary/steamapps/common/SkyrimVR
SkyrimSE game root path (empty to disable installation): E:/Games/SteamLibrary/steamapps/common/Skyrim Special Edition
CMakeFlags: -DSVR_DIR="E:/Games/SteamLibrary/steamapps/common/SkyrimVR" -DSSE_DIR="E:/Games/SteamLibrary/steamapps/common/Skyrim Special Edition"

And these commands will be execute for the example:

md build
cd build
cmake -A x64 -DSVR_DIR="E:/Games/SteamLibrary/steamapps/common/SkyrimVR" -DSSE_DIR="E:/Games/SteamLibrary/steamapps/common/Skyrim Special Edition" ..
start dsn_plugin.sln

A file named install-path.ini will be created after the first running of configure.bat. You can delete it and run configure.bat again to reset the path, or edit it directly.

How the auto installation works

The installation will be triggered each time you build dsn_plugin_xx.

Notice: The Visual Studio project INSTALL is generated by CMake for the project PACKAGE which is used to generate a FOMod/NMM/Vortex Compatible ZIP MOD file. It will only copy files into the build/package_tmp directory. It is different from the auto install mentioned here.

Directory structure of dsn_plugin

name description
dsn_plugin/ The code of the plugin itself.
sse/ The SKSE64 codes for linking to dsn_plugin to generate a SkyrimSE-compatible DLL.
svr/ The SKSEVR codes for linking to dsn_plugin to generate a SkyrimVR-compatible DLL.
CMakeLists.txt A project description file used by the CMake build tool.
configure.bat A script to create a Visual Studio project in the build directory via CMake and load it.
build/ After you run configure.bat, the directory will be created automatically to hold the Visual Studio project and all build outputs. You can delete this directory at any time and re-run configure.bat to generate it. Files in this directory should not be commited to the repository.

About Visual Studio project dsn_plugin_se and dsn_plugin_vr

They are the same directory and have the same codes. Modifying the code in one place is equivalent to modifying the other.

The only difference between the two is that they linked to different SKSE libraries and header files.

Build dsn_service and dsn_plugin at the same time

Double-click configure.bat in the root directory of the repo, a Visual Studio project will be created by Cmake and loaded automatically.

Generate FOMod/NMM/Vortex Compatible ZIP Package

You can build the Visual Studio project PACKAGE to Generate a ZIP Package for dsn_service and dsn_plugin.

A fomod directory will be added to so the ZIP can be installed via NMM and Vortex.

The package name will be build/DSN-0.1.1-win64.zip.

Cannot build dsn_service because some assemblies missing

3>------ Build started: Project: dsn_service, Configuration: Debug x64 ------
3>C:\work\DragonbornSpeaksNaturally\dsn_service\dsn_service\CommandList.cs(1,7,1,16): error CS0246: The type or namespace name 'IniParser' could not be found (are you missing a using directive or an assembly reference?)
3>C:\work\DragonbornSpeaksNaturally\dsn_service\dsn_service\Configuration.cs(64,24,64,31): error CS0246: The type or namespace name 'IniData' could not be found (are you missing a using directive or an assembly reference?)
...

For technical reasons, CMake can't automatically restore the NuGet package and update references for project dsn_service.

If you met assembly missing, please restore and reinstall NuGet packages manually:

  1. open NuGet Package Manager Console first:

    Tools > NuGet Package Manager > Package Manager Console

  2. A prompt box will appear:

    Some NuGet packages are missing from this solution. Click to restore from your online package sources.

    Click the restore button. If you can't find it, just skip this step. The restore may be finished automatically.

  3. Run this command in your NuGet Package Manager Console:

    Update-Package -reinstall -projectname dsn_service
  4. Then you can build dsn_service normally.

License

We have a MIT License. Any reasonable exploitation of this project is welcome, including commercial use and porting to other games.

Except: The SKSE source code embedded in this project (in the dsn_plugin/sae|sse|svr dir) is not suitable for the MIT license. Please refer to the SKSE official website for understand the licensing policies for these codes.