Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion OpenGameCamera/SigScan/StaticOffsets.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ class StaticOffsets {
AddOffset(OFFSET_GAMETIMESETTINGS, "48 89 05 [?? ?? ?? ?? C7 40 ?? ?? ?? ?? ?? 8B 43 18", PatternType::RelativePointer)
AddOffset(OFFSET_INPUTSETTINGS, "48 89 05 [?? ?? ?? ?? 80 B8 A5 00 00 00 00 F3 0F 10 35 ?? ?? ?? ?? 74 ??", PatternType::RelativePointer)
AddOffset(OFFSET_KEYBOARDUPDATE, "[48 89 5C 24 08 57 48 83 EC 20 89 D7 48 89 CB 4D 85 C0 75 ?? E8 ?? ?? ?? ?? 48 89 C1 E8 ?? ?? ?? ?? 49 89 C0 83 BB B8 00 00 00 00 75 ?? 49 8B 00 4C 89 C1 40 0F B6 D7 FF 50 30 84 C0 74 ?? B8 01 00 00 00", PatternType::Address)
AddOffset(OFFSET_SETMOUSESTATE, "[53 48 83 EC 20 48 89 CB 48 8B 0D ?? ?? ?? ?? 48 85 C9 0F 84", PatternType::Address)
AddOffset(OFFSET_SETMOUSESTATE, "[53 48 83 EC 20 48 89 CB 48 8B 0D 01 E5 29 FD 48 85 C9", PatternType::Address)
AddOffset(OFFSET_POSTPROCESSSUB, "[41 8B 80 88 00 00 00 89 81 88 00 00 00 41 8B 80 8C 00 00 00 89 81 8C 00 00 00 41 0F B6 80 14 02 00 00", PatternType::Address)

AddFuncCall(OFFSET_DEBUGRENDERER2, "[E8 ?? ?? ?? ?? 48 8B 97 30 79 00 00", PatternType::Address)
Expand Down
231 changes: 155 additions & 76 deletions OpenGameCamera/Source.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,17 @@
// config data. Change if you want different defaults
namespace Settings {
bool enableFreeCam = false;
bool freezePlayer = true;
bool disableUi = true;
bool freezeTime = false;
float timeScale = 1.f;
bool cameraMenu = true;
bool dofMenu = true;
bool effectsMenu = true;
// Camera Settings
float evControl = 5.f;
float fov = 55;
float resScale = 1.f;
float mainSpeed = 0.1f;
float slowSpeed = .001f;
float fastSpeed = 2.f;
float fov = 55;
bool dofMenu = true;
float mouseSensativity = 1.3f;
// DOF Settings
bool enableDof = false;
Expand All @@ -31,7 +33,11 @@ namespace Settings {
bool dofEnableForeground = false;
float dofNearStart = 0.f;
float dofNearEnd = 3.f;
// SSR
// Effects Menu
bool freezeTime = false;
float timeScale = 1.f;
bool freezePlayer = true;
bool forceBloomEnable = true;
bool ssrEnable = false;
bool ssrFullResEnable = false;
}
Expand All @@ -51,93 +57,80 @@ void buildMainMenu(Menu &menu) {
menu.header.text = "OpenGameCamera";

// create a checkbox for showing/hiding the menu
Element elem1;
elem1.text = "Show Menu [" + Keys::showMenuKey.name + "]";
elem1.type = Element::ElementType::checkBox;
elem1.value = &g_ShowMenu;
elem1.style.foregroundColor = defaultStyle.accentColor;
Element elemShowMenu;
elemShowMenu.text = "Show Menu [" + Keys::showMenuKey.name + "]";
elemShowMenu.type = Element::ElementType::checkBox;
elemShowMenu.value = &g_ShowMenu;
elemShowMenu.style.foregroundColor = defaultStyle.accentColor;

// checkbox for enabling FreeCam
Element elem2;
elem2.text = "Enable FreeCam [" + Keys::enableFreeCam.name + "]";
elem2.type = Element::ElementType::checkBox;
elem2.value = &Settings::enableFreeCam;

// checkbox for freezing the player when camera is enabled
Element elem3;
elem3.text = "Freeze Player [" + Keys::freezePlayer.name + "]";
elem3.value = &Settings::freezePlayer;
elem3.type = Element::ElementType::checkBox;
Element elemEnableFreecam;
elemEnableFreecam.text = "Enable FreeCam [" + Keys::enableFreeCam.name + "]";
elemEnableFreecam.type = Element::ElementType::checkBox;
elemEnableFreecam.value = &Settings::enableFreeCam;

// checkbox for disabling the UI when the camera is enabled
Element elemDisableUi;
elemDisableUi.text = "Disable UI [" + Keys::disableUi.name + "]";
elemDisableUi.value = &Settings::disableUi;
elemDisableUi.type = Element::ElementType::checkBox;

// checkbox for freezing time
Element elemFreeze;
elemFreeze.text = "Freeze Time [" + Keys::freezeTime.name + "]";
elemFreeze.type = Element::ElementType::checkBox;
elemFreeze.value = &Settings::freezeTime;


Element elemFovP;
elemFovP.text = "Increase FOV [" + Keys::fovIncrease.name + "]";

Element elemFovM;
elemFovM.text = "Decrease FOV [" + Keys::fovDecrease.name + "]";

Element elemMouseSens;
elemMouseSens.text = "Mouse sensitivity";
elemMouseSens.type = Element::ElementType::floatSlider;
elemMouseSens.value = &Settings::mouseSensativity;
elemMouseSens.min = 0.1;
elemMouseSens.max = 1000;
elemMouseSens.step = .5;

Element elemTimeScale;
elemTimeScale.text = "Time scale";
elemTimeScale.type = Element::ElementType::floatSlider;
elemTimeScale.value = &Settings::timeScale;
elemTimeScale.min = 0.1;
elemTimeScale.max = 1.f;
elemTimeScale.step = 0.1;

Element elemSSREnable;
elemSSREnable.text = "SSR Enable";
elemSSREnable.type = Element::ElementType::checkBox;
elemSSREnable.value = &Settings::ssrEnable;

Element elemSSRFullResEnable;
elemSSRFullResEnable.text = "SSR Full Res Enable";
elemSSRFullResEnable.type = Element::ElementType::checkBox;
elemSSRFullResEnable.value = &Settings::ssrFullResEnable;
Element elemCameraMenu;
elemCameraMenu.text = "Show Camera Settings";
elemCameraMenu.type = Element::ElementType::checkBox;
elemCameraMenu.value = &Settings::cameraMenu;

Element elemShowDofMenu;
elemShowDofMenu.text = "Show DOF Menu";
elemShowDofMenu.type = Element::ElementType::checkBox;
elemShowDofMenu.value = &Settings::dofMenu;

Element elemShowEffectsMenu;
elemShowEffectsMenu.text = "Show Effects Menu";
elemShowEffectsMenu.type = Element::ElementType::checkBox;
elemShowEffectsMenu.value = &Settings::effectsMenu;

// add them to the menu
menu.elements.push_back(elem1);
menu.elements.push_back(elem2);
menu.elements.push_back(elem3);
menu.elements.push_back(elemShowMenu);
menu.elements.push_back(elemEnableFreecam);
menu.elements.push_back(elemDisableUi);
menu.elements.push_back(elemFreeze);
menu.elements.push_back(elemCameraMenu);
menu.elements.push_back(elemShowDofMenu);
menu.elements.push_back(elemShowEffectsMenu);
}

void buildCameraMenu(Menu& menu) {
menu.header.text = "Camera Settings";
menu.absolutePos.x += 400;

Element elemEVControl;
elemEVControl.text = "Exposure Value";
elemEVControl.type = Element::ElementType::floatSlider;
elemEVControl.value = &Settings::evControl;
elemEVControl.step = .5f * -1;

Element elemFovP;
elemFovP.text = "Increase FOV [" + Keys::fovIncrease.name + "]";

Element elemFovM;
elemFovM.text = "Decrease FOV [" + Keys::fovDecrease.name + "]";

Element elemResScale;
elemResScale.text = "Resolution Scale";
elemResScale.type = Element::ElementType::floatSlider;
elemResScale.value = &Settings::resScale;
elemResScale.step = .25f;

menu.elements.push_back(elemEVControl);
menu.elements.push_back(elemFovP);
menu.elements.push_back(elemFovM);
menu.elements.push_back(elemMouseSens);
menu.elements.push_back(elemTimeScale);
menu.elements.push_back(elemSSREnable);
menu.elements.push_back(elemSSRFullResEnable);
menu.elements.push_back(elemShowDofMenu);
menu.elements.push_back(elemResScale);

}

void buildDofMenu(Menu& menu) {
menu.header.text = "DOF";
menu.absolutePos.x += 600;
menu.absolutePos.x += 800;

Element elemDofEnable;
elemDofEnable.text = "Enable DOF effects";
Expand Down Expand Up @@ -165,6 +158,7 @@ void buildDofMenu(Menu& menu) {
elemFocusDist.max = 10000;
elemFocusDist.step = .5;


Element elemDofFarStart;
elemDofFarStart.text = "DOF FAR Start";
elemDofFarStart.type = Element::ElementType::floatSlider;
Expand Down Expand Up @@ -202,6 +196,8 @@ void buildDofMenu(Menu& menu) {
elemDofHalfRes.type = Element::ElementType::checkBox;
elemDofHalfRes.value = &Settings::spriteHalfResolution;



menu.elements.push_back(elemDofEnable);
menu.elements.push_back(elmDofEnableFg);
menu.elements.push_back(elemDofBlur);
Expand All @@ -211,6 +207,58 @@ void buildDofMenu(Menu& menu) {
menu.elements.push_back(elemDofNearStart);
menu.elements.push_back(elemDofNearEnd);
menu.elements.push_back(elemDofHalfRes);

}

void buildEffectsMenu(Menu& menu) {
menu.header.text = "Effects Menu";
menu.absolutePos.x += 1200;


// checkbox for freezing time
Element elemFreeze;
elemFreeze.text = "Freeze Time [" + Keys::freezeTime.name + "]";
elemFreeze.type = Element::ElementType::checkBox;
elemFreeze.value = &Settings::freezeTime;

// timescale slider
Element elemTimeScale;
elemTimeScale.text = "Time scale";
elemTimeScale.type = Element::ElementType::floatSlider;
elemTimeScale.value = &Settings::timeScale;
elemTimeScale.min = 0.1;
elemTimeScale.max = 1.f;
elemTimeScale.step = 0.1;

// checkbox for freezing the player when camera is enabled
Element elemFreezePlayer;
elemFreezePlayer.text = "Freeze Player [" + Keys::freezePlayer.name + "]";
elemFreezePlayer.value = &Settings::freezePlayer;
elemFreezePlayer.type = Element::ElementType::checkBox;

Element elemForceBloomEnable;
elemForceBloomEnable.text = "Bloom Enable";
elemForceBloomEnable.type = Element::ElementType::checkBox;
elemForceBloomEnable.value = &Settings::forceBloomEnable;

Element elemSSREnable;
elemSSREnable.text = "SSR Enable";
elemSSREnable.type = Element::ElementType::checkBox;
elemSSREnable.value = &Settings::ssrEnable;

Element elemSSRFullResEnable;
elemSSRFullResEnable.text = "SSR Full Res Enable";
elemSSRFullResEnable.type = Element::ElementType::checkBox;
elemSSRFullResEnable.value = &Settings::ssrFullResEnable;


menu.elements.push_back(elemFreeze);
menu.elements.push_back(elemTimeScale);
menu.elements.push_back(elemFreezePlayer);
menu.elements.push_back(elemForceBloomEnable);
menu.elements.push_back(elemSSREnable);
menu.elements.push_back(elemSSRFullResEnable);

}

// Camera Update function
Expand Down Expand Up @@ -247,13 +295,16 @@ tglobalPostProcessSub oglobalPostProcessSub;

// Hook function prototype (globalPostProcessSub)
__int64 __fastcall hkglobalPostProcessSub(void* a1, __int64 a2, GlobalPostProcessSettings* a3)
{
{
if (g_PostProcess == nullptr) std::cout << "g_PostProcess:\t0x" << std::hex << a3 << std::endl;
g_PostProcess = a3;
return oglobalPostProcessSub(a1, a2, a3);
}

Menu mainMenu;
Menu cameraMenu;
Menu dofMenu;
Menu effectsMenu;

void drawLoop(Renderer* pRenderer, uint32_t width, uint32_t height) {
if (g_PostProcess != nullptr && !g_origSSRValueSet) {
Expand All @@ -275,7 +326,17 @@ void drawLoop(Renderer* pRenderer, uint32_t width, uint32_t height) {
// if the global bool says we should draw the menu, do so
if (g_ShowMenu) {
mainMenu.draw(pRenderer);
if (Settings::cameraMenu) cameraMenu.draw(pRenderer);
if (Settings::dofMenu) dofMenu.draw(pRenderer);
if (Settings::effectsMenu) effectsMenu.draw(pRenderer);
}

// Set resolution scale
if (Settings::resScale) {
GameRenderer::GetInstance()->gameRenderSettings->resolutionScale = Settings::resScale;
}
else {
GameRenderer::GetInstance()->gameRenderSettings->resolutionScale = Settings::resScale = 1.f;
}

// Set our FOV
Expand Down Expand Up @@ -332,18 +393,35 @@ void drawLoop(Renderer* pRenderer, uint32_t width, uint32_t height) {
g_PostProcess->enableForeground = Settings::dofEnableForeground;
g_PostProcess->forceDofFocusDistance = Settings::focusDistance;
g_PostProcess->spriteDofHalfResolutionEnable = Settings::spriteHalfResolution;
g_PostProcess->screenSpaceRaytraceEnable = Settings::ssrEnable;
g_PostProcess->screenSpaceRaytraceFullresEnable = Settings::ssrFullResEnable;
}
}
else {
if (g_PostProcess != nullptr) {
g_PostProcess->spriteDofEnable = false;
g_PostProcess->screenSpaceRaytraceEnable = g_origSSREnable;
g_PostProcess->screenSpaceRaytraceFullresEnable = g_origSSRFullResEnable;
}
}

if (g_PostProcess != nullptr) {
// NOTE(cstdr1): Always set SSR settings regardless of DOF state
g_PostProcess->screenSpaceRaytraceEnable = Settings::ssrEnable;
g_PostProcess->screenSpaceRaytraceFullresEnable = Settings::ssrFullResEnable;

// (dcat): testing bloom controls
if (Settings::forceBloomEnable) {
if (g_PostProcess != nullptr) {
g_PostProcess->bloomEnable = Settings::forceBloomEnable;
}
}
else {
if (g_PostProcess != nullptr) {
g_PostProcess->bloomEnable = false;
}
}

// Exposure control
if (Settings::evControl) {
if (g_PostProcess != nullptr) {
g_PostProcess->forceEV = Settings::evControl;
}
}

// Should the time be frozen?
Expand Down Expand Up @@ -426,7 +504,9 @@ DWORD __stdcall mainThread(HMODULE hOwnModule)

// build our menu
buildMainMenu(mainMenu);
buildCameraMenu(cameraMenu);
buildDofMenu(dofMenu);
buildEffectsMenu(effectsMenu);
// hook the function for setting our camera position manually
// TODO(cstdr1): camerahook is still broken, investigating
Candy::CreateHook(StaticOffsets::Get_OFFSET_CAMERAHOOK2(), &hkupdateCamera2, &oupdateCamera2);
Expand Down Expand Up @@ -455,7 +535,6 @@ DWORD __stdcall mainThread(HMODULE hOwnModule)
InputSettings::GetInstance()->mouseSensitivityPower = 1.f;
GameRenderer::GetInstance()->gameRenderSettings->forceFov = -1;
if (g_PostProcess != nullptr) {
// NOTE(cstdr1): Restore original values of SSR options
g_PostProcess->spriteDofEnable = false;
g_PostProcess->forceDofEnable = -1;
g_PostProcess->screenSpaceRaytraceEnable = g_origSSREnable;
Expand Down
Loading