summaryrefslogtreecommitdiff
path: root/internal_rewrite/visual_player.cpp
diff options
context:
space:
mode:
authornavewindre <boneyaard@gmail.com>2018-09-09 13:52:54 +0200
committernavewindre <boneyaard@gmail.com>2018-09-09 13:52:54 +0200
commit620f39df29fed446ab007e03c7b071f635379f1f (patch)
tree0de68703b510ce1e67e04b9ef3722e3afddb25d3 /internal_rewrite/visual_player.cpp
parentf3e05f066a09546f55ad3b59471a5a39a0ce4243 (diff)
a
Diffstat (limited to 'internal_rewrite/visual_player.cpp')
-rw-r--r--internal_rewrite/visual_player.cpp128
1 files changed, 128 insertions, 0 deletions
diff --git a/internal_rewrite/visual_player.cpp b/internal_rewrite/visual_player.cpp
index 1594c88..2e94530 100644
--- a/internal_rewrite/visual_player.cpp
+++ b/internal_rewrite/visual_player.cpp
@@ -594,7 +594,135 @@ namespace features
}
}
+
#ifdef _DEBUG
+ static con_var< bool > dbg_multipoint{ &data::holder_, fnv( "dbg_multipoint" ), false };
+ if( dbg_multipoint( ) ) {
+ auto should_multipoint = [ ]( int hitbox, bool moving ) -> bool {
+ auto& setting = g_settings.rage.multipoint;
+
+ switch( hitbox ) {
+ case HITBOX_HEAD:
+ return setting.head;
+ case HITBOX_PELVIS:
+ case HITBOX_BODY:
+ return setting.stomach;
+ //case HITBOX_CHEST:
+ case HITBOX_UPPER_CHEST:
+ case HITBOX_THORAX:
+ return setting.chest;
+ case HITBOX_RIGHT_THIGH:
+ case HITBOX_LEFT_THIGH:
+ if( moving && g_settings.rage.ignore_limbs_moving )
+ return false;
+
+ if( g_settings.rage.preserve_fps && util::is_low_fps( ) )
+ return false;
+
+ return setting.thighs;
+
+ case HITBOX_LEFT_CALF:
+ case HITBOX_RIGHT_CALF:
+ if( moving && g_settings.rage.ignore_limbs_moving )
+ return false;
+
+ if( g_settings.rage.preserve_fps && util::is_low_fps( ) )
+ return false;
+
+ return setting.calves;
+ default:
+ return false;
+ }
+ };
+
+ bool moving = ent->m_vecVelocity( ).length2d( ) > 0.1f && !ent->is_fakewalking( );
+
+ matrix3x4 bone_matrix[ 128 ];
+ ent->ce( )->SetupBones( bone_matrix, 128, BONE_USED_BY_HITBOX, 0.f );
+
+ for( int hitbox = 0; hitbox < HITBOX_MAX; ++hitbox ) {
+ if( should_multipoint( hitbox, moving ) ) {
+ const auto model = ent->ce( )->GetModel( );
+ if( !model ) continue;
+
+ auto hdr = g_csgo.m_model_info( )->GetStudiomodel( model );
+ if( !hdr ) continue;
+
+ auto set = hdr->pHitboxSet( ent->m_nHitboxSet( ) );
+ if( !set ) continue;
+
+ //literally 20000 iq, the best multipoint
+ //im an actual fucking retard jesus christ
+ auto box = set->pHitbox( hitbox );
+ if( !box ) continue;
+
+ vec3_t center = ( box->bbmax + box->bbmin ) * 0.5f;
+
+ float dist = box->m_flRadius;
+
+ if( box->m_flRadius == -1.f )
+ dist = center.dist_to( box->bbmin ) * 0.85f;
+ vec3_t min_dir = math::angle_vectors( math::vector_angles( center, box->bbmin ) );
+ vec3_t min = center + min_dir * dist * g_settings.rage.active->m_hitbox_scale * 1.1f;
+
+ if( box->m_flRadius == -1.f )
+ dist = center.dist_to( box->bbmax ) * 0.85f;
+ vec3_t max_dir = math::angle_vectors( math::vector_angles( center, box->bbmax ) );
+ vec3_t max = center + max_dir * dist * g_settings.rage.active->m_hitbox_scale * 1.1f;
+
+ std::vector< vec3_t > points;
+
+ points.push_back( center );
+
+ if( g_settings.rage.multipoint_enable( ) == 1 ||
+ hitbox == HITBOX_LEFT_CALF || hitbox == HITBOX_RIGHT_CALF ||
+ hitbox == HITBOX_LEFT_THIGH || hitbox == HITBOX_RIGHT_THIGH ) {
+ points.push_back( vec3_t{ min.x, min.y, center.z } );
+ points.push_back( vec3_t{ max.x, min.y, center.z } );
+ points.push_back( vec3_t{ min.x, max.y, center.z } );
+ points.push_back( vec3_t{ max.x, max.y, center.z } );
+ }
+ else if( g_settings.rage.multipoint_enable( ) == 2 ) {
+ points.push_back( vec3_t{ max.x, max.y, max.z } );
+ points.push_back( vec3_t{ min.x, max.y, max.z } );
+ points.push_back( vec3_t{ max.x, min.y, max.z } );
+ points.push_back( vec3_t{ min.x, min.y, max.z } );
+
+ points.push_back( vec3_t{ max.x, max.y, min.z } );
+ points.push_back( vec3_t{ min.x, max.y, min.z } );
+ points.push_back( vec3_t{ max.x, min.y, min.z } );
+ points.push_back( vec3_t{ min.x, min.y, min.z } );
+ }
+ else if( g_settings.rage.multipoint_enable( ) == 3 ) {
+ points.push_back( vec3_t{ min.x, min.y, center.z } );
+ points.push_back( vec3_t{ max.x, min.y, center.z } );
+ points.push_back( vec3_t{ min.x, max.y, center.z } );
+ points.push_back( vec3_t{ max.x, max.y, center.z } );
+
+ points.push_back( vec3_t{ max.x, max.y, max.z } );
+ points.push_back( vec3_t{ min.x, max.y, max.z } );
+ points.push_back( vec3_t{ max.x, min.y, max.z } );
+ points.push_back( vec3_t{ min.x, min.y, max.z } );
+
+ points.push_back( vec3_t{ max.x, max.y, min.z } );
+ points.push_back( vec3_t{ min.x, max.y, min.z } );
+ points.push_back( vec3_t{ max.x, min.y, min.z } );
+ points.push_back( vec3_t{ min.x, min.y, min.z } );
+ }
+
+ for( size_t i1 = 0; i1 < points.size( ); i1++ ) {
+ auto& it = points.at( i1 );
+
+ auto trans = math::vector_transform( it, bone_matrix[ box->bone ] );
+ auto w2s_box = util::screen_transform( trans );
+
+ draw_circle( ( int )w2s_box.x, ( int )w2s_box.y, 3, esp_blue( ), 16 );
+ }
+ }
+ }
+ }
+
+
static con_var< bool > dbg_bt{ &data::holder_, fnv( "dbg_bt" ), false };
if( dbg_bt( ) && i == g_cheat.m_ragebot.get_shot_target( ) ) {
auto hdr = g_csgo.m_model_info( )->GetStudiomodel( ent->ce( )->GetModel( ) );