[MWR] MWR FoV & FPS Changer Updated
Ay guys I didn't like having 90 fps so I made this, its pretty sketchy but it works so ye. No idea if it will be detected so use at your own risk.
This works on SP and MP.
To set it up place Config.txt in your MWR steam folder. Config line 1 is FoV, line 2 is FoVScale, line 3 is your gun position. Change these values to whatever suits you.
Make sure you have the 64bit version VC++ Redistributible: https://www.microsoft.com/en-gb/down....aspx?id=48145ⓘ
To use just inject it into MWR SP or MP, I suggest doing it during the main menu. Once it is injected it will automatically change the stuff for you. Use hotkeys to change your maxFPS:
v key = 125 fps
b key = 250 fps
n key = 333 fps

This works on SP and MP.
To set it up place Config.txt in your MWR steam folder. Config line 1 is FoV, line 2 is FoVScale, line 3 is your gun position. Change these values to whatever suits you.
Make sure you have the 64bit version VC++ Redistributible: https://www.microsoft.com/en-gb/down....aspx?id=48145ⓘ
To use just inject it into MWR SP or MP, I suggest doing it during the main menu. Once it is injected it will automatically change the stuff for you. Use hotkeys to change your maxFPS:
v key = 125 fps
b key = 250 fps
n key = 333 fps
Sketchy AF Source
Code:
// MWR FPS Changer.cpp : Defines the exported functions for the DLL application.
//
#include "stdafx.h"
#include <stdio.h>
#include <string>
#include <iostream>
#include <fstream>
typedef int(__cdecl Cbuf_AddText_T)(int localClientNum, const char *Command); //Send command to console
Cbuf_AddText_T Cbuf_AddText_MP = (Cbuf_AddText_T)0x00000001404033B0;
Cbuf_AddText_T Cbuf_AddText_SP = (Cbuf_AddText_T)0x0000000140342EB0;
unsigned long long com_maxFps = 0, cg_fov = 0, cg_fovScale = 0, cg_gun_x = 0; //Vars to hold dvar addresses
int fpsVal = 125;
float fovVal = 65, fovScaleVal = 1, gun_xVal = 0;
DWORD WINAPI Main(LPVOID threadArgs)
{
std::string input;
std::ifstream infile;
infile.open("Config.txt");
for (int i = 0; i < 3; i++)
{
std::getline(infile, input);
if (i == 0) fovVal = std::stof(input);
if (i == 1) fovScaleVal = std::stof(input);
if (i == 2) gun_xVal = std::stof(input);
}
infile.close();
if (GetModuleHandleA("h1_mp64_ship.exe") != NULL)
{
unsigned long long currentMPBase = 0x000000014D064D00;
do
{
Sleep(1000);
currentMPBase = 0x000000014D064D00;
for (int i = 0; i < *(int*)0x000000014D064CF4; i++)
{
currentMPBase += 0x60;
if (*(int*)currentMPBase == 0xF264C46C) com_maxFps = currentMPBase;
if (*(int*)currentMPBase == 0x8572B2C7) cg_fov = currentMPBase;
if (*(int*)currentMPBase == 0x79A1090F) cg_fovScale = currentMPBase;
if (*(int*)currentMPBase == 0x07AC182B) cg_gun_x = currentMPBase;
}
} while (com_maxFps == 0 || cg_fov == 0 || cg_fovScale == 0 || cg_gun_x == 0);
while (true)
{
*(int*)(com_maxFps + 0x50) = 0x0;
*(int*)(cg_fov + 0x50) = 0x0;
*(int*)(cg_fovScale + 0x50) = 0x0;
*(int*)(cg_gun_x + 0x50) = 0x0;
*(int*)(com_maxFps + 0x10) = fpsVal;
*(float*)(cg_fov + 0x10) = fovVal;
*(float*)(cg_fovScale + 0x10) = fovScaleVal;
*(float*)(cg_gun_x + 0x10) = gun_xVal;
Sleep(1000);
}
}
else if (GetModuleHandleA("h1_sp64_ship.exe") != NULL)
{
unsigned long long currentSPBase = 0x000000014C217D20;
do
{
Sleep(1000);
currentSPBase = 0x000000014C217D20;
for (int i = 0; i < *(int*)0x000000014C217D10; i++)
{
currentSPBase += 0x60;
if (*(int*)currentSPBase == 0xF264C46C) com_maxFps = currentSPBase;
if (*(int*)currentSPBase == 0x8572B2C7) cg_fov = currentSPBase;
if (*(int*)currentSPBase == 0x79A1090F) cg_fovScale = currentSPBase;
if (*(int*)currentSPBase == 0x07AC182B) cg_gun_x = currentSPBase;
}
} while (com_maxFps == 0 || cg_fov == 0 || cg_fovScale == 0 || cg_gun_x == 0);
while (true)
{
*(int*)(com_maxFps + 0x50) = 0x0;
*(int*)(cg_fov + 0x50) = 0x0;
*(int*)(cg_fovScale + 0x50) = 0x0;
*(int*)(cg_gun_x + 0x50) = 0x0;
*(int*)(com_maxFps + 0x10) = fpsVal;
*(float*)(cg_fov + 0x10) = fovVal;
*(float*)(cg_fovScale + 0x10) = fovScaleVal;
*(float*)(cg_gun_x + 0x10) = gun_xVal;
Sleep(1000);
}
}
return 0;
}
DWORD WINAPI Keys(LPVOID threadArgs)
{
while (true)
{
if (GetAsyncKeyState(0x56)) fpsVal = 125; //V = 125
if (GetAsyncKeyState(0x42)) fpsVal = 250; //B = 250
if (GetAsyncKeyState(0x4E)) fpsVal = 333; //N = 333
Sleep(20);
}
return 0;
}
BOOL APIENTRY DllMain(HANDLE hDllHandle, DWORD dwReason, LPVOID lpreserved)
{
DWORD threadID;
switch (dwReason)
{
case DLL_PROCESS_ATTACH:
CreateThread(NULL, 0, Main, NULL, 0, &threadID);
CreateThread(NULL, 0, Keys, NULL, 0, &threadID);
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}

