diff --git a/Amalgam.vcxproj b/Amalgam.vcxproj
new file mode 100644
index 0000000..930ef94
--- /dev/null
+++ b/Amalgam.vcxproj
@@ -0,0 +1,1770 @@
+
+
+
+
+ DebugAVX2
+ Win32
+
+
+ DebugAVX2
+ x64
+
+
+ DebugFreetypeAVX2
+ Win32
+
+
+ DebugFreetypeAVX2
+ x64
+
+
+ DebugFreetype
+ Win32
+
+
+ DebugFreetype
+ x64
+
+
+ Debug
+ Win32
+
+
+ ReleaseAVX2
+ Win32
+
+
+ ReleaseAVX2
+ x64
+
+
+ ReleaseFreetypeAVX2
+ Win32
+
+
+ ReleaseFreetypeAVX2
+ x64
+
+
+ ReleaseFreetype
+ Win32
+
+
+ ReleaseFreetype
+ x64
+
+
+ ReleaseTextmodeAVX2
+ Win32
+
+
+ ReleaseTextmodeAVX2
+ x64
+
+
+ ReleaseTextmode
+ Win32
+
+
+ ReleaseTextmode
+ x64
+
+
+ Release
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 17.0
+ Win32Proj
+ {2550c133-72a8-4af7-b22a-a8012bd9f376}
+ Amalgam
+ 10.0
+
+
+
+ DynamicLibrary
+ true
+ v143
+ MultiByte
+ true
+
+
+ DynamicLibrary
+ true
+ v143
+ MultiByte
+ true
+
+
+ DynamicLibrary
+ true
+ v143
+ MultiByte
+ true
+
+
+ DynamicLibrary
+ true
+ v143
+ MultiByte
+ true
+
+
+ DynamicLibrary
+ false
+ v143
+ true
+ MultiByte
+
+
+ DynamicLibrary
+ false
+ v143
+ true
+ MultiByte
+
+
+ DynamicLibrary
+ false
+ v143
+ true
+ MultiByte
+
+
+ DynamicLibrary
+ false
+ v143
+ true
+ MultiByte
+
+
+ DynamicLibrary
+ false
+ v143
+ true
+ MultiByte
+
+
+ DynamicLibrary
+ false
+ v143
+ true
+ MultiByte
+
+
+ DynamicLibrary
+ true
+ v143
+ MultiByte
+ true
+
+
+ DynamicLibrary
+ true
+ v143
+ MultiByte
+ true
+
+
+ DynamicLibrary
+ true
+ v143
+ MultiByte
+ true
+
+
+ DynamicLibrary
+ true
+ v143
+ MultiByte
+ true
+
+
+ DynamicLibrary
+ false
+ v143
+ true
+ MultiByte
+
+
+ DynamicLibrary
+ false
+ v143
+ true
+ MultiByte
+
+
+ DynamicLibrary
+ false
+ v143
+ true
+ MultiByte
+
+
+ DynamicLibrary
+ false
+ v143
+ true
+ MultiByte
+
+
+ DynamicLibrary
+ false
+ v143
+ true
+ MultiByte
+
+
+ DynamicLibrary
+ false
+ v143
+ true
+ MultiByte
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(ProjectName)$(Platform)$(Configuration)
+ $(SolutionDir)build\$(Platform)\$(Configuration)\
+ $(ProjectDir)include\;$(IncludePath)
+ $(SolutionDir)output\$(Platform)\$(Configuration)\
+ false
+
+
+ $(ProjectName)$(Platform)$(Configuration)
+ $(SolutionDir)build\$(Platform)\$(Configuration)\
+ $(ProjectDir)include\;$(IncludePath)
+ $(SolutionDir)output\$(Platform)\$(Configuration)\
+ false
+
+
+ $(ProjectName)$(Platform)$(Configuration)
+ $(SolutionDir)build\$(Platform)\$(Configuration)\
+ $(ProjectDir)include\;$(IncludePath)
+ $(SolutionDir)output\$(Platform)\$(Configuration)\
+ false
+
+
+ $(ProjectName)$(Platform)$(Configuration)
+ $(SolutionDir)build\$(Platform)\$(Configuration)\
+ $(ProjectDir)include\;$(IncludePath)
+ $(SolutionDir)output\$(Platform)\$(Configuration)\
+ false
+
+
+ $(ProjectDir)include\;$(IncludePath)
+ $(SolutionDir)build\$(Platform)\$(Configuration)\
+ $(ProjectName)$(Platform)$(Configuration)
+ $(SolutionDir)output\$(Platform)\$(Configuration)\
+ false
+
+
+ $(ProjectDir)include\;$(IncludePath)
+ $(SolutionDir)build\$(Platform)\$(Configuration)\
+ $(ProjectName)$(Platform)$(Configuration)
+ $(SolutionDir)output\$(Platform)\$(Configuration)\
+
+
+ $(ProjectDir)include\;$(IncludePath)
+ $(SolutionDir)build\$(Platform)\$(Configuration)\
+ $(ProjectName)$(Platform)$(Configuration)
+ $(SolutionDir)output\$(Platform)\$(Configuration)\
+ false
+
+
+ $(ProjectDir)include\;$(IncludePath)
+ $(SolutionDir)build\$(Platform)\$(Configuration)\
+ $(ProjectName)$(Platform)$(Configuration)
+ $(SolutionDir)output\$(Platform)\$(Configuration)\
+ false
+
+
+ $(ProjectDir)include\;$(IncludePath)
+ $(SolutionDir)build\$(Platform)\$(Configuration)\
+ $(ProjectName)$(Platform)$(Configuration)
+ $(SolutionDir)output\$(Platform)\$(Configuration)\
+
+
+ $(ProjectDir)include\;$(IncludePath)
+ $(SolutionDir)build\$(Platform)\$(Configuration)\
+ $(ProjectName)$(Platform)$(Configuration)
+ $(SolutionDir)output\$(Platform)\$(Configuration)\
+ false
+
+
+ $(SolutionDir)output\$(Platform)\$(Configuration)\
+ $(SolutionDir)build\$(Platform)\$(Configuration)\
+ $(ProjectName)$(Platform)$(Configuration)
+ $(ProjectDir)include\;$(IncludePath)
+ $(VC_ExecutablePath_x64);$(CommonExecutablePath)
+ $(VC_ReferencesPath_x64);
+ $(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64)
+ $(CommonExcludePath);$(VC_ExecutablePath_x64);$(VC_LibraryPath_x64)
+ false
+
+
+ $(SolutionDir)output\$(Platform)\$(Configuration)\
+ $(SolutionDir)build\$(Platform)\$(Configuration)\
+ $(ProjectName)$(Platform)$(Configuration)
+ $(ProjectDir)include\;$(IncludePath)
+ $(VC_ExecutablePath_x64);$(CommonExecutablePath)
+ $(VC_ReferencesPath_x64);
+ $(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64)
+ $(CommonExcludePath);$(VC_ExecutablePath_x64);$(VC_LibraryPath_x64)
+ false
+
+
+ $(SolutionDir)output\$(Platform)\$(Configuration)\
+ $(SolutionDir)build\$(Platform)\$(Configuration)\
+ $(ProjectName)$(Platform)$(Configuration)
+ $(ProjectDir)include\;$(IncludePath)
+ $(VC_ExecutablePath_x64);$(CommonExecutablePath)
+ $(VC_ReferencesPath_x64);
+ $(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64)
+ $(CommonExcludePath);$(VC_ExecutablePath_x64);$(VC_LibraryPath_x64)
+ false
+
+
+ $(SolutionDir)output\$(Platform)\$(Configuration)\
+ $(SolutionDir)build\$(Platform)\$(Configuration)\
+ $(ProjectName)$(Platform)$(Configuration)
+ $(ProjectDir)include\;$(IncludePath)
+ $(VC_ExecutablePath_x64);$(CommonExecutablePath)
+ $(VC_ReferencesPath_x64);
+ $(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64)
+ $(CommonExcludePath);$(VC_ExecutablePath_x64);$(VC_LibraryPath_x64)
+ false
+
+
+ $(SolutionDir)output\$(Platform)\$(Configuration)\
+ $(SolutionDir)build\$(Platform)\$(Configuration)\
+ $(ProjectName)$(Platform)$(Configuration)
+ $(ProjectDir)include\;$(IncludePath)
+ $(VC_ExecutablePath_x64);$(CommonExecutablePath)
+ $(VC_ReferencesPath_x64);
+ $(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64)
+ $(CommonExcludePath);$(VC_ExecutablePath_x64);$(VC_LibraryPath_x64)
+ false
+
+
+ $(SolutionDir)output\$(Platform)\$(Configuration)\
+ $(SolutionDir)build\$(Platform)\$(Configuration)\
+ $(ProjectName)$(Platform)$(Configuration)
+ $(ProjectDir)include\;$(IncludePath)
+ $(VC_ExecutablePath_x64);$(CommonExecutablePath)
+ $(VC_ReferencesPath_x64);
+ $(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64)
+ $(CommonExcludePath);$(VC_ExecutablePath_x64);$(VC_LibraryPath_x64)
+ false
+
+
+ $(SolutionDir)output\$(Platform)\$(Configuration)\
+ $(SolutionDir)build\$(Platform)\$(Configuration)\
+ $(ProjectName)$(Platform)$(Configuration)
+ $(ProjectDir)include\;$(IncludePath)
+ $(VC_ExecutablePath_x64);$(CommonExecutablePath)
+ $(VC_ReferencesPath_x64);
+ $(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64)
+ $(CommonExcludePath);$(VC_ExecutablePath_x64);$(VC_LibraryPath_x64)
+ false
+
+
+ $(SolutionDir)output\$(Platform)\$(Configuration)\
+ $(SolutionDir)build\$(Platform)\$(Configuration)\
+ $(ProjectName)$(Platform)$(Configuration)
+ $(ProjectDir)include\;$(IncludePath)
+ $(VC_ExecutablePath_x64);$(CommonExecutablePath)
+ $(VC_ReferencesPath_x64);
+ $(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64)
+ $(CommonExcludePath);$(VC_ExecutablePath_x64);$(VC_LibraryPath_x64)
+ false
+
+
+ $(SolutionDir)output\$(Platform)\$(Configuration)\
+ $(SolutionDir)build\$(Platform)\$(Configuration)\
+ $(ProjectName)$(Platform)$(Configuration)
+ $(ProjectDir)include\;$(IncludePath)
+ $(VC_ExecutablePath_x64);$(CommonExecutablePath)
+ $(VC_ReferencesPath_x64);
+ $(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64)
+ $(CommonExcludePath);$(VC_ExecutablePath_x64);$(VC_LibraryPath_x64)
+ false
+
+
+ $(SolutionDir)output\$(Platform)\$(Configuration)\
+ $(SolutionDir)build\$(Platform)\$(Configuration)\
+ $(ProjectName)$(Platform)$(Configuration)
+ $(ProjectDir)include\;$(IncludePath)
+ $(VC_ExecutablePath_x64);$(CommonExecutablePath)
+ $(VC_ReferencesPath_x64);
+ $(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64)
+ $(CommonExcludePath);$(VC_ExecutablePath_x64);$(VC_LibraryPath_x64)
+ false
+
+
+
+ Level3
+ false
+ WIN32;_DEBUG;_CONSOLE;_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR;__CONFIGURATION__="Debug";__PLATFORM__="Win32";%(PreprocessorDefinitions)
+ true
+ stdcpp20
+ Default
+ true
+ MaxSpeed
+ Speed
+ true
+ true
+ true
+ NotSet
+
+ true
+ ProgramDatabase
+ MultiThreadedDLL
+
+
+ false
+
+
+ Console
+ true
+
+
+ true
+ true
+
+
+
+
+ Level3
+ false
+ WIN32;_DEBUG;_CONSOLE;_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR;IMGUI_ENABLE_FREETYPE;AMALGAM_CUSTOM_FONTS;__CONFIGURATION__="DebugFreetype";__PLATFORM__="Win32";%(PreprocessorDefinitions)
+ true
+ stdcpp20
+ Default
+ true
+ MaxSpeed
+ Speed
+ true
+ true
+ true
+ NotSet
+
+
+ true
+ ProgramDatabase
+ MultiThreadedDLL
+
+
+ false
+
+
+ Console
+ true
+
+
+ true
+ true
+
+
+
+
+ Level3
+ false
+ WIN32;_DEBUG;_CONSOLE;_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR;__CONFIGURATION__="DebugAVX2";__PLATFORM__="Win32";%(PreprocessorDefinitions)
+ true
+ stdcpp20
+ Default
+ true
+ MaxSpeed
+ Speed
+ true
+ true
+ true
+ AdvancedVectorExtensions2
+
+
+ true
+ ProgramDatabase
+ MultiThreadedDLL
+
+
+ false
+
+
+ Console
+ true
+
+
+ true
+ true
+
+
+
+
+ Level3
+ false
+ WIN32;_DEBUG;_CONSOLE;_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR;IMGUI_ENABLE_FREETYPE;AMALGAM_CUSTOM_FONTS;__CONFIGURATION__="DebugFreetypeAVX2";__PLATFORM__="Win32";%(PreprocessorDefinitions)
+ true
+ stdcpp20
+ Default
+ true
+ MaxSpeed
+ Speed
+ true
+ true
+ true
+ AdvancedVectorExtensions2
+
+
+ true
+ ProgramDatabase
+ MultiThreadedDLL
+
+
+ false
+
+
+ Console
+ true
+
+
+ true
+ true
+
+
+
+
+ Level3
+ true
+ true
+ false
+ WIN32;NDEBUG;_CONSOLE;_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR;__CONFIGURATION__="Release";__PLATFORM__="Win32";%(PreprocessorDefinitions)
+ true
+ stdcpp20
+ true
+ Speed
+ true
+ NotSet
+
+ false
+ ProgramDatabase
+ MultiThreadedDLL
+
+
+
+
+ Console
+ true
+ true
+ true
+
+
+
+
+
+
+ Level3
+ true
+ true
+ false
+ WIN32;TEXTMODE;NDEBUG;_CONSOLE;_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR;__CONFIGURATION__="ReleaseTextmode";__PLATFORM__="Win32";%(PreprocessorDefinitions)
+ true
+ stdcpp20
+ true
+ Speed
+ true
+ NotSet
+
+
+ false
+ ProgramDatabase
+
+
+ Console
+ true
+ true
+ true
+
+
+
+
+
+
+ Level3
+ true
+ true
+ false
+ WIN32;NDEBUG;_CONSOLE;_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR;IMGUI_ENABLE_FREETYPE;AMALGAM_CUSTOM_FONTS;__CONFIGURATION__="ReleaseFreetype";__PLATFORM__="Win32";%(PreprocessorDefinitions)
+ true
+ stdcpp20
+ true
+ Speed
+ true
+ NotSet
+
+
+ false
+ ProgramDatabase
+ MultiThreadedDLL
+
+
+
+
+ Console
+ true
+ true
+ true
+
+
+
+
+
+
+ Level3
+ true
+ true
+ false
+ WIN32;NDEBUG;_CONSOLE;_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR;__CONFIGURATION__="ReleaseAVX2";__PLATFORM__="Win32";%(PreprocessorDefinitions)
+ true
+ stdcpp20
+ true
+ Speed
+ true
+ AdvancedVectorExtensions2
+
+
+ false
+ ProgramDatabase
+ MultiThreadedDLL
+
+
+
+
+ Console
+ true
+ true
+ true
+
+
+
+
+
+
+ Level3
+ true
+ true
+ false
+ WIN32;TEXTMODE;NDEBUG;_CONSOLE;_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR;__CONFIGURATION__="ReleaseTextmodeAVX2";__PLATFORM__="Win32";%(PreprocessorDefinitions)
+ true
+ stdcpp20
+ true
+ Speed
+ true
+ AdvancedVectorExtensions2
+
+
+ false
+ ProgramDatabase
+
+
+ Console
+ true
+ true
+ true
+
+
+
+
+
+
+ Level3
+ true
+ true
+ false
+ WIN32;NDEBUG;_CONSOLE;_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR;IMGUI_ENABLE_FREETYPE;AMALGAM_CUSTOM_FONTS;__CONFIGURATION__="ReleaseFreetypeAVX2";__PLATFORM__="Win32";%(PreprocessorDefinitions)
+ true
+ stdcpp20
+ true
+ Speed
+ true
+ AdvancedVectorExtensions2
+
+
+ false
+ ProgramDatabase
+ MultiThreadedDLL
+
+
+
+
+ Console
+ true
+ true
+ true
+
+
+
+
+
+
+ Level3
+ false
+ WIN32;_DEBUG;_CONSOLE;_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR;__CONFIGURATION__="Debug";__PLATFORM__="x64";%(PreprocessorDefinitions)
+ true
+ stdcpp20
+ true
+ Speed
+
+
+ true
+ MaxSpeed
+ true
+ Default
+ true
+ NotSet
+ true
+ ProgramDatabase
+
+
+ MultiThreadedDebugDLL
+ false
+
+
+ Console
+ true
+
+
+ true
+ true
+
+
+
+
+ Level3
+ false
+ WIN32;_DEBUG;_CONSOLE;_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR;IMGUI_ENABLE_FREETYPE;AMALGAM_CUSTOM_FONTS;__CONFIGURATION__="DebugFreetype";__PLATFORM__="x64";%(PreprocessorDefinitions)
+ true
+ stdcpp20
+ true
+ Speed
+
+
+ true
+ MaxSpeed
+ true
+ Default
+ true
+ NotSet
+ true
+ ProgramDatabase
+
+
+ MultiThreadedDebugDLL
+ false
+
+
+ Console
+ true
+
+
+ true
+ true
+
+
+
+
+ Level3
+ false
+ WIN32;_DEBUG;_CONSOLE;_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR;__CONFIGURATION__="DebugAVX2";__PLATFORM__="x64";%(PreprocessorDefinitions)
+ true
+ stdcpp20
+ true
+ Speed
+
+
+ true
+ MaxSpeed
+ true
+ Default
+ true
+ AdvancedVectorExtensions2
+ true
+ ProgramDatabase
+
+
+ MultiThreadedDebugDLL
+ false
+
+
+ Console
+ true
+
+
+ true
+ true
+
+
+
+
+ Level3
+ false
+ WIN32;_DEBUG;_CONSOLE;_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR;IMGUI_ENABLE_FREETYPE;AMALGAM_CUSTOM_FONTS;__CONFIGURATION__="DebugFreetypeAVX2";__PLATFORM__="x64";%(PreprocessorDefinitions)
+ true
+ stdcpp20
+ true
+ Speed
+
+
+ true
+ MaxSpeed
+ true
+ Default
+ true
+ AdvancedVectorExtensions2
+ true
+ ProgramDatabase
+
+
+ MultiThreadedDebugDLL
+ false
+
+
+ Console
+ true
+
+
+ true
+ true
+
+
+
+
+ Level3
+ true
+ true
+ false
+ WIN32;NDEBUG;_CONSOLE;_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR;__CONFIGURATION__="Release";__PLATFORM__="x64";%(PreprocessorDefinitions)
+ true
+ stdcpp20
+ true
+ Speed
+
+
+ true
+ NotSet
+ ProgramDatabase
+ false
+ MultiThreadedDLL
+
+
+
+
+ Console
+ true
+ true
+ true
+
+
+
+
+
+
+ Level3
+ true
+ true
+ false
+ WIN32;TEXTMODE;NDEBUG;_CONSOLE;_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR;__CONFIGURATION__="ReleaseTextmode";__PLATFORM__="x64";%(PreprocessorDefinitions)
+ true
+ stdcpp20
+ true
+ Speed
+
+
+ true
+ NotSet
+ ProgramDatabase
+ false
+
+
+ Console
+ true
+ true
+ true
+
+
+
+
+
+
+ Level3
+ true
+ true
+ false
+ WIN32;NDEBUG;_CONSOLE;_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR;IMGUI_ENABLE_FREETYPE;AMALGAM_CUSTOM_FONTS;__CONFIGURATION__="ReleaseFreetype";__PLATFORM__="x64";%(PreprocessorDefinitions)
+ true
+ stdcpp20
+ true
+ Speed
+
+
+ true
+ NotSet
+ ProgramDatabase
+ false
+ MultiThreadedDLL
+
+
+
+
+ Console
+ true
+ true
+ true
+
+
+
+
+
+
+ Level3
+ true
+ true
+ false
+ WIN32;NDEBUG;_CONSOLE;_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR;__CONFIGURATION__="ReleaseAVX2";__PLATFORM__="x64";%(PreprocessorDefinitions)
+ true
+ stdcpp20
+ true
+ Speed
+
+
+ true
+ AdvancedVectorExtensions2
+ ProgramDatabase
+ false
+ MultiThreadedDLL
+
+
+
+
+ Console
+ true
+ true
+ true
+
+
+
+
+
+
+ Level3
+ true
+ true
+ false
+ WIN32;TEXTMODE;NDEBUG;_CONSOLE;_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR;__CONFIGURATION__="ReleaseTextmodeAVX2";__PLATFORM__="x64";%(PreprocessorDefinitions)
+ true
+ stdcpp20
+ true
+ Speed
+
+
+ true
+ AdvancedVectorExtensions2
+ ProgramDatabase
+ false
+
+
+ Console
+ true
+ true
+ true
+
+
+
+
+
+
+ Level3
+ true
+ true
+ false
+ WIN32;NDEBUG;_CONSOLE;_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR;IMGUI_ENABLE_FREETYPE;AMALGAM_CUSTOM_FONTS;__CONFIGURATION__="ReleaseFreetypeAVX2";__PLATFORM__="x64";%(PreprocessorDefinitions)
+ true
+ stdcpp20
+ true
+ Speed
+
+
+ true
+ AdvancedVectorExtensions2
+ ProgramDatabase
+ false
+ MultiThreadedDLL
+
+
+
+
+ Console
+ true
+ true
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.
+
+
+
+
+
\ No newline at end of file
diff --git a/Amalgam.vcxproj.filters b/Amalgam.vcxproj.filters
new file mode 100644
index 0000000..476396a
--- /dev/null
+++ b/Amalgam.vcxproj.filters
@@ -0,0 +1,701 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/cpp.hint b/cpp.hint
new file mode 100644
index 0000000..a252d2c
--- /dev/null
+++ b/cpp.hint
@@ -0,0 +1,113 @@
+#define TICK_INTERVAL I::GlobalVars->interval_per_tick
+#define TIME_TO_TICKS(dt) (static_cast(0.5f + static_cast(dt) / TICK_INTERVAL))
+#define TICKS_TO_TIME(t) (TICK_INTERVAL * (t))
+#define ROUND_TO_TICKS(t) (TICKS_TO_TIME(TIME_TO_TICKS(t)))
+
+#define MAKE_SIGNATURE(name, dll, sig, offset) namespace S { inline CSignature name(dll, sig, offset, #name); }
+#define MAKE_HOOK(name, address, type, callconvo, ...) namespace Hooks \
+{\
+ namespace name\
+ {\
+ void Init(); \
+ inline CHook Hook(Init); \
+ using FN = type(callconvo *)(__VA_ARGS__); \
+ type callconvo Func(__VA_ARGS__); \
+ }\
+} \
+void Hooks::name::Init() { Hook.Create(reinterpret_cast(address), Func); } \
+type callconvo Hooks::name::Func(__VA_ARGS__)
+#define CALL_ORIGINAL Hook.Original()
+#define MAKE_INTERFACE_VERSION(type, name, dll, version) namespace I { inline type *name = nullptr; } \
+namespace MAKE_INTERFACE_SCOPE \
+{\
+ inline InterfaceInit_t name##InterfaceInit_t(reinterpret_cast(&I::name), dll, version, -1, 0); \
+}
+#define MAKE_INTERFACE_SIGNATURE(type, name, dll, version, offset, deref) namespace I { inline type *name = nullptr; } \
+namespace MAKE_INTERFACE_SCOPE \
+{\
+ inline InterfaceInit_t name##InterfaceInit_t(reinterpret_cast(&I::name), dll, version, offset, deref); \
+}
+#define MAKE_INTERFACE_NULL(type, name) namespace I { inline type *name = nullptr; }
+#define MAKE_INTERFACE_VERSION_SEARCH(type, name, dll, version) namespace I { inline type *name = nullptr; } \
+namespace MAKE_INTERFACE_SCOPE \
+{\
+ inline InterfaceInit_t name##InterfaceInit_t(reinterpret_cast(&I::name), dll, version, -1, 0, true); \
+}
+#define MAKE_INTERFACE_SIGNATURE_SEARCH(type, name, dll, signature, offset, deref) namespace I { inline type *name = nullptr; } \
+namespace MAKE_INTERFACE_SCOPE \
+{\
+ inline InterfaceInit_t name##InterfaceInit_t(reinterpret_cast(&I::name), dll, signature, offset, deref, true); \
+}
+
+#define NETVAR(_name, type, table, name) inline type& _name() \
+{ \
+ static int nOffset = U::NetVars.GetNetVar(table, name); \
+ return *reinterpret_cast(uintptr_t(this) + nOffset); \
+}
+#define NETVAR_OFF(_name, type, table, name, offset) inline type& _name() \
+{ \
+ static int nOffset = U::NetVars.GetNetVar(table, name) + offset; \
+ return *reinterpret_cast(uintptr_t(this) + nOffset); \
+}
+#define NETVAR_ARRAY(_name, type, table, size, name) inline type& _name(int iIndex) \
+{ \
+ static int nOffset = U::NetVars.GetNetVar(table, name); \
+ return *reinterpret_cast(uintptr_t(this) + nOffset + iIndex * sizeof(type)); \
+}
+#define NETVAR_ARRAY_OFF(_name, type, table, name, size, offset) inline type& _name(int iIndex) \
+{ \
+ static int nOffset = U::NetVars.GetNetVar(table, name) + offset; \
+ return *reinterpret_cast(uintptr_t(this) + nOffset + iIndex * sizeof(type)); \
+}
+#define OFFSET(name, type, offset) inline type& name() \
+{ \
+ return *reinterpret_cast(uintptr_t(this) + offset); \
+}
+#define CONDGET(name, conditions, cond) inline bool name() \
+{ \
+ return conditions & cond; \
+}
+#define VIRTUAL(name, type, index, ...) inline type name() \
+{ \
+ return U::Memory.CallVirtual(##__VA_ARGS__); \
+}
+#define VIRTUAL_ARGS(name, type, index, args, ...) inline type name##args \
+{ \
+ return U::Memory.CallVirtual(##__VA_ARGS__); \
+}
+#define SIGNATURE(name, type, sig, ...) inline type name() \
+{ \
+ return S::sig##_##name.Call(##__VA_ARGS__); \
+}
+#define SIGNATURE_ARGS(name, type, sig, args, ...) inline type name##args \
+{ \
+ return S::sig##_##name.Call(##__VA_ARGS__); \
+}
+
+#define VA_LIST(...) __VA_ARGS__
+#define NAMESPACE_BEGIN(name)\
+ namespace name {\
+ inline std::string GetNamespace() { return "Vars::" + std::string(#name) + "::"; }\
+ inline std::string GetSubname() { return ""; }
+#define SUBNAMESPACE_BEGIN(name)\
+ namespace name {\
+ inline std::string GetSubname() { return std::string(#name) + "::"; }
+#define NAMESPACE_END(name)\
+ }
+#define SUBNAMESPACE_END(name)\
+ }
+#define CVar(name, value, ...)\
+ inline ConfigVar name = { value, GetNamespace() + GetSubname() + std::string(#name), __VA_ARGS__ };
+#define Enum(name, ...)\
+ namespace name##Enum { enum name##Enum { __VA_ARGS__ }; };
+#define CVarEnum(name, value, flags, ...)\
+ CVar(name, value, flags)\
+ Enum(name, __VA_ARGS__)
+#define NONE 0
+#define VISUAL (1 << 0)
+#define NOSAVE (1 << 1)
+#define NOBIND (1 << 2)
+#define DEFAULT_BIND -1
+
+#define ADD_FEATURE_CUSTOM(type, name, scope) namespace scope { inline type name; }
+#define ADD_FEATURE(type, name) ADD_FEATURE_CUSTOM(type, name, F)
\ No newline at end of file
diff --git a/default.json b/default.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/default.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/packages.config b/packages.config
new file mode 100644
index 0000000..9276550
--- /dev/null
+++ b/packages.config
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file