diff --git a/.gitignore b/.gitignore
index 1e43778f..f8e4963b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -55,6 +55,12 @@ dkms.conf
# macOS files
*.DS_Store
+# Doom 64 EX Plus Installer specific
+/Setup/Setup-cache/part*/*.cab
+/Setup/Setup-cache/part*/*.ini
+/Setup/Setup-cache/*.txt
+/Setup/Setup-SetupFiles/Doom64EX+ Setup.msi
+
# Doom 64 EX Plus specific
/Windows/.vs
/Windows/Debug
diff --git a/Setup/Setup.aip b/Setup/Setup.aip
new file mode 100644
index 00000000..1277b859
--- /dev/null
+++ b/Setup/Setup.aip
@@ -0,0 +1,274 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Setup/Setup.aiproj b/Setup/Setup.aiproj
new file mode 100644
index 00000000..cfd61f32
--- /dev/null
+++ b/Setup/Setup.aiproj
@@ -0,0 +1,45 @@
+
+
+ All
+ 2.0
+ d41c0e6b-1723-4f6b-a0db-31dd5716efe1
+ msi
+ .
+ Setup.aip
+
+
+ .
+ True
+ Setup
+ Setup
+ Setup
+
+
+
+
+
+
+ Code
+
+
+
+
+ DOOM64EX+
+ {f7595469-0b54-4529-b8fd-b73f4c061494}
+ True
+ PrimaryOutput
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Windows/Doom64EX+.sln b/Windows/Doom64EX+.sln
index b1020f85..58257400 100644
--- a/Windows/Doom64EX+.sln
+++ b/Windows/Doom64EX+.sln
@@ -1,25 +1,31 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 17
-VisualStudioVersion = 17.3.32922.545
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DOOM64EX+", "Doom64EX+.vcxproj", "{F7595469-0B54-4529-B8FD-B73F4C061494}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|x64 = Debug|x64
- Release|x64 = Release|x64
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {F7595469-0B54-4529-B8FD-B73F4C061494}.Debug|x64.ActiveCfg = Debug|x64
- {F7595469-0B54-4529-B8FD-B73F4C061494}.Debug|x64.Build.0 = Debug|x64
- {F7595469-0B54-4529-B8FD-B73F4C061494}.Release|x64.ActiveCfg = Release|x64
- {F7595469-0B54-4529-B8FD-B73F4C061494}.Release|x64.Build.0 = Release|x64
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {6227342B-C02B-417F-B294-016009A22D7F}
- EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.3.32922.545
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DOOM64EX+", "Doom64EX+.vcxproj", "{F7595469-0B54-4529-B8FD-B73F4C061494}"
+EndProject
+Project("{840C416C-B8F3-42BC-B0DD-F6BB14C9F8CB}") = "Setup", "..\Setup\Setup.aiproj", "{D41C0E6B-1723-4F6B-A0DB-31DD5716EFE1}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|x64 = Debug|x64
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {F7595469-0B54-4529-B8FD-B73F4C061494}.Debug|x64.ActiveCfg = Debug|x64
+ {F7595469-0B54-4529-B8FD-B73F4C061494}.Debug|x64.Build.0 = Debug|x64
+ {F7595469-0B54-4529-B8FD-B73F4C061494}.Release|x64.ActiveCfg = Release|x64
+ {F7595469-0B54-4529-B8FD-B73F4C061494}.Release|x64.Build.0 = Release|x64
+ {D41C0E6B-1723-4F6B-A0DB-31DD5716EFE1}.Debug|x64.ActiveCfg = Build
+ {D41C0E6B-1723-4F6B-A0DB-31DD5716EFE1}.Debug|x64.Build.0 = Build
+ {D41C0E6B-1723-4F6B-A0DB-31DD5716EFE1}.Release|x64.ActiveCfg = Build
+ {D41C0E6B-1723-4F6B-A0DB-31DD5716EFE1}.Release|x64.Build.0 = Build
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {6227342B-C02B-417F-B294-016009A22D7F}
+ EndGlobalSection
+EndGlobal
diff --git a/Windows/Doom64EX+.vcxproj b/Windows/Doom64EX+.vcxproj
index 6de81b00..3ab5f1f1 100644
--- a/Windows/Doom64EX+.vcxproj
+++ b/Windows/Doom64EX+.vcxproj
@@ -1,335 +1,336 @@
-
-
-
-
- Debug
- Win32
-
-
- Release
- Win32
-
-
- Debug
- x64
-
-
- Release
- x64
-
-
-
- 16.0
- Win32Proj
- {f7595469-0b54-4529-b8fd-b73f4c061494}
- Doom64EX+
- 10.0
- DOOM64EX+
-
-
-
- Application
- true
- v143
- Unicode
-
-
- Application
- false
- v143
- true
- Unicode
-
-
- Application
- true
- v143
- Unicode
-
-
- Application
- false
- v143
- true
- Unicode
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- false
-
-
-
- Level3
- true
- WIN32;_DEBUG;_CONSOLE;WIN32_LEAN_AND_MEAN;WINDOWS;_WIN32;USE_XINPUT;_CRT_SECURE_NO_WARNINGS;USESYSCONSOLE;%(PreprocessorDefinitions)
- true
- $(ProjectDir)..\src\engine\3rdparty\Includes
-
-
- Console
- true
- $(ProjectDir)..\src\engine\3rdparty\Libs\x86
- opengl32.lib;glew32.lib;libfluidsynth.lib;zlib.lib;libpng16.lib;SDL2main.lib;SDL2.lib;$(CoreLibraryDependencies);%(AdditionalDependencies)
-
-
-
-
- Level3
- true
- true
- true
- WIN32;NDEBUG;_CONSOLE;WIN32_LEAN_AND_MEAN;WINDOWS;_WIN32;USE_XINPUT;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
- true
- $(ProjectDir)..\src\engine\3rdparty\Includes
-
-
- Windows
- true
- true
- true
- $(ProjectDir)..\src\engine\3rdparty\Libs\x86
- opengl32.lib;glew32.lib;libfluidsynth.lib;zlib.lib;libpng16.lib;SDL2main.lib;SDL2.lib;$(CoreLibraryDependencies);%(AdditionalDependencies)
-
-
-
-
- Level3
- true
- _DEBUG;_CONSOLE;WIN32_LEAN_AND_MEAN;WINDOWS;_WIN32;USE_XINPUT;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
- true
- $(ProjectDir)..\src\engine\3rdparty\Includes
-
-
- Console
- true
- opengl32.lib;glew32.lib;bz2.lib;gio-2.0.lib;gmodule-2.0.lib;gobject-2.0.lib;gthread-2.0.lib;charset.lib;iconv.lib;libffi.lib;fluidsynth.lib;glib-2.0.lib;intl.lib;pcre2-8.lib;pcre2-16.lib;pcre2-32.lib;pcre2-posix.lib;zlib.lib;libpng16.lib;SDL3.lib;wsock32.lib;$(CoreLibraryDependencies);%(AdditionalDependencies)
- $(ProjectDir)..\src\engine\3rdparty\Libs\x64
- true
- true
-
-
-
-
- Level3
- true
- false
- true
- NDEBUG;_CONSOLE;WIN32_LEAN_AND_MEAN;WINDOWS;_WIN32;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
- true
- $(ProjectDir)..\src\engine\3rdparty\Includes
- false
- Disabled
- false
- stdcpp20
- stdc17
-
-
- Windows
- false
- false
- $(ProjectDir)..\src\engine\3rdparty\Libs\x64
- opengl32.lib;bz2.lib;gio-2.0.lib;gmodule-2.0.lib;gobject-2.0.lib;gthread-2.0.lib;charset.lib;iconv.lib;libffi.lib;fluidsynth.lib;glib-2.0.lib;intl.lib;pcre2-8.lib;pcre2-16.lib;pcre2-32.lib;pcre2-posix.lib;zlib.lib;libpng16.lib;SDL3.lib;wsock32.lib;$(CoreLibraryDependencies);%(AdditionalDependencies)
- NoErrorReport
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- false
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 16.0
+ Win32Proj
+ {f7595469-0b54-4529-b8fd-b73f4c061494}
+ Doom64EX+
+ 10.0
+ DOOM64EX+
+
+
+
+ Application
+ true
+ v143
+ Unicode
+
+
+ Application
+ false
+ v143
+ true
+ Unicode
+
+
+ Application
+ true
+ v143
+ Unicode
+
+
+ Application
+ false
+ v143
+ true
+ Unicode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+
+ Level3
+ true
+ WIN32;_DEBUG;_CONSOLE;WIN32_LEAN_AND_MEAN;WINDOWS;_WIN32;USE_XINPUT;_CRT_SECURE_NO_WARNINGS;USESYSCONSOLE;%(PreprocessorDefinitions)
+ true
+ $(ProjectDir)..\src\engine\3rdparty\Includes
+
+
+ Console
+ true
+ $(ProjectDir)..\src\engine\3rdparty\Libs\x86
+ opengl32.lib;glew32.lib;libfluidsynth.lib;zlib.lib;libpng16.lib;SDL2main.lib;SDL2.lib;$(CoreLibraryDependencies);%(AdditionalDependencies)
+
+
+
+
+ Level3
+ true
+ true
+ true
+ WIN32;NDEBUG;_CONSOLE;WIN32_LEAN_AND_MEAN;WINDOWS;_WIN32;USE_XINPUT;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ $(ProjectDir)..\src\engine\3rdparty\Includes
+
+
+ Windows
+ true
+ true
+ true
+ $(ProjectDir)..\src\engine\3rdparty\Libs\x86
+ opengl32.lib;glew32.lib;libfluidsynth.lib;zlib.lib;libpng16.lib;SDL2main.lib;SDL2.lib;$(CoreLibraryDependencies);%(AdditionalDependencies)
+
+
+
+
+ Level3
+ true
+ _DEBUG;_CONSOLE;WIN32_LEAN_AND_MEAN;WINDOWS;_WIN32;USE_XINPUT;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ $(ProjectDir)..\src\engine\3rdparty\Includes
+
+
+ Console
+ true
+ opengl32.lib;glew32.lib;bz2.lib;gio-2.0.lib;gmodule-2.0.lib;gobject-2.0.lib;gthread-2.0.lib;charset.lib;iconv.lib;libffi.lib;fluidsynth.lib;glib-2.0.lib;intl.lib;pcre2-8.lib;pcre2-16.lib;pcre2-32.lib;pcre2-posix.lib;zlib.lib;libpng16.lib;SDL3.lib;wsock32.lib;$(CoreLibraryDependencies);%(AdditionalDependencies)
+ $(ProjectDir)..\src\engine\3rdparty\Libs\x64
+ true
+ true
+
+
+
+
+ Level3
+ true
+ false
+ true
+ NDEBUG;_CONSOLE;WIN32_LEAN_AND_MEAN;WINDOWS;_WIN32;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ true
+ $(ProjectDir)..\src\engine\3rdparty\Includes
+ false
+ Disabled
+ false
+ stdcpp20
+ stdc17
+
+
+ Windows
+ false
+ false
+ $(ProjectDir)..\src\engine\3rdparty\Libs\x64
+ opengl32.lib;bz2.lib;gio-2.0.lib;gmodule-2.0.lib;gobject-2.0.lib;gthread-2.0.lib;charset.lib;iconv.lib;libffi.lib;fluidsynth.lib;glib-2.0.lib;intl.lib;pcre2-8.lib;pcre2-16.lib;pcre2-32.lib;pcre2-posix.lib;zlib.lib;libpng16.lib;SDL3.lib;wsock32.lib;$(CoreLibraryDependencies);%(AdditionalDependencies)
+ NoErrorReport
+ true
+ RequireAdministrator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file