if (edgebug_t.detected) {
interfaces::restore_entity_to_predicted_frame(0, interfaces::prediction->split->commands_predicted - 1);
if (interfaces::global_vars->tick_count > edgebug_t.activation_tick || backup.flags & fl_onground) {
edgebug_t.detected = false;
return;
}
interfaces::engine_client->set_view_angles(edgebug_t.target_angles);
cmd->forward_move = cmd->side_move = 0.f;
if (edgebug_t.should_duck)
cmd->buttons |= in_duck;
else
cmd->buttons &= ~in_duck;
return;
}
else {
for (int t = 0; t < 2; t++) {
interfaces::restore_entity_to_predicted_frame(0, interfaces::prediction->split->commands_predicted - 1);
user_cmd simulated_cmd = *cmd;
if (t) {
edgebug_t.should_duck = true;
simulated_cmd.buttons |= in_duck;
local_player->m_fFlags() |= fl_ducking;
}
else {
edgebug_t.should_duck = false;
simulated_cmd.buttons &= ~in_duck;
local_player->m_fFlags() &= ~fl_ducking;
}
simulated_cmd.side_move = simulated_cmd.forward_move = 0.f;
for (int i = 0; i < 32; i++) {
vector3d old_velocity = local_player->m_vecVelocity();
int old_flags = local_player->m_fFlags();
if (old_flags & fl_onground || old_velocity.z > 0.f)
break;
engine_system::start(local_player, &simulated_cmd);
engine_system::finish(local_player);
if (edgebug_detected(old_velocity, local_player->m_vecVelocity()) && !(local_player->m_fFlags() & 1))
{
edgebug_t.detected = true;
edgebug_t.activation_tick = interfaces::global_vars->tick_count + i;
edgebug_t.target_angles = cmd->view_angles;
edgebug_t.predicted_origin = local_player->m_vecOrigin();
edgebug_t.predicted_velocity = local_player->m_vecVelocity();
break;
}
if (local_player->m_fFlags() & fl_onground || local_player->m_vecVelocity().z > 0.f)
break;
old_velocity = local_player->m_vecVelocity();
old_flags = local_player->m_fFlags();
}
}
}