blob: 1b89b244cfef4c141f2f6e28cd36bb6950443571 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
#include "hooks.hpp"
#include "settings.hpp"
#include <intrin.h>
#include "context.hpp"
#include "mem.hpp"
void __fastcall hooks::get_screen_size( void* ecx, void* edx, int& w, int& h ) {
static auto get_screen_size_o = g_csgo.m_surface->get_old_function< decltype( &hooks::get_screen_size ) >( 44 );
static auto draw_crosshair_h = pattern::first_code_match( g_csgo.m_chl.dll( ), xors( "8B 4C 24 10 0F 57 D2 99" ) );
stack_t stack( get_baseptr( ) );
auto ret = stack.next( ).return_address( );
//call original
get_screen_size_o( ecx, edx, w, h );
//alter screen width and height to adjust the crosshair position on screen
if( g_settings.visuals.recoil_crosshair && g_ctx.m_local ) {
if( ret == draw_crosshair_h || ret == draw_crosshair_h - 14 /* width call is 14 bytes above height call*/ ) {
w /= 2;
h /= 2;
vec3_t punch_angles = g_ctx.m_local->m_aimPunchAngle( ) * 2.f;
if( punch_angles.x < -0.1f ) {
float fov = g_ctx.m_fov;
float angle_step = h / fov;
w -= int( punch_angles.y * angle_step );
h += int( punch_angles.x * angle_step );
}
w *= 2;
h *= 2;
}
}
}
|