diff --git a/.github/README.md b/.github/README.md
index a093604..2812880 100644
--- a/.github/README.md
+++ b/.github/README.md
@@ -257,6 +257,20 @@ WINEDLLOVERRIDES="dsound=n,b" %command% -nobattleye
+### Indiana Jones and the Great Circle
+
+
+ - Disable TAA
+
+#### Installation
+
+- **Note:** ***Please make sure any executable hex edits are removed/reverted first***.
+ - Extract the following contents of the release zip into the game folder. (`The Great Circle\`).
+ - Rename `dinput8.dll` from folder `!ASI_Loader_x64` to `winmm.dll` and copy to game folder.
+ - `TheGreatCircle.NoTAA.asi`
+
+
+
### Lies of P Demo
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4a37db1..94fa1d0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -50,6 +50,7 @@ add_subdirectory(source/RE8.NoTAA)
add_subdirectory(source/Remnant2.NoTAA)
add_subdirectory(source/SpiderMan.MilesMorales.Patches)
add_subdirectory(source/T1X.DebugFeatures)
+add_subdirectory(source/TheGreatCircle.NoTAA)
add_subdirectory(source/Uncharted4TLL.NoTAA)
add_subdirectory(source/WoLong.Fix)
endif()
diff --git a/source/TheGreatCircle.NoTAA/CMakeLists.txt b/source/TheGreatCircle.NoTAA/CMakeLists.txt
new file mode 100644
index 0000000..222d2ef
--- /dev/null
+++ b/source/TheGreatCircle.NoTAA/CMakeLists.txt
@@ -0,0 +1,9 @@
+cmake_path(GET CMAKE_CURRENT_SOURCE_DIR FILENAME PROJECT_NAME)
+string(REPLACE " " "_" ProjectId ${PROJECT_NAME})
+project(${PROJECT_NAME})
+include(win32)
+
+file(GLOB SOURCES "*.cpp" "*.h" "../Shared/*.cpp" "../../include/*.h" "../../include/*.hpp")
+add_library(${PROJECT_NAME} SHARED ${SOURCES})
+
+include(win32_install)
diff --git a/source/TheGreatCircle.NoTAA/dllmain.cpp b/source/TheGreatCircle.NoTAA/dllmain.cpp
new file mode 100644
index 0000000..f149672
--- /dev/null
+++ b/source/TheGreatCircle.NoTAA/dllmain.cpp
@@ -0,0 +1,108 @@
+#include "stdafx.h"
+#include "helper.hpp"
+#include "memory.hpp"
+
+HMODULE baseModule = GetModuleHandle(NULL);
+
+#define wstr(s) L#s
+#define wxstr(s) wstr(s)
+#define _PROJECT_LOG_PATH _PROJECT_NAME L".log"
+
+wchar_t exePath[_MAX_PATH] = { 0 };
+
+// INI Variables
+bool bDisableTAA;
+bool bDisableDoF;
+
+void ReadConfig(void)
+{
+ inipp::Ini ini;
+ // Get game name and exe path
+ LOG(_PROJECT_NAME " Built: " __TIME__ " @ " __DATE__ "\n");
+ LOG(L"Game Name: %s\n", Memory::GetVersionProductName().c_str());
+ LOG(L"Game Path: %s\n", exePath);
+
+ // Initialize config
+ // UE4 games use launchers so config path is relative to launcher
+ std::wstring config_path = _PROJECT_NAME L".ini";
+ std::wifstream iniFile(config_path);
+ if (!iniFile)
+ {
+ // no ini, lets generate one.
+ LOG(L"Failed to load config file.\n");
+ std::wstring ini_defaults = L"[Settings]\n"
+ wstr(bDisableTAA)" = true\n";
+ std::wofstream iniFile(config_path);
+ iniFile << ini_defaults;
+ bDisableTAA = true;
+ bDisableDoF = true;
+ LOG(L"Created default config file.\n");
+ }
+ else
+ {
+ ini.parse(iniFile);
+ inipp::get_value(ini.sections[L"Settings"], wstr(bDisableTAA), bDisableTAA);
+ }
+
+ // Log config parse
+ LOG(L"%s: %s (%i)\n", wstr(bDisableTAA), GetBoolStr(bDisableTAA) , bDisableTAA);
+}
+
+void DisableTAA(void)
+{
+ const unsigned char patch1[] = { 0xEB };
+ // 83 78 08 00 | cmp dword ptr ds : [rax + 8] , 0 | rax + 08
+ // 74 0E | je thegreatcircle.7FF61AE006DF -> EB 0E | jmp thegreatcircle.7FF61AE006DF
+ // 48 83 3D CF 44 CF 03 00 | cmp qword ptr ds : [7FF61EAF4BA8] , 0
+ WritePatchPattern(L"83 78 08 00 74 0E 48 83 3D", patch1, sizeof(patch1), L"Disable TAA (r_TAAAntiGhosting=0)", 4); //sets r_TAAAntiGhosting=0
+
+ const unsigned char patch2[] = { 0xEB };
+ // 83 79 08 00 | cmp dword ptr ds:[rcx+8],0
+ // 7E 27 | jle thegreatcircle.7FF61AE2B404 -> EB 27 | jmp thegreatcircle.7FF61AE2B404
+ // 4C 8B 00 | mov r8, qword ptr ds : [rax]
+ WritePatchPattern(L"83 79 08 00 7E 27 4C 8B 00", patch2, sizeof(patch2), L"Disable TAA (r_antialiasing=0)", 4); //sets r_antialiasing=0
+
+ const unsigned char patch3[] = { 0xB8, 0x00, 0x00, 0x80, 0x3F, 0x66, 0x0F, 0x6E, 0xC8, 0x90, 0x90, 0x90 };
+ // 89 74 CF 0C | mov dword ptr ds : [rdi + rcx * 8 + C] , esi
+ // 48 8B 05 1B 8B 72 03 | mov rax, qword ptr ds : [7FF61E528DE0] -> B8 00 00 80 3F | mov eax,3F800000
+ // F3 0F 10 48 0C | movss xmm1, dword ptr ds : [rax + C] -> 66 0F 6E C8 | movd xmm1, eax
+ // -> 90 90 90 | nop
+ WritePatchPattern(L"89 74 CF 0C 48 ?? ?? ?? ?? ?? ?? F3 0F 10 48 0C", patch3, sizeof(patch3), L"Disable TAA (r_TAABlendRatio=1.0)", 4); //sets r_TAABlendRatio=1.0
+}
+
+DWORD __stdcall Main(void*)
+{
+ bLoggingEnabled = false;
+
+ wchar_t LogPath[_MAX_PATH] = { 0 };
+ wcscpy_s(exePath, _countof(exePath), GetRunningPath(exePath));
+ _snwprintf_s(LogPath, _countof(LogPath), _TRUNCATE, L"%s\\%s", exePath, L"" _PROJECT_LOG_PATH);
+ LoggingInit(L"" _PROJECT_NAME, LogPath);
+ ReadConfig();
+
+ if (bDisableTAA)
+ DisableTAA();
+
+ LOG(L"Shutting down " wstr(fp_log) " file handle.\n");
+ fclose(fp_log);
+ return true;
+}
+
+BOOL APIENTRY DllMain( HMODULE hModule,
+ DWORD ul_reason_for_call,
+ LPVOID lpReserved
+ )
+{
+ switch (ul_reason_for_call)
+ {
+ case DLL_PROCESS_ATTACH:
+ {
+ CreateThread(NULL, 0, Main, 0, NULL, 0);
+ }
+ case DLL_THREAD_ATTACH:
+ case DLL_THREAD_DETACH:
+ case DLL_PROCESS_DETACH:
+ break;
+ }
+ return TRUE;
+}