Skip to content
Open
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
9 changes: 9 additions & 0 deletions xlive/H2MOD.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -918,6 +918,15 @@ bool __cdecl OnMapLoad(game_engine_settings* engine_settings)
//H2X::Initialize(true);
H2Tweaks::applyMeleePatch(true);
H2Tweaks::toggleUncappedCampaignCinematics(true);
if (H2Config_campaign_modifier == 1)
{
H2X::Initialize(true);
engine_settings->tickrate = XboxTick::setTickRate(false);
}
else if (H2Config_campaign_modifier == 2)
{
engine_settings->tickrate = XboxTick::setTickRate(true);
}
}

return result;
Expand Down
21 changes: 21 additions & 0 deletions xlive/H2MOD/Modules/Config/Config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ int H2Config_vehicle_field_of_view = 70;
int H2Config_refresh_rate = 60;
int H2Config_mouse_sens = 0;
int H2Config_controller_sens = 0;
int H2Config_campaign_modifier = 0;
float H2Config_crosshair_offset = NAN;
bool H2Config_disable_ingame_keyboard = false;
bool H2Config_hide_ingame_chat = false;
Expand Down Expand Up @@ -284,6 +285,10 @@ void SaveH2Config() {
fputs("\n# <uint 0 to inf> - 0 uses the default sensitivity.", fileConfig);
fputs("\n\n", fileConfig);

fputs("# campaign_modifier Options (Client):", fileConfig);
fputs("\n# <uint 0 to 2> - 0 is default, 1 is H2X and 2 is 30 tick for campaign.", fileConfig);
fputs("\n\n", fileConfig);

fputs("# crosshair_offset Options (Client):", fileConfig);
fputs("\n# <0 to 0.53> - NaN disables the built in Crosshair adjustment.", fileConfig);
fputs("\n\n", fileConfig);
Expand Down Expand Up @@ -451,6 +456,8 @@ void SaveH2Config() {

fprintf_s(fileConfig, "\ncontroller_sens = %d", H2Config_controller_sens);

fprintf_s(fileConfig, "\ncampaign_modifier = %d", H2Config_campaign_modifier);

if (FloatIsNaN(H2Config_crosshair_offset)) {
fputs("\ncrosshair_offset = NaN", fileConfig);
}
Expand Down Expand Up @@ -618,6 +625,7 @@ static bool est_vehicle_field_of_view = false;
static bool est_refresh_rate = false;
static bool est_mouse_sens = false;
static bool est_controller_sens = false;
static bool est_campaign_modifier = false;
static bool est_hiresfix = false;
static bool est_d3dex = false;
static bool est_crosshair_offset = false;
Expand Down Expand Up @@ -701,6 +709,7 @@ static void est_reset_vars() {
est_refresh_rate = false;
est_mouse_sens = false;
est_controller_sens = false;
est_campaign_modifier = false;
est_crosshair_offset = false;
est_sens_controller = false;
est_sens_mouse = false;
Expand Down Expand Up @@ -1045,6 +1054,18 @@ static int interpretConfigSetting(char* fileLine, char* version, int lineNumber)
est_controller_sens = true;
}
}
else if (!H2IsDediServer && sscanf(fileLine, "campaign_modifier =%d", &tempint1) == 1) {
if (est_campaign_modifier) {
duplicated = true;
}
else if (!(tempint1 >= 0)) {
incorrect = true;
}
else {
H2Config_campaign_modifier = tempint1;
est_campaign_modifier = true;
}
}
else if (!H2IsDediServer && sscanf(fileLine, "hiresfix =%d", &tempint1) == 1) {
if (est_hiresfix) {
duplicated = true;
Expand Down
1 change: 1 addition & 0 deletions xlive/H2MOD/Modules/Config/Config.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ extern int H2Config_field_of_view;
extern int H2Config_vehicle_field_of_view;
extern int H2Config_mouse_sens;
extern int H2Config_controller_sens;
extern int H2Config_campaign_modifier;
extern int H2Config_refresh_rate;
extern bool H2Config_hiresfix;
extern bool H2Config_d3dex;
Expand Down
110 changes: 109 additions & 1 deletion xlive/H2MOD/Modules/CustomMenu/CustomMenu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2898,6 +2898,101 @@ void GSCustomMenuCall_ToggleSkulls() {
#pragma endregion


const int CMLabelMenuId_Campaign_Modifiers = 0xFF00002A;
#pragma region CM_Campaign_Modifiers

void __stdcall CMLabelButtons_Campaign_Modifiers(int a1, int a2)
{
int(__thiscall* sub_211909)(int, int, int, int) = (int(__thiscall*)(int, int, int, int))((char*)H2BaseAddr + 0x211909);
void(__thiscall* sub_21bf85)(int, int label_id) = (void(__thiscall*)(int, int))((char*)H2BaseAddr + 0x21bf85);

__int16 button_id = *(WORD*)(a1 + 112);
int v3 = sub_211909(a1, 6, 0, 0);
if (v3)
{
sub_21bf85_CMLTD(v3, button_id + 1, CMLabelMenuId_Campaign_Modifiers);
}
}

__declspec(naked) void sub_2111ab_CMLTD_nak_Campaign_Modifiers() {//__thiscall
__asm {
mov eax, [esp + 4h]

push ebp
push edi
push esi
push ecx
push ebx

push 0xFFFFFFF1//label_id_description
push 0xFFFFFFF0//label_id_title
push CMLabelMenuId_Campaign_Modifiers
push eax
push ecx
call sub_2111ab_CMLTD//__stdcall

pop ebx
pop ecx
pop esi
pop edi
pop ebp

retn 4
}
}

static bool CMButtonHandler_Campaign_Modifiers(int button_id) {
H2Tweaks::setCampaignModifier(button_id);
return true;
}

__declspec(naked) void sub_20F790_CM_nak_Campaign_Modifiers() {//__thiscall
__asm {
push ebp
push edi
push esi
push ecx
push ebx

push 0//selected button id
push ecx
call sub_20F790_CM//__stdcall

pop ebx
pop ecx
pop esi
pop edi
pop ebp

retn
}
}

int CustomMenu_Campaign_Modifiers(int);

int(__cdecl *CustomMenuFuncPtrHelp_Campaign_Modifiers())(int) {
return CustomMenu_Campaign_Modifiers;
}

DWORD * menu_vftable_1_Campaign_Modifiers = 0;
DWORD * menu_vftable_2_Campaign_Modifiers = 0;

void CMSetupVFTables_Campaign_Modifiers() {
CMSetupVFTables(&menu_vftable_1_Campaign_Modifiers, &menu_vftable_2_Campaign_Modifiers, (DWORD)CMLabelButtons_Campaign_Modifiers, (DWORD)sub_2111ab_CMLTD_nak_Campaign_Modifiers, (DWORD)CustomMenuFuncPtrHelp_Campaign_Modifiers, (DWORD)sub_20F790_CM_nak_Campaign_Modifiers, true, 0);
}

int CustomMenu_Campaign_Modifiers(int a1) {
return CustomMenu_CallHead(a1, menu_vftable_1_Campaign_Modifiers, menu_vftable_2_Campaign_Modifiers, (DWORD)&CMButtonHandler_Campaign_Modifiers, 3, 272);
}

void GSCustomMenuCall_Campaign_Modifiers() {
int WgitScreenfunctionPtr = (int)(CustomMenu_Campaign_Modifiers);
CallWgit(WgitScreenfunctionPtr);
}

#pragma endregion


const int CMLabelMenuId_OtherSettings = 0xFF00000D;
#pragma region CM_OtherSettings

Expand Down Expand Up @@ -3105,6 +3200,9 @@ static bool CMButtonHandler_AdvSettings(int button_id) {
else if (button_id == 3) {
GSCustomMenuCall_ToggleSkulls();
}
else if (button_id == 4) {
GSCustomMenuCall_Campaign_Modifiers();
}
// else if (button_id == 4) {
// GSCustomMenuCall_AdvLobbySettings();
// }
Expand Down Expand Up @@ -3147,7 +3245,7 @@ void CMSetupVFTables_AdvSettings() {
}

int __cdecl CustomMenu_AdvSettings(int a1) {
return CustomMenu_CallHead(a1, menu_vftable_1_AdvSettings, menu_vftable_2_AdvSettings, (DWORD)&CMButtonHandler_AdvSettings, NetworkSession::localPeerIsSessionHost() && h2mod->GetMapType() == scnr_type::Multiplayer ? 4 : 4, 272);
return CustomMenu_CallHead(a1, menu_vftable_1_AdvSettings, menu_vftable_2_AdvSettings, (DWORD)&CMButtonHandler_AdvSettings, NetworkSession::localPeerIsSessionHost() && h2mod->GetMapType() == scnr_type::Multiplayer ? 5 : 5, 272);
}

void GSCustomMenuCall_AdvSettings() {
Expand Down Expand Up @@ -5026,6 +5124,13 @@ void initGSCustomMenu() {
add_cartographer_label(CMLabelMenuId_EditCrosshairSize, 5, "Large");


add_cartographer_label(CMLabelMenuId_Campaign_Modifiers, 0xFFFFFFF0, "Campaign Modifiers");
add_cartographer_label(CMLabelMenuId_Campaign_Modifiers, 0xFFFFFFF1, "Select a modifier for campaign");
add_cartographer_label(CMLabelMenuId_Campaign_Modifiers, 1, "Default");
add_cartographer_label(CMLabelMenuId_Campaign_Modifiers, 2, "H2X");
add_cartographer_label(CMLabelMenuId_Campaign_Modifiers, 3, "30 Tick");


add_cartographer_label(CMLabelMenuId_Update, 0xFFFFFFF0, "Update");
add_cartographer_label(CMLabelMenuId_Update, 0xFFFFFFF1, "Update Project Cartographer.");
add_cartographer_label(CMLabelMenuId_Update, 1, (char*)0, true);
Expand Down Expand Up @@ -5116,6 +5221,7 @@ void initGSCustomMenu() {
add_cartographer_label(CMLabelMenuId_AdvSettings, 2, "Customise HUD/GUI");
add_cartographer_label(CMLabelMenuId_AdvSettings, 3, "Other Settings");
add_cartographer_label(CMLabelMenuId_AdvSettings, 4, "Toggle Skulls");
add_cartographer_label(CMLabelMenuId_AdvSettings, 5, "Campaign Modifiers");
// add_cartographer_label(CMLabelMenuId_AdvSettings, 5, "Extra Game Settings");


Expand Down Expand Up @@ -5245,6 +5351,8 @@ void initGSCustomMenu() {

CMSetupVFTables_EditCrosshair();

CMSetupVFTables_Campaign_Modifiers();

CMSetupVFTables_EditFOV();

CMSetupVFTables_EditVehicleFOV();
Expand Down
7 changes: 7 additions & 0 deletions xlive/H2MOD/Modules/Tweaks/Tweaks.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1168,6 +1168,13 @@ void H2Tweaks::setCrosshairSize(int size, bool preset) {
}
}

void H2Tweaks::setCampaignModifier(int type) {
if (h2mod->Server)
return;

H2Config_campaign_modifier = type;
}

char ret_0() {
return 0; //for 60 fps cinematics
}
Expand Down
1 change: 1 addition & 0 deletions xlive/H2MOD/Modules/Tweaks/Tweaks.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ namespace H2Tweaks {
void setHz();
void setCrosshairPos(float crosshair_offset);
void setCrosshairSize(int size, bool preset);
void setCampaignModifier(int type);
void applyMeleePatch(bool toggle);
void setSens(std::string input_type, int sens);
void setSavedSens();
Expand Down