mirror of
https://github.com/Jous99/F4MP.git
synced 2026-01-13 00:20:54 +01:00
133 lines
3.6 KiB
C++
133 lines
3.6 KiB
C++
|
|
#include <TiltedOnlinePCH.h>
|
||
|
|
|
||
|
|
#include <TiltedOnlineApp.h>
|
||
|
|
|
||
|
|
#include <DInputHook.hpp>
|
||
|
|
#include <WindowsHook.hpp>
|
||
|
|
|
||
|
|
#include <World.h>
|
||
|
|
|
||
|
|
#include <spdlog/spdlog.h>
|
||
|
|
#include <spdlog/sinks/rotating_file_sink.h>
|
||
|
|
#include <spdlog/sinks/stdout_color_sinks.h>
|
||
|
|
|
||
|
|
#include <Systems/RenderSystemD3D11.h>
|
||
|
|
|
||
|
|
#include <Services/OverlayService.h>
|
||
|
|
#include <Services/ImguiService.h>
|
||
|
|
#include <Services/DiscordService.h>
|
||
|
|
|
||
|
|
#include <ScriptExtender.h>
|
||
|
|
#include <NvidiaUtil.h>
|
||
|
|
|
||
|
|
using TiltedPhoques::Debug;
|
||
|
|
|
||
|
|
TiltedOnlineApp::TiltedOnlineApp()
|
||
|
|
{
|
||
|
|
// Set console code page to UTF-8 so console known how to interpret string data
|
||
|
|
SetConsoleOutputCP(CP_UTF8);
|
||
|
|
|
||
|
|
auto logPath = TiltedPhoques::GetPath() / "logs";
|
||
|
|
|
||
|
|
std::error_code ec;
|
||
|
|
create_directory(logPath, ec);
|
||
|
|
|
||
|
|
auto rotatingLogger = std::make_shared<spdlog::sinks::rotating_file_sink_mt>(logPath / "tp_client.log", 1048576 * 5, 3);
|
||
|
|
// rotatingLogger->set_level(spdlog::level::debug);
|
||
|
|
auto console = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
|
||
|
|
console->set_pattern("%^[%H:%M:%S.%e] [%l] [tid %t] %$ %v");
|
||
|
|
|
||
|
|
auto logger = std::make_shared<spdlog::logger>("", spdlog::sinks_init_list{console, rotatingLogger});
|
||
|
|
set_default_logger(logger);
|
||
|
|
}
|
||
|
|
|
||
|
|
TiltedOnlineApp::~TiltedOnlineApp() = default;
|
||
|
|
|
||
|
|
void* TiltedOnlineApp::GetMainAddress() const
|
||
|
|
{
|
||
|
|
POINTER_SKYRIMSE(void, winMain, 36544);
|
||
|
|
|
||
|
|
return winMain.GetPtr();
|
||
|
|
}
|
||
|
|
|
||
|
|
bool TiltedOnlineApp::BeginMain()
|
||
|
|
{
|
||
|
|
World::Create();
|
||
|
|
World::Get().ctx().at<DiscordService>().Init();
|
||
|
|
World::Get().ctx().emplace<RenderSystemD3D11>(World::Get().ctx().at<OverlayService>(), World::Get().ctx().at<ImguiService>());
|
||
|
|
|
||
|
|
LoadScriptExender();
|
||
|
|
|
||
|
|
// TODO: Figure out a way to un-blacklist NvCamera64.dll (see DllBlocklist.cpp). Then this hack can be removed
|
||
|
|
if (IsNvidiaOverlayLoaded())
|
||
|
|
ApplyNvidiaFix();
|
||
|
|
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
|
||
|
|
bool TiltedOnlineApp::EndMain()
|
||
|
|
{
|
||
|
|
UninstallHooks();
|
||
|
|
if (m_pDevice)
|
||
|
|
m_pDevice->Release();
|
||
|
|
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
|
||
|
|
void TiltedOnlineApp::Update()
|
||
|
|
{
|
||
|
|
// Reverting a change that used to be here to disable bUseFaceGenPreprocessedHeads==true (which is
|
||
|
|
// the default) handling. Extensive testing over months by multiple parties showed that enabling
|
||
|
|
// the flag introduces no issues WITH PROPERLY GENERATED CHARACTERS (in-game character generation
|
||
|
|
// or showracemenu). The shortcut of "coc riverwood" from the main menu skips proper character generation.
|
||
|
|
//
|
||
|
|
// Plus, having it on has some benefits like helping with neck seams. Comment to avoid revisiting.
|
||
|
|
//
|
||
|
|
// There are still some issues to track down, like hair color and maybe face tint not syncing correctly,
|
||
|
|
// but they are unrelated and unchanged by this flag.
|
||
|
|
//
|
||
|
|
|
||
|
|
// Make sure the window stays active
|
||
|
|
POINTER_SKYRIMSE(uint32_t, bAlwaysActive, 380768);
|
||
|
|
|
||
|
|
*bAlwaysActive = 1;
|
||
|
|
|
||
|
|
World::Get().Update();
|
||
|
|
}
|
||
|
|
|
||
|
|
bool TiltedOnlineApp::Attach()
|
||
|
|
{
|
||
|
|
TiltedPhoques::Debug::OnAttach();
|
||
|
|
|
||
|
|
// TiltedPhoques::Nop(0x1405D3FA1, 6);
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
|
||
|
|
bool TiltedOnlineApp::Detach()
|
||
|
|
{
|
||
|
|
TiltedPhoques::Debug::OnDetach();
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
|
||
|
|
void TiltedOnlineApp::InstallHooks2()
|
||
|
|
{
|
||
|
|
TiltedPhoques::Initializer::RunAll();
|
||
|
|
|
||
|
|
TiltedPhoques::DInputHook::Install();
|
||
|
|
}
|
||
|
|
|
||
|
|
void TiltedOnlineApp::UninstallHooks()
|
||
|
|
{
|
||
|
|
}
|
||
|
|
|
||
|
|
void TiltedOnlineApp::ApplyNvidiaFix() noexcept
|
||
|
|
{
|
||
|
|
auto d3dFeatureLevelOut = D3D_FEATURE_LEVEL_11_0;
|
||
|
|
HRESULT hr = CreateEarlyDxDevice(&m_pDevice, &d3dFeatureLevelOut);
|
||
|
|
if (FAILED(hr))
|
||
|
|
spdlog::error("D3D11CreateDevice failed. Detected an NVIDIA GPU, error code={0:x}", hr);
|
||
|
|
|
||
|
|
if (d3dFeatureLevelOut < D3D_FEATURE_LEVEL_11_0)
|
||
|
|
spdlog::warn("Unexpected D3D11 feature level detected (< 11.0), may cause issues");
|
||
|
|
}
|